1 //===- DAGCombiner.cpp - Implement a DAG node combiner --------------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This pass combines dag nodes to form fewer, simpler DAG nodes.  It can be run
11 // both before and after the DAG is legalized.
12 //
13 // This pass is not a substitute for the LLVM IR instcombine pass. This pass is
14 // primarily intended to handle simplification opportunities that are implicit
15 // in the LLVM IR and exposed by the various codegen lowering phases.
16 //
17 //===----------------------------------------------------------------------===//
18 
19 #include "llvm/ADT/APFloat.h"
20 #include "llvm/ADT/APInt.h"
21 #include "llvm/ADT/ArrayRef.h"
22 #include "llvm/ADT/DenseMap.h"
23 #include "llvm/ADT/None.h"
24 #include "llvm/ADT/Optional.h"
25 #include "llvm/ADT/STLExtras.h"
26 #include "llvm/ADT/SetVector.h"
27 #include "llvm/ADT/SmallBitVector.h"
28 #include "llvm/ADT/SmallPtrSet.h"
29 #include "llvm/ADT/SmallSet.h"
30 #include "llvm/ADT/SmallVector.h"
31 #include "llvm/ADT/Statistic.h"
32 #include "llvm/Analysis/AliasAnalysis.h"
33 #include "llvm/Analysis/MemoryLocation.h"
34 #include "llvm/CodeGen/DAGCombine.h"
35 #include "llvm/CodeGen/ISDOpcodes.h"
36 #include "llvm/CodeGen/MachineFrameInfo.h"
37 #include "llvm/CodeGen/MachineFunction.h"
38 #include "llvm/CodeGen/MachineMemOperand.h"
39 #include "llvm/CodeGen/MachineValueType.h"
40 #include "llvm/CodeGen/RuntimeLibcalls.h"
41 #include "llvm/CodeGen/SelectionDAG.h"
42 #include "llvm/CodeGen/SelectionDAGAddressAnalysis.h"
43 #include "llvm/CodeGen/SelectionDAGNodes.h"
44 #include "llvm/CodeGen/SelectionDAGTargetInfo.h"
45 #include "llvm/CodeGen/ValueTypes.h"
46 #include "llvm/IR/Attributes.h"
47 #include "llvm/IR/Constant.h"
48 #include "llvm/IR/DataLayout.h"
49 #include "llvm/IR/DerivedTypes.h"
50 #include "llvm/IR/Function.h"
51 #include "llvm/IR/LLVMContext.h"
52 #include "llvm/IR/Metadata.h"
53 #include "llvm/Support/Casting.h"
54 #include "llvm/Support/CodeGen.h"
55 #include "llvm/Support/CommandLine.h"
56 #include "llvm/Support/Compiler.h"
57 #include "llvm/Support/Debug.h"
58 #include "llvm/Support/ErrorHandling.h"
59 #include "llvm/Support/KnownBits.h"
60 #include "llvm/Support/MathExtras.h"
61 #include "llvm/Support/raw_ostream.h"
62 #include "llvm/Target/TargetLowering.h"
63 #include "llvm/Target/TargetMachine.h"
64 #include "llvm/Target/TargetOptions.h"
65 #include "llvm/Target/TargetRegisterInfo.h"
66 #include "llvm/Target/TargetSubtargetInfo.h"
67 #include <algorithm>
68 #include <cassert>
69 #include <cstdint>
70 #include <functional>
71 #include <iterator>
72 #include <string>
73 #include <tuple>
74 #include <utility>
75 #include <vector>
76 
77 using namespace llvm;
78 
79 #define DEBUG_TYPE "dagcombine"
80 
81 STATISTIC(NodesCombined   , "Number of dag nodes combined");
82 STATISTIC(PreIndexedNodes , "Number of pre-indexed nodes created");
83 STATISTIC(PostIndexedNodes, "Number of post-indexed nodes created");
84 STATISTIC(OpsNarrowed     , "Number of load/op/store narrowed");
85 STATISTIC(LdStFP2Int      , "Number of fp load/store pairs transformed to int");
86 STATISTIC(SlicedLoads, "Number of load sliced");
87 
88 static cl::opt<bool>
89 CombinerGlobalAA("combiner-global-alias-analysis", cl::Hidden,
90                  cl::desc("Enable DAG combiner's use of IR alias analysis"));
91 
92 static cl::opt<bool>
93 UseTBAA("combiner-use-tbaa", cl::Hidden, cl::init(true),
94         cl::desc("Enable DAG combiner's use of TBAA"));
95 
96 #ifndef NDEBUG
97 static cl::opt<std::string>
98 CombinerAAOnlyFunc("combiner-aa-only-func", cl::Hidden,
99                    cl::desc("Only use DAG-combiner alias analysis in this"
100                             " function"));
101 #endif
102 
103 /// Hidden option to stress test load slicing, i.e., when this option
104 /// is enabled, load slicing bypasses most of its profitability guards.
105 static cl::opt<bool>
106 StressLoadSlicing("combiner-stress-load-slicing", cl::Hidden,
107                   cl::desc("Bypass the profitability model of load slicing"),
108                   cl::init(false));
109 
110 static cl::opt<bool>
111   MaySplitLoadIndex("combiner-split-load-index", cl::Hidden, cl::init(true),
112                     cl::desc("DAG combiner may split indexing from loads"));
113 
114 namespace {
115 
116   class DAGCombiner {
117     SelectionDAG &DAG;
118     const TargetLowering &TLI;
119     CombineLevel Level;
120     CodeGenOpt::Level OptLevel;
121     bool LegalOperations = false;
122     bool LegalTypes = false;
123     bool ForCodeSize;
124 
125     /// \brief Worklist of all of the nodes that need to be simplified.
126     ///
127     /// This must behave as a stack -- new nodes to process are pushed onto the
128     /// back and when processing we pop off of the back.
129     ///
130     /// The worklist will not contain duplicates but may contain null entries
131     /// due to nodes being deleted from the underlying DAG.
132     SmallVector<SDNode *, 64> Worklist;
133 
134     /// \brief Mapping from an SDNode to its position on the worklist.
135     ///
136     /// This is used to find and remove nodes from the worklist (by nulling
137     /// them) when they are deleted from the underlying DAG. It relies on
138     /// stable indices of nodes within the worklist.
139     DenseMap<SDNode *, unsigned> WorklistMap;
140 
141     /// \brief Set of nodes which have been combined (at least once).
142     ///
143     /// This is used to allow us to reliably add any operands of a DAG node
144     /// which have not yet been combined to the worklist.
145     SmallPtrSet<SDNode *, 32> CombinedNodes;
146 
147     // AA - Used for DAG load/store alias analysis.
148     AliasAnalysis *AA;
149 
150     /// When an instruction is simplified, add all users of the instruction to
151     /// the work lists because they might get more simplified now.
152     void AddUsersToWorklist(SDNode *N) {
153       for (SDNode *Node : N->uses())
154         AddToWorklist(Node);
155     }
156 
157     /// Call the node-specific routine that folds each particular type of node.
158     SDValue visit(SDNode *N);
159 
160   public:
161     DAGCombiner(SelectionDAG &D, AliasAnalysis *AA, CodeGenOpt::Level OL)
162         : DAG(D), TLI(D.getTargetLoweringInfo()), Level(BeforeLegalizeTypes),
163           OptLevel(OL), AA(AA) {
164       ForCodeSize = DAG.getMachineFunction().getFunction()->optForSize();
165 
166       MaximumLegalStoreInBits = 0;
167       for (MVT VT : MVT::all_valuetypes())
168         if (EVT(VT).isSimple() && VT != MVT::Other &&
169             TLI.isTypeLegal(EVT(VT)) &&
170             VT.getSizeInBits() >= MaximumLegalStoreInBits)
171           MaximumLegalStoreInBits = VT.getSizeInBits();
172     }
173 
174     /// Add to the worklist making sure its instance is at the back (next to be
175     /// processed.)
176     void AddToWorklist(SDNode *N) {
177       assert(N->getOpcode() != ISD::DELETED_NODE &&
178              "Deleted Node added to Worklist");
179 
180       // Skip handle nodes as they can't usefully be combined and confuse the
181       // zero-use deletion strategy.
182       if (N->getOpcode() == ISD::HANDLENODE)
183         return;
184 
185       if (WorklistMap.insert(std::make_pair(N, Worklist.size())).second)
186         Worklist.push_back(N);
187     }
188 
189     /// Remove all instances of N from the worklist.
190     void removeFromWorklist(SDNode *N) {
191       CombinedNodes.erase(N);
192 
193       auto It = WorklistMap.find(N);
194       if (It == WorklistMap.end())
195         return; // Not in the worklist.
196 
197       // Null out the entry rather than erasing it to avoid a linear operation.
198       Worklist[It->second] = nullptr;
199       WorklistMap.erase(It);
200     }
201 
202     void deleteAndRecombine(SDNode *N);
203     bool recursivelyDeleteUnusedNodes(SDNode *N);
204 
205     /// Replaces all uses of the results of one DAG node with new values.
206     SDValue CombineTo(SDNode *N, const SDValue *To, unsigned NumTo,
207                       bool AddTo = true);
208 
209     /// Replaces all uses of the results of one DAG node with new values.
210     SDValue CombineTo(SDNode *N, SDValue Res, bool AddTo = true) {
211       return CombineTo(N, &Res, 1, AddTo);
212     }
213 
214     /// Replaces all uses of the results of one DAG node with new values.
215     SDValue CombineTo(SDNode *N, SDValue Res0, SDValue Res1,
216                       bool AddTo = true) {
217       SDValue To[] = { Res0, Res1 };
218       return CombineTo(N, To, 2, AddTo);
219     }
220 
221     void CommitTargetLoweringOpt(const TargetLowering::TargetLoweringOpt &TLO);
222 
223   private:
224     unsigned MaximumLegalStoreInBits;
225 
226     /// Check the specified integer node value to see if it can be simplified or
227     /// if things it uses can be simplified by bit propagation.
228     /// If so, return true.
229     bool SimplifyDemandedBits(SDValue Op) {
230       unsigned BitWidth = Op.getScalarValueSizeInBits();
231       APInt Demanded = APInt::getAllOnesValue(BitWidth);
232       return SimplifyDemandedBits(Op, Demanded);
233     }
234 
235     bool SimplifyDemandedBits(SDValue Op, const APInt &Demanded);
236 
237     bool CombineToPreIndexedLoadStore(SDNode *N);
238     bool CombineToPostIndexedLoadStore(SDNode *N);
239     SDValue SplitIndexingFromLoad(LoadSDNode *LD);
240     bool SliceUpLoad(SDNode *N);
241 
242     /// \brief Replace an ISD::EXTRACT_VECTOR_ELT of a load with a narrowed
243     ///   load.
244     ///
245     /// \param EVE ISD::EXTRACT_VECTOR_ELT to be replaced.
246     /// \param InVecVT type of the input vector to EVE with bitcasts resolved.
247     /// \param EltNo index of the vector element to load.
248     /// \param OriginalLoad load that EVE came from to be replaced.
249     /// \returns EVE on success SDValue() on failure.
250     SDValue ReplaceExtractVectorEltOfLoadWithNarrowedLoad(
251         SDNode *EVE, EVT InVecVT, SDValue EltNo, LoadSDNode *OriginalLoad);
252     void ReplaceLoadWithPromotedLoad(SDNode *Load, SDNode *ExtLoad);
253     SDValue PromoteOperand(SDValue Op, EVT PVT, bool &Replace);
254     SDValue SExtPromoteOperand(SDValue Op, EVT PVT);
255     SDValue ZExtPromoteOperand(SDValue Op, EVT PVT);
256     SDValue PromoteIntBinOp(SDValue Op);
257     SDValue PromoteIntShiftOp(SDValue Op);
258     SDValue PromoteExtend(SDValue Op);
259     bool PromoteLoad(SDValue Op);
260 
261     void ExtendSetCCUses(const SmallVectorImpl<SDNode *> &SetCCs, SDValue Trunc,
262                          SDValue ExtLoad, const SDLoc &DL,
263                          ISD::NodeType ExtType);
264 
265     /// Call the node-specific routine that knows how to fold each
266     /// particular type of node. If that doesn't do anything, try the
267     /// target-specific DAG combines.
268     SDValue combine(SDNode *N);
269 
270     // Visitation implementation - Implement dag node combining for different
271     // node types.  The semantics are as follows:
272     // Return Value:
273     //   SDValue.getNode() == 0 - No change was made
274     //   SDValue.getNode() == N - N was replaced, is dead and has been handled.
275     //   otherwise              - N should be replaced by the returned Operand.
276     //
277     SDValue visitTokenFactor(SDNode *N);
278     SDValue visitMERGE_VALUES(SDNode *N);
279     SDValue visitADD(SDNode *N);
280     SDValue visitADDLike(SDValue N0, SDValue N1, SDNode *LocReference);
281     SDValue visitSUB(SDNode *N);
282     SDValue visitADDC(SDNode *N);
283     SDValue visitUADDO(SDNode *N);
284     SDValue visitUADDOLike(SDValue N0, SDValue N1, SDNode *N);
285     SDValue visitSUBC(SDNode *N);
286     SDValue visitUSUBO(SDNode *N);
287     SDValue visitADDE(SDNode *N);
288     SDValue visitADDCARRY(SDNode *N);
289     SDValue visitADDCARRYLike(SDValue N0, SDValue N1, SDValue CarryIn, SDNode *N);
290     SDValue visitSUBE(SDNode *N);
291     SDValue visitSUBCARRY(SDNode *N);
292     SDValue visitMUL(SDNode *N);
293     SDValue useDivRem(SDNode *N);
294     SDValue visitSDIV(SDNode *N);
295     SDValue visitUDIV(SDNode *N);
296     SDValue visitREM(SDNode *N);
297     SDValue visitMULHU(SDNode *N);
298     SDValue visitMULHS(SDNode *N);
299     SDValue visitSMUL_LOHI(SDNode *N);
300     SDValue visitUMUL_LOHI(SDNode *N);
301     SDValue visitSMULO(SDNode *N);
302     SDValue visitUMULO(SDNode *N);
303     SDValue visitIMINMAX(SDNode *N);
304     SDValue visitAND(SDNode *N);
305     SDValue visitANDLike(SDValue N0, SDValue N1, SDNode *LocReference);
306     SDValue visitOR(SDNode *N);
307     SDValue visitORLike(SDValue N0, SDValue N1, SDNode *LocReference);
308     SDValue visitXOR(SDNode *N);
309     SDValue SimplifyVBinOp(SDNode *N);
310     SDValue visitSHL(SDNode *N);
311     SDValue visitSRA(SDNode *N);
312     SDValue visitSRL(SDNode *N);
313     SDValue visitRotate(SDNode *N);
314     SDValue visitABS(SDNode *N);
315     SDValue visitBSWAP(SDNode *N);
316     SDValue visitBITREVERSE(SDNode *N);
317     SDValue visitCTLZ(SDNode *N);
318     SDValue visitCTLZ_ZERO_UNDEF(SDNode *N);
319     SDValue visitCTTZ(SDNode *N);
320     SDValue visitCTTZ_ZERO_UNDEF(SDNode *N);
321     SDValue visitCTPOP(SDNode *N);
322     SDValue visitSELECT(SDNode *N);
323     SDValue visitVSELECT(SDNode *N);
324     SDValue visitSELECT_CC(SDNode *N);
325     SDValue visitSETCC(SDNode *N);
326     SDValue visitSETCCE(SDNode *N);
327     SDValue visitSETCCCARRY(SDNode *N);
328     SDValue visitSIGN_EXTEND(SDNode *N);
329     SDValue visitZERO_EXTEND(SDNode *N);
330     SDValue visitANY_EXTEND(SDNode *N);
331     SDValue visitAssertExt(SDNode *N);
332     SDValue visitSIGN_EXTEND_INREG(SDNode *N);
333     SDValue visitSIGN_EXTEND_VECTOR_INREG(SDNode *N);
334     SDValue visitZERO_EXTEND_VECTOR_INREG(SDNode *N);
335     SDValue visitTRUNCATE(SDNode *N);
336     SDValue visitBITCAST(SDNode *N);
337     SDValue visitBUILD_PAIR(SDNode *N);
338     SDValue visitFADD(SDNode *N);
339     SDValue visitFSUB(SDNode *N);
340     SDValue visitFMUL(SDNode *N);
341     SDValue visitFMA(SDNode *N);
342     SDValue visitFDIV(SDNode *N);
343     SDValue visitFREM(SDNode *N);
344     SDValue visitFSQRT(SDNode *N);
345     SDValue visitFCOPYSIGN(SDNode *N);
346     SDValue visitSINT_TO_FP(SDNode *N);
347     SDValue visitUINT_TO_FP(SDNode *N);
348     SDValue visitFP_TO_SINT(SDNode *N);
349     SDValue visitFP_TO_UINT(SDNode *N);
350     SDValue visitFP_ROUND(SDNode *N);
351     SDValue visitFP_ROUND_INREG(SDNode *N);
352     SDValue visitFP_EXTEND(SDNode *N);
353     SDValue visitFNEG(SDNode *N);
354     SDValue visitFABS(SDNode *N);
355     SDValue visitFCEIL(SDNode *N);
356     SDValue visitFTRUNC(SDNode *N);
357     SDValue visitFFLOOR(SDNode *N);
358     SDValue visitFMINNUM(SDNode *N);
359     SDValue visitFMAXNUM(SDNode *N);
360     SDValue visitBRCOND(SDNode *N);
361     SDValue visitBR_CC(SDNode *N);
362     SDValue visitLOAD(SDNode *N);
363 
364     SDValue replaceStoreChain(StoreSDNode *ST, SDValue BetterChain);
365     SDValue replaceStoreOfFPConstant(StoreSDNode *ST);
366 
367     SDValue visitSTORE(SDNode *N);
368     SDValue visitINSERT_VECTOR_ELT(SDNode *N);
369     SDValue visitEXTRACT_VECTOR_ELT(SDNode *N);
370     SDValue visitBUILD_VECTOR(SDNode *N);
371     SDValue visitCONCAT_VECTORS(SDNode *N);
372     SDValue visitEXTRACT_SUBVECTOR(SDNode *N);
373     SDValue visitVECTOR_SHUFFLE(SDNode *N);
374     SDValue visitSCALAR_TO_VECTOR(SDNode *N);
375     SDValue visitINSERT_SUBVECTOR(SDNode *N);
376     SDValue visitMLOAD(SDNode *N);
377     SDValue visitMSTORE(SDNode *N);
378     SDValue visitMGATHER(SDNode *N);
379     SDValue visitMSCATTER(SDNode *N);
380     SDValue visitFP_TO_FP16(SDNode *N);
381     SDValue visitFP16_TO_FP(SDNode *N);
382 
383     SDValue visitFADDForFMACombine(SDNode *N);
384     SDValue visitFSUBForFMACombine(SDNode *N);
385     SDValue visitFMULForFMADistributiveCombine(SDNode *N);
386 
387     SDValue XformToShuffleWithZero(SDNode *N);
388     SDValue ReassociateOps(unsigned Opc, const SDLoc &DL, SDValue LHS,
389                            SDValue RHS);
390 
391     SDValue visitShiftByConstant(SDNode *N, ConstantSDNode *Amt);
392 
393     SDValue foldSelectOfConstants(SDNode *N);
394     SDValue foldVSelectOfConstants(SDNode *N);
395     SDValue foldBinOpIntoSelect(SDNode *BO);
396     bool SimplifySelectOps(SDNode *SELECT, SDValue LHS, SDValue RHS);
397     SDValue SimplifyBinOpWithSameOpcodeHands(SDNode *N);
398     SDValue SimplifySelect(const SDLoc &DL, SDValue N0, SDValue N1, SDValue N2);
399     SDValue SimplifySelectCC(const SDLoc &DL, SDValue N0, SDValue N1,
400                              SDValue N2, SDValue N3, ISD::CondCode CC,
401                              bool NotExtCompare = false);
402     SDValue foldSelectCCToShiftAnd(const SDLoc &DL, SDValue N0, SDValue N1,
403                                    SDValue N2, SDValue N3, ISD::CondCode CC);
404     SDValue foldLogicOfSetCCs(bool IsAnd, SDValue N0, SDValue N1,
405                               const SDLoc &DL);
406     SDValue SimplifySetCC(EVT VT, SDValue N0, SDValue N1, ISD::CondCode Cond,
407                           const SDLoc &DL, bool foldBooleans = true);
408 
409     bool isSetCCEquivalent(SDValue N, SDValue &LHS, SDValue &RHS,
410                            SDValue &CC) const;
411     bool isOneUseSetCC(SDValue N) const;
412 
413     SDValue SimplifyNodeWithTwoResults(SDNode *N, unsigned LoOp,
414                                          unsigned HiOp);
415     SDValue CombineConsecutiveLoads(SDNode *N, EVT VT);
416     SDValue CombineExtLoad(SDNode *N);
417     SDValue combineRepeatedFPDivisors(SDNode *N);
418     SDValue combineInsertEltToShuffle(SDNode *N, unsigned InsIndex);
419     SDValue ConstantFoldBITCASTofBUILD_VECTOR(SDNode *, EVT);
420     SDValue BuildSDIV(SDNode *N);
421     SDValue BuildSDIVPow2(SDNode *N);
422     SDValue BuildUDIV(SDNode *N);
423     SDValue BuildLogBase2(SDValue Op, const SDLoc &DL);
424     SDValue BuildReciprocalEstimate(SDValue Op, SDNodeFlags Flags);
425     SDValue buildRsqrtEstimate(SDValue Op, SDNodeFlags Flags);
426     SDValue buildSqrtEstimate(SDValue Op, SDNodeFlags Flags);
427     SDValue buildSqrtEstimateImpl(SDValue Op, SDNodeFlags Flags, bool Recip);
428     SDValue buildSqrtNROneConst(SDValue Op, SDValue Est, unsigned Iterations,
429                                 SDNodeFlags Flags, bool Reciprocal);
430     SDValue buildSqrtNRTwoConst(SDValue Op, SDValue Est, unsigned Iterations,
431                                 SDNodeFlags Flags, bool Reciprocal);
432     SDValue MatchBSwapHWordLow(SDNode *N, SDValue N0, SDValue N1,
433                                bool DemandHighBits = true);
434     SDValue MatchBSwapHWord(SDNode *N, SDValue N0, SDValue N1);
435     SDNode *MatchRotatePosNeg(SDValue Shifted, SDValue Pos, SDValue Neg,
436                               SDValue InnerPos, SDValue InnerNeg,
437                               unsigned PosOpcode, unsigned NegOpcode,
438                               const SDLoc &DL);
439     SDNode *MatchRotate(SDValue LHS, SDValue RHS, const SDLoc &DL);
440     SDValue MatchLoadCombine(SDNode *N);
441     SDValue ReduceLoadWidth(SDNode *N);
442     SDValue ReduceLoadOpStoreWidth(SDNode *N);
443     SDValue splitMergedValStore(StoreSDNode *ST);
444     SDValue TransformFPLoadStorePair(SDNode *N);
445     SDValue reduceBuildVecExtToExtBuildVec(SDNode *N);
446     SDValue reduceBuildVecConvertToConvertBuildVec(SDNode *N);
447     SDValue reduceBuildVecToShuffle(SDNode *N);
448     SDValue createBuildVecShuffle(const SDLoc &DL, SDNode *N,
449                                   ArrayRef<int> VectorMask, SDValue VecIn1,
450                                   SDValue VecIn2, unsigned LeftIdx);
451     SDValue matchVSelectOpSizesWithSetCC(SDNode *N);
452 
453     /// Walk up chain skipping non-aliasing memory nodes,
454     /// looking for aliasing nodes and adding them to the Aliases vector.
455     void GatherAllAliases(SDNode *N, SDValue OriginalChain,
456                           SmallVectorImpl<SDValue> &Aliases);
457 
458     /// Return true if there is any possibility that the two addresses overlap.
459     bool isAlias(LSBaseSDNode *Op0, LSBaseSDNode *Op1) const;
460 
461     /// Walk up chain skipping non-aliasing memory nodes, looking for a better
462     /// chain (aliasing node.)
463     SDValue FindBetterChain(SDNode *N, SDValue Chain);
464 
465     /// Try to replace a store and any possibly adjacent stores on
466     /// consecutive chains with better chains. Return true only if St is
467     /// replaced.
468     ///
469     /// Notice that other chains may still be replaced even if the function
470     /// returns false.
471     bool findBetterNeighborChains(StoreSDNode *St);
472 
473     /// Match "(X shl/srl V1) & V2" where V2 may not be present.
474     bool MatchRotateHalf(SDValue Op, SDValue &Shift, SDValue &Mask);
475 
476     /// Holds a pointer to an LSBaseSDNode as well as information on where it
477     /// is located in a sequence of memory operations connected by a chain.
478     struct MemOpLink {
479       // Ptr to the mem node.
480       LSBaseSDNode *MemNode;
481 
482       // Offset from the base ptr.
483       int64_t OffsetFromBase;
484 
485       MemOpLink(LSBaseSDNode *N, int64_t Offset)
486           : MemNode(N), OffsetFromBase(Offset) {}
487     };
488 
489     /// This is a helper function for visitMUL to check the profitability
490     /// of folding (mul (add x, c1), c2) -> (add (mul x, c2), c1*c2).
491     /// MulNode is the original multiply, AddNode is (add x, c1),
492     /// and ConstNode is c2.
493     bool isMulAddWithConstProfitable(SDNode *MulNode,
494                                      SDValue &AddNode,
495                                      SDValue &ConstNode);
496 
497     /// This is a helper function for visitAND and visitZERO_EXTEND.  Returns
498     /// true if the (and (load x) c) pattern matches an extload.  ExtVT returns
499     /// the type of the loaded value to be extended.  LoadedVT returns the type
500     /// of the original loaded value.  NarrowLoad returns whether the load would
501     /// need to be narrowed in order to match.
502     bool isAndLoadExtLoad(ConstantSDNode *AndC, LoadSDNode *LoadN,
503                           EVT LoadResultTy, EVT &ExtVT, EVT &LoadedVT,
504                           bool &NarrowLoad);
505 
506     /// Helper function for MergeConsecutiveStores which merges the
507     /// component store chains.
508     SDValue getMergeStoreChains(SmallVectorImpl<MemOpLink> &StoreNodes,
509                                 unsigned NumStores);
510 
511     /// This is a helper function for MergeConsecutiveStores. When the
512     /// source elements of the consecutive stores are all constants or
513     /// all extracted vector elements, try to merge them into one
514     /// larger store introducing bitcasts if necessary.  \return True
515     /// if a merged store was created.
516     bool MergeStoresOfConstantsOrVecElts(SmallVectorImpl<MemOpLink> &StoreNodes,
517                                          EVT MemVT, unsigned NumStores,
518                                          bool IsConstantSrc, bool UseVector,
519                                          bool UseTrunc);
520 
521     /// This is a helper function for MergeConsecutiveStores. Stores
522     /// that potentially may be merged with St are placed in
523     /// StoreNodes.
524     void getStoreMergeCandidates(StoreSDNode *St,
525                                  SmallVectorImpl<MemOpLink> &StoreNodes);
526 
527     /// Helper function for MergeConsecutiveStores. Checks if
528     /// candidate stores have indirect dependency through their
529     /// operands. \return True if safe to merge.
530     bool checkMergeStoreCandidatesForDependencies(
531         SmallVectorImpl<MemOpLink> &StoreNodes, unsigned NumStores);
532 
533     /// Merge consecutive store operations into a wide store.
534     /// This optimization uses wide integers or vectors when possible.
535     /// \return number of stores that were merged into a merged store (the
536     /// affected nodes are stored as a prefix in \p StoreNodes).
537     bool MergeConsecutiveStores(StoreSDNode *N);
538 
539     /// \brief Try to transform a truncation where C is a constant:
540     ///     (trunc (and X, C)) -> (and (trunc X), (trunc C))
541     ///
542     /// \p N needs to be a truncation and its first operand an AND. Other
543     /// requirements are checked by the function (e.g. that trunc is
544     /// single-use) and if missed an empty SDValue is returned.
545     SDValue distributeTruncateThroughAnd(SDNode *N);
546 
547   public:
548     /// Runs the dag combiner on all nodes in the work list
549     void Run(CombineLevel AtLevel);
550 
551     SelectionDAG &getDAG() const { return DAG; }
552 
553     /// Returns a type large enough to hold any valid shift amount - before type
554     /// legalization these can be huge.
555     EVT getShiftAmountTy(EVT LHSTy) {
556       assert(LHSTy.isInteger() && "Shift amount is not an integer type!");
557       if (LHSTy.isVector())
558         return LHSTy;
559       auto &DL = DAG.getDataLayout();
560       return LegalTypes ? TLI.getScalarShiftAmountTy(DL, LHSTy)
561                         : TLI.getPointerTy(DL);
562     }
563 
564     /// This method returns true if we are running before type legalization or
565     /// if the specified VT is legal.
566     bool isTypeLegal(const EVT &VT) {
567       if (!LegalTypes) return true;
568       return TLI.isTypeLegal(VT);
569     }
570 
571     /// Convenience wrapper around TargetLowering::getSetCCResultType
572     EVT getSetCCResultType(EVT VT) const {
573       return TLI.getSetCCResultType(DAG.getDataLayout(), *DAG.getContext(), VT);
574     }
575   };
576 
577 /// This class is a DAGUpdateListener that removes any deleted
578 /// nodes from the worklist.
579 class WorklistRemover : public SelectionDAG::DAGUpdateListener {
580   DAGCombiner &DC;
581 
582 public:
583   explicit WorklistRemover(DAGCombiner &dc)
584     : SelectionDAG::DAGUpdateListener(dc.getDAG()), DC(dc) {}
585 
586   void NodeDeleted(SDNode *N, SDNode *E) override {
587     DC.removeFromWorklist(N);
588   }
589 };
590 
591 } // end anonymous namespace
592 
593 //===----------------------------------------------------------------------===//
594 //  TargetLowering::DAGCombinerInfo implementation
595 //===----------------------------------------------------------------------===//
596 
597 void TargetLowering::DAGCombinerInfo::AddToWorklist(SDNode *N) {
598   ((DAGCombiner*)DC)->AddToWorklist(N);
599 }
600 
601 SDValue TargetLowering::DAGCombinerInfo::
602 CombineTo(SDNode *N, ArrayRef<SDValue> To, bool AddTo) {
603   return ((DAGCombiner*)DC)->CombineTo(N, &To[0], To.size(), AddTo);
604 }
605 
606 SDValue TargetLowering::DAGCombinerInfo::
607 CombineTo(SDNode *N, SDValue Res, bool AddTo) {
608   return ((DAGCombiner*)DC)->CombineTo(N, Res, AddTo);
609 }
610 
611 SDValue TargetLowering::DAGCombinerInfo::
612 CombineTo(SDNode *N, SDValue Res0, SDValue Res1, bool AddTo) {
613   return ((DAGCombiner*)DC)->CombineTo(N, Res0, Res1, AddTo);
614 }
615 
616 void TargetLowering::DAGCombinerInfo::
617 CommitTargetLoweringOpt(const TargetLowering::TargetLoweringOpt &TLO) {
618   return ((DAGCombiner*)DC)->CommitTargetLoweringOpt(TLO);
619 }
620 
621 //===----------------------------------------------------------------------===//
622 // Helper Functions
623 //===----------------------------------------------------------------------===//
624 
625 void DAGCombiner::deleteAndRecombine(SDNode *N) {
626   removeFromWorklist(N);
627 
628   // If the operands of this node are only used by the node, they will now be
629   // dead. Make sure to re-visit them and recursively delete dead nodes.
630   for (const SDValue &Op : N->ops())
631     // For an operand generating multiple values, one of the values may
632     // become dead allowing further simplification (e.g. split index
633     // arithmetic from an indexed load).
634     if (Op->hasOneUse() || Op->getNumValues() > 1)
635       AddToWorklist(Op.getNode());
636 
637   DAG.DeleteNode(N);
638 }
639 
640 /// Return 1 if we can compute the negated form of the specified expression for
641 /// the same cost as the expression itself, or 2 if we can compute the negated
642 /// form more cheaply than the expression itself.
643 static char isNegatibleForFree(SDValue Op, bool LegalOperations,
644                                const TargetLowering &TLI,
645                                const TargetOptions *Options,
646                                unsigned Depth = 0) {
647   // fneg is removable even if it has multiple uses.
648   if (Op.getOpcode() == ISD::FNEG) return 2;
649 
650   // Don't allow anything with multiple uses.
651   if (!Op.hasOneUse()) return 0;
652 
653   // Don't recurse exponentially.
654   if (Depth > 6) return 0;
655 
656   switch (Op.getOpcode()) {
657   default: return false;
658   case ISD::ConstantFP: {
659     if (!LegalOperations)
660       return 1;
661 
662     // Don't invert constant FP values after legalization unless the target says
663     // the negated constant is legal.
664     EVT VT = Op.getValueType();
665     return TLI.isOperationLegal(ISD::ConstantFP, VT) ||
666       TLI.isFPImmLegal(neg(cast<ConstantFPSDNode>(Op)->getValueAPF()), VT);
667   }
668   case ISD::FADD:
669     // FIXME: determine better conditions for this xform.
670     if (!Options->UnsafeFPMath) return 0;
671 
672     // After operation legalization, it might not be legal to create new FSUBs.
673     if (LegalOperations &&
674         !TLI.isOperationLegalOrCustom(ISD::FSUB,  Op.getValueType()))
675       return 0;
676 
677     // fold (fneg (fadd A, B)) -> (fsub (fneg A), B)
678     if (char V = isNegatibleForFree(Op.getOperand(0), LegalOperations, TLI,
679                                     Options, Depth + 1))
680       return V;
681     // fold (fneg (fadd A, B)) -> (fsub (fneg B), A)
682     return isNegatibleForFree(Op.getOperand(1), LegalOperations, TLI, Options,
683                               Depth + 1);
684   case ISD::FSUB:
685     // We can't turn -(A-B) into B-A when we honor signed zeros.
686     if (!Options->NoSignedZerosFPMath &&
687         !Op.getNode()->getFlags().hasNoSignedZeros())
688       return 0;
689 
690     // fold (fneg (fsub A, B)) -> (fsub B, A)
691     return 1;
692 
693   case ISD::FMUL:
694   case ISD::FDIV:
695     if (Options->HonorSignDependentRoundingFPMath()) return 0;
696 
697     // fold (fneg (fmul X, Y)) -> (fmul (fneg X), Y) or (fmul X, (fneg Y))
698     if (char V = isNegatibleForFree(Op.getOperand(0), LegalOperations, TLI,
699                                     Options, Depth + 1))
700       return V;
701 
702     return isNegatibleForFree(Op.getOperand(1), LegalOperations, TLI, Options,
703                               Depth + 1);
704 
705   case ISD::FP_EXTEND:
706   case ISD::FP_ROUND:
707   case ISD::FSIN:
708     return isNegatibleForFree(Op.getOperand(0), LegalOperations, TLI, Options,
709                               Depth + 1);
710   }
711 }
712 
713 /// If isNegatibleForFree returns true, return the newly negated expression.
714 static SDValue GetNegatedExpression(SDValue Op, SelectionDAG &DAG,
715                                     bool LegalOperations, unsigned Depth = 0) {
716   const TargetOptions &Options = DAG.getTarget().Options;
717   // fneg is removable even if it has multiple uses.
718   if (Op.getOpcode() == ISD::FNEG) return Op.getOperand(0);
719 
720   // Don't allow anything with multiple uses.
721   assert(Op.hasOneUse() && "Unknown reuse!");
722 
723   assert(Depth <= 6 && "GetNegatedExpression doesn't match isNegatibleForFree");
724 
725   const SDNodeFlags Flags = Op.getNode()->getFlags();
726 
727   switch (Op.getOpcode()) {
728   default: llvm_unreachable("Unknown code");
729   case ISD::ConstantFP: {
730     APFloat V = cast<ConstantFPSDNode>(Op)->getValueAPF();
731     V.changeSign();
732     return DAG.getConstantFP(V, SDLoc(Op), Op.getValueType());
733   }
734   case ISD::FADD:
735     // FIXME: determine better conditions for this xform.
736     assert(Options.UnsafeFPMath);
737 
738     // fold (fneg (fadd A, B)) -> (fsub (fneg A), B)
739     if (isNegatibleForFree(Op.getOperand(0), LegalOperations,
740                            DAG.getTargetLoweringInfo(), &Options, Depth+1))
741       return DAG.getNode(ISD::FSUB, SDLoc(Op), Op.getValueType(),
742                          GetNegatedExpression(Op.getOperand(0), DAG,
743                                               LegalOperations, Depth+1),
744                          Op.getOperand(1), Flags);
745     // fold (fneg (fadd A, B)) -> (fsub (fneg B), A)
746     return DAG.getNode(ISD::FSUB, SDLoc(Op), Op.getValueType(),
747                        GetNegatedExpression(Op.getOperand(1), DAG,
748                                             LegalOperations, Depth+1),
749                        Op.getOperand(0), Flags);
750   case ISD::FSUB:
751     // fold (fneg (fsub 0, B)) -> B
752     if (ConstantFPSDNode *N0CFP = dyn_cast<ConstantFPSDNode>(Op.getOperand(0)))
753       if (N0CFP->isZero())
754         return Op.getOperand(1);
755 
756     // fold (fneg (fsub A, B)) -> (fsub B, A)
757     return DAG.getNode(ISD::FSUB, SDLoc(Op), Op.getValueType(),
758                        Op.getOperand(1), Op.getOperand(0), Flags);
759 
760   case ISD::FMUL:
761   case ISD::FDIV:
762     assert(!Options.HonorSignDependentRoundingFPMath());
763 
764     // fold (fneg (fmul X, Y)) -> (fmul (fneg X), Y)
765     if (isNegatibleForFree(Op.getOperand(0), LegalOperations,
766                            DAG.getTargetLoweringInfo(), &Options, Depth+1))
767       return DAG.getNode(Op.getOpcode(), SDLoc(Op), Op.getValueType(),
768                          GetNegatedExpression(Op.getOperand(0), DAG,
769                                               LegalOperations, Depth+1),
770                          Op.getOperand(1), Flags);
771 
772     // fold (fneg (fmul X, Y)) -> (fmul X, (fneg Y))
773     return DAG.getNode(Op.getOpcode(), SDLoc(Op), Op.getValueType(),
774                        Op.getOperand(0),
775                        GetNegatedExpression(Op.getOperand(1), DAG,
776                                             LegalOperations, Depth+1), Flags);
777 
778   case ISD::FP_EXTEND:
779   case ISD::FSIN:
780     return DAG.getNode(Op.getOpcode(), SDLoc(Op), Op.getValueType(),
781                        GetNegatedExpression(Op.getOperand(0), DAG,
782                                             LegalOperations, Depth+1));
783   case ISD::FP_ROUND:
784       return DAG.getNode(ISD::FP_ROUND, SDLoc(Op), Op.getValueType(),
785                          GetNegatedExpression(Op.getOperand(0), DAG,
786                                               LegalOperations, Depth+1),
787                          Op.getOperand(1));
788   }
789 }
790 
791 // APInts must be the same size for most operations, this helper
792 // function zero extends the shorter of the pair so that they match.
793 // We provide an Offset so that we can create bitwidths that won't overflow.
794 static void zeroExtendToMatch(APInt &LHS, APInt &RHS, unsigned Offset = 0) {
795   unsigned Bits = Offset + std::max(LHS.getBitWidth(), RHS.getBitWidth());
796   LHS = LHS.zextOrSelf(Bits);
797   RHS = RHS.zextOrSelf(Bits);
798 }
799 
800 // Return true if this node is a setcc, or is a select_cc
801 // that selects between the target values used for true and false, making it
802 // equivalent to a setcc. Also, set the incoming LHS, RHS, and CC references to
803 // the appropriate nodes based on the type of node we are checking. This
804 // simplifies life a bit for the callers.
805 bool DAGCombiner::isSetCCEquivalent(SDValue N, SDValue &LHS, SDValue &RHS,
806                                     SDValue &CC) const {
807   if (N.getOpcode() == ISD::SETCC) {
808     LHS = N.getOperand(0);
809     RHS = N.getOperand(1);
810     CC  = N.getOperand(2);
811     return true;
812   }
813 
814   if (N.getOpcode() != ISD::SELECT_CC ||
815       !TLI.isConstTrueVal(N.getOperand(2).getNode()) ||
816       !TLI.isConstFalseVal(N.getOperand(3).getNode()))
817     return false;
818 
819   if (TLI.getBooleanContents(N.getValueType()) ==
820       TargetLowering::UndefinedBooleanContent)
821     return false;
822 
823   LHS = N.getOperand(0);
824   RHS = N.getOperand(1);
825   CC  = N.getOperand(4);
826   return true;
827 }
828 
829 /// Return true if this is a SetCC-equivalent operation with only one use.
830 /// If this is true, it allows the users to invert the operation for free when
831 /// it is profitable to do so.
832 bool DAGCombiner::isOneUseSetCC(SDValue N) const {
833   SDValue N0, N1, N2;
834   if (isSetCCEquivalent(N, N0, N1, N2) && N.getNode()->hasOneUse())
835     return true;
836   return false;
837 }
838 
839 // \brief Returns the SDNode if it is a constant float BuildVector
840 // or constant float.
841 static SDNode *isConstantFPBuildVectorOrConstantFP(SDValue N) {
842   if (isa<ConstantFPSDNode>(N))
843     return N.getNode();
844   if (ISD::isBuildVectorOfConstantFPSDNodes(N.getNode()))
845     return N.getNode();
846   return nullptr;
847 }
848 
849 // Determines if it is a constant integer or a build vector of constant
850 // integers (and undefs).
851 // Do not permit build vector implicit truncation.
852 static bool isConstantOrConstantVector(SDValue N, bool NoOpaques = false) {
853   if (ConstantSDNode *Const = dyn_cast<ConstantSDNode>(N))
854     return !(Const->isOpaque() && NoOpaques);
855   if (N.getOpcode() != ISD::BUILD_VECTOR)
856     return false;
857   unsigned BitWidth = N.getScalarValueSizeInBits();
858   for (const SDValue &Op : N->op_values()) {
859     if (Op.isUndef())
860       continue;
861     ConstantSDNode *Const = dyn_cast<ConstantSDNode>(Op);
862     if (!Const || Const->getAPIntValue().getBitWidth() != BitWidth ||
863         (Const->isOpaque() && NoOpaques))
864       return false;
865   }
866   return true;
867 }
868 
869 // Determines if it is a constant null integer or a splatted vector of a
870 // constant null integer (with no undefs).
871 // Build vector implicit truncation is not an issue for null values.
872 static bool isNullConstantOrNullSplatConstant(SDValue N) {
873   if (ConstantSDNode *Splat = isConstOrConstSplat(N))
874     return Splat->isNullValue();
875   return false;
876 }
877 
878 // Determines if it is a constant integer of one or a splatted vector of a
879 // constant integer of one (with no undefs).
880 // Do not permit build vector implicit truncation.
881 static bool isOneConstantOrOneSplatConstant(SDValue N) {
882   unsigned BitWidth = N.getScalarValueSizeInBits();
883   if (ConstantSDNode *Splat = isConstOrConstSplat(N))
884     return Splat->isOne() && Splat->getAPIntValue().getBitWidth() == BitWidth;
885   return false;
886 }
887 
888 // Determines if it is a constant integer of all ones or a splatted vector of a
889 // constant integer of all ones (with no undefs).
890 // Do not permit build vector implicit truncation.
891 static bool isAllOnesConstantOrAllOnesSplatConstant(SDValue N) {
892   unsigned BitWidth = N.getScalarValueSizeInBits();
893   if (ConstantSDNode *Splat = isConstOrConstSplat(N))
894     return Splat->isAllOnesValue() &&
895            Splat->getAPIntValue().getBitWidth() == BitWidth;
896   return false;
897 }
898 
899 // Determines if a BUILD_VECTOR is composed of all-constants possibly mixed with
900 // undef's.
901 static bool isAnyConstantBuildVector(const SDNode *N) {
902   return ISD::isBuildVectorOfConstantSDNodes(N) ||
903          ISD::isBuildVectorOfConstantFPSDNodes(N);
904 }
905 
906 // Attempt to match a unary predicate against a scalar/splat constant or
907 // every element of a constant BUILD_VECTOR.
908 static bool matchUnaryPredicate(SDValue Op,
909                                 std::function<bool(ConstantSDNode *)> Match) {
910   if (auto *Cst = dyn_cast<ConstantSDNode>(Op))
911     return Match(Cst);
912 
913   if (ISD::BUILD_VECTOR != Op.getOpcode())
914     return false;
915 
916   EVT SVT = Op.getValueType().getScalarType();
917   for (unsigned i = 0, e = Op.getNumOperands(); i != e; ++i) {
918     auto *Cst = dyn_cast<ConstantSDNode>(Op.getOperand(i));
919     if (!Cst || Cst->getValueType(0) != SVT || !Match(Cst))
920       return false;
921   }
922   return true;
923 }
924 
925 // Attempt to match a binary predicate against a pair of scalar/splat constants
926 // or every element of a pair of constant BUILD_VECTORs.
927 static bool matchBinaryPredicate(
928     SDValue LHS, SDValue RHS,
929     std::function<bool(ConstantSDNode *, ConstantSDNode *)> Match) {
930   if (LHS.getValueType() != RHS.getValueType())
931     return false;
932 
933   if (auto *LHSCst = dyn_cast<ConstantSDNode>(LHS))
934     if (auto *RHSCst = dyn_cast<ConstantSDNode>(RHS))
935       return Match(LHSCst, RHSCst);
936 
937   if (ISD::BUILD_VECTOR != LHS.getOpcode() ||
938       ISD::BUILD_VECTOR != RHS.getOpcode())
939     return false;
940 
941   EVT SVT = LHS.getValueType().getScalarType();
942   for (unsigned i = 0, e = LHS.getNumOperands(); i != e; ++i) {
943     auto *LHSCst = dyn_cast<ConstantSDNode>(LHS.getOperand(i));
944     auto *RHSCst = dyn_cast<ConstantSDNode>(RHS.getOperand(i));
945     if (!LHSCst || !RHSCst)
946       return false;
947     if (LHSCst->getValueType(0) != SVT ||
948         LHSCst->getValueType(0) != RHSCst->getValueType(0))
949       return false;
950     if (!Match(LHSCst, RHSCst))
951       return false;
952   }
953   return true;
954 }
955 
956 SDValue DAGCombiner::ReassociateOps(unsigned Opc, const SDLoc &DL, SDValue N0,
957                                     SDValue N1) {
958   EVT VT = N0.getValueType();
959   if (N0.getOpcode() == Opc) {
960     if (SDNode *L = DAG.isConstantIntBuildVectorOrConstantInt(N0.getOperand(1))) {
961       if (SDNode *R = DAG.isConstantIntBuildVectorOrConstantInt(N1)) {
962         // reassoc. (op (op x, c1), c2) -> (op x, (op c1, c2))
963         if (SDValue OpNode = DAG.FoldConstantArithmetic(Opc, DL, VT, L, R))
964           return DAG.getNode(Opc, DL, VT, N0.getOperand(0), OpNode);
965         return SDValue();
966       }
967       if (N0.hasOneUse()) {
968         // reassoc. (op (op x, c1), y) -> (op (op x, y), c1) iff x+c1 has one
969         // use
970         SDValue OpNode = DAG.getNode(Opc, SDLoc(N0), VT, N0.getOperand(0), N1);
971         if (!OpNode.getNode())
972           return SDValue();
973         AddToWorklist(OpNode.getNode());
974         return DAG.getNode(Opc, DL, VT, OpNode, N0.getOperand(1));
975       }
976     }
977   }
978 
979   if (N1.getOpcode() == Opc) {
980     if (SDNode *R = DAG.isConstantIntBuildVectorOrConstantInt(N1.getOperand(1))) {
981       if (SDNode *L = DAG.isConstantIntBuildVectorOrConstantInt(N0)) {
982         // reassoc. (op c2, (op x, c1)) -> (op x, (op c1, c2))
983         if (SDValue OpNode = DAG.FoldConstantArithmetic(Opc, DL, VT, R, L))
984           return DAG.getNode(Opc, DL, VT, N1.getOperand(0), OpNode);
985         return SDValue();
986       }
987       if (N1.hasOneUse()) {
988         // reassoc. (op x, (op y, c1)) -> (op (op x, y), c1) iff x+c1 has one
989         // use
990         SDValue OpNode = DAG.getNode(Opc, SDLoc(N0), VT, N0, N1.getOperand(0));
991         if (!OpNode.getNode())
992           return SDValue();
993         AddToWorklist(OpNode.getNode());
994         return DAG.getNode(Opc, DL, VT, OpNode, N1.getOperand(1));
995       }
996     }
997   }
998 
999   return SDValue();
1000 }
1001 
1002 SDValue DAGCombiner::CombineTo(SDNode *N, const SDValue *To, unsigned NumTo,
1003                                bool AddTo) {
1004   assert(N->getNumValues() == NumTo && "Broken CombineTo call!");
1005   ++NodesCombined;
1006   DEBUG(dbgs() << "\nReplacing.1 ";
1007         N->dump(&DAG);
1008         dbgs() << "\nWith: ";
1009         To[0].getNode()->dump(&DAG);
1010         dbgs() << " and " << NumTo-1 << " other values\n");
1011   for (unsigned i = 0, e = NumTo; i != e; ++i)
1012     assert((!To[i].getNode() ||
1013             N->getValueType(i) == To[i].getValueType()) &&
1014            "Cannot combine value to value of different type!");
1015 
1016   WorklistRemover DeadNodes(*this);
1017   DAG.ReplaceAllUsesWith(N, To);
1018   if (AddTo) {
1019     // Push the new nodes and any users onto the worklist
1020     for (unsigned i = 0, e = NumTo; i != e; ++i) {
1021       if (To[i].getNode()) {
1022         AddToWorklist(To[i].getNode());
1023         AddUsersToWorklist(To[i].getNode());
1024       }
1025     }
1026   }
1027 
1028   // Finally, if the node is now dead, remove it from the graph.  The node
1029   // may not be dead if the replacement process recursively simplified to
1030   // something else needing this node.
1031   if (N->use_empty())
1032     deleteAndRecombine(N);
1033   return SDValue(N, 0);
1034 }
1035 
1036 void DAGCombiner::
1037 CommitTargetLoweringOpt(const TargetLowering::TargetLoweringOpt &TLO) {
1038   // Replace all uses.  If any nodes become isomorphic to other nodes and
1039   // are deleted, make sure to remove them from our worklist.
1040   WorklistRemover DeadNodes(*this);
1041   DAG.ReplaceAllUsesOfValueWith(TLO.Old, TLO.New);
1042 
1043   // Push the new node and any (possibly new) users onto the worklist.
1044   AddToWorklist(TLO.New.getNode());
1045   AddUsersToWorklist(TLO.New.getNode());
1046 
1047   // Finally, if the node is now dead, remove it from the graph.  The node
1048   // may not be dead if the replacement process recursively simplified to
1049   // something else needing this node.
1050   if (TLO.Old.getNode()->use_empty())
1051     deleteAndRecombine(TLO.Old.getNode());
1052 }
1053 
1054 /// Check the specified integer node value to see if it can be simplified or if
1055 /// things it uses can be simplified by bit propagation. If so, return true.
1056 bool DAGCombiner::SimplifyDemandedBits(SDValue Op, const APInt &Demanded) {
1057   TargetLowering::TargetLoweringOpt TLO(DAG, LegalTypes, LegalOperations);
1058   KnownBits Known;
1059   if (!TLI.SimplifyDemandedBits(Op, Demanded, Known, TLO))
1060     return false;
1061 
1062   // Revisit the node.
1063   AddToWorklist(Op.getNode());
1064 
1065   // Replace the old value with the new one.
1066   ++NodesCombined;
1067   DEBUG(dbgs() << "\nReplacing.2 ";
1068         TLO.Old.getNode()->dump(&DAG);
1069         dbgs() << "\nWith: ";
1070         TLO.New.getNode()->dump(&DAG);
1071         dbgs() << '\n');
1072 
1073   CommitTargetLoweringOpt(TLO);
1074   return true;
1075 }
1076 
1077 void DAGCombiner::ReplaceLoadWithPromotedLoad(SDNode *Load, SDNode *ExtLoad) {
1078   SDLoc DL(Load);
1079   EVT VT = Load->getValueType(0);
1080   SDValue Trunc = DAG.getNode(ISD::TRUNCATE, DL, VT, SDValue(ExtLoad, 0));
1081 
1082   DEBUG(dbgs() << "\nReplacing.9 ";
1083         Load->dump(&DAG);
1084         dbgs() << "\nWith: ";
1085         Trunc.getNode()->dump(&DAG);
1086         dbgs() << '\n');
1087   WorklistRemover DeadNodes(*this);
1088   DAG.ReplaceAllUsesOfValueWith(SDValue(Load, 0), Trunc);
1089   DAG.ReplaceAllUsesOfValueWith(SDValue(Load, 1), SDValue(ExtLoad, 1));
1090   deleteAndRecombine(Load);
1091   AddToWorklist(Trunc.getNode());
1092 }
1093 
1094 SDValue DAGCombiner::PromoteOperand(SDValue Op, EVT PVT, bool &Replace) {
1095   Replace = false;
1096   SDLoc DL(Op);
1097   if (ISD::isUNINDEXEDLoad(Op.getNode())) {
1098     LoadSDNode *LD = cast<LoadSDNode>(Op);
1099     EVT MemVT = LD->getMemoryVT();
1100     ISD::LoadExtType ExtType = ISD::isNON_EXTLoad(LD)
1101       ? (TLI.isLoadExtLegal(ISD::ZEXTLOAD, PVT, MemVT) ? ISD::ZEXTLOAD
1102                                                        : ISD::EXTLOAD)
1103       : LD->getExtensionType();
1104     Replace = true;
1105     return DAG.getExtLoad(ExtType, DL, PVT,
1106                           LD->getChain(), LD->getBasePtr(),
1107                           MemVT, LD->getMemOperand());
1108   }
1109 
1110   unsigned Opc = Op.getOpcode();
1111   switch (Opc) {
1112   default: break;
1113   case ISD::AssertSext:
1114     if (SDValue Op0 = SExtPromoteOperand(Op.getOperand(0), PVT))
1115       return DAG.getNode(ISD::AssertSext, DL, PVT, Op0, Op.getOperand(1));
1116     break;
1117   case ISD::AssertZext:
1118     if (SDValue Op0 = ZExtPromoteOperand(Op.getOperand(0), PVT))
1119       return DAG.getNode(ISD::AssertZext, DL, PVT, Op0, Op.getOperand(1));
1120     break;
1121   case ISD::Constant: {
1122     unsigned ExtOpc =
1123       Op.getValueType().isByteSized() ? ISD::SIGN_EXTEND : ISD::ZERO_EXTEND;
1124     return DAG.getNode(ExtOpc, DL, PVT, Op);
1125   }
1126   }
1127 
1128   if (!TLI.isOperationLegal(ISD::ANY_EXTEND, PVT))
1129     return SDValue();
1130   return DAG.getNode(ISD::ANY_EXTEND, DL, PVT, Op);
1131 }
1132 
1133 SDValue DAGCombiner::SExtPromoteOperand(SDValue Op, EVT PVT) {
1134   if (!TLI.isOperationLegal(ISD::SIGN_EXTEND_INREG, PVT))
1135     return SDValue();
1136   EVT OldVT = Op.getValueType();
1137   SDLoc DL(Op);
1138   bool Replace = false;
1139   SDValue NewOp = PromoteOperand(Op, PVT, Replace);
1140   if (!NewOp.getNode())
1141     return SDValue();
1142   AddToWorklist(NewOp.getNode());
1143 
1144   if (Replace)
1145     ReplaceLoadWithPromotedLoad(Op.getNode(), NewOp.getNode());
1146   return DAG.getNode(ISD::SIGN_EXTEND_INREG, DL, NewOp.getValueType(), NewOp,
1147                      DAG.getValueType(OldVT));
1148 }
1149 
1150 SDValue DAGCombiner::ZExtPromoteOperand(SDValue Op, EVT PVT) {
1151   EVT OldVT = Op.getValueType();
1152   SDLoc DL(Op);
1153   bool Replace = false;
1154   SDValue NewOp = PromoteOperand(Op, PVT, Replace);
1155   if (!NewOp.getNode())
1156     return SDValue();
1157   AddToWorklist(NewOp.getNode());
1158 
1159   if (Replace)
1160     ReplaceLoadWithPromotedLoad(Op.getNode(), NewOp.getNode());
1161   return DAG.getZeroExtendInReg(NewOp, DL, OldVT);
1162 }
1163 
1164 /// Promote the specified integer binary operation if the target indicates it is
1165 /// beneficial. e.g. On x86, it's usually better to promote i16 operations to
1166 /// i32 since i16 instructions are longer.
1167 SDValue DAGCombiner::PromoteIntBinOp(SDValue Op) {
1168   if (!LegalOperations)
1169     return SDValue();
1170 
1171   EVT VT = Op.getValueType();
1172   if (VT.isVector() || !VT.isInteger())
1173     return SDValue();
1174 
1175   // If operation type is 'undesirable', e.g. i16 on x86, consider
1176   // promoting it.
1177   unsigned Opc = Op.getOpcode();
1178   if (TLI.isTypeDesirableForOp(Opc, VT))
1179     return SDValue();
1180 
1181   EVT PVT = VT;
1182   // Consult target whether it is a good idea to promote this operation and
1183   // what's the right type to promote it to.
1184   if (TLI.IsDesirableToPromoteOp(Op, PVT)) {
1185     assert(PVT != VT && "Don't know what type to promote to!");
1186 
1187     DEBUG(dbgs() << "\nPromoting "; Op.getNode()->dump(&DAG));
1188 
1189     bool Replace0 = false;
1190     SDValue N0 = Op.getOperand(0);
1191     SDValue NN0 = PromoteOperand(N0, PVT, Replace0);
1192 
1193     bool Replace1 = false;
1194     SDValue N1 = Op.getOperand(1);
1195     SDValue NN1 = PromoteOperand(N1, PVT, Replace1);
1196     SDLoc DL(Op);
1197 
1198     SDValue RV =
1199         DAG.getNode(ISD::TRUNCATE, DL, VT, DAG.getNode(Opc, DL, PVT, NN0, NN1));
1200 
1201     // We are always replacing N0/N1's use in N and only need
1202     // additional replacements if there are additional uses.
1203     Replace0 &= !N0->hasOneUse();
1204     Replace1 &= (N0 != N1) && !N1->hasOneUse();
1205 
1206     // Combine Op here so it is preserved past replacements.
1207     CombineTo(Op.getNode(), RV);
1208 
1209     // If operands have a use ordering, make sure we deal with
1210     // predecessor first.
1211     if (Replace0 && Replace1 && N0.getNode()->isPredecessorOf(N1.getNode())) {
1212       std::swap(N0, N1);
1213       std::swap(NN0, NN1);
1214     }
1215 
1216     if (Replace0) {
1217       AddToWorklist(NN0.getNode());
1218       ReplaceLoadWithPromotedLoad(N0.getNode(), NN0.getNode());
1219     }
1220     if (Replace1) {
1221       AddToWorklist(NN1.getNode());
1222       ReplaceLoadWithPromotedLoad(N1.getNode(), NN1.getNode());
1223     }
1224     return Op;
1225   }
1226   return SDValue();
1227 }
1228 
1229 /// Promote the specified integer shift operation if the target indicates it is
1230 /// beneficial. e.g. On x86, it's usually better to promote i16 operations to
1231 /// i32 since i16 instructions are longer.
1232 SDValue DAGCombiner::PromoteIntShiftOp(SDValue Op) {
1233   if (!LegalOperations)
1234     return SDValue();
1235 
1236   EVT VT = Op.getValueType();
1237   if (VT.isVector() || !VT.isInteger())
1238     return SDValue();
1239 
1240   // If operation type is 'undesirable', e.g. i16 on x86, consider
1241   // promoting it.
1242   unsigned Opc = Op.getOpcode();
1243   if (TLI.isTypeDesirableForOp(Opc, VT))
1244     return SDValue();
1245 
1246   EVT PVT = VT;
1247   // Consult target whether it is a good idea to promote this operation and
1248   // what's the right type to promote it to.
1249   if (TLI.IsDesirableToPromoteOp(Op, PVT)) {
1250     assert(PVT != VT && "Don't know what type to promote to!");
1251 
1252     DEBUG(dbgs() << "\nPromoting "; Op.getNode()->dump(&DAG));
1253 
1254     bool Replace = false;
1255     SDValue N0 = Op.getOperand(0);
1256     SDValue N1 = Op.getOperand(1);
1257     if (Opc == ISD::SRA)
1258       N0 = SExtPromoteOperand(N0, PVT);
1259     else if (Opc == ISD::SRL)
1260       N0 = ZExtPromoteOperand(N0, PVT);
1261     else
1262       N0 = PromoteOperand(N0, PVT, Replace);
1263 
1264     if (!N0.getNode())
1265       return SDValue();
1266 
1267     SDLoc DL(Op);
1268     SDValue RV =
1269         DAG.getNode(ISD::TRUNCATE, DL, VT, DAG.getNode(Opc, DL, PVT, N0, N1));
1270 
1271     AddToWorklist(N0.getNode());
1272     if (Replace)
1273       ReplaceLoadWithPromotedLoad(Op.getOperand(0).getNode(), N0.getNode());
1274 
1275     // Deal with Op being deleted.
1276     if (Op && Op.getOpcode() != ISD::DELETED_NODE)
1277       return RV;
1278   }
1279   return SDValue();
1280 }
1281 
1282 SDValue DAGCombiner::PromoteExtend(SDValue Op) {
1283   if (!LegalOperations)
1284     return SDValue();
1285 
1286   EVT VT = Op.getValueType();
1287   if (VT.isVector() || !VT.isInteger())
1288     return SDValue();
1289 
1290   // If operation type is 'undesirable', e.g. i16 on x86, consider
1291   // promoting it.
1292   unsigned Opc = Op.getOpcode();
1293   if (TLI.isTypeDesirableForOp(Opc, VT))
1294     return SDValue();
1295 
1296   EVT PVT = VT;
1297   // Consult target whether it is a good idea to promote this operation and
1298   // what's the right type to promote it to.
1299   if (TLI.IsDesirableToPromoteOp(Op, PVT)) {
1300     assert(PVT != VT && "Don't know what type to promote to!");
1301     // fold (aext (aext x)) -> (aext x)
1302     // fold (aext (zext x)) -> (zext x)
1303     // fold (aext (sext x)) -> (sext x)
1304     DEBUG(dbgs() << "\nPromoting ";
1305           Op.getNode()->dump(&DAG));
1306     return DAG.getNode(Op.getOpcode(), SDLoc(Op), VT, Op.getOperand(0));
1307   }
1308   return SDValue();
1309 }
1310 
1311 bool DAGCombiner::PromoteLoad(SDValue Op) {
1312   if (!LegalOperations)
1313     return false;
1314 
1315   if (!ISD::isUNINDEXEDLoad(Op.getNode()))
1316     return false;
1317 
1318   EVT VT = Op.getValueType();
1319   if (VT.isVector() || !VT.isInteger())
1320     return false;
1321 
1322   // If operation type is 'undesirable', e.g. i16 on x86, consider
1323   // promoting it.
1324   unsigned Opc = Op.getOpcode();
1325   if (TLI.isTypeDesirableForOp(Opc, VT))
1326     return false;
1327 
1328   EVT PVT = VT;
1329   // Consult target whether it is a good idea to promote this operation and
1330   // what's the right type to promote it to.
1331   if (TLI.IsDesirableToPromoteOp(Op, PVT)) {
1332     assert(PVT != VT && "Don't know what type to promote to!");
1333 
1334     SDLoc DL(Op);
1335     SDNode *N = Op.getNode();
1336     LoadSDNode *LD = cast<LoadSDNode>(N);
1337     EVT MemVT = LD->getMemoryVT();
1338     ISD::LoadExtType ExtType = ISD::isNON_EXTLoad(LD)
1339       ? (TLI.isLoadExtLegal(ISD::ZEXTLOAD, PVT, MemVT) ? ISD::ZEXTLOAD
1340                                                        : ISD::EXTLOAD)
1341       : LD->getExtensionType();
1342     SDValue NewLD = DAG.getExtLoad(ExtType, DL, PVT,
1343                                    LD->getChain(), LD->getBasePtr(),
1344                                    MemVT, LD->getMemOperand());
1345     SDValue Result = DAG.getNode(ISD::TRUNCATE, DL, VT, NewLD);
1346 
1347     DEBUG(dbgs() << "\nPromoting ";
1348           N->dump(&DAG);
1349           dbgs() << "\nTo: ";
1350           Result.getNode()->dump(&DAG);
1351           dbgs() << '\n');
1352     WorklistRemover DeadNodes(*this);
1353     DAG.ReplaceAllUsesOfValueWith(SDValue(N, 0), Result);
1354     DAG.ReplaceAllUsesOfValueWith(SDValue(N, 1), NewLD.getValue(1));
1355     deleteAndRecombine(N);
1356     AddToWorklist(Result.getNode());
1357     return true;
1358   }
1359   return false;
1360 }
1361 
1362 /// \brief Recursively delete a node which has no uses and any operands for
1363 /// which it is the only use.
1364 ///
1365 /// Note that this both deletes the nodes and removes them from the worklist.
1366 /// It also adds any nodes who have had a user deleted to the worklist as they
1367 /// may now have only one use and subject to other combines.
1368 bool DAGCombiner::recursivelyDeleteUnusedNodes(SDNode *N) {
1369   if (!N->use_empty())
1370     return false;
1371 
1372   SmallSetVector<SDNode *, 16> Nodes;
1373   Nodes.insert(N);
1374   do {
1375     N = Nodes.pop_back_val();
1376     if (!N)
1377       continue;
1378 
1379     if (N->use_empty()) {
1380       for (const SDValue &ChildN : N->op_values())
1381         Nodes.insert(ChildN.getNode());
1382 
1383       removeFromWorklist(N);
1384       DAG.DeleteNode(N);
1385     } else {
1386       AddToWorklist(N);
1387     }
1388   } while (!Nodes.empty());
1389   return true;
1390 }
1391 
1392 //===----------------------------------------------------------------------===//
1393 //  Main DAG Combiner implementation
1394 //===----------------------------------------------------------------------===//
1395 
1396 void DAGCombiner::Run(CombineLevel AtLevel) {
1397   // set the instance variables, so that the various visit routines may use it.
1398   Level = AtLevel;
1399   LegalOperations = Level >= AfterLegalizeVectorOps;
1400   LegalTypes = Level >= AfterLegalizeTypes;
1401 
1402   // Add all the dag nodes to the worklist.
1403   for (SDNode &Node : DAG.allnodes())
1404     AddToWorklist(&Node);
1405 
1406   // Create a dummy node (which is not added to allnodes), that adds a reference
1407   // to the root node, preventing it from being deleted, and tracking any
1408   // changes of the root.
1409   HandleSDNode Dummy(DAG.getRoot());
1410 
1411   // While the worklist isn't empty, find a node and try to combine it.
1412   while (!WorklistMap.empty()) {
1413     SDNode *N;
1414     // The Worklist holds the SDNodes in order, but it may contain null entries.
1415     do {
1416       N = Worklist.pop_back_val();
1417     } while (!N);
1418 
1419     bool GoodWorklistEntry = WorklistMap.erase(N);
1420     (void)GoodWorklistEntry;
1421     assert(GoodWorklistEntry &&
1422            "Found a worklist entry without a corresponding map entry!");
1423 
1424     // If N has no uses, it is dead.  Make sure to revisit all N's operands once
1425     // N is deleted from the DAG, since they too may now be dead or may have a
1426     // reduced number of uses, allowing other xforms.
1427     if (recursivelyDeleteUnusedNodes(N))
1428       continue;
1429 
1430     WorklistRemover DeadNodes(*this);
1431 
1432     // If this combine is running after legalizing the DAG, re-legalize any
1433     // nodes pulled off the worklist.
1434     if (Level == AfterLegalizeDAG) {
1435       SmallSetVector<SDNode *, 16> UpdatedNodes;
1436       bool NIsValid = DAG.LegalizeOp(N, UpdatedNodes);
1437 
1438       for (SDNode *LN : UpdatedNodes) {
1439         AddToWorklist(LN);
1440         AddUsersToWorklist(LN);
1441       }
1442       if (!NIsValid)
1443         continue;
1444     }
1445 
1446     DEBUG(dbgs() << "\nCombining: "; N->dump(&DAG));
1447 
1448     // Add any operands of the new node which have not yet been combined to the
1449     // worklist as well. Because the worklist uniques things already, this
1450     // won't repeatedly process the same operand.
1451     CombinedNodes.insert(N);
1452     for (const SDValue &ChildN : N->op_values())
1453       if (!CombinedNodes.count(ChildN.getNode()))
1454         AddToWorklist(ChildN.getNode());
1455 
1456     SDValue RV = combine(N);
1457 
1458     if (!RV.getNode())
1459       continue;
1460 
1461     ++NodesCombined;
1462 
1463     // If we get back the same node we passed in, rather than a new node or
1464     // zero, we know that the node must have defined multiple values and
1465     // CombineTo was used.  Since CombineTo takes care of the worklist
1466     // mechanics for us, we have no work to do in this case.
1467     if (RV.getNode() == N)
1468       continue;
1469 
1470     assert(N->getOpcode() != ISD::DELETED_NODE &&
1471            RV.getOpcode() != ISD::DELETED_NODE &&
1472            "Node was deleted but visit returned new node!");
1473 
1474     DEBUG(dbgs() << " ... into: ";
1475           RV.getNode()->dump(&DAG));
1476 
1477     if (N->getNumValues() == RV.getNode()->getNumValues())
1478       DAG.ReplaceAllUsesWith(N, RV.getNode());
1479     else {
1480       assert(N->getValueType(0) == RV.getValueType() &&
1481              N->getNumValues() == 1 && "Type mismatch");
1482       DAG.ReplaceAllUsesWith(N, &RV);
1483     }
1484 
1485     // Push the new node and any users onto the worklist
1486     AddToWorklist(RV.getNode());
1487     AddUsersToWorklist(RV.getNode());
1488 
1489     // Finally, if the node is now dead, remove it from the graph.  The node
1490     // may not be dead if the replacement process recursively simplified to
1491     // something else needing this node. This will also take care of adding any
1492     // operands which have lost a user to the worklist.
1493     recursivelyDeleteUnusedNodes(N);
1494   }
1495 
1496   // If the root changed (e.g. it was a dead load, update the root).
1497   DAG.setRoot(Dummy.getValue());
1498   DAG.RemoveDeadNodes();
1499 }
1500 
1501 SDValue DAGCombiner::visit(SDNode *N) {
1502   switch (N->getOpcode()) {
1503   default: break;
1504   case ISD::TokenFactor:        return visitTokenFactor(N);
1505   case ISD::MERGE_VALUES:       return visitMERGE_VALUES(N);
1506   case ISD::ADD:                return visitADD(N);
1507   case ISD::SUB:                return visitSUB(N);
1508   case ISD::ADDC:               return visitADDC(N);
1509   case ISD::UADDO:              return visitUADDO(N);
1510   case ISD::SUBC:               return visitSUBC(N);
1511   case ISD::USUBO:              return visitUSUBO(N);
1512   case ISD::ADDE:               return visitADDE(N);
1513   case ISD::ADDCARRY:           return visitADDCARRY(N);
1514   case ISD::SUBE:               return visitSUBE(N);
1515   case ISD::SUBCARRY:           return visitSUBCARRY(N);
1516   case ISD::MUL:                return visitMUL(N);
1517   case ISD::SDIV:               return visitSDIV(N);
1518   case ISD::UDIV:               return visitUDIV(N);
1519   case ISD::SREM:
1520   case ISD::UREM:               return visitREM(N);
1521   case ISD::MULHU:              return visitMULHU(N);
1522   case ISD::MULHS:              return visitMULHS(N);
1523   case ISD::SMUL_LOHI:          return visitSMUL_LOHI(N);
1524   case ISD::UMUL_LOHI:          return visitUMUL_LOHI(N);
1525   case ISD::SMULO:              return visitSMULO(N);
1526   case ISD::UMULO:              return visitUMULO(N);
1527   case ISD::SMIN:
1528   case ISD::SMAX:
1529   case ISD::UMIN:
1530   case ISD::UMAX:               return visitIMINMAX(N);
1531   case ISD::AND:                return visitAND(N);
1532   case ISD::OR:                 return visitOR(N);
1533   case ISD::XOR:                return visitXOR(N);
1534   case ISD::SHL:                return visitSHL(N);
1535   case ISD::SRA:                return visitSRA(N);
1536   case ISD::SRL:                return visitSRL(N);
1537   case ISD::ROTR:
1538   case ISD::ROTL:               return visitRotate(N);
1539   case ISD::ABS:                return visitABS(N);
1540   case ISD::BSWAP:              return visitBSWAP(N);
1541   case ISD::BITREVERSE:         return visitBITREVERSE(N);
1542   case ISD::CTLZ:               return visitCTLZ(N);
1543   case ISD::CTLZ_ZERO_UNDEF:    return visitCTLZ_ZERO_UNDEF(N);
1544   case ISD::CTTZ:               return visitCTTZ(N);
1545   case ISD::CTTZ_ZERO_UNDEF:    return visitCTTZ_ZERO_UNDEF(N);
1546   case ISD::CTPOP:              return visitCTPOP(N);
1547   case ISD::SELECT:             return visitSELECT(N);
1548   case ISD::VSELECT:            return visitVSELECT(N);
1549   case ISD::SELECT_CC:          return visitSELECT_CC(N);
1550   case ISD::SETCC:              return visitSETCC(N);
1551   case ISD::SETCCE:             return visitSETCCE(N);
1552   case ISD::SETCCCARRY:         return visitSETCCCARRY(N);
1553   case ISD::SIGN_EXTEND:        return visitSIGN_EXTEND(N);
1554   case ISD::ZERO_EXTEND:        return visitZERO_EXTEND(N);
1555   case ISD::ANY_EXTEND:         return visitANY_EXTEND(N);
1556   case ISD::AssertSext:
1557   case ISD::AssertZext:         return visitAssertExt(N);
1558   case ISD::SIGN_EXTEND_INREG:  return visitSIGN_EXTEND_INREG(N);
1559   case ISD::SIGN_EXTEND_VECTOR_INREG: return visitSIGN_EXTEND_VECTOR_INREG(N);
1560   case ISD::ZERO_EXTEND_VECTOR_INREG: return visitZERO_EXTEND_VECTOR_INREG(N);
1561   case ISD::TRUNCATE:           return visitTRUNCATE(N);
1562   case ISD::BITCAST:            return visitBITCAST(N);
1563   case ISD::BUILD_PAIR:         return visitBUILD_PAIR(N);
1564   case ISD::FADD:               return visitFADD(N);
1565   case ISD::FSUB:               return visitFSUB(N);
1566   case ISD::FMUL:               return visitFMUL(N);
1567   case ISD::FMA:                return visitFMA(N);
1568   case ISD::FDIV:               return visitFDIV(N);
1569   case ISD::FREM:               return visitFREM(N);
1570   case ISD::FSQRT:              return visitFSQRT(N);
1571   case ISD::FCOPYSIGN:          return visitFCOPYSIGN(N);
1572   case ISD::SINT_TO_FP:         return visitSINT_TO_FP(N);
1573   case ISD::UINT_TO_FP:         return visitUINT_TO_FP(N);
1574   case ISD::FP_TO_SINT:         return visitFP_TO_SINT(N);
1575   case ISD::FP_TO_UINT:         return visitFP_TO_UINT(N);
1576   case ISD::FP_ROUND:           return visitFP_ROUND(N);
1577   case ISD::FP_ROUND_INREG:     return visitFP_ROUND_INREG(N);
1578   case ISD::FP_EXTEND:          return visitFP_EXTEND(N);
1579   case ISD::FNEG:               return visitFNEG(N);
1580   case ISD::FABS:               return visitFABS(N);
1581   case ISD::FFLOOR:             return visitFFLOOR(N);
1582   case ISD::FMINNUM:            return visitFMINNUM(N);
1583   case ISD::FMAXNUM:            return visitFMAXNUM(N);
1584   case ISD::FCEIL:              return visitFCEIL(N);
1585   case ISD::FTRUNC:             return visitFTRUNC(N);
1586   case ISD::BRCOND:             return visitBRCOND(N);
1587   case ISD::BR_CC:              return visitBR_CC(N);
1588   case ISD::LOAD:               return visitLOAD(N);
1589   case ISD::STORE:              return visitSTORE(N);
1590   case ISD::INSERT_VECTOR_ELT:  return visitINSERT_VECTOR_ELT(N);
1591   case ISD::EXTRACT_VECTOR_ELT: return visitEXTRACT_VECTOR_ELT(N);
1592   case ISD::BUILD_VECTOR:       return visitBUILD_VECTOR(N);
1593   case ISD::CONCAT_VECTORS:     return visitCONCAT_VECTORS(N);
1594   case ISD::EXTRACT_SUBVECTOR:  return visitEXTRACT_SUBVECTOR(N);
1595   case ISD::VECTOR_SHUFFLE:     return visitVECTOR_SHUFFLE(N);
1596   case ISD::SCALAR_TO_VECTOR:   return visitSCALAR_TO_VECTOR(N);
1597   case ISD::INSERT_SUBVECTOR:   return visitINSERT_SUBVECTOR(N);
1598   case ISD::MGATHER:            return visitMGATHER(N);
1599   case ISD::MLOAD:              return visitMLOAD(N);
1600   case ISD::MSCATTER:           return visitMSCATTER(N);
1601   case ISD::MSTORE:             return visitMSTORE(N);
1602   case ISD::FP_TO_FP16:         return visitFP_TO_FP16(N);
1603   case ISD::FP16_TO_FP:         return visitFP16_TO_FP(N);
1604   }
1605   return SDValue();
1606 }
1607 
1608 SDValue DAGCombiner::combine(SDNode *N) {
1609   SDValue RV = visit(N);
1610 
1611   // If nothing happened, try a target-specific DAG combine.
1612   if (!RV.getNode()) {
1613     assert(N->getOpcode() != ISD::DELETED_NODE &&
1614            "Node was deleted but visit returned NULL!");
1615 
1616     if (N->getOpcode() >= ISD::BUILTIN_OP_END ||
1617         TLI.hasTargetDAGCombine((ISD::NodeType)N->getOpcode())) {
1618 
1619       // Expose the DAG combiner to the target combiner impls.
1620       TargetLowering::DAGCombinerInfo
1621         DagCombineInfo(DAG, Level, false, this);
1622 
1623       RV = TLI.PerformDAGCombine(N, DagCombineInfo);
1624     }
1625   }
1626 
1627   // If nothing happened still, try promoting the operation.
1628   if (!RV.getNode()) {
1629     switch (N->getOpcode()) {
1630     default: break;
1631     case ISD::ADD:
1632     case ISD::SUB:
1633     case ISD::MUL:
1634     case ISD::AND:
1635     case ISD::OR:
1636     case ISD::XOR:
1637       RV = PromoteIntBinOp(SDValue(N, 0));
1638       break;
1639     case ISD::SHL:
1640     case ISD::SRA:
1641     case ISD::SRL:
1642       RV = PromoteIntShiftOp(SDValue(N, 0));
1643       break;
1644     case ISD::SIGN_EXTEND:
1645     case ISD::ZERO_EXTEND:
1646     case ISD::ANY_EXTEND:
1647       RV = PromoteExtend(SDValue(N, 0));
1648       break;
1649     case ISD::LOAD:
1650       if (PromoteLoad(SDValue(N, 0)))
1651         RV = SDValue(N, 0);
1652       break;
1653     }
1654   }
1655 
1656   // If N is a commutative binary node, try eliminate it if the commuted
1657   // version is already present in the DAG.
1658   if (!RV.getNode() && TLI.isCommutativeBinOp(N->getOpcode()) &&
1659       N->getNumValues() == 1) {
1660     SDValue N0 = N->getOperand(0);
1661     SDValue N1 = N->getOperand(1);
1662 
1663     // Constant operands are canonicalized to RHS.
1664     if (N0 != N1 && (isa<ConstantSDNode>(N0) || !isa<ConstantSDNode>(N1))) {
1665       SDValue Ops[] = {N1, N0};
1666       SDNode *CSENode = DAG.getNodeIfExists(N->getOpcode(), N->getVTList(), Ops,
1667                                             N->getFlags());
1668       if (CSENode)
1669         return SDValue(CSENode, 0);
1670     }
1671   }
1672 
1673   return RV;
1674 }
1675 
1676 /// Given a node, return its input chain if it has one, otherwise return a null
1677 /// sd operand.
1678 static SDValue getInputChainForNode(SDNode *N) {
1679   if (unsigned NumOps = N->getNumOperands()) {
1680     if (N->getOperand(0).getValueType() == MVT::Other)
1681       return N->getOperand(0);
1682     if (N->getOperand(NumOps-1).getValueType() == MVT::Other)
1683       return N->getOperand(NumOps-1);
1684     for (unsigned i = 1; i < NumOps-1; ++i)
1685       if (N->getOperand(i).getValueType() == MVT::Other)
1686         return N->getOperand(i);
1687   }
1688   return SDValue();
1689 }
1690 
1691 SDValue DAGCombiner::visitTokenFactor(SDNode *N) {
1692   // If N has two operands, where one has an input chain equal to the other,
1693   // the 'other' chain is redundant.
1694   if (N->getNumOperands() == 2) {
1695     if (getInputChainForNode(N->getOperand(0).getNode()) == N->getOperand(1))
1696       return N->getOperand(0);
1697     if (getInputChainForNode(N->getOperand(1).getNode()) == N->getOperand(0))
1698       return N->getOperand(1);
1699   }
1700 
1701   SmallVector<SDNode *, 8> TFs;     // List of token factors to visit.
1702   SmallVector<SDValue, 8> Ops;      // Ops for replacing token factor.
1703   SmallPtrSet<SDNode*, 16> SeenOps;
1704   bool Changed = false;             // If we should replace this token factor.
1705 
1706   // Start out with this token factor.
1707   TFs.push_back(N);
1708 
1709   // Iterate through token factors.  The TFs grows when new token factors are
1710   // encountered.
1711   for (unsigned i = 0; i < TFs.size(); ++i) {
1712     SDNode *TF = TFs[i];
1713 
1714     // Check each of the operands.
1715     for (const SDValue &Op : TF->op_values()) {
1716       switch (Op.getOpcode()) {
1717       case ISD::EntryToken:
1718         // Entry tokens don't need to be added to the list. They are
1719         // redundant.
1720         Changed = true;
1721         break;
1722 
1723       case ISD::TokenFactor:
1724         if (Op.hasOneUse() && !is_contained(TFs, Op.getNode())) {
1725           // Queue up for processing.
1726           TFs.push_back(Op.getNode());
1727           // Clean up in case the token factor is removed.
1728           AddToWorklist(Op.getNode());
1729           Changed = true;
1730           break;
1731         }
1732         LLVM_FALLTHROUGH;
1733 
1734       default:
1735         // Only add if it isn't already in the list.
1736         if (SeenOps.insert(Op.getNode()).second)
1737           Ops.push_back(Op);
1738         else
1739           Changed = true;
1740         break;
1741       }
1742     }
1743   }
1744 
1745   // Remove Nodes that are chained to another node in the list. Do so
1746   // by walking up chains breath-first stopping when we've seen
1747   // another operand. In general we must climb to the EntryNode, but we can exit
1748   // early if we find all remaining work is associated with just one operand as
1749   // no further pruning is possible.
1750 
1751   // List of nodes to search through and original Ops from which they originate.
1752   SmallVector<std::pair<SDNode *, unsigned>, 8> Worklist;
1753   SmallVector<unsigned, 8> OpWorkCount; // Count of work for each Op.
1754   SmallPtrSet<SDNode *, 16> SeenChains;
1755   bool DidPruneOps = false;
1756 
1757   unsigned NumLeftToConsider = 0;
1758   for (const SDValue &Op : Ops) {
1759     Worklist.push_back(std::make_pair(Op.getNode(), NumLeftToConsider++));
1760     OpWorkCount.push_back(1);
1761   }
1762 
1763   auto AddToWorklist = [&](unsigned CurIdx, SDNode *Op, unsigned OpNumber) {
1764     // If this is an Op, we can remove the op from the list. Remark any
1765     // search associated with it as from the current OpNumber.
1766     if (SeenOps.count(Op) != 0) {
1767       Changed = true;
1768       DidPruneOps = true;
1769       unsigned OrigOpNumber = 0;
1770       while (OrigOpNumber < Ops.size() && Ops[OrigOpNumber].getNode() != Op)
1771         OrigOpNumber++;
1772       assert((OrigOpNumber != Ops.size()) &&
1773              "expected to find TokenFactor Operand");
1774       // Re-mark worklist from OrigOpNumber to OpNumber
1775       for (unsigned i = CurIdx + 1; i < Worklist.size(); ++i) {
1776         if (Worklist[i].second == OrigOpNumber) {
1777           Worklist[i].second = OpNumber;
1778         }
1779       }
1780       OpWorkCount[OpNumber] += OpWorkCount[OrigOpNumber];
1781       OpWorkCount[OrigOpNumber] = 0;
1782       NumLeftToConsider--;
1783     }
1784     // Add if it's a new chain
1785     if (SeenChains.insert(Op).second) {
1786       OpWorkCount[OpNumber]++;
1787       Worklist.push_back(std::make_pair(Op, OpNumber));
1788     }
1789   };
1790 
1791   for (unsigned i = 0; i < Worklist.size() && i < 1024; ++i) {
1792     // We need at least be consider at least 2 Ops to prune.
1793     if (NumLeftToConsider <= 1)
1794       break;
1795     auto CurNode = Worklist[i].first;
1796     auto CurOpNumber = Worklist[i].second;
1797     assert((OpWorkCount[CurOpNumber] > 0) &&
1798            "Node should not appear in worklist");
1799     switch (CurNode->getOpcode()) {
1800     case ISD::EntryToken:
1801       // Hitting EntryToken is the only way for the search to terminate without
1802       // hitting
1803       // another operand's search. Prevent us from marking this operand
1804       // considered.
1805       NumLeftToConsider++;
1806       break;
1807     case ISD::TokenFactor:
1808       for (const SDValue &Op : CurNode->op_values())
1809         AddToWorklist(i, Op.getNode(), CurOpNumber);
1810       break;
1811     case ISD::CopyFromReg:
1812     case ISD::CopyToReg:
1813       AddToWorklist(i, CurNode->getOperand(0).getNode(), CurOpNumber);
1814       break;
1815     default:
1816       if (auto *MemNode = dyn_cast<MemSDNode>(CurNode))
1817         AddToWorklist(i, MemNode->getChain().getNode(), CurOpNumber);
1818       break;
1819     }
1820     OpWorkCount[CurOpNumber]--;
1821     if (OpWorkCount[CurOpNumber] == 0)
1822       NumLeftToConsider--;
1823   }
1824 
1825   // If we've changed things around then replace token factor.
1826   if (Changed) {
1827     SDValue Result;
1828     if (Ops.empty()) {
1829       // The entry token is the only possible outcome.
1830       Result = DAG.getEntryNode();
1831     } else {
1832       if (DidPruneOps) {
1833         SmallVector<SDValue, 8> PrunedOps;
1834         //
1835         for (const SDValue &Op : Ops) {
1836           if (SeenChains.count(Op.getNode()) == 0)
1837             PrunedOps.push_back(Op);
1838         }
1839         Result = DAG.getNode(ISD::TokenFactor, SDLoc(N), MVT::Other, PrunedOps);
1840       } else {
1841         Result = DAG.getNode(ISD::TokenFactor, SDLoc(N), MVT::Other, Ops);
1842       }
1843     }
1844     return Result;
1845   }
1846   return SDValue();
1847 }
1848 
1849 /// MERGE_VALUES can always be eliminated.
1850 SDValue DAGCombiner::visitMERGE_VALUES(SDNode *N) {
1851   WorklistRemover DeadNodes(*this);
1852   // Replacing results may cause a different MERGE_VALUES to suddenly
1853   // be CSE'd with N, and carry its uses with it. Iterate until no
1854   // uses remain, to ensure that the node can be safely deleted.
1855   // First add the users of this node to the work list so that they
1856   // can be tried again once they have new operands.
1857   AddUsersToWorklist(N);
1858   do {
1859     for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i)
1860       DAG.ReplaceAllUsesOfValueWith(SDValue(N, i), N->getOperand(i));
1861   } while (!N->use_empty());
1862   deleteAndRecombine(N);
1863   return SDValue(N, 0);   // Return N so it doesn't get rechecked!
1864 }
1865 
1866 /// If \p N is a ConstantSDNode with isOpaque() == false return it casted to a
1867 /// ConstantSDNode pointer else nullptr.
1868 static ConstantSDNode *getAsNonOpaqueConstant(SDValue N) {
1869   ConstantSDNode *Const = dyn_cast<ConstantSDNode>(N);
1870   return Const != nullptr && !Const->isOpaque() ? Const : nullptr;
1871 }
1872 
1873 SDValue DAGCombiner::foldBinOpIntoSelect(SDNode *BO) {
1874   auto BinOpcode = BO->getOpcode();
1875   assert((BinOpcode == ISD::ADD || BinOpcode == ISD::SUB ||
1876           BinOpcode == ISD::MUL || BinOpcode == ISD::SDIV ||
1877           BinOpcode == ISD::UDIV || BinOpcode == ISD::SREM ||
1878           BinOpcode == ISD::UREM || BinOpcode == ISD::AND ||
1879           BinOpcode == ISD::OR || BinOpcode == ISD::XOR ||
1880           BinOpcode == ISD::SHL || BinOpcode == ISD::SRL ||
1881           BinOpcode == ISD::SRA || BinOpcode == ISD::FADD ||
1882           BinOpcode == ISD::FSUB || BinOpcode == ISD::FMUL ||
1883           BinOpcode == ISD::FDIV || BinOpcode == ISD::FREM) &&
1884          "Unexpected binary operator");
1885 
1886   // Bail out if any constants are opaque because we can't constant fold those.
1887   SDValue C1 = BO->getOperand(1);
1888   if (!isConstantOrConstantVector(C1, true) &&
1889       !isConstantFPBuildVectorOrConstantFP(C1))
1890     return SDValue();
1891 
1892   // Don't do this unless the old select is going away. We want to eliminate the
1893   // binary operator, not replace a binop with a select.
1894   // TODO: Handle ISD::SELECT_CC.
1895   SDValue Sel = BO->getOperand(0);
1896   if (Sel.getOpcode() != ISD::SELECT || !Sel.hasOneUse())
1897     return SDValue();
1898 
1899   SDValue CT = Sel.getOperand(1);
1900   if (!isConstantOrConstantVector(CT, true) &&
1901       !isConstantFPBuildVectorOrConstantFP(CT))
1902     return SDValue();
1903 
1904   SDValue CF = Sel.getOperand(2);
1905   if (!isConstantOrConstantVector(CF, true) &&
1906       !isConstantFPBuildVectorOrConstantFP(CF))
1907     return SDValue();
1908 
1909   // We have a select-of-constants followed by a binary operator with a
1910   // constant. Eliminate the binop by pulling the constant math into the select.
1911   // Example: add (select Cond, CT, CF), C1 --> select Cond, CT + C1, CF + C1
1912   EVT VT = Sel.getValueType();
1913   SDLoc DL(Sel);
1914   SDValue NewCT = DAG.getNode(BinOpcode, DL, VT, CT, C1);
1915   assert((NewCT.isUndef() || isConstantOrConstantVector(NewCT) ||
1916           isConstantFPBuildVectorOrConstantFP(NewCT)) &&
1917          "Failed to constant fold a binop with constant operands");
1918 
1919   SDValue NewCF = DAG.getNode(BinOpcode, DL, VT, CF, C1);
1920   assert((NewCF.isUndef() || isConstantOrConstantVector(NewCF) ||
1921           isConstantFPBuildVectorOrConstantFP(NewCF)) &&
1922          "Failed to constant fold a binop with constant operands");
1923 
1924   return DAG.getSelect(DL, VT, Sel.getOperand(0), NewCT, NewCF);
1925 }
1926 
1927 SDValue DAGCombiner::visitADD(SDNode *N) {
1928   SDValue N0 = N->getOperand(0);
1929   SDValue N1 = N->getOperand(1);
1930   EVT VT = N0.getValueType();
1931   SDLoc DL(N);
1932 
1933   // fold vector ops
1934   if (VT.isVector()) {
1935     if (SDValue FoldedVOp = SimplifyVBinOp(N))
1936       return FoldedVOp;
1937 
1938     // fold (add x, 0) -> x, vector edition
1939     if (ISD::isBuildVectorAllZeros(N1.getNode()))
1940       return N0;
1941     if (ISD::isBuildVectorAllZeros(N0.getNode()))
1942       return N1;
1943   }
1944 
1945   // fold (add x, undef) -> undef
1946   if (N0.isUndef())
1947     return N0;
1948 
1949   if (N1.isUndef())
1950     return N1;
1951 
1952   if (DAG.isConstantIntBuildVectorOrConstantInt(N0)) {
1953     // canonicalize constant to RHS
1954     if (!DAG.isConstantIntBuildVectorOrConstantInt(N1))
1955       return DAG.getNode(ISD::ADD, DL, VT, N1, N0);
1956     // fold (add c1, c2) -> c1+c2
1957     return DAG.FoldConstantArithmetic(ISD::ADD, DL, VT, N0.getNode(),
1958                                       N1.getNode());
1959   }
1960 
1961   // fold (add x, 0) -> x
1962   if (isNullConstant(N1))
1963     return N0;
1964 
1965   if (isConstantOrConstantVector(N1, /* NoOpaque */ true)) {
1966     // fold ((c1-A)+c2) -> (c1+c2)-A
1967     if (N0.getOpcode() == ISD::SUB &&
1968         isConstantOrConstantVector(N0.getOperand(0), /* NoOpaque */ true)) {
1969       // FIXME: Adding 2 constants should be handled by FoldConstantArithmetic.
1970       return DAG.getNode(ISD::SUB, DL, VT,
1971                          DAG.getNode(ISD::ADD, DL, VT, N1, N0.getOperand(0)),
1972                          N0.getOperand(1));
1973     }
1974 
1975     // add (sext i1 X), 1 -> zext (not i1 X)
1976     // We don't transform this pattern:
1977     //   add (zext i1 X), -1 -> sext (not i1 X)
1978     // because most (?) targets generate better code for the zext form.
1979     if (N0.getOpcode() == ISD::SIGN_EXTEND && N0.hasOneUse() &&
1980         isOneConstantOrOneSplatConstant(N1)) {
1981       SDValue X = N0.getOperand(0);
1982       if ((!LegalOperations ||
1983            (TLI.isOperationLegal(ISD::XOR, X.getValueType()) &&
1984             TLI.isOperationLegal(ISD::ZERO_EXTEND, VT))) &&
1985           X.getScalarValueSizeInBits() == 1) {
1986         SDValue Not = DAG.getNOT(DL, X, X.getValueType());
1987         return DAG.getNode(ISD::ZERO_EXTEND, DL, VT, Not);
1988       }
1989     }
1990 
1991     // Undo the add -> or combine to merge constant offsets from a frame index.
1992     if (N0.getOpcode() == ISD::OR &&
1993         isa<FrameIndexSDNode>(N0.getOperand(0)) &&
1994         isa<ConstantSDNode>(N0.getOperand(1)) &&
1995         DAG.haveNoCommonBitsSet(N0.getOperand(0), N0.getOperand(1))) {
1996       SDValue Add0 = DAG.getNode(ISD::ADD, DL, VT, N1, N0.getOperand(1));
1997       return DAG.getNode(ISD::ADD, DL, VT, N0.getOperand(0), Add0);
1998     }
1999   }
2000 
2001   if (SDValue NewSel = foldBinOpIntoSelect(N))
2002     return NewSel;
2003 
2004   // reassociate add
2005   if (SDValue RADD = ReassociateOps(ISD::ADD, DL, N0, N1))
2006     return RADD;
2007 
2008   // fold ((0-A) + B) -> B-A
2009   if (N0.getOpcode() == ISD::SUB &&
2010       isNullConstantOrNullSplatConstant(N0.getOperand(0)))
2011     return DAG.getNode(ISD::SUB, DL, VT, N1, N0.getOperand(1));
2012 
2013   // fold (A + (0-B)) -> A-B
2014   if (N1.getOpcode() == ISD::SUB &&
2015       isNullConstantOrNullSplatConstant(N1.getOperand(0)))
2016     return DAG.getNode(ISD::SUB, DL, VT, N0, N1.getOperand(1));
2017 
2018   // fold (A+(B-A)) -> B
2019   if (N1.getOpcode() == ISD::SUB && N0 == N1.getOperand(1))
2020     return N1.getOperand(0);
2021 
2022   // fold ((B-A)+A) -> B
2023   if (N0.getOpcode() == ISD::SUB && N1 == N0.getOperand(1))
2024     return N0.getOperand(0);
2025 
2026   // fold (A+(B-(A+C))) to (B-C)
2027   if (N1.getOpcode() == ISD::SUB && N1.getOperand(1).getOpcode() == ISD::ADD &&
2028       N0 == N1.getOperand(1).getOperand(0))
2029     return DAG.getNode(ISD::SUB, DL, VT, N1.getOperand(0),
2030                        N1.getOperand(1).getOperand(1));
2031 
2032   // fold (A+(B-(C+A))) to (B-C)
2033   if (N1.getOpcode() == ISD::SUB && N1.getOperand(1).getOpcode() == ISD::ADD &&
2034       N0 == N1.getOperand(1).getOperand(1))
2035     return DAG.getNode(ISD::SUB, DL, VT, N1.getOperand(0),
2036                        N1.getOperand(1).getOperand(0));
2037 
2038   // fold (A+((B-A)+or-C)) to (B+or-C)
2039   if ((N1.getOpcode() == ISD::SUB || N1.getOpcode() == ISD::ADD) &&
2040       N1.getOperand(0).getOpcode() == ISD::SUB &&
2041       N0 == N1.getOperand(0).getOperand(1))
2042     return DAG.getNode(N1.getOpcode(), DL, VT, N1.getOperand(0).getOperand(0),
2043                        N1.getOperand(1));
2044 
2045   // fold (A-B)+(C-D) to (A+C)-(B+D) when A or C is constant
2046   if (N0.getOpcode() == ISD::SUB && N1.getOpcode() == ISD::SUB) {
2047     SDValue N00 = N0.getOperand(0);
2048     SDValue N01 = N0.getOperand(1);
2049     SDValue N10 = N1.getOperand(0);
2050     SDValue N11 = N1.getOperand(1);
2051 
2052     if (isConstantOrConstantVector(N00) || isConstantOrConstantVector(N10))
2053       return DAG.getNode(ISD::SUB, DL, VT,
2054                          DAG.getNode(ISD::ADD, SDLoc(N0), VT, N00, N10),
2055                          DAG.getNode(ISD::ADD, SDLoc(N1), VT, N01, N11));
2056   }
2057 
2058   if (SimplifyDemandedBits(SDValue(N, 0)))
2059     return SDValue(N, 0);
2060 
2061   // fold (a+b) -> (a|b) iff a and b share no bits.
2062   if ((!LegalOperations || TLI.isOperationLegal(ISD::OR, VT)) &&
2063       DAG.haveNoCommonBitsSet(N0, N1))
2064     return DAG.getNode(ISD::OR, DL, VT, N0, N1);
2065 
2066   if (SDValue Combined = visitADDLike(N0, N1, N))
2067     return Combined;
2068 
2069   if (SDValue Combined = visitADDLike(N1, N0, N))
2070     return Combined;
2071 
2072   return SDValue();
2073 }
2074 
2075 static SDValue getAsCarry(const TargetLowering &TLI, SDValue V) {
2076   bool Masked = false;
2077 
2078   // First, peel away TRUNCATE/ZERO_EXTEND/AND nodes due to legalization.
2079   while (true) {
2080     if (V.getOpcode() == ISD::TRUNCATE || V.getOpcode() == ISD::ZERO_EXTEND) {
2081       V = V.getOperand(0);
2082       continue;
2083     }
2084 
2085     if (V.getOpcode() == ISD::AND && isOneConstant(V.getOperand(1))) {
2086       Masked = true;
2087       V = V.getOperand(0);
2088       continue;
2089     }
2090 
2091     break;
2092   }
2093 
2094   // If this is not a carry, return.
2095   if (V.getResNo() != 1)
2096     return SDValue();
2097 
2098   if (V.getOpcode() != ISD::ADDCARRY && V.getOpcode() != ISD::SUBCARRY &&
2099       V.getOpcode() != ISD::UADDO && V.getOpcode() != ISD::USUBO)
2100     return SDValue();
2101 
2102   // If the result is masked, then no matter what kind of bool it is we can
2103   // return. If it isn't, then we need to make sure the bool type is either 0 or
2104   // 1 and not other values.
2105   if (Masked ||
2106       TLI.getBooleanContents(V.getValueType()) ==
2107           TargetLoweringBase::ZeroOrOneBooleanContent)
2108     return V;
2109 
2110   return SDValue();
2111 }
2112 
2113 SDValue DAGCombiner::visitADDLike(SDValue N0, SDValue N1, SDNode *LocReference) {
2114   EVT VT = N0.getValueType();
2115   SDLoc DL(LocReference);
2116 
2117   // fold (add x, shl(0 - y, n)) -> sub(x, shl(y, n))
2118   if (N1.getOpcode() == ISD::SHL && N1.getOperand(0).getOpcode() == ISD::SUB &&
2119       isNullConstantOrNullSplatConstant(N1.getOperand(0).getOperand(0)))
2120     return DAG.getNode(ISD::SUB, DL, VT, N0,
2121                        DAG.getNode(ISD::SHL, DL, VT,
2122                                    N1.getOperand(0).getOperand(1),
2123                                    N1.getOperand(1)));
2124 
2125   if (N1.getOpcode() == ISD::AND) {
2126     SDValue AndOp0 = N1.getOperand(0);
2127     unsigned NumSignBits = DAG.ComputeNumSignBits(AndOp0);
2128     unsigned DestBits = VT.getScalarSizeInBits();
2129 
2130     // (add z, (and (sbbl x, x), 1)) -> (sub z, (sbbl x, x))
2131     // and similar xforms where the inner op is either ~0 or 0.
2132     if (NumSignBits == DestBits &&
2133         isOneConstantOrOneSplatConstant(N1->getOperand(1)))
2134       return DAG.getNode(ISD::SUB, DL, VT, N0, AndOp0);
2135   }
2136 
2137   // add (sext i1), X -> sub X, (zext i1)
2138   if (N0.getOpcode() == ISD::SIGN_EXTEND &&
2139       N0.getOperand(0).getValueType() == MVT::i1 &&
2140       !TLI.isOperationLegal(ISD::SIGN_EXTEND, MVT::i1)) {
2141     SDValue ZExt = DAG.getNode(ISD::ZERO_EXTEND, DL, VT, N0.getOperand(0));
2142     return DAG.getNode(ISD::SUB, DL, VT, N1, ZExt);
2143   }
2144 
2145   // add X, (sextinreg Y i1) -> sub X, (and Y 1)
2146   if (N1.getOpcode() == ISD::SIGN_EXTEND_INREG) {
2147     VTSDNode *TN = cast<VTSDNode>(N1.getOperand(1));
2148     if (TN->getVT() == MVT::i1) {
2149       SDValue ZExt = DAG.getNode(ISD::AND, DL, VT, N1.getOperand(0),
2150                                  DAG.getConstant(1, DL, VT));
2151       return DAG.getNode(ISD::SUB, DL, VT, N0, ZExt);
2152     }
2153   }
2154 
2155   // (add X, (addcarry Y, 0, Carry)) -> (addcarry X, Y, Carry)
2156   if (N1.getOpcode() == ISD::ADDCARRY && isNullConstant(N1.getOperand(1)))
2157     return DAG.getNode(ISD::ADDCARRY, DL, N1->getVTList(),
2158                        N0, N1.getOperand(0), N1.getOperand(2));
2159 
2160   // (add X, Carry) -> (addcarry X, 0, Carry)
2161   if (TLI.isOperationLegalOrCustom(ISD::ADDCARRY, VT))
2162     if (SDValue Carry = getAsCarry(TLI, N1))
2163       return DAG.getNode(ISD::ADDCARRY, DL,
2164                          DAG.getVTList(VT, Carry.getValueType()), N0,
2165                          DAG.getConstant(0, DL, VT), Carry);
2166 
2167   return SDValue();
2168 }
2169 
2170 SDValue DAGCombiner::visitADDC(SDNode *N) {
2171   SDValue N0 = N->getOperand(0);
2172   SDValue N1 = N->getOperand(1);
2173   EVT VT = N0.getValueType();
2174   SDLoc DL(N);
2175 
2176   // If the flag result is dead, turn this into an ADD.
2177   if (!N->hasAnyUseOfValue(1))
2178     return CombineTo(N, DAG.getNode(ISD::ADD, DL, VT, N0, N1),
2179                      DAG.getNode(ISD::CARRY_FALSE, DL, MVT::Glue));
2180 
2181   // canonicalize constant to RHS.
2182   ConstantSDNode *N0C = dyn_cast<ConstantSDNode>(N0);
2183   ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1);
2184   if (N0C && !N1C)
2185     return DAG.getNode(ISD::ADDC, DL, N->getVTList(), N1, N0);
2186 
2187   // fold (addc x, 0) -> x + no carry out
2188   if (isNullConstant(N1))
2189     return CombineTo(N, N0, DAG.getNode(ISD::CARRY_FALSE,
2190                                         DL, MVT::Glue));
2191 
2192   // If it cannot overflow, transform into an add.
2193   if (DAG.computeOverflowKind(N0, N1) == SelectionDAG::OFK_Never)
2194     return CombineTo(N, DAG.getNode(ISD::ADD, DL, VT, N0, N1),
2195                      DAG.getNode(ISD::CARRY_FALSE, DL, MVT::Glue));
2196 
2197   return SDValue();
2198 }
2199 
2200 SDValue DAGCombiner::visitUADDO(SDNode *N) {
2201   SDValue N0 = N->getOperand(0);
2202   SDValue N1 = N->getOperand(1);
2203   EVT VT = N0.getValueType();
2204   if (VT.isVector())
2205     return SDValue();
2206 
2207   EVT CarryVT = N->getValueType(1);
2208   SDLoc DL(N);
2209 
2210   // If the flag result is dead, turn this into an ADD.
2211   if (!N->hasAnyUseOfValue(1))
2212     return CombineTo(N, DAG.getNode(ISD::ADD, DL, VT, N0, N1),
2213                      DAG.getUNDEF(CarryVT));
2214 
2215   // canonicalize constant to RHS.
2216   ConstantSDNode *N0C = dyn_cast<ConstantSDNode>(N0);
2217   ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1);
2218   if (N0C && !N1C)
2219     return DAG.getNode(ISD::UADDO, DL, N->getVTList(), N1, N0);
2220 
2221   // fold (uaddo x, 0) -> x + no carry out
2222   if (isNullConstant(N1))
2223     return CombineTo(N, N0, DAG.getConstant(0, DL, CarryVT));
2224 
2225   // If it cannot overflow, transform into an add.
2226   if (DAG.computeOverflowKind(N0, N1) == SelectionDAG::OFK_Never)
2227     return CombineTo(N, DAG.getNode(ISD::ADD, DL, VT, N0, N1),
2228                      DAG.getConstant(0, DL, CarryVT));
2229 
2230   if (SDValue Combined = visitUADDOLike(N0, N1, N))
2231     return Combined;
2232 
2233   if (SDValue Combined = visitUADDOLike(N1, N0, N))
2234     return Combined;
2235 
2236   return SDValue();
2237 }
2238 
2239 SDValue DAGCombiner::visitUADDOLike(SDValue N0, SDValue N1, SDNode *N) {
2240   auto VT = N0.getValueType();
2241 
2242   // (uaddo X, (addcarry Y, 0, Carry)) -> (addcarry X, Y, Carry)
2243   // If Y + 1 cannot overflow.
2244   if (N1.getOpcode() == ISD::ADDCARRY && isNullConstant(N1.getOperand(1))) {
2245     SDValue Y = N1.getOperand(0);
2246     SDValue One = DAG.getConstant(1, SDLoc(N), Y.getValueType());
2247     if (DAG.computeOverflowKind(Y, One) == SelectionDAG::OFK_Never)
2248       return DAG.getNode(ISD::ADDCARRY, SDLoc(N), N->getVTList(), N0, Y,
2249                          N1.getOperand(2));
2250   }
2251 
2252   // (uaddo X, Carry) -> (addcarry X, 0, Carry)
2253   if (TLI.isOperationLegalOrCustom(ISD::ADDCARRY, VT))
2254     if (SDValue Carry = getAsCarry(TLI, N1))
2255       return DAG.getNode(ISD::ADDCARRY, SDLoc(N), N->getVTList(), N0,
2256                          DAG.getConstant(0, SDLoc(N), VT), Carry);
2257 
2258   return SDValue();
2259 }
2260 
2261 SDValue DAGCombiner::visitADDE(SDNode *N) {
2262   SDValue N0 = N->getOperand(0);
2263   SDValue N1 = N->getOperand(1);
2264   SDValue CarryIn = N->getOperand(2);
2265 
2266   // canonicalize constant to RHS
2267   ConstantSDNode *N0C = dyn_cast<ConstantSDNode>(N0);
2268   ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1);
2269   if (N0C && !N1C)
2270     return DAG.getNode(ISD::ADDE, SDLoc(N), N->getVTList(),
2271                        N1, N0, CarryIn);
2272 
2273   // fold (adde x, y, false) -> (addc x, y)
2274   if (CarryIn.getOpcode() == ISD::CARRY_FALSE)
2275     return DAG.getNode(ISD::ADDC, SDLoc(N), N->getVTList(), N0, N1);
2276 
2277   return SDValue();
2278 }
2279 
2280 SDValue DAGCombiner::visitADDCARRY(SDNode *N) {
2281   SDValue N0 = N->getOperand(0);
2282   SDValue N1 = N->getOperand(1);
2283   SDValue CarryIn = N->getOperand(2);
2284   SDLoc DL(N);
2285 
2286   // canonicalize constant to RHS
2287   ConstantSDNode *N0C = dyn_cast<ConstantSDNode>(N0);
2288   ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1);
2289   if (N0C && !N1C)
2290     return DAG.getNode(ISD::ADDCARRY, DL, N->getVTList(), N1, N0, CarryIn);
2291 
2292   // fold (addcarry x, y, false) -> (uaddo x, y)
2293   if (isNullConstant(CarryIn))
2294     return DAG.getNode(ISD::UADDO, DL, N->getVTList(), N0, N1);
2295 
2296   // fold (addcarry 0, 0, X) -> (and (ext/trunc X), 1) and no carry.
2297   if (isNullConstant(N0) && isNullConstant(N1)) {
2298     EVT VT = N0.getValueType();
2299     EVT CarryVT = CarryIn.getValueType();
2300     SDValue CarryExt = DAG.getBoolExtOrTrunc(CarryIn, DL, VT, CarryVT);
2301     AddToWorklist(CarryExt.getNode());
2302     return CombineTo(N, DAG.getNode(ISD::AND, DL, VT, CarryExt,
2303                                     DAG.getConstant(1, DL, VT)),
2304                      DAG.getConstant(0, DL, CarryVT));
2305   }
2306 
2307   if (SDValue Combined = visitADDCARRYLike(N0, N1, CarryIn, N))
2308     return Combined;
2309 
2310   if (SDValue Combined = visitADDCARRYLike(N1, N0, CarryIn, N))
2311     return Combined;
2312 
2313   return SDValue();
2314 }
2315 
2316 SDValue DAGCombiner::visitADDCARRYLike(SDValue N0, SDValue N1, SDValue CarryIn,
2317                                        SDNode *N) {
2318   // Iff the flag result is dead:
2319   // (addcarry (add|uaddo X, Y), 0, Carry) -> (addcarry X, Y, Carry)
2320   if ((N0.getOpcode() == ISD::ADD ||
2321        (N0.getOpcode() == ISD::UADDO && N0.getResNo() == 0)) &&
2322       isNullConstant(N1) && !N->hasAnyUseOfValue(1))
2323     return DAG.getNode(ISD::ADDCARRY, SDLoc(N), N->getVTList(),
2324                        N0.getOperand(0), N0.getOperand(1), CarryIn);
2325 
2326   /**
2327    * When one of the addcarry argument is itself a carry, we may be facing
2328    * a diamond carry propagation. In which case we try to transform the DAG
2329    * to ensure linear carry propagation if that is possible.
2330    *
2331    * We are trying to get:
2332    *   (addcarry X, 0, (addcarry A, B, Z):Carry)
2333    */
2334   if (auto Y = getAsCarry(TLI, N1)) {
2335     /**
2336      *            (uaddo A, B)
2337      *             /       \
2338      *          Carry      Sum
2339      *            |          \
2340      *            | (addcarry *, 0, Z)
2341      *            |       /
2342      *             \   Carry
2343      *              |   /
2344      * (addcarry X, *, *)
2345      */
2346     if (Y.getOpcode() == ISD::UADDO &&
2347         CarryIn.getResNo() == 1 &&
2348         CarryIn.getOpcode() == ISD::ADDCARRY &&
2349         isNullConstant(CarryIn.getOperand(1)) &&
2350         CarryIn.getOperand(0) == Y.getValue(0)) {
2351       auto NewY = DAG.getNode(ISD::ADDCARRY, SDLoc(N), Y->getVTList(),
2352                               Y.getOperand(0), Y.getOperand(1),
2353                               CarryIn.getOperand(2));
2354       AddToWorklist(NewY.getNode());
2355       return DAG.getNode(ISD::ADDCARRY, SDLoc(N), N->getVTList(), N0,
2356                          DAG.getConstant(0, SDLoc(N), N0.getValueType()),
2357                          NewY.getValue(1));
2358     }
2359   }
2360 
2361   return SDValue();
2362 }
2363 
2364 // Since it may not be valid to emit a fold to zero for vector initializers
2365 // check if we can before folding.
2366 static SDValue tryFoldToZero(const SDLoc &DL, const TargetLowering &TLI, EVT VT,
2367                              SelectionDAG &DAG, bool LegalOperations,
2368                              bool LegalTypes) {
2369   if (!VT.isVector())
2370     return DAG.getConstant(0, DL, VT);
2371   if (!LegalOperations || TLI.isOperationLegal(ISD::BUILD_VECTOR, VT))
2372     return DAG.getConstant(0, DL, VT);
2373   return SDValue();
2374 }
2375 
2376 SDValue DAGCombiner::visitSUB(SDNode *N) {
2377   SDValue N0 = N->getOperand(0);
2378   SDValue N1 = N->getOperand(1);
2379   EVT VT = N0.getValueType();
2380   SDLoc DL(N);
2381 
2382   // fold vector ops
2383   if (VT.isVector()) {
2384     if (SDValue FoldedVOp = SimplifyVBinOp(N))
2385       return FoldedVOp;
2386 
2387     // fold (sub x, 0) -> x, vector edition
2388     if (ISD::isBuildVectorAllZeros(N1.getNode()))
2389       return N0;
2390   }
2391 
2392   // fold (sub x, x) -> 0
2393   // FIXME: Refactor this and xor and other similar operations together.
2394   if (N0 == N1)
2395     return tryFoldToZero(DL, TLI, VT, DAG, LegalOperations, LegalTypes);
2396   if (DAG.isConstantIntBuildVectorOrConstantInt(N0) &&
2397       DAG.isConstantIntBuildVectorOrConstantInt(N1)) {
2398     // fold (sub c1, c2) -> c1-c2
2399     return DAG.FoldConstantArithmetic(ISD::SUB, DL, VT, N0.getNode(),
2400                                       N1.getNode());
2401   }
2402 
2403   if (SDValue NewSel = foldBinOpIntoSelect(N))
2404     return NewSel;
2405 
2406   ConstantSDNode *N1C = getAsNonOpaqueConstant(N1);
2407 
2408   // fold (sub x, c) -> (add x, -c)
2409   if (N1C) {
2410     return DAG.getNode(ISD::ADD, DL, VT, N0,
2411                        DAG.getConstant(-N1C->getAPIntValue(), DL, VT));
2412   }
2413 
2414   if (isNullConstantOrNullSplatConstant(N0)) {
2415     unsigned BitWidth = VT.getScalarSizeInBits();
2416     // Right-shifting everything out but the sign bit followed by negation is
2417     // the same as flipping arithmetic/logical shift type without the negation:
2418     // -(X >>u 31) -> (X >>s 31)
2419     // -(X >>s 31) -> (X >>u 31)
2420     if (N1->getOpcode() == ISD::SRA || N1->getOpcode() == ISD::SRL) {
2421       ConstantSDNode *ShiftAmt = isConstOrConstSplat(N1.getOperand(1));
2422       if (ShiftAmt && ShiftAmt->getZExtValue() == BitWidth - 1) {
2423         auto NewSh = N1->getOpcode() == ISD::SRA ? ISD::SRL : ISD::SRA;
2424         if (!LegalOperations || TLI.isOperationLegal(NewSh, VT))
2425           return DAG.getNode(NewSh, DL, VT, N1.getOperand(0), N1.getOperand(1));
2426       }
2427     }
2428 
2429     // 0 - X --> 0 if the sub is NUW.
2430     if (N->getFlags().hasNoUnsignedWrap())
2431       return N0;
2432 
2433     if (DAG.MaskedValueIsZero(N1, ~APInt::getSignMask(BitWidth))) {
2434       // N1 is either 0 or the minimum signed value. If the sub is NSW, then
2435       // N1 must be 0 because negating the minimum signed value is undefined.
2436       if (N->getFlags().hasNoSignedWrap())
2437         return N0;
2438 
2439       // 0 - X --> X if X is 0 or the minimum signed value.
2440       return N1;
2441     }
2442   }
2443 
2444   // Canonicalize (sub -1, x) -> ~x, i.e. (xor x, -1)
2445   if (isAllOnesConstantOrAllOnesSplatConstant(N0))
2446     return DAG.getNode(ISD::XOR, DL, VT, N1, N0);
2447 
2448   // fold A-(A-B) -> B
2449   if (N1.getOpcode() == ISD::SUB && N0 == N1.getOperand(0))
2450     return N1.getOperand(1);
2451 
2452   // fold (A+B)-A -> B
2453   if (N0.getOpcode() == ISD::ADD && N0.getOperand(0) == N1)
2454     return N0.getOperand(1);
2455 
2456   // fold (A+B)-B -> A
2457   if (N0.getOpcode() == ISD::ADD && N0.getOperand(1) == N1)
2458     return N0.getOperand(0);
2459 
2460   // fold C2-(A+C1) -> (C2-C1)-A
2461   if (N1.getOpcode() == ISD::ADD) {
2462     SDValue N11 = N1.getOperand(1);
2463     if (isConstantOrConstantVector(N0, /* NoOpaques */ true) &&
2464         isConstantOrConstantVector(N11, /* NoOpaques */ true)) {
2465       SDValue NewC = DAG.getNode(ISD::SUB, DL, VT, N0, N11);
2466       return DAG.getNode(ISD::SUB, DL, VT, NewC, N1.getOperand(0));
2467     }
2468   }
2469 
2470   // fold ((A+(B+or-C))-B) -> A+or-C
2471   if (N0.getOpcode() == ISD::ADD &&
2472       (N0.getOperand(1).getOpcode() == ISD::SUB ||
2473        N0.getOperand(1).getOpcode() == ISD::ADD) &&
2474       N0.getOperand(1).getOperand(0) == N1)
2475     return DAG.getNode(N0.getOperand(1).getOpcode(), DL, VT, N0.getOperand(0),
2476                        N0.getOperand(1).getOperand(1));
2477 
2478   // fold ((A+(C+B))-B) -> A+C
2479   if (N0.getOpcode() == ISD::ADD && N0.getOperand(1).getOpcode() == ISD::ADD &&
2480       N0.getOperand(1).getOperand(1) == N1)
2481     return DAG.getNode(ISD::ADD, DL, VT, N0.getOperand(0),
2482                        N0.getOperand(1).getOperand(0));
2483 
2484   // fold ((A-(B-C))-C) -> A-B
2485   if (N0.getOpcode() == ISD::SUB && N0.getOperand(1).getOpcode() == ISD::SUB &&
2486       N0.getOperand(1).getOperand(1) == N1)
2487     return DAG.getNode(ISD::SUB, DL, VT, N0.getOperand(0),
2488                        N0.getOperand(1).getOperand(0));
2489 
2490   // If either operand of a sub is undef, the result is undef
2491   if (N0.isUndef())
2492     return N0;
2493   if (N1.isUndef())
2494     return N1;
2495 
2496   // If the relocation model supports it, consider symbol offsets.
2497   if (GlobalAddressSDNode *GA = dyn_cast<GlobalAddressSDNode>(N0))
2498     if (!LegalOperations && TLI.isOffsetFoldingLegal(GA)) {
2499       // fold (sub Sym, c) -> Sym-c
2500       if (N1C && GA->getOpcode() == ISD::GlobalAddress)
2501         return DAG.getGlobalAddress(GA->getGlobal(), SDLoc(N1C), VT,
2502                                     GA->getOffset() -
2503                                         (uint64_t)N1C->getSExtValue());
2504       // fold (sub Sym+c1, Sym+c2) -> c1-c2
2505       if (GlobalAddressSDNode *GB = dyn_cast<GlobalAddressSDNode>(N1))
2506         if (GA->getGlobal() == GB->getGlobal())
2507           return DAG.getConstant((uint64_t)GA->getOffset() - GB->getOffset(),
2508                                  DL, VT);
2509     }
2510 
2511   // sub X, (sextinreg Y i1) -> add X, (and Y 1)
2512   if (N1.getOpcode() == ISD::SIGN_EXTEND_INREG) {
2513     VTSDNode *TN = cast<VTSDNode>(N1.getOperand(1));
2514     if (TN->getVT() == MVT::i1) {
2515       SDValue ZExt = DAG.getNode(ISD::AND, DL, VT, N1.getOperand(0),
2516                                  DAG.getConstant(1, DL, VT));
2517       return DAG.getNode(ISD::ADD, DL, VT, N0, ZExt);
2518     }
2519   }
2520 
2521   return SDValue();
2522 }
2523 
2524 SDValue DAGCombiner::visitSUBC(SDNode *N) {
2525   SDValue N0 = N->getOperand(0);
2526   SDValue N1 = N->getOperand(1);
2527   EVT VT = N0.getValueType();
2528   SDLoc DL(N);
2529 
2530   // If the flag result is dead, turn this into an SUB.
2531   if (!N->hasAnyUseOfValue(1))
2532     return CombineTo(N, DAG.getNode(ISD::SUB, DL, VT, N0, N1),
2533                      DAG.getNode(ISD::CARRY_FALSE, DL, MVT::Glue));
2534 
2535   // fold (subc x, x) -> 0 + no borrow
2536   if (N0 == N1)
2537     return CombineTo(N, DAG.getConstant(0, DL, VT),
2538                      DAG.getNode(ISD::CARRY_FALSE, DL, MVT::Glue));
2539 
2540   // fold (subc x, 0) -> x + no borrow
2541   if (isNullConstant(N1))
2542     return CombineTo(N, N0, DAG.getNode(ISD::CARRY_FALSE, DL, MVT::Glue));
2543 
2544   // Canonicalize (sub -1, x) -> ~x, i.e. (xor x, -1) + no borrow
2545   if (isAllOnesConstant(N0))
2546     return CombineTo(N, DAG.getNode(ISD::XOR, DL, VT, N1, N0),
2547                      DAG.getNode(ISD::CARRY_FALSE, DL, MVT::Glue));
2548 
2549   return SDValue();
2550 }
2551 
2552 SDValue DAGCombiner::visitUSUBO(SDNode *N) {
2553   SDValue N0 = N->getOperand(0);
2554   SDValue N1 = N->getOperand(1);
2555   EVT VT = N0.getValueType();
2556   if (VT.isVector())
2557     return SDValue();
2558 
2559   EVT CarryVT = N->getValueType(1);
2560   SDLoc DL(N);
2561 
2562   // If the flag result is dead, turn this into an SUB.
2563   if (!N->hasAnyUseOfValue(1))
2564     return CombineTo(N, DAG.getNode(ISD::SUB, DL, VT, N0, N1),
2565                      DAG.getUNDEF(CarryVT));
2566 
2567   // fold (usubo x, x) -> 0 + no borrow
2568   if (N0 == N1)
2569     return CombineTo(N, DAG.getConstant(0, DL, VT),
2570                      DAG.getConstant(0, DL, CarryVT));
2571 
2572   // fold (usubo x, 0) -> x + no borrow
2573   if (isNullConstant(N1))
2574     return CombineTo(N, N0, DAG.getConstant(0, DL, CarryVT));
2575 
2576   // Canonicalize (usubo -1, x) -> ~x, i.e. (xor x, -1) + no borrow
2577   if (isAllOnesConstant(N0))
2578     return CombineTo(N, DAG.getNode(ISD::XOR, DL, VT, N1, N0),
2579                      DAG.getConstant(0, DL, CarryVT));
2580 
2581   return SDValue();
2582 }
2583 
2584 SDValue DAGCombiner::visitSUBE(SDNode *N) {
2585   SDValue N0 = N->getOperand(0);
2586   SDValue N1 = N->getOperand(1);
2587   SDValue CarryIn = N->getOperand(2);
2588 
2589   // fold (sube x, y, false) -> (subc x, y)
2590   if (CarryIn.getOpcode() == ISD::CARRY_FALSE)
2591     return DAG.getNode(ISD::SUBC, SDLoc(N), N->getVTList(), N0, N1);
2592 
2593   return SDValue();
2594 }
2595 
2596 SDValue DAGCombiner::visitSUBCARRY(SDNode *N) {
2597   SDValue N0 = N->getOperand(0);
2598   SDValue N1 = N->getOperand(1);
2599   SDValue CarryIn = N->getOperand(2);
2600 
2601   // fold (subcarry x, y, false) -> (usubo x, y)
2602   if (isNullConstant(CarryIn))
2603     return DAG.getNode(ISD::USUBO, SDLoc(N), N->getVTList(), N0, N1);
2604 
2605   return SDValue();
2606 }
2607 
2608 SDValue DAGCombiner::visitMUL(SDNode *N) {
2609   SDValue N0 = N->getOperand(0);
2610   SDValue N1 = N->getOperand(1);
2611   EVT VT = N0.getValueType();
2612 
2613   // fold (mul x, undef) -> 0
2614   if (N0.isUndef() || N1.isUndef())
2615     return DAG.getConstant(0, SDLoc(N), VT);
2616 
2617   bool N0IsConst = false;
2618   bool N1IsConst = false;
2619   bool N1IsOpaqueConst = false;
2620   bool N0IsOpaqueConst = false;
2621   APInt ConstValue0, ConstValue1;
2622   // fold vector ops
2623   if (VT.isVector()) {
2624     if (SDValue FoldedVOp = SimplifyVBinOp(N))
2625       return FoldedVOp;
2626 
2627     N0IsConst = ISD::isConstantSplatVector(N0.getNode(), ConstValue0);
2628     N1IsConst = ISD::isConstantSplatVector(N1.getNode(), ConstValue1);
2629     assert((!N0IsConst ||
2630             ConstValue0.getBitWidth() == VT.getScalarSizeInBits()) &&
2631            "Splat APInt should be element width");
2632     assert((!N1IsConst ||
2633             ConstValue1.getBitWidth() == VT.getScalarSizeInBits()) &&
2634            "Splat APInt should be element width");
2635   } else {
2636     N0IsConst = isa<ConstantSDNode>(N0);
2637     if (N0IsConst) {
2638       ConstValue0 = cast<ConstantSDNode>(N0)->getAPIntValue();
2639       N0IsOpaqueConst = cast<ConstantSDNode>(N0)->isOpaque();
2640     }
2641     N1IsConst = isa<ConstantSDNode>(N1);
2642     if (N1IsConst) {
2643       ConstValue1 = cast<ConstantSDNode>(N1)->getAPIntValue();
2644       N1IsOpaqueConst = cast<ConstantSDNode>(N1)->isOpaque();
2645     }
2646   }
2647 
2648   // fold (mul c1, c2) -> c1*c2
2649   if (N0IsConst && N1IsConst && !N0IsOpaqueConst && !N1IsOpaqueConst)
2650     return DAG.FoldConstantArithmetic(ISD::MUL, SDLoc(N), VT,
2651                                       N0.getNode(), N1.getNode());
2652 
2653   // canonicalize constant to RHS (vector doesn't have to splat)
2654   if (DAG.isConstantIntBuildVectorOrConstantInt(N0) &&
2655      !DAG.isConstantIntBuildVectorOrConstantInt(N1))
2656     return DAG.getNode(ISD::MUL, SDLoc(N), VT, N1, N0);
2657   // fold (mul x, 0) -> 0
2658   if (N1IsConst && ConstValue1.isNullValue())
2659     return N1;
2660   // fold (mul x, 1) -> x
2661   if (N1IsConst && ConstValue1.isOneValue())
2662     return N0;
2663 
2664   if (SDValue NewSel = foldBinOpIntoSelect(N))
2665     return NewSel;
2666 
2667   // fold (mul x, -1) -> 0-x
2668   if (N1IsConst && ConstValue1.isAllOnesValue()) {
2669     SDLoc DL(N);
2670     return DAG.getNode(ISD::SUB, DL, VT,
2671                        DAG.getConstant(0, DL, VT), N0);
2672   }
2673   // fold (mul x, (1 << c)) -> x << c
2674   if (isConstantOrConstantVector(N1, /*NoOpaques*/ true) &&
2675       DAG.isKnownToBeAPowerOfTwo(N1)) {
2676     SDLoc DL(N);
2677     SDValue LogBase2 = BuildLogBase2(N1, DL);
2678     AddToWorklist(LogBase2.getNode());
2679 
2680     EVT ShiftVT = getShiftAmountTy(N0.getValueType());
2681     SDValue Trunc = DAG.getZExtOrTrunc(LogBase2, DL, ShiftVT);
2682     AddToWorklist(Trunc.getNode());
2683     return DAG.getNode(ISD::SHL, DL, VT, N0, Trunc);
2684   }
2685   // fold (mul x, -(1 << c)) -> -(x << c) or (-x) << c
2686   if (N1IsConst && !N1IsOpaqueConst && (-ConstValue1).isPowerOf2()) {
2687     unsigned Log2Val = (-ConstValue1).logBase2();
2688     SDLoc DL(N);
2689     // FIXME: If the input is something that is easily negated (e.g. a
2690     // single-use add), we should put the negate there.
2691     return DAG.getNode(ISD::SUB, DL, VT,
2692                        DAG.getConstant(0, DL, VT),
2693                        DAG.getNode(ISD::SHL, DL, VT, N0,
2694                             DAG.getConstant(Log2Val, DL,
2695                                       getShiftAmountTy(N0.getValueType()))));
2696   }
2697 
2698   // (mul (shl X, c1), c2) -> (mul X, c2 << c1)
2699   if (N0.getOpcode() == ISD::SHL &&
2700       isConstantOrConstantVector(N1, /* NoOpaques */ true) &&
2701       isConstantOrConstantVector(N0.getOperand(1), /* NoOpaques */ true)) {
2702     SDValue C3 = DAG.getNode(ISD::SHL, SDLoc(N), VT, N1, N0.getOperand(1));
2703     if (isConstantOrConstantVector(C3))
2704       return DAG.getNode(ISD::MUL, SDLoc(N), VT, N0.getOperand(0), C3);
2705   }
2706 
2707   // Change (mul (shl X, C), Y) -> (shl (mul X, Y), C) when the shift has one
2708   // use.
2709   {
2710     SDValue Sh(nullptr, 0), Y(nullptr, 0);
2711 
2712     // Check for both (mul (shl X, C), Y)  and  (mul Y, (shl X, C)).
2713     if (N0.getOpcode() == ISD::SHL &&
2714         isConstantOrConstantVector(N0.getOperand(1)) &&
2715         N0.getNode()->hasOneUse()) {
2716       Sh = N0; Y = N1;
2717     } else if (N1.getOpcode() == ISD::SHL &&
2718                isConstantOrConstantVector(N1.getOperand(1)) &&
2719                N1.getNode()->hasOneUse()) {
2720       Sh = N1; Y = N0;
2721     }
2722 
2723     if (Sh.getNode()) {
2724       SDValue Mul = DAG.getNode(ISD::MUL, SDLoc(N), VT, Sh.getOperand(0), Y);
2725       return DAG.getNode(ISD::SHL, SDLoc(N), VT, Mul, Sh.getOperand(1));
2726     }
2727   }
2728 
2729   // fold (mul (add x, c1), c2) -> (add (mul x, c2), c1*c2)
2730   if (DAG.isConstantIntBuildVectorOrConstantInt(N1) &&
2731       N0.getOpcode() == ISD::ADD &&
2732       DAG.isConstantIntBuildVectorOrConstantInt(N0.getOperand(1)) &&
2733       isMulAddWithConstProfitable(N, N0, N1))
2734       return DAG.getNode(ISD::ADD, SDLoc(N), VT,
2735                          DAG.getNode(ISD::MUL, SDLoc(N0), VT,
2736                                      N0.getOperand(0), N1),
2737                          DAG.getNode(ISD::MUL, SDLoc(N1), VT,
2738                                      N0.getOperand(1), N1));
2739 
2740   // reassociate mul
2741   if (SDValue RMUL = ReassociateOps(ISD::MUL, SDLoc(N), N0, N1))
2742     return RMUL;
2743 
2744   return SDValue();
2745 }
2746 
2747 /// Return true if divmod libcall is available.
2748 static bool isDivRemLibcallAvailable(SDNode *Node, bool isSigned,
2749                                      const TargetLowering &TLI) {
2750   RTLIB::Libcall LC;
2751   EVT NodeType = Node->getValueType(0);
2752   if (!NodeType.isSimple())
2753     return false;
2754   switch (NodeType.getSimpleVT().SimpleTy) {
2755   default: return false; // No libcall for vector types.
2756   case MVT::i8:   LC= isSigned ? RTLIB::SDIVREM_I8  : RTLIB::UDIVREM_I8;  break;
2757   case MVT::i16:  LC= isSigned ? RTLIB::SDIVREM_I16 : RTLIB::UDIVREM_I16; break;
2758   case MVT::i32:  LC= isSigned ? RTLIB::SDIVREM_I32 : RTLIB::UDIVREM_I32; break;
2759   case MVT::i64:  LC= isSigned ? RTLIB::SDIVREM_I64 : RTLIB::UDIVREM_I64; break;
2760   case MVT::i128: LC= isSigned ? RTLIB::SDIVREM_I128:RTLIB::UDIVREM_I128; break;
2761   }
2762 
2763   return TLI.getLibcallName(LC) != nullptr;
2764 }
2765 
2766 /// Issue divrem if both quotient and remainder are needed.
2767 SDValue DAGCombiner::useDivRem(SDNode *Node) {
2768   if (Node->use_empty())
2769     return SDValue(); // This is a dead node, leave it alone.
2770 
2771   unsigned Opcode = Node->getOpcode();
2772   bool isSigned = (Opcode == ISD::SDIV) || (Opcode == ISD::SREM);
2773   unsigned DivRemOpc = isSigned ? ISD::SDIVREM : ISD::UDIVREM;
2774 
2775   // DivMod lib calls can still work on non-legal types if using lib-calls.
2776   EVT VT = Node->getValueType(0);
2777   if (VT.isVector() || !VT.isInteger())
2778     return SDValue();
2779 
2780   if (!TLI.isTypeLegal(VT) && !TLI.isOperationCustom(DivRemOpc, VT))
2781     return SDValue();
2782 
2783   // If DIVREM is going to get expanded into a libcall,
2784   // but there is no libcall available, then don't combine.
2785   if (!TLI.isOperationLegalOrCustom(DivRemOpc, VT) &&
2786       !isDivRemLibcallAvailable(Node, isSigned, TLI))
2787     return SDValue();
2788 
2789   // If div is legal, it's better to do the normal expansion
2790   unsigned OtherOpcode = 0;
2791   if ((Opcode == ISD::SDIV) || (Opcode == ISD::UDIV)) {
2792     OtherOpcode = isSigned ? ISD::SREM : ISD::UREM;
2793     if (TLI.isOperationLegalOrCustom(Opcode, VT))
2794       return SDValue();
2795   } else {
2796     OtherOpcode = isSigned ? ISD::SDIV : ISD::UDIV;
2797     if (TLI.isOperationLegalOrCustom(OtherOpcode, VT))
2798       return SDValue();
2799   }
2800 
2801   SDValue Op0 = Node->getOperand(0);
2802   SDValue Op1 = Node->getOperand(1);
2803   SDValue combined;
2804   for (SDNode::use_iterator UI = Op0.getNode()->use_begin(),
2805          UE = Op0.getNode()->use_end(); UI != UE;) {
2806     SDNode *User = *UI++;
2807     if (User == Node || User->use_empty())
2808       continue;
2809     // Convert the other matching node(s), too;
2810     // otherwise, the DIVREM may get target-legalized into something
2811     // target-specific that we won't be able to recognize.
2812     unsigned UserOpc = User->getOpcode();
2813     if ((UserOpc == Opcode || UserOpc == OtherOpcode || UserOpc == DivRemOpc) &&
2814         User->getOperand(0) == Op0 &&
2815         User->getOperand(1) == Op1) {
2816       if (!combined) {
2817         if (UserOpc == OtherOpcode) {
2818           SDVTList VTs = DAG.getVTList(VT, VT);
2819           combined = DAG.getNode(DivRemOpc, SDLoc(Node), VTs, Op0, Op1);
2820         } else if (UserOpc == DivRemOpc) {
2821           combined = SDValue(User, 0);
2822         } else {
2823           assert(UserOpc == Opcode);
2824           continue;
2825         }
2826       }
2827       if (UserOpc == ISD::SDIV || UserOpc == ISD::UDIV)
2828         CombineTo(User, combined);
2829       else if (UserOpc == ISD::SREM || UserOpc == ISD::UREM)
2830         CombineTo(User, combined.getValue(1));
2831     }
2832   }
2833   return combined;
2834 }
2835 
2836 static SDValue simplifyDivRem(SDNode *N, SelectionDAG &DAG) {
2837   SDValue N0 = N->getOperand(0);
2838   SDValue N1 = N->getOperand(1);
2839   EVT VT = N->getValueType(0);
2840   SDLoc DL(N);
2841 
2842   if (DAG.isUndef(N->getOpcode(), {N0, N1}))
2843     return DAG.getUNDEF(VT);
2844 
2845   // undef / X -> 0
2846   // undef % X -> 0
2847   if (N0.isUndef())
2848     return DAG.getConstant(0, DL, VT);
2849 
2850   return SDValue();
2851 }
2852 
2853 SDValue DAGCombiner::visitSDIV(SDNode *N) {
2854   SDValue N0 = N->getOperand(0);
2855   SDValue N1 = N->getOperand(1);
2856   EVT VT = N->getValueType(0);
2857 
2858   // fold vector ops
2859   if (VT.isVector())
2860     if (SDValue FoldedVOp = SimplifyVBinOp(N))
2861       return FoldedVOp;
2862 
2863   SDLoc DL(N);
2864 
2865   // fold (sdiv c1, c2) -> c1/c2
2866   ConstantSDNode *N0C = isConstOrConstSplat(N0);
2867   ConstantSDNode *N1C = isConstOrConstSplat(N1);
2868   if (N0C && N1C && !N0C->isOpaque() && !N1C->isOpaque())
2869     return DAG.FoldConstantArithmetic(ISD::SDIV, DL, VT, N0C, N1C);
2870   // fold (sdiv X, 1) -> X
2871   if (N1C && N1C->isOne())
2872     return N0;
2873   // fold (sdiv X, -1) -> 0-X
2874   if (N1C && N1C->isAllOnesValue())
2875     return DAG.getNode(ISD::SUB, DL, VT, DAG.getConstant(0, DL, VT), N0);
2876 
2877   if (SDValue V = simplifyDivRem(N, DAG))
2878     return V;
2879 
2880   if (SDValue NewSel = foldBinOpIntoSelect(N))
2881     return NewSel;
2882 
2883   // If we know the sign bits of both operands are zero, strength reduce to a
2884   // udiv instead.  Handles (X&15) /s 4 -> X&15 >> 2
2885   if (DAG.SignBitIsZero(N1) && DAG.SignBitIsZero(N0))
2886     return DAG.getNode(ISD::UDIV, DL, N1.getValueType(), N0, N1);
2887 
2888   // fold (sdiv X, pow2) -> simple ops after legalize
2889   // FIXME: We check for the exact bit here because the generic lowering gives
2890   // better results in that case. The target-specific lowering should learn how
2891   // to handle exact sdivs efficiently.
2892   if (N1C && !N1C->isNullValue() && !N1C->isOpaque() &&
2893       !N->getFlags().hasExact() && (N1C->getAPIntValue().isPowerOf2() ||
2894                                     (-N1C->getAPIntValue()).isPowerOf2())) {
2895     // Target-specific implementation of sdiv x, pow2.
2896     if (SDValue Res = BuildSDIVPow2(N))
2897       return Res;
2898 
2899     unsigned lg2 = N1C->getAPIntValue().countTrailingZeros();
2900 
2901     // Splat the sign bit into the register
2902     SDValue SGN =
2903         DAG.getNode(ISD::SRA, DL, VT, N0,
2904                     DAG.getConstant(VT.getScalarSizeInBits() - 1, DL,
2905                                     getShiftAmountTy(N0.getValueType())));
2906     AddToWorklist(SGN.getNode());
2907 
2908     // Add (N0 < 0) ? abs2 - 1 : 0;
2909     SDValue SRL =
2910         DAG.getNode(ISD::SRL, DL, VT, SGN,
2911                     DAG.getConstant(VT.getScalarSizeInBits() - lg2, DL,
2912                                     getShiftAmountTy(SGN.getValueType())));
2913     SDValue ADD = DAG.getNode(ISD::ADD, DL, VT, N0, SRL);
2914     AddToWorklist(SRL.getNode());
2915     AddToWorklist(ADD.getNode());    // Divide by pow2
2916     SDValue SRA = DAG.getNode(ISD::SRA, DL, VT, ADD,
2917                   DAG.getConstant(lg2, DL,
2918                                   getShiftAmountTy(ADD.getValueType())));
2919 
2920     // If we're dividing by a positive value, we're done.  Otherwise, we must
2921     // negate the result.
2922     if (N1C->getAPIntValue().isNonNegative())
2923       return SRA;
2924 
2925     AddToWorklist(SRA.getNode());
2926     return DAG.getNode(ISD::SUB, DL, VT, DAG.getConstant(0, DL, VT), SRA);
2927   }
2928 
2929   // If integer divide is expensive and we satisfy the requirements, emit an
2930   // alternate sequence.  Targets may check function attributes for size/speed
2931   // trade-offs.
2932   AttributeList Attr = DAG.getMachineFunction().getFunction()->getAttributes();
2933   if (N1C && !TLI.isIntDivCheap(N->getValueType(0), Attr))
2934     if (SDValue Op = BuildSDIV(N))
2935       return Op;
2936 
2937   // sdiv, srem -> sdivrem
2938   // If the divisor is constant, then return DIVREM only if isIntDivCheap() is
2939   // true.  Otherwise, we break the simplification logic in visitREM().
2940   if (!N1C || TLI.isIntDivCheap(N->getValueType(0), Attr))
2941     if (SDValue DivRem = useDivRem(N))
2942         return DivRem;
2943 
2944   return SDValue();
2945 }
2946 
2947 SDValue DAGCombiner::visitUDIV(SDNode *N) {
2948   SDValue N0 = N->getOperand(0);
2949   SDValue N1 = N->getOperand(1);
2950   EVT VT = N->getValueType(0);
2951 
2952   // fold vector ops
2953   if (VT.isVector())
2954     if (SDValue FoldedVOp = SimplifyVBinOp(N))
2955       return FoldedVOp;
2956 
2957   SDLoc DL(N);
2958 
2959   // fold (udiv c1, c2) -> c1/c2
2960   ConstantSDNode *N0C = isConstOrConstSplat(N0);
2961   ConstantSDNode *N1C = isConstOrConstSplat(N1);
2962   if (N0C && N1C)
2963     if (SDValue Folded = DAG.FoldConstantArithmetic(ISD::UDIV, DL, VT,
2964                                                     N0C, N1C))
2965       return Folded;
2966 
2967   if (SDValue V = simplifyDivRem(N, DAG))
2968     return V;
2969 
2970   if (SDValue NewSel = foldBinOpIntoSelect(N))
2971     return NewSel;
2972 
2973   // fold (udiv x, (1 << c)) -> x >>u c
2974   if (isConstantOrConstantVector(N1, /*NoOpaques*/ true) &&
2975       DAG.isKnownToBeAPowerOfTwo(N1)) {
2976     SDValue LogBase2 = BuildLogBase2(N1, DL);
2977     AddToWorklist(LogBase2.getNode());
2978 
2979     EVT ShiftVT = getShiftAmountTy(N0.getValueType());
2980     SDValue Trunc = DAG.getZExtOrTrunc(LogBase2, DL, ShiftVT);
2981     AddToWorklist(Trunc.getNode());
2982     return DAG.getNode(ISD::SRL, DL, VT, N0, Trunc);
2983   }
2984 
2985   // fold (udiv x, (shl c, y)) -> x >>u (log2(c)+y) iff c is power of 2
2986   if (N1.getOpcode() == ISD::SHL) {
2987     SDValue N10 = N1.getOperand(0);
2988     if (isConstantOrConstantVector(N10, /*NoOpaques*/ true) &&
2989         DAG.isKnownToBeAPowerOfTwo(N10)) {
2990       SDValue LogBase2 = BuildLogBase2(N10, DL);
2991       AddToWorklist(LogBase2.getNode());
2992 
2993       EVT ADDVT = N1.getOperand(1).getValueType();
2994       SDValue Trunc = DAG.getZExtOrTrunc(LogBase2, DL, ADDVT);
2995       AddToWorklist(Trunc.getNode());
2996       SDValue Add = DAG.getNode(ISD::ADD, DL, ADDVT, N1.getOperand(1), Trunc);
2997       AddToWorklist(Add.getNode());
2998       return DAG.getNode(ISD::SRL, DL, VT, N0, Add);
2999     }
3000   }
3001 
3002   // fold (udiv x, c) -> alternate
3003   AttributeList Attr = DAG.getMachineFunction().getFunction()->getAttributes();
3004   if (N1C && !TLI.isIntDivCheap(N->getValueType(0), Attr))
3005     if (SDValue Op = BuildUDIV(N))
3006       return Op;
3007 
3008   // sdiv, srem -> sdivrem
3009   // If the divisor is constant, then return DIVREM only if isIntDivCheap() is
3010   // true.  Otherwise, we break the simplification logic in visitREM().
3011   if (!N1C || TLI.isIntDivCheap(N->getValueType(0), Attr))
3012     if (SDValue DivRem = useDivRem(N))
3013         return DivRem;
3014 
3015   return SDValue();
3016 }
3017 
3018 // handles ISD::SREM and ISD::UREM
3019 SDValue DAGCombiner::visitREM(SDNode *N) {
3020   unsigned Opcode = N->getOpcode();
3021   SDValue N0 = N->getOperand(0);
3022   SDValue N1 = N->getOperand(1);
3023   EVT VT = N->getValueType(0);
3024   bool isSigned = (Opcode == ISD::SREM);
3025   SDLoc DL(N);
3026 
3027   // fold (rem c1, c2) -> c1%c2
3028   ConstantSDNode *N0C = isConstOrConstSplat(N0);
3029   ConstantSDNode *N1C = isConstOrConstSplat(N1);
3030   if (N0C && N1C)
3031     if (SDValue Folded = DAG.FoldConstantArithmetic(Opcode, DL, VT, N0C, N1C))
3032       return Folded;
3033 
3034   if (SDValue V = simplifyDivRem(N, DAG))
3035     return V;
3036 
3037   if (SDValue NewSel = foldBinOpIntoSelect(N))
3038     return NewSel;
3039 
3040   if (isSigned) {
3041     // If we know the sign bits of both operands are zero, strength reduce to a
3042     // urem instead.  Handles (X & 0x0FFFFFFF) %s 16 -> X&15
3043     if (DAG.SignBitIsZero(N1) && DAG.SignBitIsZero(N0))
3044       return DAG.getNode(ISD::UREM, DL, VT, N0, N1);
3045   } else {
3046     SDValue NegOne = DAG.getAllOnesConstant(DL, VT);
3047     if (DAG.isKnownToBeAPowerOfTwo(N1)) {
3048       // fold (urem x, pow2) -> (and x, pow2-1)
3049       SDValue Add = DAG.getNode(ISD::ADD, DL, VT, N1, NegOne);
3050       AddToWorklist(Add.getNode());
3051       return DAG.getNode(ISD::AND, DL, VT, N0, Add);
3052     }
3053     if (N1.getOpcode() == ISD::SHL &&
3054         DAG.isKnownToBeAPowerOfTwo(N1.getOperand(0))) {
3055       // fold (urem x, (shl pow2, y)) -> (and x, (add (shl pow2, y), -1))
3056       SDValue Add = DAG.getNode(ISD::ADD, DL, VT, N1, NegOne);
3057       AddToWorklist(Add.getNode());
3058       return DAG.getNode(ISD::AND, DL, VT, N0, Add);
3059     }
3060   }
3061 
3062   AttributeList Attr = DAG.getMachineFunction().getFunction()->getAttributes();
3063 
3064   // If X/C can be simplified by the division-by-constant logic, lower
3065   // X%C to the equivalent of X-X/C*C.
3066   // To avoid mangling nodes, this simplification requires that the combine()
3067   // call for the speculative DIV must not cause a DIVREM conversion.  We guard
3068   // against this by skipping the simplification if isIntDivCheap().  When
3069   // div is not cheap, combine will not return a DIVREM.  Regardless,
3070   // checking cheapness here makes sense since the simplification results in
3071   // fatter code.
3072   if (N1C && !N1C->isNullValue() && !TLI.isIntDivCheap(VT, Attr)) {
3073     unsigned DivOpcode = isSigned ? ISD::SDIV : ISD::UDIV;
3074     SDValue Div = DAG.getNode(DivOpcode, DL, VT, N0, N1);
3075     AddToWorklist(Div.getNode());
3076     SDValue OptimizedDiv = combine(Div.getNode());
3077     if (OptimizedDiv.getNode() && OptimizedDiv.getNode() != Div.getNode()) {
3078       assert((OptimizedDiv.getOpcode() != ISD::UDIVREM) &&
3079              (OptimizedDiv.getOpcode() != ISD::SDIVREM));
3080       SDValue Mul = DAG.getNode(ISD::MUL, DL, VT, OptimizedDiv, N1);
3081       SDValue Sub = DAG.getNode(ISD::SUB, DL, VT, N0, Mul);
3082       AddToWorklist(Mul.getNode());
3083       return Sub;
3084     }
3085   }
3086 
3087   // sdiv, srem -> sdivrem
3088   if (SDValue DivRem = useDivRem(N))
3089     return DivRem.getValue(1);
3090 
3091   return SDValue();
3092 }
3093 
3094 SDValue DAGCombiner::visitMULHS(SDNode *N) {
3095   SDValue N0 = N->getOperand(0);
3096   SDValue N1 = N->getOperand(1);
3097   EVT VT = N->getValueType(0);
3098   SDLoc DL(N);
3099 
3100   // fold (mulhs x, 0) -> 0
3101   if (isNullConstant(N1))
3102     return N1;
3103   // fold (mulhs x, 1) -> (sra x, size(x)-1)
3104   if (isOneConstant(N1)) {
3105     SDLoc DL(N);
3106     return DAG.getNode(ISD::SRA, DL, N0.getValueType(), N0,
3107                        DAG.getConstant(N0.getValueSizeInBits() - 1, DL,
3108                                        getShiftAmountTy(N0.getValueType())));
3109   }
3110   // fold (mulhs x, undef) -> 0
3111   if (N0.isUndef() || N1.isUndef())
3112     return DAG.getConstant(0, SDLoc(N), VT);
3113 
3114   // If the type twice as wide is legal, transform the mulhs to a wider multiply
3115   // plus a shift.
3116   if (VT.isSimple() && !VT.isVector()) {
3117     MVT Simple = VT.getSimpleVT();
3118     unsigned SimpleSize = Simple.getSizeInBits();
3119     EVT NewVT = EVT::getIntegerVT(*DAG.getContext(), SimpleSize*2);
3120     if (TLI.isOperationLegal(ISD::MUL, NewVT)) {
3121       N0 = DAG.getNode(ISD::SIGN_EXTEND, DL, NewVT, N0);
3122       N1 = DAG.getNode(ISD::SIGN_EXTEND, DL, NewVT, N1);
3123       N1 = DAG.getNode(ISD::MUL, DL, NewVT, N0, N1);
3124       N1 = DAG.getNode(ISD::SRL, DL, NewVT, N1,
3125             DAG.getConstant(SimpleSize, DL,
3126                             getShiftAmountTy(N1.getValueType())));
3127       return DAG.getNode(ISD::TRUNCATE, DL, VT, N1);
3128     }
3129   }
3130 
3131   return SDValue();
3132 }
3133 
3134 SDValue DAGCombiner::visitMULHU(SDNode *N) {
3135   SDValue N0 = N->getOperand(0);
3136   SDValue N1 = N->getOperand(1);
3137   EVT VT = N->getValueType(0);
3138   SDLoc DL(N);
3139 
3140   // fold (mulhu x, 0) -> 0
3141   if (isNullConstant(N1))
3142     return N1;
3143   // fold (mulhu x, 1) -> 0
3144   if (isOneConstant(N1))
3145     return DAG.getConstant(0, DL, N0.getValueType());
3146   // fold (mulhu x, undef) -> 0
3147   if (N0.isUndef() || N1.isUndef())
3148     return DAG.getConstant(0, DL, VT);
3149 
3150   // If the type twice as wide is legal, transform the mulhu to a wider multiply
3151   // plus a shift.
3152   if (VT.isSimple() && !VT.isVector()) {
3153     MVT Simple = VT.getSimpleVT();
3154     unsigned SimpleSize = Simple.getSizeInBits();
3155     EVT NewVT = EVT::getIntegerVT(*DAG.getContext(), SimpleSize*2);
3156     if (TLI.isOperationLegal(ISD::MUL, NewVT)) {
3157       N0 = DAG.getNode(ISD::ZERO_EXTEND, DL, NewVT, N0);
3158       N1 = DAG.getNode(ISD::ZERO_EXTEND, DL, NewVT, N1);
3159       N1 = DAG.getNode(ISD::MUL, DL, NewVT, N0, N1);
3160       N1 = DAG.getNode(ISD::SRL, DL, NewVT, N1,
3161             DAG.getConstant(SimpleSize, DL,
3162                             getShiftAmountTy(N1.getValueType())));
3163       return DAG.getNode(ISD::TRUNCATE, DL, VT, N1);
3164     }
3165   }
3166 
3167   return SDValue();
3168 }
3169 
3170 /// Perform optimizations common to nodes that compute two values. LoOp and HiOp
3171 /// give the opcodes for the two computations that are being performed. Return
3172 /// true if a simplification was made.
3173 SDValue DAGCombiner::SimplifyNodeWithTwoResults(SDNode *N, unsigned LoOp,
3174                                                 unsigned HiOp) {
3175   // If the high half is not needed, just compute the low half.
3176   bool HiExists = N->hasAnyUseOfValue(1);
3177   if (!HiExists &&
3178       (!LegalOperations ||
3179        TLI.isOperationLegalOrCustom(LoOp, N->getValueType(0)))) {
3180     SDValue Res = DAG.getNode(LoOp, SDLoc(N), N->getValueType(0), N->ops());
3181     return CombineTo(N, Res, Res);
3182   }
3183 
3184   // If the low half is not needed, just compute the high half.
3185   bool LoExists = N->hasAnyUseOfValue(0);
3186   if (!LoExists &&
3187       (!LegalOperations ||
3188        TLI.isOperationLegal(HiOp, N->getValueType(1)))) {
3189     SDValue Res = DAG.getNode(HiOp, SDLoc(N), N->getValueType(1), N->ops());
3190     return CombineTo(N, Res, Res);
3191   }
3192 
3193   // If both halves are used, return as it is.
3194   if (LoExists && HiExists)
3195     return SDValue();
3196 
3197   // If the two computed results can be simplified separately, separate them.
3198   if (LoExists) {
3199     SDValue Lo = DAG.getNode(LoOp, SDLoc(N), N->getValueType(0), N->ops());
3200     AddToWorklist(Lo.getNode());
3201     SDValue LoOpt = combine(Lo.getNode());
3202     if (LoOpt.getNode() && LoOpt.getNode() != Lo.getNode() &&
3203         (!LegalOperations ||
3204          TLI.isOperationLegal(LoOpt.getOpcode(), LoOpt.getValueType())))
3205       return CombineTo(N, LoOpt, LoOpt);
3206   }
3207 
3208   if (HiExists) {
3209     SDValue Hi = DAG.getNode(HiOp, SDLoc(N), N->getValueType(1), N->ops());
3210     AddToWorklist(Hi.getNode());
3211     SDValue HiOpt = combine(Hi.getNode());
3212     if (HiOpt.getNode() && HiOpt != Hi &&
3213         (!LegalOperations ||
3214          TLI.isOperationLegal(HiOpt.getOpcode(), HiOpt.getValueType())))
3215       return CombineTo(N, HiOpt, HiOpt);
3216   }
3217 
3218   return SDValue();
3219 }
3220 
3221 SDValue DAGCombiner::visitSMUL_LOHI(SDNode *N) {
3222   if (SDValue Res = SimplifyNodeWithTwoResults(N, ISD::MUL, ISD::MULHS))
3223     return Res;
3224 
3225   EVT VT = N->getValueType(0);
3226   SDLoc DL(N);
3227 
3228   // If the type is twice as wide is legal, transform the mulhu to a wider
3229   // multiply plus a shift.
3230   if (VT.isSimple() && !VT.isVector()) {
3231     MVT Simple = VT.getSimpleVT();
3232     unsigned SimpleSize = Simple.getSizeInBits();
3233     EVT NewVT = EVT::getIntegerVT(*DAG.getContext(), SimpleSize*2);
3234     if (TLI.isOperationLegal(ISD::MUL, NewVT)) {
3235       SDValue Lo = DAG.getNode(ISD::SIGN_EXTEND, DL, NewVT, N->getOperand(0));
3236       SDValue Hi = DAG.getNode(ISD::SIGN_EXTEND, DL, NewVT, N->getOperand(1));
3237       Lo = DAG.getNode(ISD::MUL, DL, NewVT, Lo, Hi);
3238       // Compute the high part as N1.
3239       Hi = DAG.getNode(ISD::SRL, DL, NewVT, Lo,
3240             DAG.getConstant(SimpleSize, DL,
3241                             getShiftAmountTy(Lo.getValueType())));
3242       Hi = DAG.getNode(ISD::TRUNCATE, DL, VT, Hi);
3243       // Compute the low part as N0.
3244       Lo = DAG.getNode(ISD::TRUNCATE, DL, VT, Lo);
3245       return CombineTo(N, Lo, Hi);
3246     }
3247   }
3248 
3249   return SDValue();
3250 }
3251 
3252 SDValue DAGCombiner::visitUMUL_LOHI(SDNode *N) {
3253   if (SDValue Res = SimplifyNodeWithTwoResults(N, ISD::MUL, ISD::MULHU))
3254     return Res;
3255 
3256   EVT VT = N->getValueType(0);
3257   SDLoc DL(N);
3258 
3259   // If the type is twice as wide is legal, transform the mulhu to a wider
3260   // multiply plus a shift.
3261   if (VT.isSimple() && !VT.isVector()) {
3262     MVT Simple = VT.getSimpleVT();
3263     unsigned SimpleSize = Simple.getSizeInBits();
3264     EVT NewVT = EVT::getIntegerVT(*DAG.getContext(), SimpleSize*2);
3265     if (TLI.isOperationLegal(ISD::MUL, NewVT)) {
3266       SDValue Lo = DAG.getNode(ISD::ZERO_EXTEND, DL, NewVT, N->getOperand(0));
3267       SDValue Hi = DAG.getNode(ISD::ZERO_EXTEND, DL, NewVT, N->getOperand(1));
3268       Lo = DAG.getNode(ISD::MUL, DL, NewVT, Lo, Hi);
3269       // Compute the high part as N1.
3270       Hi = DAG.getNode(ISD::SRL, DL, NewVT, Lo,
3271             DAG.getConstant(SimpleSize, DL,
3272                             getShiftAmountTy(Lo.getValueType())));
3273       Hi = DAG.getNode(ISD::TRUNCATE, DL, VT, Hi);
3274       // Compute the low part as N0.
3275       Lo = DAG.getNode(ISD::TRUNCATE, DL, VT, Lo);
3276       return CombineTo(N, Lo, Hi);
3277     }
3278   }
3279 
3280   return SDValue();
3281 }
3282 
3283 SDValue DAGCombiner::visitSMULO(SDNode *N) {
3284   // (smulo x, 2) -> (saddo x, x)
3285   if (ConstantSDNode *C2 = dyn_cast<ConstantSDNode>(N->getOperand(1)))
3286     if (C2->getAPIntValue() == 2)
3287       return DAG.getNode(ISD::SADDO, SDLoc(N), N->getVTList(),
3288                          N->getOperand(0), N->getOperand(0));
3289 
3290   return SDValue();
3291 }
3292 
3293 SDValue DAGCombiner::visitUMULO(SDNode *N) {
3294   // (umulo x, 2) -> (uaddo x, x)
3295   if (ConstantSDNode *C2 = dyn_cast<ConstantSDNode>(N->getOperand(1)))
3296     if (C2->getAPIntValue() == 2)
3297       return DAG.getNode(ISD::UADDO, SDLoc(N), N->getVTList(),
3298                          N->getOperand(0), N->getOperand(0));
3299 
3300   return SDValue();
3301 }
3302 
3303 SDValue DAGCombiner::visitIMINMAX(SDNode *N) {
3304   SDValue N0 = N->getOperand(0);
3305   SDValue N1 = N->getOperand(1);
3306   EVT VT = N0.getValueType();
3307 
3308   // fold vector ops
3309   if (VT.isVector())
3310     if (SDValue FoldedVOp = SimplifyVBinOp(N))
3311       return FoldedVOp;
3312 
3313   // fold operation with constant operands.
3314   ConstantSDNode *N0C = getAsNonOpaqueConstant(N0);
3315   ConstantSDNode *N1C = getAsNonOpaqueConstant(N1);
3316   if (N0C && N1C)
3317     return DAG.FoldConstantArithmetic(N->getOpcode(), SDLoc(N), VT, N0C, N1C);
3318 
3319   // canonicalize constant to RHS
3320   if (DAG.isConstantIntBuildVectorOrConstantInt(N0) &&
3321      !DAG.isConstantIntBuildVectorOrConstantInt(N1))
3322     return DAG.getNode(N->getOpcode(), SDLoc(N), VT, N1, N0);
3323 
3324   return SDValue();
3325 }
3326 
3327 /// If this is a binary operator with two operands of the same opcode, try to
3328 /// simplify it.
3329 SDValue DAGCombiner::SimplifyBinOpWithSameOpcodeHands(SDNode *N) {
3330   SDValue N0 = N->getOperand(0), N1 = N->getOperand(1);
3331   EVT VT = N0.getValueType();
3332   assert(N0.getOpcode() == N1.getOpcode() && "Bad input!");
3333 
3334   // Bail early if none of these transforms apply.
3335   if (N0.getNumOperands() == 0) return SDValue();
3336 
3337   // For each of OP in AND/OR/XOR:
3338   // fold (OP (zext x), (zext y)) -> (zext (OP x, y))
3339   // fold (OP (sext x), (sext y)) -> (sext (OP x, y))
3340   // fold (OP (aext x), (aext y)) -> (aext (OP x, y))
3341   // fold (OP (bswap x), (bswap y)) -> (bswap (OP x, y))
3342   // fold (OP (trunc x), (trunc y)) -> (trunc (OP x, y)) (if trunc isn't free)
3343   //
3344   // do not sink logical op inside of a vector extend, since it may combine
3345   // into a vsetcc.
3346   EVT Op0VT = N0.getOperand(0).getValueType();
3347   if ((N0.getOpcode() == ISD::ZERO_EXTEND ||
3348        N0.getOpcode() == ISD::SIGN_EXTEND ||
3349        N0.getOpcode() == ISD::BSWAP ||
3350        // Avoid infinite looping with PromoteIntBinOp.
3351        (N0.getOpcode() == ISD::ANY_EXTEND &&
3352         (!LegalTypes || TLI.isTypeDesirableForOp(N->getOpcode(), Op0VT))) ||
3353        (N0.getOpcode() == ISD::TRUNCATE &&
3354         (!TLI.isZExtFree(VT, Op0VT) ||
3355          !TLI.isTruncateFree(Op0VT, VT)) &&
3356         TLI.isTypeLegal(Op0VT))) &&
3357       !VT.isVector() &&
3358       Op0VT == N1.getOperand(0).getValueType() &&
3359       (!LegalOperations || TLI.isOperationLegal(N->getOpcode(), Op0VT))) {
3360     SDValue ORNode = DAG.getNode(N->getOpcode(), SDLoc(N0),
3361                                  N0.getOperand(0).getValueType(),
3362                                  N0.getOperand(0), N1.getOperand(0));
3363     AddToWorklist(ORNode.getNode());
3364     return DAG.getNode(N0.getOpcode(), SDLoc(N), VT, ORNode);
3365   }
3366 
3367   // For each of OP in SHL/SRL/SRA/AND...
3368   //   fold (and (OP x, z), (OP y, z)) -> (OP (and x, y), z)
3369   //   fold (or  (OP x, z), (OP y, z)) -> (OP (or  x, y), z)
3370   //   fold (xor (OP x, z), (OP y, z)) -> (OP (xor x, y), z)
3371   if ((N0.getOpcode() == ISD::SHL || N0.getOpcode() == ISD::SRL ||
3372        N0.getOpcode() == ISD::SRA || N0.getOpcode() == ISD::AND) &&
3373       N0.getOperand(1) == N1.getOperand(1)) {
3374     SDValue ORNode = DAG.getNode(N->getOpcode(), SDLoc(N0),
3375                                  N0.getOperand(0).getValueType(),
3376                                  N0.getOperand(0), N1.getOperand(0));
3377     AddToWorklist(ORNode.getNode());
3378     return DAG.getNode(N0.getOpcode(), SDLoc(N), VT,
3379                        ORNode, N0.getOperand(1));
3380   }
3381 
3382   // Simplify xor/and/or (bitcast(A), bitcast(B)) -> bitcast(op (A,B))
3383   // Only perform this optimization up until type legalization, before
3384   // LegalizeVectorOprs. LegalizeVectorOprs promotes vector operations by
3385   // adding bitcasts. For example (xor v4i32) is promoted to (v2i64), and
3386   // we don't want to undo this promotion.
3387   // We also handle SCALAR_TO_VECTOR because xor/or/and operations are cheaper
3388   // on scalars.
3389   if ((N0.getOpcode() == ISD::BITCAST ||
3390        N0.getOpcode() == ISD::SCALAR_TO_VECTOR) &&
3391        Level <= AfterLegalizeTypes) {
3392     SDValue In0 = N0.getOperand(0);
3393     SDValue In1 = N1.getOperand(0);
3394     EVT In0Ty = In0.getValueType();
3395     EVT In1Ty = In1.getValueType();
3396     SDLoc DL(N);
3397     // If both incoming values are integers, and the original types are the
3398     // same.
3399     if (In0Ty.isInteger() && In1Ty.isInteger() && In0Ty == In1Ty) {
3400       SDValue Op = DAG.getNode(N->getOpcode(), DL, In0Ty, In0, In1);
3401       SDValue BC = DAG.getNode(N0.getOpcode(), DL, VT, Op);
3402       AddToWorklist(Op.getNode());
3403       return BC;
3404     }
3405   }
3406 
3407   // Xor/and/or are indifferent to the swizzle operation (shuffle of one value).
3408   // Simplify xor/and/or (shuff(A), shuff(B)) -> shuff(op (A,B))
3409   // If both shuffles use the same mask, and both shuffle within a single
3410   // vector, then it is worthwhile to move the swizzle after the operation.
3411   // The type-legalizer generates this pattern when loading illegal
3412   // vector types from memory. In many cases this allows additional shuffle
3413   // optimizations.
3414   // There are other cases where moving the shuffle after the xor/and/or
3415   // is profitable even if shuffles don't perform a swizzle.
3416   // If both shuffles use the same mask, and both shuffles have the same first
3417   // or second operand, then it might still be profitable to move the shuffle
3418   // after the xor/and/or operation.
3419   if (N0.getOpcode() == ISD::VECTOR_SHUFFLE && Level < AfterLegalizeDAG) {
3420     ShuffleVectorSDNode *SVN0 = cast<ShuffleVectorSDNode>(N0);
3421     ShuffleVectorSDNode *SVN1 = cast<ShuffleVectorSDNode>(N1);
3422 
3423     assert(N0.getOperand(0).getValueType() == N1.getOperand(0).getValueType() &&
3424            "Inputs to shuffles are not the same type");
3425 
3426     // Check that both shuffles use the same mask. The masks are known to be of
3427     // the same length because the result vector type is the same.
3428     // Check also that shuffles have only one use to avoid introducing extra
3429     // instructions.
3430     if (SVN0->hasOneUse() && SVN1->hasOneUse() &&
3431         SVN0->getMask().equals(SVN1->getMask())) {
3432       SDValue ShOp = N0->getOperand(1);
3433 
3434       // Don't try to fold this node if it requires introducing a
3435       // build vector of all zeros that might be illegal at this stage.
3436       if (N->getOpcode() == ISD::XOR && !ShOp.isUndef()) {
3437         if (!LegalTypes)
3438           ShOp = DAG.getConstant(0, SDLoc(N), VT);
3439         else
3440           ShOp = SDValue();
3441       }
3442 
3443       // (AND (shuf (A, C), shuf (B, C)) -> shuf (AND (A, B), C)
3444       // (OR  (shuf (A, C), shuf (B, C)) -> shuf (OR  (A, B), C)
3445       // (XOR (shuf (A, C), shuf (B, C)) -> shuf (XOR (A, B), V_0)
3446       if (N0.getOperand(1) == N1.getOperand(1) && ShOp.getNode()) {
3447         SDValue NewNode = DAG.getNode(N->getOpcode(), SDLoc(N), VT,
3448                                       N0->getOperand(0), N1->getOperand(0));
3449         AddToWorklist(NewNode.getNode());
3450         return DAG.getVectorShuffle(VT, SDLoc(N), NewNode, ShOp,
3451                                     SVN0->getMask());
3452       }
3453 
3454       // Don't try to fold this node if it requires introducing a
3455       // build vector of all zeros that might be illegal at this stage.
3456       ShOp = N0->getOperand(0);
3457       if (N->getOpcode() == ISD::XOR && !ShOp.isUndef()) {
3458         if (!LegalTypes)
3459           ShOp = DAG.getConstant(0, SDLoc(N), VT);
3460         else
3461           ShOp = SDValue();
3462       }
3463 
3464       // (AND (shuf (C, A), shuf (C, B)) -> shuf (C, AND (A, B))
3465       // (OR  (shuf (C, A), shuf (C, B)) -> shuf (C, OR  (A, B))
3466       // (XOR (shuf (C, A), shuf (C, B)) -> shuf (V_0, XOR (A, B))
3467       if (N0->getOperand(0) == N1->getOperand(0) && ShOp.getNode()) {
3468         SDValue NewNode = DAG.getNode(N->getOpcode(), SDLoc(N), VT,
3469                                       N0->getOperand(1), N1->getOperand(1));
3470         AddToWorklist(NewNode.getNode());
3471         return DAG.getVectorShuffle(VT, SDLoc(N), ShOp, NewNode,
3472                                     SVN0->getMask());
3473       }
3474     }
3475   }
3476 
3477   return SDValue();
3478 }
3479 
3480 /// Try to make (and/or setcc (LL, LR), setcc (RL, RR)) more efficient.
3481 SDValue DAGCombiner::foldLogicOfSetCCs(bool IsAnd, SDValue N0, SDValue N1,
3482                                        const SDLoc &DL) {
3483   SDValue LL, LR, RL, RR, N0CC, N1CC;
3484   if (!isSetCCEquivalent(N0, LL, LR, N0CC) ||
3485       !isSetCCEquivalent(N1, RL, RR, N1CC))
3486     return SDValue();
3487 
3488   assert(N0.getValueType() == N1.getValueType() &&
3489          "Unexpected operand types for bitwise logic op");
3490   assert(LL.getValueType() == LR.getValueType() &&
3491          RL.getValueType() == RR.getValueType() &&
3492          "Unexpected operand types for setcc");
3493 
3494   // If we're here post-legalization or the logic op type is not i1, the logic
3495   // op type must match a setcc result type. Also, all folds require new
3496   // operations on the left and right operands, so those types must match.
3497   EVT VT = N0.getValueType();
3498   EVT OpVT = LL.getValueType();
3499   if (LegalOperations || VT != MVT::i1)
3500     if (VT != getSetCCResultType(OpVT))
3501       return SDValue();
3502   if (OpVT != RL.getValueType())
3503     return SDValue();
3504 
3505   ISD::CondCode CC0 = cast<CondCodeSDNode>(N0CC)->get();
3506   ISD::CondCode CC1 = cast<CondCodeSDNode>(N1CC)->get();
3507   bool IsInteger = OpVT.isInteger();
3508   if (LR == RR && CC0 == CC1 && IsInteger) {
3509     bool IsZero = isNullConstantOrNullSplatConstant(LR);
3510     bool IsNeg1 = isAllOnesConstantOrAllOnesSplatConstant(LR);
3511 
3512     // All bits clear?
3513     bool AndEqZero = IsAnd && CC1 == ISD::SETEQ && IsZero;
3514     // All sign bits clear?
3515     bool AndGtNeg1 = IsAnd && CC1 == ISD::SETGT && IsNeg1;
3516     // Any bits set?
3517     bool OrNeZero = !IsAnd && CC1 == ISD::SETNE && IsZero;
3518     // Any sign bits set?
3519     bool OrLtZero = !IsAnd && CC1 == ISD::SETLT && IsZero;
3520 
3521     // (and (seteq X,  0), (seteq Y,  0)) --> (seteq (or X, Y),  0)
3522     // (and (setgt X, -1), (setgt Y, -1)) --> (setgt (or X, Y), -1)
3523     // (or  (setne X,  0), (setne Y,  0)) --> (setne (or X, Y),  0)
3524     // (or  (setlt X,  0), (setlt Y,  0)) --> (setlt (or X, Y),  0)
3525     if (AndEqZero || AndGtNeg1 || OrNeZero || OrLtZero) {
3526       SDValue Or = DAG.getNode(ISD::OR, SDLoc(N0), OpVT, LL, RL);
3527       AddToWorklist(Or.getNode());
3528       return DAG.getSetCC(DL, VT, Or, LR, CC1);
3529     }
3530 
3531     // All bits set?
3532     bool AndEqNeg1 = IsAnd && CC1 == ISD::SETEQ && IsNeg1;
3533     // All sign bits set?
3534     bool AndLtZero = IsAnd && CC1 == ISD::SETLT && IsZero;
3535     // Any bits clear?
3536     bool OrNeNeg1 = !IsAnd && CC1 == ISD::SETNE && IsNeg1;
3537     // Any sign bits clear?
3538     bool OrGtNeg1 = !IsAnd && CC1 == ISD::SETGT && IsNeg1;
3539 
3540     // (and (seteq X, -1), (seteq Y, -1)) --> (seteq (and X, Y), -1)
3541     // (and (setlt X,  0), (setlt Y,  0)) --> (setlt (and X, Y),  0)
3542     // (or  (setne X, -1), (setne Y, -1)) --> (setne (and X, Y), -1)
3543     // (or  (setgt X, -1), (setgt Y  -1)) --> (setgt (and X, Y), -1)
3544     if (AndEqNeg1 || AndLtZero || OrNeNeg1 || OrGtNeg1) {
3545       SDValue And = DAG.getNode(ISD::AND, SDLoc(N0), OpVT, LL, RL);
3546       AddToWorklist(And.getNode());
3547       return DAG.getSetCC(DL, VT, And, LR, CC1);
3548     }
3549   }
3550 
3551   // TODO: What is the 'or' equivalent of this fold?
3552   // (and (setne X, 0), (setne X, -1)) --> (setuge (add X, 1), 2)
3553   if (IsAnd && LL == RL && CC0 == CC1 && IsInteger && CC0 == ISD::SETNE &&
3554       ((isNullConstant(LR) && isAllOnesConstant(RR)) ||
3555        (isAllOnesConstant(LR) && isNullConstant(RR)))) {
3556     SDValue One = DAG.getConstant(1, DL, OpVT);
3557     SDValue Two = DAG.getConstant(2, DL, OpVT);
3558     SDValue Add = DAG.getNode(ISD::ADD, SDLoc(N0), OpVT, LL, One);
3559     AddToWorklist(Add.getNode());
3560     return DAG.getSetCC(DL, VT, Add, Two, ISD::SETUGE);
3561   }
3562 
3563   // Try more general transforms if the predicates match and the only user of
3564   // the compares is the 'and' or 'or'.
3565   if (IsInteger && TLI.convertSetCCLogicToBitwiseLogic(OpVT) && CC0 == CC1 &&
3566       N0.hasOneUse() && N1.hasOneUse()) {
3567     // and (seteq A, B), (seteq C, D) --> seteq (or (xor A, B), (xor C, D)), 0
3568     // or  (setne A, B), (setne C, D) --> setne (or (xor A, B), (xor C, D)), 0
3569     if ((IsAnd && CC1 == ISD::SETEQ) || (!IsAnd && CC1 == ISD::SETNE)) {
3570       SDValue XorL = DAG.getNode(ISD::XOR, SDLoc(N0), OpVT, LL, LR);
3571       SDValue XorR = DAG.getNode(ISD::XOR, SDLoc(N1), OpVT, RL, RR);
3572       SDValue Or = DAG.getNode(ISD::OR, DL, OpVT, XorL, XorR);
3573       SDValue Zero = DAG.getConstant(0, DL, OpVT);
3574       return DAG.getSetCC(DL, VT, Or, Zero, CC1);
3575     }
3576   }
3577 
3578   // Canonicalize equivalent operands to LL == RL.
3579   if (LL == RR && LR == RL) {
3580     CC1 = ISD::getSetCCSwappedOperands(CC1);
3581     std::swap(RL, RR);
3582   }
3583 
3584   // (and (setcc X, Y, CC0), (setcc X, Y, CC1)) --> (setcc X, Y, NewCC)
3585   // (or  (setcc X, Y, CC0), (setcc X, Y, CC1)) --> (setcc X, Y, NewCC)
3586   if (LL == RL && LR == RR) {
3587     ISD::CondCode NewCC = IsAnd ? ISD::getSetCCAndOperation(CC0, CC1, IsInteger)
3588                                 : ISD::getSetCCOrOperation(CC0, CC1, IsInteger);
3589     if (NewCC != ISD::SETCC_INVALID &&
3590         (!LegalOperations ||
3591          (TLI.isCondCodeLegal(NewCC, LL.getSimpleValueType()) &&
3592           TLI.isOperationLegal(ISD::SETCC, OpVT))))
3593       return DAG.getSetCC(DL, VT, LL, LR, NewCC);
3594   }
3595 
3596   return SDValue();
3597 }
3598 
3599 /// This contains all DAGCombine rules which reduce two values combined by
3600 /// an And operation to a single value. This makes them reusable in the context
3601 /// of visitSELECT(). Rules involving constants are not included as
3602 /// visitSELECT() already handles those cases.
3603 SDValue DAGCombiner::visitANDLike(SDValue N0, SDValue N1, SDNode *N) {
3604   EVT VT = N1.getValueType();
3605   SDLoc DL(N);
3606 
3607   // fold (and x, undef) -> 0
3608   if (N0.isUndef() || N1.isUndef())
3609     return DAG.getConstant(0, DL, VT);
3610 
3611   if (SDValue V = foldLogicOfSetCCs(true, N0, N1, DL))
3612     return V;
3613 
3614   if (N0.getOpcode() == ISD::ADD && N1.getOpcode() == ISD::SRL &&
3615       VT.getSizeInBits() <= 64) {
3616     if (ConstantSDNode *ADDI = dyn_cast<ConstantSDNode>(N0.getOperand(1))) {
3617       APInt ADDC = ADDI->getAPIntValue();
3618       if (!TLI.isLegalAddImmediate(ADDC.getSExtValue())) {
3619         // Look for (and (add x, c1), (lshr y, c2)). If C1 wasn't a legal
3620         // immediate for an add, but it is legal if its top c2 bits are set,
3621         // transform the ADD so the immediate doesn't need to be materialized
3622         // in a register.
3623         if (ConstantSDNode *SRLI = dyn_cast<ConstantSDNode>(N1.getOperand(1))) {
3624           APInt Mask = APInt::getHighBitsSet(VT.getSizeInBits(),
3625                                              SRLI->getZExtValue());
3626           if (DAG.MaskedValueIsZero(N0.getOperand(1), Mask)) {
3627             ADDC |= Mask;
3628             if (TLI.isLegalAddImmediate(ADDC.getSExtValue())) {
3629               SDLoc DL0(N0);
3630               SDValue NewAdd =
3631                 DAG.getNode(ISD::ADD, DL0, VT,
3632                             N0.getOperand(0), DAG.getConstant(ADDC, DL, VT));
3633               CombineTo(N0.getNode(), NewAdd);
3634               // Return N so it doesn't get rechecked!
3635               return SDValue(N, 0);
3636             }
3637           }
3638         }
3639       }
3640     }
3641   }
3642 
3643   // Reduce bit extract of low half of an integer to the narrower type.
3644   // (and (srl i64:x, K), KMask) ->
3645   //   (i64 zero_extend (and (srl (i32 (trunc i64:x)), K)), KMask)
3646   if (N0.getOpcode() == ISD::SRL && N0.hasOneUse()) {
3647     if (ConstantSDNode *CAnd = dyn_cast<ConstantSDNode>(N1)) {
3648       if (ConstantSDNode *CShift = dyn_cast<ConstantSDNode>(N0.getOperand(1))) {
3649         unsigned Size = VT.getSizeInBits();
3650         const APInt &AndMask = CAnd->getAPIntValue();
3651         unsigned ShiftBits = CShift->getZExtValue();
3652 
3653         // Bail out, this node will probably disappear anyway.
3654         if (ShiftBits == 0)
3655           return SDValue();
3656 
3657         unsigned MaskBits = AndMask.countTrailingOnes();
3658         EVT HalfVT = EVT::getIntegerVT(*DAG.getContext(), Size / 2);
3659 
3660         if (AndMask.isMask() &&
3661             // Required bits must not span the two halves of the integer and
3662             // must fit in the half size type.
3663             (ShiftBits + MaskBits <= Size / 2) &&
3664             TLI.isNarrowingProfitable(VT, HalfVT) &&
3665             TLI.isTypeDesirableForOp(ISD::AND, HalfVT) &&
3666             TLI.isTypeDesirableForOp(ISD::SRL, HalfVT) &&
3667             TLI.isTruncateFree(VT, HalfVT) &&
3668             TLI.isZExtFree(HalfVT, VT)) {
3669           // The isNarrowingProfitable is to avoid regressions on PPC and
3670           // AArch64 which match a few 64-bit bit insert / bit extract patterns
3671           // on downstream users of this. Those patterns could probably be
3672           // extended to handle extensions mixed in.
3673 
3674           SDValue SL(N0);
3675           assert(MaskBits <= Size);
3676 
3677           // Extracting the highest bit of the low half.
3678           EVT ShiftVT = TLI.getShiftAmountTy(HalfVT, DAG.getDataLayout());
3679           SDValue Trunc = DAG.getNode(ISD::TRUNCATE, SL, HalfVT,
3680                                       N0.getOperand(0));
3681 
3682           SDValue NewMask = DAG.getConstant(AndMask.trunc(Size / 2), SL, HalfVT);
3683           SDValue ShiftK = DAG.getConstant(ShiftBits, SL, ShiftVT);
3684           SDValue Shift = DAG.getNode(ISD::SRL, SL, HalfVT, Trunc, ShiftK);
3685           SDValue And = DAG.getNode(ISD::AND, SL, HalfVT, Shift, NewMask);
3686           return DAG.getNode(ISD::ZERO_EXTEND, SL, VT, And);
3687         }
3688       }
3689     }
3690   }
3691 
3692   return SDValue();
3693 }
3694 
3695 bool DAGCombiner::isAndLoadExtLoad(ConstantSDNode *AndC, LoadSDNode *LoadN,
3696                                    EVT LoadResultTy, EVT &ExtVT, EVT &LoadedVT,
3697                                    bool &NarrowLoad) {
3698   if (!AndC->getAPIntValue().isMask())
3699     return false;
3700 
3701   unsigned ActiveBits = AndC->getAPIntValue().countTrailingOnes();
3702 
3703   ExtVT = EVT::getIntegerVT(*DAG.getContext(), ActiveBits);
3704   LoadedVT = LoadN->getMemoryVT();
3705 
3706   if (ExtVT == LoadedVT &&
3707       (!LegalOperations ||
3708        TLI.isLoadExtLegal(ISD::ZEXTLOAD, LoadResultTy, ExtVT))) {
3709     // ZEXTLOAD will match without needing to change the size of the value being
3710     // loaded.
3711     NarrowLoad = false;
3712     return true;
3713   }
3714 
3715   // Do not change the width of a volatile load.
3716   if (LoadN->isVolatile())
3717     return false;
3718 
3719   // Do not generate loads of non-round integer types since these can
3720   // be expensive (and would be wrong if the type is not byte sized).
3721   if (!LoadedVT.bitsGT(ExtVT) || !ExtVT.isRound())
3722     return false;
3723 
3724   if (LegalOperations &&
3725       !TLI.isLoadExtLegal(ISD::ZEXTLOAD, LoadResultTy, ExtVT))
3726     return false;
3727 
3728   if (!TLI.shouldReduceLoadWidth(LoadN, ISD::ZEXTLOAD, ExtVT))
3729     return false;
3730 
3731   NarrowLoad = true;
3732   return true;
3733 }
3734 
3735 SDValue DAGCombiner::visitAND(SDNode *N) {
3736   SDValue N0 = N->getOperand(0);
3737   SDValue N1 = N->getOperand(1);
3738   EVT VT = N1.getValueType();
3739 
3740   // x & x --> x
3741   if (N0 == N1)
3742     return N0;
3743 
3744   // fold vector ops
3745   if (VT.isVector()) {
3746     if (SDValue FoldedVOp = SimplifyVBinOp(N))
3747       return FoldedVOp;
3748 
3749     // fold (and x, 0) -> 0, vector edition
3750     if (ISD::isBuildVectorAllZeros(N0.getNode()))
3751       // do not return N0, because undef node may exist in N0
3752       return DAG.getConstant(APInt::getNullValue(N0.getScalarValueSizeInBits()),
3753                              SDLoc(N), N0.getValueType());
3754     if (ISD::isBuildVectorAllZeros(N1.getNode()))
3755       // do not return N1, because undef node may exist in N1
3756       return DAG.getConstant(APInt::getNullValue(N1.getScalarValueSizeInBits()),
3757                              SDLoc(N), N1.getValueType());
3758 
3759     // fold (and x, -1) -> x, vector edition
3760     if (ISD::isBuildVectorAllOnes(N0.getNode()))
3761       return N1;
3762     if (ISD::isBuildVectorAllOnes(N1.getNode()))
3763       return N0;
3764   }
3765 
3766   // fold (and c1, c2) -> c1&c2
3767   ConstantSDNode *N0C = getAsNonOpaqueConstant(N0);
3768   ConstantSDNode *N1C = isConstOrConstSplat(N1);
3769   if (N0C && N1C && !N1C->isOpaque())
3770     return DAG.FoldConstantArithmetic(ISD::AND, SDLoc(N), VT, N0C, N1C);
3771   // canonicalize constant to RHS
3772   if (DAG.isConstantIntBuildVectorOrConstantInt(N0) &&
3773      !DAG.isConstantIntBuildVectorOrConstantInt(N1))
3774     return DAG.getNode(ISD::AND, SDLoc(N), VT, N1, N0);
3775   // fold (and x, -1) -> x
3776   if (isAllOnesConstant(N1))
3777     return N0;
3778   // if (and x, c) is known to be zero, return 0
3779   unsigned BitWidth = VT.getScalarSizeInBits();
3780   if (N1C && DAG.MaskedValueIsZero(SDValue(N, 0),
3781                                    APInt::getAllOnesValue(BitWidth)))
3782     return DAG.getConstant(0, SDLoc(N), VT);
3783 
3784   if (SDValue NewSel = foldBinOpIntoSelect(N))
3785     return NewSel;
3786 
3787   // reassociate and
3788   if (SDValue RAND = ReassociateOps(ISD::AND, SDLoc(N), N0, N1))
3789     return RAND;
3790   // fold (and (or x, C), D) -> D if (C & D) == D
3791   if (N1C && N0.getOpcode() == ISD::OR)
3792     if (ConstantSDNode *ORI = isConstOrConstSplat(N0.getOperand(1)))
3793       if (N1C->getAPIntValue().isSubsetOf(ORI->getAPIntValue()))
3794         return N1;
3795   // fold (and (any_ext V), c) -> (zero_ext V) if 'and' only clears top bits.
3796   if (N1C && N0.getOpcode() == ISD::ANY_EXTEND) {
3797     SDValue N0Op0 = N0.getOperand(0);
3798     APInt Mask = ~N1C->getAPIntValue();
3799     Mask = Mask.trunc(N0Op0.getScalarValueSizeInBits());
3800     if (DAG.MaskedValueIsZero(N0Op0, Mask)) {
3801       SDValue Zext = DAG.getNode(ISD::ZERO_EXTEND, SDLoc(N),
3802                                  N0.getValueType(), N0Op0);
3803 
3804       // Replace uses of the AND with uses of the Zero extend node.
3805       CombineTo(N, Zext);
3806 
3807       // We actually want to replace all uses of the any_extend with the
3808       // zero_extend, to avoid duplicating things.  This will later cause this
3809       // AND to be folded.
3810       CombineTo(N0.getNode(), Zext);
3811       return SDValue(N, 0);   // Return N so it doesn't get rechecked!
3812     }
3813   }
3814   // similarly fold (and (X (load ([non_ext|any_ext|zero_ext] V))), c) ->
3815   // (X (load ([non_ext|zero_ext] V))) if 'and' only clears top bits which must
3816   // already be zero by virtue of the width of the base type of the load.
3817   //
3818   // the 'X' node here can either be nothing or an extract_vector_elt to catch
3819   // more cases.
3820   if ((N0.getOpcode() == ISD::EXTRACT_VECTOR_ELT &&
3821        N0.getValueSizeInBits() == N0.getOperand(0).getScalarValueSizeInBits() &&
3822        N0.getOperand(0).getOpcode() == ISD::LOAD &&
3823        N0.getOperand(0).getResNo() == 0) ||
3824       (N0.getOpcode() == ISD::LOAD && N0.getResNo() == 0)) {
3825     LoadSDNode *Load = cast<LoadSDNode>( (N0.getOpcode() == ISD::LOAD) ?
3826                                          N0 : N0.getOperand(0) );
3827 
3828     // Get the constant (if applicable) the zero'th operand is being ANDed with.
3829     // This can be a pure constant or a vector splat, in which case we treat the
3830     // vector as a scalar and use the splat value.
3831     APInt Constant = APInt::getNullValue(1);
3832     if (const ConstantSDNode *C = dyn_cast<ConstantSDNode>(N1)) {
3833       Constant = C->getAPIntValue();
3834     } else if (BuildVectorSDNode *Vector = dyn_cast<BuildVectorSDNode>(N1)) {
3835       APInt SplatValue, SplatUndef;
3836       unsigned SplatBitSize;
3837       bool HasAnyUndefs;
3838       bool IsSplat = Vector->isConstantSplat(SplatValue, SplatUndef,
3839                                              SplatBitSize, HasAnyUndefs);
3840       if (IsSplat) {
3841         // Undef bits can contribute to a possible optimisation if set, so
3842         // set them.
3843         SplatValue |= SplatUndef;
3844 
3845         // The splat value may be something like "0x00FFFFFF", which means 0 for
3846         // the first vector value and FF for the rest, repeating. We need a mask
3847         // that will apply equally to all members of the vector, so AND all the
3848         // lanes of the constant together.
3849         EVT VT = Vector->getValueType(0);
3850         unsigned BitWidth = VT.getScalarSizeInBits();
3851 
3852         // If the splat value has been compressed to a bitlength lower
3853         // than the size of the vector lane, we need to re-expand it to
3854         // the lane size.
3855         if (BitWidth > SplatBitSize)
3856           for (SplatValue = SplatValue.zextOrTrunc(BitWidth);
3857                SplatBitSize < BitWidth;
3858                SplatBitSize = SplatBitSize * 2)
3859             SplatValue |= SplatValue.shl(SplatBitSize);
3860 
3861         // Make sure that variable 'Constant' is only set if 'SplatBitSize' is a
3862         // multiple of 'BitWidth'. Otherwise, we could propagate a wrong value.
3863         if (SplatBitSize % BitWidth == 0) {
3864           Constant = APInt::getAllOnesValue(BitWidth);
3865           for (unsigned i = 0, n = SplatBitSize/BitWidth; i < n; ++i)
3866             Constant &= SplatValue.lshr(i*BitWidth).zextOrTrunc(BitWidth);
3867         }
3868       }
3869     }
3870 
3871     // If we want to change an EXTLOAD to a ZEXTLOAD, ensure a ZEXTLOAD is
3872     // actually legal and isn't going to get expanded, else this is a false
3873     // optimisation.
3874     bool CanZextLoadProfitably = TLI.isLoadExtLegal(ISD::ZEXTLOAD,
3875                                                     Load->getValueType(0),
3876                                                     Load->getMemoryVT());
3877 
3878     // Resize the constant to the same size as the original memory access before
3879     // extension. If it is still the AllOnesValue then this AND is completely
3880     // unneeded.
3881     Constant = Constant.zextOrTrunc(Load->getMemoryVT().getScalarSizeInBits());
3882 
3883     bool B;
3884     switch (Load->getExtensionType()) {
3885     default: B = false; break;
3886     case ISD::EXTLOAD: B = CanZextLoadProfitably; break;
3887     case ISD::ZEXTLOAD:
3888     case ISD::NON_EXTLOAD: B = true; break;
3889     }
3890 
3891     if (B && Constant.isAllOnesValue()) {
3892       // If the load type was an EXTLOAD, convert to ZEXTLOAD in order to
3893       // preserve semantics once we get rid of the AND.
3894       SDValue NewLoad(Load, 0);
3895 
3896       // Fold the AND away. NewLoad may get replaced immediately.
3897       CombineTo(N, (N0.getNode() == Load) ? NewLoad : N0);
3898 
3899       if (Load->getExtensionType() == ISD::EXTLOAD) {
3900         NewLoad = DAG.getLoad(Load->getAddressingMode(), ISD::ZEXTLOAD,
3901                               Load->getValueType(0), SDLoc(Load),
3902                               Load->getChain(), Load->getBasePtr(),
3903                               Load->getOffset(), Load->getMemoryVT(),
3904                               Load->getMemOperand());
3905         // Replace uses of the EXTLOAD with the new ZEXTLOAD.
3906         if (Load->getNumValues() == 3) {
3907           // PRE/POST_INC loads have 3 values.
3908           SDValue To[] = { NewLoad.getValue(0), NewLoad.getValue(1),
3909                            NewLoad.getValue(2) };
3910           CombineTo(Load, To, 3, true);
3911         } else {
3912           CombineTo(Load, NewLoad.getValue(0), NewLoad.getValue(1));
3913         }
3914       }
3915 
3916       return SDValue(N, 0); // Return N so it doesn't get rechecked!
3917     }
3918   }
3919 
3920   // fold (and (load x), 255) -> (zextload x, i8)
3921   // fold (and (extload x, i16), 255) -> (zextload x, i8)
3922   // fold (and (any_ext (extload x, i16)), 255) -> (zextload x, i8)
3923   if (!VT.isVector() && N1C && (N0.getOpcode() == ISD::LOAD ||
3924                                 (N0.getOpcode() == ISD::ANY_EXTEND &&
3925                                  N0.getOperand(0).getOpcode() == ISD::LOAD))) {
3926     bool HasAnyExt = N0.getOpcode() == ISD::ANY_EXTEND;
3927     LoadSDNode *LN0 = HasAnyExt
3928       ? cast<LoadSDNode>(N0.getOperand(0))
3929       : cast<LoadSDNode>(N0);
3930     if (LN0->getExtensionType() != ISD::SEXTLOAD &&
3931         LN0->isUnindexed() && N0.hasOneUse() && SDValue(LN0, 0).hasOneUse()) {
3932       auto NarrowLoad = false;
3933       EVT LoadResultTy = HasAnyExt ? LN0->getValueType(0) : VT;
3934       EVT ExtVT, LoadedVT;
3935       if (isAndLoadExtLoad(N1C, LN0, LoadResultTy, ExtVT, LoadedVT,
3936                            NarrowLoad)) {
3937         if (!NarrowLoad) {
3938           SDValue NewLoad =
3939             DAG.getExtLoad(ISD::ZEXTLOAD, SDLoc(LN0), LoadResultTy,
3940                            LN0->getChain(), LN0->getBasePtr(), ExtVT,
3941                            LN0->getMemOperand());
3942           AddToWorklist(N);
3943           CombineTo(LN0, NewLoad, NewLoad.getValue(1));
3944           return SDValue(N, 0);   // Return N so it doesn't get rechecked!
3945         } else {
3946           EVT PtrType = LN0->getOperand(1).getValueType();
3947 
3948           unsigned Alignment = LN0->getAlignment();
3949           SDValue NewPtr = LN0->getBasePtr();
3950 
3951           // For big endian targets, we need to add an offset to the pointer
3952           // to load the correct bytes.  For little endian systems, we merely
3953           // need to read fewer bytes from the same pointer.
3954           if (DAG.getDataLayout().isBigEndian()) {
3955             unsigned LVTStoreBytes = LoadedVT.getStoreSize();
3956             unsigned EVTStoreBytes = ExtVT.getStoreSize();
3957             unsigned PtrOff = LVTStoreBytes - EVTStoreBytes;
3958             SDLoc DL(LN0);
3959             NewPtr = DAG.getNode(ISD::ADD, DL, PtrType,
3960                                  NewPtr, DAG.getConstant(PtrOff, DL, PtrType));
3961             Alignment = MinAlign(Alignment, PtrOff);
3962           }
3963 
3964           AddToWorklist(NewPtr.getNode());
3965 
3966           SDValue Load = DAG.getExtLoad(
3967               ISD::ZEXTLOAD, SDLoc(LN0), LoadResultTy, LN0->getChain(), NewPtr,
3968               LN0->getPointerInfo(), ExtVT, Alignment,
3969               LN0->getMemOperand()->getFlags(), LN0->getAAInfo());
3970           AddToWorklist(N);
3971           CombineTo(LN0, Load, Load.getValue(1));
3972           return SDValue(N, 0);   // Return N so it doesn't get rechecked!
3973         }
3974       }
3975     }
3976   }
3977 
3978   if (SDValue Combined = visitANDLike(N0, N1, N))
3979     return Combined;
3980 
3981   // Simplify: (and (op x...), (op y...))  -> (op (and x, y))
3982   if (N0.getOpcode() == N1.getOpcode())
3983     if (SDValue Tmp = SimplifyBinOpWithSameOpcodeHands(N))
3984       return Tmp;
3985 
3986   // Masking the negated extension of a boolean is just the zero-extended
3987   // boolean:
3988   // and (sub 0, zext(bool X)), 1 --> zext(bool X)
3989   // and (sub 0, sext(bool X)), 1 --> zext(bool X)
3990   //
3991   // Note: the SimplifyDemandedBits fold below can make an information-losing
3992   // transform, and then we have no way to find this better fold.
3993   if (N1C && N1C->isOne() && N0.getOpcode() == ISD::SUB) {
3994     if (isNullConstantOrNullSplatConstant(N0.getOperand(0))) {
3995       SDValue SubRHS = N0.getOperand(1);
3996       if (SubRHS.getOpcode() == ISD::ZERO_EXTEND &&
3997           SubRHS.getOperand(0).getScalarValueSizeInBits() == 1)
3998         return SubRHS;
3999       if (SubRHS.getOpcode() == ISD::SIGN_EXTEND &&
4000           SubRHS.getOperand(0).getScalarValueSizeInBits() == 1)
4001         return DAG.getNode(ISD::ZERO_EXTEND, SDLoc(N), VT, SubRHS.getOperand(0));
4002     }
4003   }
4004 
4005   // fold (and (sign_extend_inreg x, i16 to i32), 1) -> (and x, 1)
4006   // fold (and (sra)) -> (and (srl)) when possible.
4007   if (SimplifyDemandedBits(SDValue(N, 0)))
4008     return SDValue(N, 0);
4009 
4010   // fold (zext_inreg (extload x)) -> (zextload x)
4011   if (ISD::isEXTLoad(N0.getNode()) && ISD::isUNINDEXEDLoad(N0.getNode())) {
4012     LoadSDNode *LN0 = cast<LoadSDNode>(N0);
4013     EVT MemVT = LN0->getMemoryVT();
4014     // If we zero all the possible extended bits, then we can turn this into
4015     // a zextload if we are running before legalize or the operation is legal.
4016     unsigned BitWidth = N1.getScalarValueSizeInBits();
4017     if (DAG.MaskedValueIsZero(N1, APInt::getHighBitsSet(BitWidth,
4018                            BitWidth - MemVT.getScalarSizeInBits())) &&
4019         ((!LegalOperations && !LN0->isVolatile()) ||
4020          TLI.isLoadExtLegal(ISD::ZEXTLOAD, VT, MemVT))) {
4021       SDValue ExtLoad = DAG.getExtLoad(ISD::ZEXTLOAD, SDLoc(N0), VT,
4022                                        LN0->getChain(), LN0->getBasePtr(),
4023                                        MemVT, LN0->getMemOperand());
4024       AddToWorklist(N);
4025       CombineTo(N0.getNode(), ExtLoad, ExtLoad.getValue(1));
4026       return SDValue(N, 0);   // Return N so it doesn't get rechecked!
4027     }
4028   }
4029   // fold (zext_inreg (sextload x)) -> (zextload x) iff load has one use
4030   if (ISD::isSEXTLoad(N0.getNode()) && ISD::isUNINDEXEDLoad(N0.getNode()) &&
4031       N0.hasOneUse()) {
4032     LoadSDNode *LN0 = cast<LoadSDNode>(N0);
4033     EVT MemVT = LN0->getMemoryVT();
4034     // If we zero all the possible extended bits, then we can turn this into
4035     // a zextload if we are running before legalize or the operation is legal.
4036     unsigned BitWidth = N1.getScalarValueSizeInBits();
4037     if (DAG.MaskedValueIsZero(N1, APInt::getHighBitsSet(BitWidth,
4038                            BitWidth - MemVT.getScalarSizeInBits())) &&
4039         ((!LegalOperations && !LN0->isVolatile()) ||
4040          TLI.isLoadExtLegal(ISD::ZEXTLOAD, VT, MemVT))) {
4041       SDValue ExtLoad = DAG.getExtLoad(ISD::ZEXTLOAD, SDLoc(N0), VT,
4042                                        LN0->getChain(), LN0->getBasePtr(),
4043                                        MemVT, LN0->getMemOperand());
4044       AddToWorklist(N);
4045       CombineTo(N0.getNode(), ExtLoad, ExtLoad.getValue(1));
4046       return SDValue(N, 0);   // Return N so it doesn't get rechecked!
4047     }
4048   }
4049   // fold (and (or (srl N, 8), (shl N, 8)), 0xffff) -> (srl (bswap N), const)
4050   if (N1C && N1C->getAPIntValue() == 0xffff && N0.getOpcode() == ISD::OR) {
4051     if (SDValue BSwap = MatchBSwapHWordLow(N0.getNode(), N0.getOperand(0),
4052                                            N0.getOperand(1), false))
4053       return BSwap;
4054   }
4055 
4056   return SDValue();
4057 }
4058 
4059 /// Match (a >> 8) | (a << 8) as (bswap a) >> 16.
4060 SDValue DAGCombiner::MatchBSwapHWordLow(SDNode *N, SDValue N0, SDValue N1,
4061                                         bool DemandHighBits) {
4062   if (!LegalOperations)
4063     return SDValue();
4064 
4065   EVT VT = N->getValueType(0);
4066   if (VT != MVT::i64 && VT != MVT::i32 && VT != MVT::i16)
4067     return SDValue();
4068   if (!TLI.isOperationLegalOrCustom(ISD::BSWAP, VT))
4069     return SDValue();
4070 
4071   // Recognize (and (shl a, 8), 0xff00), (and (srl a, 8), 0xff)
4072   bool LookPassAnd0 = false;
4073   bool LookPassAnd1 = false;
4074   if (N0.getOpcode() == ISD::AND && N0.getOperand(0).getOpcode() == ISD::SRL)
4075       std::swap(N0, N1);
4076   if (N1.getOpcode() == ISD::AND && N1.getOperand(0).getOpcode() == ISD::SHL)
4077       std::swap(N0, N1);
4078   if (N0.getOpcode() == ISD::AND) {
4079     if (!N0.getNode()->hasOneUse())
4080       return SDValue();
4081     ConstantSDNode *N01C = dyn_cast<ConstantSDNode>(N0.getOperand(1));
4082     if (!N01C || N01C->getZExtValue() != 0xFF00)
4083       return SDValue();
4084     N0 = N0.getOperand(0);
4085     LookPassAnd0 = true;
4086   }
4087 
4088   if (N1.getOpcode() == ISD::AND) {
4089     if (!N1.getNode()->hasOneUse())
4090       return SDValue();
4091     ConstantSDNode *N11C = dyn_cast<ConstantSDNode>(N1.getOperand(1));
4092     if (!N11C || N11C->getZExtValue() != 0xFF)
4093       return SDValue();
4094     N1 = N1.getOperand(0);
4095     LookPassAnd1 = true;
4096   }
4097 
4098   if (N0.getOpcode() == ISD::SRL && N1.getOpcode() == ISD::SHL)
4099     std::swap(N0, N1);
4100   if (N0.getOpcode() != ISD::SHL || N1.getOpcode() != ISD::SRL)
4101     return SDValue();
4102   if (!N0.getNode()->hasOneUse() || !N1.getNode()->hasOneUse())
4103     return SDValue();
4104 
4105   ConstantSDNode *N01C = dyn_cast<ConstantSDNode>(N0.getOperand(1));
4106   ConstantSDNode *N11C = dyn_cast<ConstantSDNode>(N1.getOperand(1));
4107   if (!N01C || !N11C)
4108     return SDValue();
4109   if (N01C->getZExtValue() != 8 || N11C->getZExtValue() != 8)
4110     return SDValue();
4111 
4112   // Look for (shl (and a, 0xff), 8), (srl (and a, 0xff00), 8)
4113   SDValue N00 = N0->getOperand(0);
4114   if (!LookPassAnd0 && N00.getOpcode() == ISD::AND) {
4115     if (!N00.getNode()->hasOneUse())
4116       return SDValue();
4117     ConstantSDNode *N001C = dyn_cast<ConstantSDNode>(N00.getOperand(1));
4118     if (!N001C || N001C->getZExtValue() != 0xFF)
4119       return SDValue();
4120     N00 = N00.getOperand(0);
4121     LookPassAnd0 = true;
4122   }
4123 
4124   SDValue N10 = N1->getOperand(0);
4125   if (!LookPassAnd1 && N10.getOpcode() == ISD::AND) {
4126     if (!N10.getNode()->hasOneUse())
4127       return SDValue();
4128     ConstantSDNode *N101C = dyn_cast<ConstantSDNode>(N10.getOperand(1));
4129     if (!N101C || N101C->getZExtValue() != 0xFF00)
4130       return SDValue();
4131     N10 = N10.getOperand(0);
4132     LookPassAnd1 = true;
4133   }
4134 
4135   if (N00 != N10)
4136     return SDValue();
4137 
4138   // Make sure everything beyond the low halfword gets set to zero since the SRL
4139   // 16 will clear the top bits.
4140   unsigned OpSizeInBits = VT.getSizeInBits();
4141   if (DemandHighBits && OpSizeInBits > 16) {
4142     // If the left-shift isn't masked out then the only way this is a bswap is
4143     // if all bits beyond the low 8 are 0. In that case the entire pattern
4144     // reduces to a left shift anyway: leave it for other parts of the combiner.
4145     if (!LookPassAnd0)
4146       return SDValue();
4147 
4148     // However, if the right shift isn't masked out then it might be because
4149     // it's not needed. See if we can spot that too.
4150     if (!LookPassAnd1 &&
4151         !DAG.MaskedValueIsZero(
4152             N10, APInt::getHighBitsSet(OpSizeInBits, OpSizeInBits - 16)))
4153       return SDValue();
4154   }
4155 
4156   SDValue Res = DAG.getNode(ISD::BSWAP, SDLoc(N), VT, N00);
4157   if (OpSizeInBits > 16) {
4158     SDLoc DL(N);
4159     Res = DAG.getNode(ISD::SRL, DL, VT, Res,
4160                       DAG.getConstant(OpSizeInBits - 16, DL,
4161                                       getShiftAmountTy(VT)));
4162   }
4163   return Res;
4164 }
4165 
4166 /// Return true if the specified node is an element that makes up a 32-bit
4167 /// packed halfword byteswap.
4168 /// ((x & 0x000000ff) << 8) |
4169 /// ((x & 0x0000ff00) >> 8) |
4170 /// ((x & 0x00ff0000) << 8) |
4171 /// ((x & 0xff000000) >> 8)
4172 static bool isBSwapHWordElement(SDValue N, MutableArrayRef<SDNode *> Parts) {
4173   if (!N.getNode()->hasOneUse())
4174     return false;
4175 
4176   unsigned Opc = N.getOpcode();
4177   if (Opc != ISD::AND && Opc != ISD::SHL && Opc != ISD::SRL)
4178     return false;
4179 
4180   SDValue N0 = N.getOperand(0);
4181   unsigned Opc0 = N0.getOpcode();
4182   if (Opc0 != ISD::AND && Opc0 != ISD::SHL && Opc0 != ISD::SRL)
4183     return false;
4184 
4185   ConstantSDNode *N1C = nullptr;
4186   // SHL or SRL: look upstream for AND mask operand
4187   if (Opc == ISD::AND)
4188     N1C = dyn_cast<ConstantSDNode>(N.getOperand(1));
4189   else if (Opc0 == ISD::AND)
4190     N1C = dyn_cast<ConstantSDNode>(N0.getOperand(1));
4191   if (!N1C)
4192     return false;
4193 
4194   unsigned MaskByteOffset;
4195   switch (N1C->getZExtValue()) {
4196   default:
4197     return false;
4198   case 0xFF:       MaskByteOffset = 0; break;
4199   case 0xFF00:     MaskByteOffset = 1; break;
4200   case 0xFF0000:   MaskByteOffset = 2; break;
4201   case 0xFF000000: MaskByteOffset = 3; break;
4202   }
4203 
4204   // Look for (x & 0xff) << 8 as well as ((x << 8) & 0xff00).
4205   if (Opc == ISD::AND) {
4206     if (MaskByteOffset == 0 || MaskByteOffset == 2) {
4207       // (x >> 8) & 0xff
4208       // (x >> 8) & 0xff0000
4209       if (Opc0 != ISD::SRL)
4210         return false;
4211       ConstantSDNode *C = dyn_cast<ConstantSDNode>(N0.getOperand(1));
4212       if (!C || C->getZExtValue() != 8)
4213         return false;
4214     } else {
4215       // (x << 8) & 0xff00
4216       // (x << 8) & 0xff000000
4217       if (Opc0 != ISD::SHL)
4218         return false;
4219       ConstantSDNode *C = dyn_cast<ConstantSDNode>(N0.getOperand(1));
4220       if (!C || C->getZExtValue() != 8)
4221         return false;
4222     }
4223   } else if (Opc == ISD::SHL) {
4224     // (x & 0xff) << 8
4225     // (x & 0xff0000) << 8
4226     if (MaskByteOffset != 0 && MaskByteOffset != 2)
4227       return false;
4228     ConstantSDNode *C = dyn_cast<ConstantSDNode>(N.getOperand(1));
4229     if (!C || C->getZExtValue() != 8)
4230       return false;
4231   } else { // Opc == ISD::SRL
4232     // (x & 0xff00) >> 8
4233     // (x & 0xff000000) >> 8
4234     if (MaskByteOffset != 1 && MaskByteOffset != 3)
4235       return false;
4236     ConstantSDNode *C = dyn_cast<ConstantSDNode>(N.getOperand(1));
4237     if (!C || C->getZExtValue() != 8)
4238       return false;
4239   }
4240 
4241   if (Parts[MaskByteOffset])
4242     return false;
4243 
4244   Parts[MaskByteOffset] = N0.getOperand(0).getNode();
4245   return true;
4246 }
4247 
4248 /// Match a 32-bit packed halfword bswap. That is
4249 /// ((x & 0x000000ff) << 8) |
4250 /// ((x & 0x0000ff00) >> 8) |
4251 /// ((x & 0x00ff0000) << 8) |
4252 /// ((x & 0xff000000) >> 8)
4253 /// => (rotl (bswap x), 16)
4254 SDValue DAGCombiner::MatchBSwapHWord(SDNode *N, SDValue N0, SDValue N1) {
4255   if (!LegalOperations)
4256     return SDValue();
4257 
4258   EVT VT = N->getValueType(0);
4259   if (VT != MVT::i32)
4260     return SDValue();
4261   if (!TLI.isOperationLegalOrCustom(ISD::BSWAP, VT))
4262     return SDValue();
4263 
4264   // Look for either
4265   // (or (or (and), (and)), (or (and), (and)))
4266   // (or (or (or (and), (and)), (and)), (and))
4267   if (N0.getOpcode() != ISD::OR)
4268     return SDValue();
4269   SDValue N00 = N0.getOperand(0);
4270   SDValue N01 = N0.getOperand(1);
4271   SDNode *Parts[4] = {};
4272 
4273   if (N1.getOpcode() == ISD::OR &&
4274       N00.getNumOperands() == 2 && N01.getNumOperands() == 2) {
4275     // (or (or (and), (and)), (or (and), (and)))
4276     if (!isBSwapHWordElement(N00, Parts))
4277       return SDValue();
4278 
4279     if (!isBSwapHWordElement(N01, Parts))
4280       return SDValue();
4281     SDValue N10 = N1.getOperand(0);
4282     if (!isBSwapHWordElement(N10, Parts))
4283       return SDValue();
4284     SDValue N11 = N1.getOperand(1);
4285     if (!isBSwapHWordElement(N11, Parts))
4286       return SDValue();
4287   } else {
4288     // (or (or (or (and), (and)), (and)), (and))
4289     if (!isBSwapHWordElement(N1, Parts))
4290       return SDValue();
4291     if (!isBSwapHWordElement(N01, Parts))
4292       return SDValue();
4293     if (N00.getOpcode() != ISD::OR)
4294       return SDValue();
4295     SDValue N000 = N00.getOperand(0);
4296     if (!isBSwapHWordElement(N000, Parts))
4297       return SDValue();
4298     SDValue N001 = N00.getOperand(1);
4299     if (!isBSwapHWordElement(N001, Parts))
4300       return SDValue();
4301   }
4302 
4303   // Make sure the parts are all coming from the same node.
4304   if (Parts[0] != Parts[1] || Parts[0] != Parts[2] || Parts[0] != Parts[3])
4305     return SDValue();
4306 
4307   SDLoc DL(N);
4308   SDValue BSwap = DAG.getNode(ISD::BSWAP, DL, VT,
4309                               SDValue(Parts[0], 0));
4310 
4311   // Result of the bswap should be rotated by 16. If it's not legal, then
4312   // do  (x << 16) | (x >> 16).
4313   SDValue ShAmt = DAG.getConstant(16, DL, getShiftAmountTy(VT));
4314   if (TLI.isOperationLegalOrCustom(ISD::ROTL, VT))
4315     return DAG.getNode(ISD::ROTL, DL, VT, BSwap, ShAmt);
4316   if (TLI.isOperationLegalOrCustom(ISD::ROTR, VT))
4317     return DAG.getNode(ISD::ROTR, DL, VT, BSwap, ShAmt);
4318   return DAG.getNode(ISD::OR, DL, VT,
4319                      DAG.getNode(ISD::SHL, DL, VT, BSwap, ShAmt),
4320                      DAG.getNode(ISD::SRL, DL, VT, BSwap, ShAmt));
4321 }
4322 
4323 /// This contains all DAGCombine rules which reduce two values combined by
4324 /// an Or operation to a single value \see visitANDLike().
4325 SDValue DAGCombiner::visitORLike(SDValue N0, SDValue N1, SDNode *N) {
4326   EVT VT = N1.getValueType();
4327   SDLoc DL(N);
4328 
4329   // fold (or x, undef) -> -1
4330   if (!LegalOperations && (N0.isUndef() || N1.isUndef()))
4331     return DAG.getAllOnesConstant(DL, VT);
4332 
4333   if (SDValue V = foldLogicOfSetCCs(false, N0, N1, DL))
4334     return V;
4335 
4336   // (or (and X, C1), (and Y, C2))  -> (and (or X, Y), C3) if possible.
4337   if (N0.getOpcode() == ISD::AND && N1.getOpcode() == ISD::AND &&
4338       // Don't increase # computations.
4339       (N0.getNode()->hasOneUse() || N1.getNode()->hasOneUse())) {
4340     // We can only do this xform if we know that bits from X that are set in C2
4341     // but not in C1 are already zero.  Likewise for Y.
4342     if (const ConstantSDNode *N0O1C =
4343         getAsNonOpaqueConstant(N0.getOperand(1))) {
4344       if (const ConstantSDNode *N1O1C =
4345           getAsNonOpaqueConstant(N1.getOperand(1))) {
4346         // We can only do this xform if we know that bits from X that are set in
4347         // C2 but not in C1 are already zero.  Likewise for Y.
4348         const APInt &LHSMask = N0O1C->getAPIntValue();
4349         const APInt &RHSMask = N1O1C->getAPIntValue();
4350 
4351         if (DAG.MaskedValueIsZero(N0.getOperand(0), RHSMask&~LHSMask) &&
4352             DAG.MaskedValueIsZero(N1.getOperand(0), LHSMask&~RHSMask)) {
4353           SDValue X = DAG.getNode(ISD::OR, SDLoc(N0), VT,
4354                                   N0.getOperand(0), N1.getOperand(0));
4355           return DAG.getNode(ISD::AND, DL, VT, X,
4356                              DAG.getConstant(LHSMask | RHSMask, DL, VT));
4357         }
4358       }
4359     }
4360   }
4361 
4362   // (or (and X, M), (and X, N)) -> (and X, (or M, N))
4363   if (N0.getOpcode() == ISD::AND &&
4364       N1.getOpcode() == ISD::AND &&
4365       N0.getOperand(0) == N1.getOperand(0) &&
4366       // Don't increase # computations.
4367       (N0.getNode()->hasOneUse() || N1.getNode()->hasOneUse())) {
4368     SDValue X = DAG.getNode(ISD::OR, SDLoc(N0), VT,
4369                             N0.getOperand(1), N1.getOperand(1));
4370     return DAG.getNode(ISD::AND, DL, VT, N0.getOperand(0), X);
4371   }
4372 
4373   return SDValue();
4374 }
4375 
4376 SDValue DAGCombiner::visitOR(SDNode *N) {
4377   SDValue N0 = N->getOperand(0);
4378   SDValue N1 = N->getOperand(1);
4379   EVT VT = N1.getValueType();
4380 
4381   // x | x --> x
4382   if (N0 == N1)
4383     return N0;
4384 
4385   // fold vector ops
4386   if (VT.isVector()) {
4387     if (SDValue FoldedVOp = SimplifyVBinOp(N))
4388       return FoldedVOp;
4389 
4390     // fold (or x, 0) -> x, vector edition
4391     if (ISD::isBuildVectorAllZeros(N0.getNode()))
4392       return N1;
4393     if (ISD::isBuildVectorAllZeros(N1.getNode()))
4394       return N0;
4395 
4396     // fold (or x, -1) -> -1, vector edition
4397     if (ISD::isBuildVectorAllOnes(N0.getNode()))
4398       // do not return N0, because undef node may exist in N0
4399       return DAG.getAllOnesConstant(SDLoc(N), N0.getValueType());
4400     if (ISD::isBuildVectorAllOnes(N1.getNode()))
4401       // do not return N1, because undef node may exist in N1
4402       return DAG.getAllOnesConstant(SDLoc(N), N1.getValueType());
4403 
4404     // fold (or (shuf A, V_0, MA), (shuf B, V_0, MB)) -> (shuf A, B, Mask)
4405     // Do this only if the resulting shuffle is legal.
4406     if (isa<ShuffleVectorSDNode>(N0) &&
4407         isa<ShuffleVectorSDNode>(N1) &&
4408         // Avoid folding a node with illegal type.
4409         TLI.isTypeLegal(VT)) {
4410       bool ZeroN00 = ISD::isBuildVectorAllZeros(N0.getOperand(0).getNode());
4411       bool ZeroN01 = ISD::isBuildVectorAllZeros(N0.getOperand(1).getNode());
4412       bool ZeroN10 = ISD::isBuildVectorAllZeros(N1.getOperand(0).getNode());
4413       bool ZeroN11 = ISD::isBuildVectorAllZeros(N1.getOperand(1).getNode());
4414       // Ensure both shuffles have a zero input.
4415       if ((ZeroN00 != ZeroN01) && (ZeroN10 != ZeroN11)) {
4416         assert((!ZeroN00 || !ZeroN01) && "Both inputs zero!");
4417         assert((!ZeroN10 || !ZeroN11) && "Both inputs zero!");
4418         const ShuffleVectorSDNode *SV0 = cast<ShuffleVectorSDNode>(N0);
4419         const ShuffleVectorSDNode *SV1 = cast<ShuffleVectorSDNode>(N1);
4420         bool CanFold = true;
4421         int NumElts = VT.getVectorNumElements();
4422         SmallVector<int, 4> Mask(NumElts);
4423 
4424         for (int i = 0; i != NumElts; ++i) {
4425           int M0 = SV0->getMaskElt(i);
4426           int M1 = SV1->getMaskElt(i);
4427 
4428           // Determine if either index is pointing to a zero vector.
4429           bool M0Zero = M0 < 0 || (ZeroN00 == (M0 < NumElts));
4430           bool M1Zero = M1 < 0 || (ZeroN10 == (M1 < NumElts));
4431 
4432           // If one element is zero and the otherside is undef, keep undef.
4433           // This also handles the case that both are undef.
4434           if ((M0Zero && M1 < 0) || (M1Zero && M0 < 0)) {
4435             Mask[i] = -1;
4436             continue;
4437           }
4438 
4439           // Make sure only one of the elements is zero.
4440           if (M0Zero == M1Zero) {
4441             CanFold = false;
4442             break;
4443           }
4444 
4445           assert((M0 >= 0 || M1 >= 0) && "Undef index!");
4446 
4447           // We have a zero and non-zero element. If the non-zero came from
4448           // SV0 make the index a LHS index. If it came from SV1, make it
4449           // a RHS index. We need to mod by NumElts because we don't care
4450           // which operand it came from in the original shuffles.
4451           Mask[i] = M1Zero ? M0 % NumElts : (M1 % NumElts) + NumElts;
4452         }
4453 
4454         if (CanFold) {
4455           SDValue NewLHS = ZeroN00 ? N0.getOperand(1) : N0.getOperand(0);
4456           SDValue NewRHS = ZeroN10 ? N1.getOperand(1) : N1.getOperand(0);
4457 
4458           bool LegalMask = TLI.isShuffleMaskLegal(Mask, VT);
4459           if (!LegalMask) {
4460             std::swap(NewLHS, NewRHS);
4461             ShuffleVectorSDNode::commuteMask(Mask);
4462             LegalMask = TLI.isShuffleMaskLegal(Mask, VT);
4463           }
4464 
4465           if (LegalMask)
4466             return DAG.getVectorShuffle(VT, SDLoc(N), NewLHS, NewRHS, Mask);
4467         }
4468       }
4469     }
4470   }
4471 
4472   // fold (or c1, c2) -> c1|c2
4473   ConstantSDNode *N0C = getAsNonOpaqueConstant(N0);
4474   ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1);
4475   if (N0C && N1C && !N1C->isOpaque())
4476     return DAG.FoldConstantArithmetic(ISD::OR, SDLoc(N), VT, N0C, N1C);
4477   // canonicalize constant to RHS
4478   if (DAG.isConstantIntBuildVectorOrConstantInt(N0) &&
4479      !DAG.isConstantIntBuildVectorOrConstantInt(N1))
4480     return DAG.getNode(ISD::OR, SDLoc(N), VT, N1, N0);
4481   // fold (or x, 0) -> x
4482   if (isNullConstant(N1))
4483     return N0;
4484   // fold (or x, -1) -> -1
4485   if (isAllOnesConstant(N1))
4486     return N1;
4487 
4488   if (SDValue NewSel = foldBinOpIntoSelect(N))
4489     return NewSel;
4490 
4491   // fold (or x, c) -> c iff (x & ~c) == 0
4492   if (N1C && DAG.MaskedValueIsZero(N0, ~N1C->getAPIntValue()))
4493     return N1;
4494 
4495   if (SDValue Combined = visitORLike(N0, N1, N))
4496     return Combined;
4497 
4498   // Recognize halfword bswaps as (bswap + rotl 16) or (bswap + shl 16)
4499   if (SDValue BSwap = MatchBSwapHWord(N, N0, N1))
4500     return BSwap;
4501   if (SDValue BSwap = MatchBSwapHWordLow(N, N0, N1))
4502     return BSwap;
4503 
4504   // reassociate or
4505   if (SDValue ROR = ReassociateOps(ISD::OR, SDLoc(N), N0, N1))
4506     return ROR;
4507 
4508   // Canonicalize (or (and X, c1), c2) -> (and (or X, c2), c1|c2)
4509   // iff (c1 & c2) != 0.
4510   if (N1C && N0.getOpcode() == ISD::AND && N0.getNode()->hasOneUse()) {
4511     if (ConstantSDNode *C1 = dyn_cast<ConstantSDNode>(N0.getOperand(1))) {
4512       if (C1->getAPIntValue().intersects(N1C->getAPIntValue())) {
4513         if (SDValue COR =
4514                 DAG.FoldConstantArithmetic(ISD::OR, SDLoc(N1), VT, N1C, C1))
4515           return DAG.getNode(
4516               ISD::AND, SDLoc(N), VT,
4517               DAG.getNode(ISD::OR, SDLoc(N0), VT, N0.getOperand(0), N1), COR);
4518         return SDValue();
4519       }
4520     }
4521   }
4522 
4523   // Simplify: (or (op x...), (op y...))  -> (op (or x, y))
4524   if (N0.getOpcode() == N1.getOpcode())
4525     if (SDValue Tmp = SimplifyBinOpWithSameOpcodeHands(N))
4526       return Tmp;
4527 
4528   // See if this is some rotate idiom.
4529   if (SDNode *Rot = MatchRotate(N0, N1, SDLoc(N)))
4530     return SDValue(Rot, 0);
4531 
4532   if (SDValue Load = MatchLoadCombine(N))
4533     return Load;
4534 
4535   // Simplify the operands using demanded-bits information.
4536   if (SimplifyDemandedBits(SDValue(N, 0)))
4537     return SDValue(N, 0);
4538 
4539   return SDValue();
4540 }
4541 
4542 /// Match "(X shl/srl V1) & V2" where V2 may not be present.
4543 bool DAGCombiner::MatchRotateHalf(SDValue Op, SDValue &Shift, SDValue &Mask) {
4544   if (Op.getOpcode() == ISD::AND) {
4545     if (DAG.isConstantIntBuildVectorOrConstantInt(Op.getOperand(1))) {
4546       Mask = Op.getOperand(1);
4547       Op = Op.getOperand(0);
4548     } else {
4549       return false;
4550     }
4551   }
4552 
4553   if (Op.getOpcode() == ISD::SRL || Op.getOpcode() == ISD::SHL) {
4554     Shift = Op;
4555     return true;
4556   }
4557 
4558   return false;
4559 }
4560 
4561 // Return true if we can prove that, whenever Neg and Pos are both in the
4562 // range [0, EltSize), Neg == (Pos == 0 ? 0 : EltSize - Pos).  This means that
4563 // for two opposing shifts shift1 and shift2 and a value X with OpBits bits:
4564 //
4565 //     (or (shift1 X, Neg), (shift2 X, Pos))
4566 //
4567 // reduces to a rotate in direction shift2 by Pos or (equivalently) a rotate
4568 // in direction shift1 by Neg.  The range [0, EltSize) means that we only need
4569 // to consider shift amounts with defined behavior.
4570 static bool matchRotateSub(SDValue Pos, SDValue Neg, unsigned EltSize) {
4571   // If EltSize is a power of 2 then:
4572   //
4573   //  (a) (Pos == 0 ? 0 : EltSize - Pos) == (EltSize - Pos) & (EltSize - 1)
4574   //  (b) Neg == Neg & (EltSize - 1) whenever Neg is in [0, EltSize).
4575   //
4576   // So if EltSize is a power of 2 and Neg is (and Neg', EltSize-1), we check
4577   // for the stronger condition:
4578   //
4579   //     Neg & (EltSize - 1) == (EltSize - Pos) & (EltSize - 1)    [A]
4580   //
4581   // for all Neg and Pos.  Since Neg & (EltSize - 1) == Neg' & (EltSize - 1)
4582   // we can just replace Neg with Neg' for the rest of the function.
4583   //
4584   // In other cases we check for the even stronger condition:
4585   //
4586   //     Neg == EltSize - Pos                                    [B]
4587   //
4588   // for all Neg and Pos.  Note that the (or ...) then invokes undefined
4589   // behavior if Pos == 0 (and consequently Neg == EltSize).
4590   //
4591   // We could actually use [A] whenever EltSize is a power of 2, but the
4592   // only extra cases that it would match are those uninteresting ones
4593   // where Neg and Pos are never in range at the same time.  E.g. for
4594   // EltSize == 32, using [A] would allow a Neg of the form (sub 64, Pos)
4595   // as well as (sub 32, Pos), but:
4596   //
4597   //     (or (shift1 X, (sub 64, Pos)), (shift2 X, Pos))
4598   //
4599   // always invokes undefined behavior for 32-bit X.
4600   //
4601   // Below, Mask == EltSize - 1 when using [A] and is all-ones otherwise.
4602   unsigned MaskLoBits = 0;
4603   if (Neg.getOpcode() == ISD::AND && isPowerOf2_64(EltSize)) {
4604     if (ConstantSDNode *NegC = isConstOrConstSplat(Neg.getOperand(1))) {
4605       if (NegC->getAPIntValue() == EltSize - 1) {
4606         Neg = Neg.getOperand(0);
4607         MaskLoBits = Log2_64(EltSize);
4608       }
4609     }
4610   }
4611 
4612   // Check whether Neg has the form (sub NegC, NegOp1) for some NegC and NegOp1.
4613   if (Neg.getOpcode() != ISD::SUB)
4614     return false;
4615   ConstantSDNode *NegC = isConstOrConstSplat(Neg.getOperand(0));
4616   if (!NegC)
4617     return false;
4618   SDValue NegOp1 = Neg.getOperand(1);
4619 
4620   // On the RHS of [A], if Pos is Pos' & (EltSize - 1), just replace Pos with
4621   // Pos'.  The truncation is redundant for the purpose of the equality.
4622   if (MaskLoBits && Pos.getOpcode() == ISD::AND)
4623     if (ConstantSDNode *PosC = isConstOrConstSplat(Pos.getOperand(1)))
4624       if (PosC->getAPIntValue() == EltSize - 1)
4625         Pos = Pos.getOperand(0);
4626 
4627   // The condition we need is now:
4628   //
4629   //     (NegC - NegOp1) & Mask == (EltSize - Pos) & Mask
4630   //
4631   // If NegOp1 == Pos then we need:
4632   //
4633   //              EltSize & Mask == NegC & Mask
4634   //
4635   // (because "x & Mask" is a truncation and distributes through subtraction).
4636   APInt Width;
4637   if (Pos == NegOp1)
4638     Width = NegC->getAPIntValue();
4639 
4640   // Check for cases where Pos has the form (add NegOp1, PosC) for some PosC.
4641   // Then the condition we want to prove becomes:
4642   //
4643   //     (NegC - NegOp1) & Mask == (EltSize - (NegOp1 + PosC)) & Mask
4644   //
4645   // which, again because "x & Mask" is a truncation, becomes:
4646   //
4647   //                NegC & Mask == (EltSize - PosC) & Mask
4648   //             EltSize & Mask == (NegC + PosC) & Mask
4649   else if (Pos.getOpcode() == ISD::ADD && Pos.getOperand(0) == NegOp1) {
4650     if (ConstantSDNode *PosC = isConstOrConstSplat(Pos.getOperand(1)))
4651       Width = PosC->getAPIntValue() + NegC->getAPIntValue();
4652     else
4653       return false;
4654   } else
4655     return false;
4656 
4657   // Now we just need to check that EltSize & Mask == Width & Mask.
4658   if (MaskLoBits)
4659     // EltSize & Mask is 0 since Mask is EltSize - 1.
4660     return Width.getLoBits(MaskLoBits) == 0;
4661   return Width == EltSize;
4662 }
4663 
4664 // A subroutine of MatchRotate used once we have found an OR of two opposite
4665 // shifts of Shifted.  If Neg == <operand size> - Pos then the OR reduces
4666 // to both (PosOpcode Shifted, Pos) and (NegOpcode Shifted, Neg), with the
4667 // former being preferred if supported.  InnerPos and InnerNeg are Pos and
4668 // Neg with outer conversions stripped away.
4669 SDNode *DAGCombiner::MatchRotatePosNeg(SDValue Shifted, SDValue Pos,
4670                                        SDValue Neg, SDValue InnerPos,
4671                                        SDValue InnerNeg, unsigned PosOpcode,
4672                                        unsigned NegOpcode, const SDLoc &DL) {
4673   // fold (or (shl x, (*ext y)),
4674   //          (srl x, (*ext (sub 32, y)))) ->
4675   //   (rotl x, y) or (rotr x, (sub 32, y))
4676   //
4677   // fold (or (shl x, (*ext (sub 32, y))),
4678   //          (srl x, (*ext y))) ->
4679   //   (rotr x, y) or (rotl x, (sub 32, y))
4680   EVT VT = Shifted.getValueType();
4681   if (matchRotateSub(InnerPos, InnerNeg, VT.getScalarSizeInBits())) {
4682     bool HasPos = TLI.isOperationLegalOrCustom(PosOpcode, VT);
4683     return DAG.getNode(HasPos ? PosOpcode : NegOpcode, DL, VT, Shifted,
4684                        HasPos ? Pos : Neg).getNode();
4685   }
4686 
4687   return nullptr;
4688 }
4689 
4690 // MatchRotate - Handle an 'or' of two operands.  If this is one of the many
4691 // idioms for rotate, and if the target supports rotation instructions, generate
4692 // a rot[lr].
4693 SDNode *DAGCombiner::MatchRotate(SDValue LHS, SDValue RHS, const SDLoc &DL) {
4694   // Must be a legal type.  Expanded 'n promoted things won't work with rotates.
4695   EVT VT = LHS.getValueType();
4696   if (!TLI.isTypeLegal(VT)) return nullptr;
4697 
4698   // The target must have at least one rotate flavor.
4699   bool HasROTL = TLI.isOperationLegalOrCustom(ISD::ROTL, VT);
4700   bool HasROTR = TLI.isOperationLegalOrCustom(ISD::ROTR, VT);
4701   if (!HasROTL && !HasROTR) return nullptr;
4702 
4703   // Match "(X shl/srl V1) & V2" where V2 may not be present.
4704   SDValue LHSShift;   // The shift.
4705   SDValue LHSMask;    // AND value if any.
4706   if (!MatchRotateHalf(LHS, LHSShift, LHSMask))
4707     return nullptr; // Not part of a rotate.
4708 
4709   SDValue RHSShift;   // The shift.
4710   SDValue RHSMask;    // AND value if any.
4711   if (!MatchRotateHalf(RHS, RHSShift, RHSMask))
4712     return nullptr; // Not part of a rotate.
4713 
4714   if (LHSShift.getOperand(0) != RHSShift.getOperand(0))
4715     return nullptr;   // Not shifting the same value.
4716 
4717   if (LHSShift.getOpcode() == RHSShift.getOpcode())
4718     return nullptr;   // Shifts must disagree.
4719 
4720   // Canonicalize shl to left side in a shl/srl pair.
4721   if (RHSShift.getOpcode() == ISD::SHL) {
4722     std::swap(LHS, RHS);
4723     std::swap(LHSShift, RHSShift);
4724     std::swap(LHSMask, RHSMask);
4725   }
4726 
4727   unsigned EltSizeInBits = VT.getScalarSizeInBits();
4728   SDValue LHSShiftArg = LHSShift.getOperand(0);
4729   SDValue LHSShiftAmt = LHSShift.getOperand(1);
4730   SDValue RHSShiftArg = RHSShift.getOperand(0);
4731   SDValue RHSShiftAmt = RHSShift.getOperand(1);
4732 
4733   // fold (or (shl x, C1), (srl x, C2)) -> (rotl x, C1)
4734   // fold (or (shl x, C1), (srl x, C2)) -> (rotr x, C2)
4735   auto MatchRotateSum = [EltSizeInBits](ConstantSDNode *LHS,
4736                                         ConstantSDNode *RHS) {
4737     return (LHS->getAPIntValue() + RHS->getAPIntValue()) == EltSizeInBits;
4738   };
4739   if (matchBinaryPredicate(LHSShiftAmt, RHSShiftAmt, MatchRotateSum)) {
4740     SDValue Rot = DAG.getNode(HasROTL ? ISD::ROTL : ISD::ROTR, DL, VT,
4741                               LHSShiftArg, HasROTL ? LHSShiftAmt : RHSShiftAmt);
4742 
4743     // If there is an AND of either shifted operand, apply it to the result.
4744     if (LHSMask.getNode() || RHSMask.getNode()) {
4745       SDValue AllOnes = DAG.getAllOnesConstant(DL, VT);
4746       SDValue Mask = AllOnes;
4747 
4748       if (LHSMask.getNode()) {
4749         SDValue RHSBits = DAG.getNode(ISD::SRL, DL, VT, AllOnes, RHSShiftAmt);
4750         Mask = DAG.getNode(ISD::AND, DL, VT, Mask,
4751                            DAG.getNode(ISD::OR, DL, VT, LHSMask, RHSBits));
4752       }
4753       if (RHSMask.getNode()) {
4754         SDValue LHSBits = DAG.getNode(ISD::SHL, DL, VT, AllOnes, LHSShiftAmt);
4755         Mask = DAG.getNode(ISD::AND, DL, VT, Mask,
4756                            DAG.getNode(ISD::OR, DL, VT, RHSMask, LHSBits));
4757       }
4758 
4759       Rot = DAG.getNode(ISD::AND, DL, VT, Rot, Mask);
4760     }
4761 
4762     return Rot.getNode();
4763   }
4764 
4765   // If there is a mask here, and we have a variable shift, we can't be sure
4766   // that we're masking out the right stuff.
4767   if (LHSMask.getNode() || RHSMask.getNode())
4768     return nullptr;
4769 
4770   // If the shift amount is sign/zext/any-extended just peel it off.
4771   SDValue LExtOp0 = LHSShiftAmt;
4772   SDValue RExtOp0 = RHSShiftAmt;
4773   if ((LHSShiftAmt.getOpcode() == ISD::SIGN_EXTEND ||
4774        LHSShiftAmt.getOpcode() == ISD::ZERO_EXTEND ||
4775        LHSShiftAmt.getOpcode() == ISD::ANY_EXTEND ||
4776        LHSShiftAmt.getOpcode() == ISD::TRUNCATE) &&
4777       (RHSShiftAmt.getOpcode() == ISD::SIGN_EXTEND ||
4778        RHSShiftAmt.getOpcode() == ISD::ZERO_EXTEND ||
4779        RHSShiftAmt.getOpcode() == ISD::ANY_EXTEND ||
4780        RHSShiftAmt.getOpcode() == ISD::TRUNCATE)) {
4781     LExtOp0 = LHSShiftAmt.getOperand(0);
4782     RExtOp0 = RHSShiftAmt.getOperand(0);
4783   }
4784 
4785   SDNode *TryL = MatchRotatePosNeg(LHSShiftArg, LHSShiftAmt, RHSShiftAmt,
4786                                    LExtOp0, RExtOp0, ISD::ROTL, ISD::ROTR, DL);
4787   if (TryL)
4788     return TryL;
4789 
4790   SDNode *TryR = MatchRotatePosNeg(RHSShiftArg, RHSShiftAmt, LHSShiftAmt,
4791                                    RExtOp0, LExtOp0, ISD::ROTR, ISD::ROTL, DL);
4792   if (TryR)
4793     return TryR;
4794 
4795   return nullptr;
4796 }
4797 
4798 namespace {
4799 
4800 /// Represents known origin of an individual byte in load combine pattern. The
4801 /// value of the byte is either constant zero or comes from memory.
4802 struct ByteProvider {
4803   // For constant zero providers Load is set to nullptr. For memory providers
4804   // Load represents the node which loads the byte from memory.
4805   // ByteOffset is the offset of the byte in the value produced by the load.
4806   LoadSDNode *Load = nullptr;
4807   unsigned ByteOffset = 0;
4808 
4809   ByteProvider() = default;
4810 
4811   static ByteProvider getMemory(LoadSDNode *Load, unsigned ByteOffset) {
4812     return ByteProvider(Load, ByteOffset);
4813   }
4814 
4815   static ByteProvider getConstantZero() { return ByteProvider(nullptr, 0); }
4816 
4817   bool isConstantZero() const { return !Load; }
4818   bool isMemory() const { return Load; }
4819 
4820   bool operator==(const ByteProvider &Other) const {
4821     return Other.Load == Load && Other.ByteOffset == ByteOffset;
4822   }
4823 
4824 private:
4825   ByteProvider(LoadSDNode *Load, unsigned ByteOffset)
4826       : Load(Load), ByteOffset(ByteOffset) {}
4827 };
4828 
4829 } // end anonymous namespace
4830 
4831 /// Recursively traverses the expression calculating the origin of the requested
4832 /// byte of the given value. Returns None if the provider can't be calculated.
4833 ///
4834 /// For all the values except the root of the expression verifies that the value
4835 /// has exactly one use and if it's not true return None. This way if the origin
4836 /// of the byte is returned it's guaranteed that the values which contribute to
4837 /// the byte are not used outside of this expression.
4838 ///
4839 /// Because the parts of the expression are not allowed to have more than one
4840 /// use this function iterates over trees, not DAGs. So it never visits the same
4841 /// node more than once.
4842 static const Optional<ByteProvider>
4843 calculateByteProvider(SDValue Op, unsigned Index, unsigned Depth,
4844                       bool Root = false) {
4845   // Typical i64 by i8 pattern requires recursion up to 8 calls depth
4846   if (Depth == 10)
4847     return None;
4848 
4849   if (!Root && !Op.hasOneUse())
4850     return None;
4851 
4852   assert(Op.getValueType().isScalarInteger() && "can't handle other types");
4853   unsigned BitWidth = Op.getValueSizeInBits();
4854   if (BitWidth % 8 != 0)
4855     return None;
4856   unsigned ByteWidth = BitWidth / 8;
4857   assert(Index < ByteWidth && "invalid index requested");
4858   (void) ByteWidth;
4859 
4860   switch (Op.getOpcode()) {
4861   case ISD::OR: {
4862     auto LHS = calculateByteProvider(Op->getOperand(0), Index, Depth + 1);
4863     if (!LHS)
4864       return None;
4865     auto RHS = calculateByteProvider(Op->getOperand(1), Index, Depth + 1);
4866     if (!RHS)
4867       return None;
4868 
4869     if (LHS->isConstantZero())
4870       return RHS;
4871     if (RHS->isConstantZero())
4872       return LHS;
4873     return None;
4874   }
4875   case ISD::SHL: {
4876     auto ShiftOp = dyn_cast<ConstantSDNode>(Op->getOperand(1));
4877     if (!ShiftOp)
4878       return None;
4879 
4880     uint64_t BitShift = ShiftOp->getZExtValue();
4881     if (BitShift % 8 != 0)
4882       return None;
4883     uint64_t ByteShift = BitShift / 8;
4884 
4885     return Index < ByteShift
4886                ? ByteProvider::getConstantZero()
4887                : calculateByteProvider(Op->getOperand(0), Index - ByteShift,
4888                                        Depth + 1);
4889   }
4890   case ISD::ANY_EXTEND:
4891   case ISD::SIGN_EXTEND:
4892   case ISD::ZERO_EXTEND: {
4893     SDValue NarrowOp = Op->getOperand(0);
4894     unsigned NarrowBitWidth = NarrowOp.getScalarValueSizeInBits();
4895     if (NarrowBitWidth % 8 != 0)
4896       return None;
4897     uint64_t NarrowByteWidth = NarrowBitWidth / 8;
4898 
4899     if (Index >= NarrowByteWidth)
4900       return Op.getOpcode() == ISD::ZERO_EXTEND
4901                  ? Optional<ByteProvider>(ByteProvider::getConstantZero())
4902                  : None;
4903     return calculateByteProvider(NarrowOp, Index, Depth + 1);
4904   }
4905   case ISD::BSWAP:
4906     return calculateByteProvider(Op->getOperand(0), ByteWidth - Index - 1,
4907                                  Depth + 1);
4908   case ISD::LOAD: {
4909     auto L = cast<LoadSDNode>(Op.getNode());
4910     if (L->isVolatile() || L->isIndexed())
4911       return None;
4912 
4913     unsigned NarrowBitWidth = L->getMemoryVT().getSizeInBits();
4914     if (NarrowBitWidth % 8 != 0)
4915       return None;
4916     uint64_t NarrowByteWidth = NarrowBitWidth / 8;
4917 
4918     if (Index >= NarrowByteWidth)
4919       return L->getExtensionType() == ISD::ZEXTLOAD
4920                  ? Optional<ByteProvider>(ByteProvider::getConstantZero())
4921                  : None;
4922     return ByteProvider::getMemory(L, Index);
4923   }
4924   }
4925 
4926   return None;
4927 }
4928 
4929 /// Match a pattern where a wide type scalar value is loaded by several narrow
4930 /// loads and combined by shifts and ors. Fold it into a single load or a load
4931 /// and a BSWAP if the targets supports it.
4932 ///
4933 /// Assuming little endian target:
4934 ///  i8 *a = ...
4935 ///  i32 val = a[0] | (a[1] << 8) | (a[2] << 16) | (a[3] << 24)
4936 /// =>
4937 ///  i32 val = *((i32)a)
4938 ///
4939 ///  i8 *a = ...
4940 ///  i32 val = (a[0] << 24) | (a[1] << 16) | (a[2] << 8) | a[3]
4941 /// =>
4942 ///  i32 val = BSWAP(*((i32)a))
4943 ///
4944 /// TODO: This rule matches complex patterns with OR node roots and doesn't
4945 /// interact well with the worklist mechanism. When a part of the pattern is
4946 /// updated (e.g. one of the loads) its direct users are put into the worklist,
4947 /// but the root node of the pattern which triggers the load combine is not
4948 /// necessarily a direct user of the changed node. For example, once the address
4949 /// of t28 load is reassociated load combine won't be triggered:
4950 ///             t25: i32 = add t4, Constant:i32<2>
4951 ///           t26: i64 = sign_extend t25
4952 ///        t27: i64 = add t2, t26
4953 ///       t28: i8,ch = load<LD1[%tmp9]> t0, t27, undef:i64
4954 ///     t29: i32 = zero_extend t28
4955 ///   t32: i32 = shl t29, Constant:i8<8>
4956 /// t33: i32 = or t23, t32
4957 /// As a possible fix visitLoad can check if the load can be a part of a load
4958 /// combine pattern and add corresponding OR roots to the worklist.
4959 SDValue DAGCombiner::MatchLoadCombine(SDNode *N) {
4960   assert(N->getOpcode() == ISD::OR &&
4961          "Can only match load combining against OR nodes");
4962 
4963   // Handles simple types only
4964   EVT VT = N->getValueType(0);
4965   if (VT != MVT::i16 && VT != MVT::i32 && VT != MVT::i64)
4966     return SDValue();
4967   unsigned ByteWidth = VT.getSizeInBits() / 8;
4968 
4969   const TargetLowering &TLI = DAG.getTargetLoweringInfo();
4970   // Before legalize we can introduce too wide illegal loads which will be later
4971   // split into legal sized loads. This enables us to combine i64 load by i8
4972   // patterns to a couple of i32 loads on 32 bit targets.
4973   if (LegalOperations && !TLI.isOperationLegal(ISD::LOAD, VT))
4974     return SDValue();
4975 
4976   std::function<unsigned(unsigned, unsigned)> LittleEndianByteAt = [](
4977     unsigned BW, unsigned i) { return i; };
4978   std::function<unsigned(unsigned, unsigned)> BigEndianByteAt = [](
4979     unsigned BW, unsigned i) { return BW - i - 1; };
4980 
4981   bool IsBigEndianTarget = DAG.getDataLayout().isBigEndian();
4982   auto MemoryByteOffset = [&] (ByteProvider P) {
4983     assert(P.isMemory() && "Must be a memory byte provider");
4984     unsigned LoadBitWidth = P.Load->getMemoryVT().getSizeInBits();
4985     assert(LoadBitWidth % 8 == 0 &&
4986            "can only analyze providers for individual bytes not bit");
4987     unsigned LoadByteWidth = LoadBitWidth / 8;
4988     return IsBigEndianTarget
4989             ? BigEndianByteAt(LoadByteWidth, P.ByteOffset)
4990             : LittleEndianByteAt(LoadByteWidth, P.ByteOffset);
4991   };
4992 
4993   Optional<BaseIndexOffset> Base;
4994   SDValue Chain;
4995 
4996   SmallSet<LoadSDNode *, 8> Loads;
4997   Optional<ByteProvider> FirstByteProvider;
4998   int64_t FirstOffset = INT64_MAX;
4999 
5000   // Check if all the bytes of the OR we are looking at are loaded from the same
5001   // base address. Collect bytes offsets from Base address in ByteOffsets.
5002   SmallVector<int64_t, 4> ByteOffsets(ByteWidth);
5003   for (unsigned i = 0; i < ByteWidth; i++) {
5004     auto P = calculateByteProvider(SDValue(N, 0), i, 0, /*Root=*/true);
5005     if (!P || !P->isMemory()) // All the bytes must be loaded from memory
5006       return SDValue();
5007 
5008     LoadSDNode *L = P->Load;
5009     assert(L->hasNUsesOfValue(1, 0) && !L->isVolatile() && !L->isIndexed() &&
5010            "Must be enforced by calculateByteProvider");
5011     assert(L->getOffset().isUndef() && "Unindexed load must have undef offset");
5012 
5013     // All loads must share the same chain
5014     SDValue LChain = L->getChain();
5015     if (!Chain)
5016       Chain = LChain;
5017     else if (Chain != LChain)
5018       return SDValue();
5019 
5020     // Loads must share the same base address
5021     BaseIndexOffset Ptr = BaseIndexOffset::match(L->getBasePtr(), DAG);
5022     int64_t ByteOffsetFromBase = 0;
5023     if (!Base)
5024       Base = Ptr;
5025     else if (!Base->equalBaseIndex(Ptr, DAG, ByteOffsetFromBase))
5026       return SDValue();
5027 
5028     // Calculate the offset of the current byte from the base address
5029     ByteOffsetFromBase += MemoryByteOffset(*P);
5030     ByteOffsets[i] = ByteOffsetFromBase;
5031 
5032     // Remember the first byte load
5033     if (ByteOffsetFromBase < FirstOffset) {
5034       FirstByteProvider = P;
5035       FirstOffset = ByteOffsetFromBase;
5036     }
5037 
5038     Loads.insert(L);
5039   }
5040   assert(!Loads.empty() && "All the bytes of the value must be loaded from "
5041          "memory, so there must be at least one load which produces the value");
5042   assert(Base && "Base address of the accessed memory location must be set");
5043   assert(FirstOffset != INT64_MAX && "First byte offset must be set");
5044 
5045   // Check if the bytes of the OR we are looking at match with either big or
5046   // little endian value load
5047   bool BigEndian = true, LittleEndian = true;
5048   for (unsigned i = 0; i < ByteWidth; i++) {
5049     int64_t CurrentByteOffset = ByteOffsets[i] - FirstOffset;
5050     LittleEndian &= CurrentByteOffset == LittleEndianByteAt(ByteWidth, i);
5051     BigEndian &= CurrentByteOffset == BigEndianByteAt(ByteWidth, i);
5052     if (!BigEndian && !LittleEndian)
5053       return SDValue();
5054   }
5055   assert((BigEndian != LittleEndian) && "should be either or");
5056   assert(FirstByteProvider && "must be set");
5057 
5058   // Ensure that the first byte is loaded from zero offset of the first load.
5059   // So the combined value can be loaded from the first load address.
5060   if (MemoryByteOffset(*FirstByteProvider) != 0)
5061     return SDValue();
5062   LoadSDNode *FirstLoad = FirstByteProvider->Load;
5063 
5064   // The node we are looking at matches with the pattern, check if we can
5065   // replace it with a single load and bswap if needed.
5066 
5067   // If the load needs byte swap check if the target supports it
5068   bool NeedsBswap = IsBigEndianTarget != BigEndian;
5069 
5070   // Before legalize we can introduce illegal bswaps which will be later
5071   // converted to an explicit bswap sequence. This way we end up with a single
5072   // load and byte shuffling instead of several loads and byte shuffling.
5073   if (NeedsBswap && LegalOperations && !TLI.isOperationLegal(ISD::BSWAP, VT))
5074     return SDValue();
5075 
5076   // Check that a load of the wide type is both allowed and fast on the target
5077   bool Fast = false;
5078   bool Allowed = TLI.allowsMemoryAccess(*DAG.getContext(), DAG.getDataLayout(),
5079                                         VT, FirstLoad->getAddressSpace(),
5080                                         FirstLoad->getAlignment(), &Fast);
5081   if (!Allowed || !Fast)
5082     return SDValue();
5083 
5084   SDValue NewLoad =
5085       DAG.getLoad(VT, SDLoc(N), Chain, FirstLoad->getBasePtr(),
5086                   FirstLoad->getPointerInfo(), FirstLoad->getAlignment());
5087 
5088   // Transfer chain users from old loads to the new load.
5089   for (LoadSDNode *L : Loads)
5090     DAG.ReplaceAllUsesOfValueWith(SDValue(L, 1), SDValue(NewLoad.getNode(), 1));
5091 
5092   return NeedsBswap ? DAG.getNode(ISD::BSWAP, SDLoc(N), VT, NewLoad) : NewLoad;
5093 }
5094 
5095 SDValue DAGCombiner::visitXOR(SDNode *N) {
5096   SDValue N0 = N->getOperand(0);
5097   SDValue N1 = N->getOperand(1);
5098   EVT VT = N0.getValueType();
5099 
5100   // fold vector ops
5101   if (VT.isVector()) {
5102     if (SDValue FoldedVOp = SimplifyVBinOp(N))
5103       return FoldedVOp;
5104 
5105     // fold (xor x, 0) -> x, vector edition
5106     if (ISD::isBuildVectorAllZeros(N0.getNode()))
5107       return N1;
5108     if (ISD::isBuildVectorAllZeros(N1.getNode()))
5109       return N0;
5110   }
5111 
5112   // fold (xor undef, undef) -> 0. This is a common idiom (misuse).
5113   if (N0.isUndef() && N1.isUndef())
5114     return DAG.getConstant(0, SDLoc(N), VT);
5115   // fold (xor x, undef) -> undef
5116   if (N0.isUndef())
5117     return N0;
5118   if (N1.isUndef())
5119     return N1;
5120   // fold (xor c1, c2) -> c1^c2
5121   ConstantSDNode *N0C = getAsNonOpaqueConstant(N0);
5122   ConstantSDNode *N1C = getAsNonOpaqueConstant(N1);
5123   if (N0C && N1C)
5124     return DAG.FoldConstantArithmetic(ISD::XOR, SDLoc(N), VT, N0C, N1C);
5125   // canonicalize constant to RHS
5126   if (DAG.isConstantIntBuildVectorOrConstantInt(N0) &&
5127      !DAG.isConstantIntBuildVectorOrConstantInt(N1))
5128     return DAG.getNode(ISD::XOR, SDLoc(N), VT, N1, N0);
5129   // fold (xor x, 0) -> x
5130   if (isNullConstant(N1))
5131     return N0;
5132 
5133   if (SDValue NewSel = foldBinOpIntoSelect(N))
5134     return NewSel;
5135 
5136   // reassociate xor
5137   if (SDValue RXOR = ReassociateOps(ISD::XOR, SDLoc(N), N0, N1))
5138     return RXOR;
5139 
5140   // fold !(x cc y) -> (x !cc y)
5141   SDValue LHS, RHS, CC;
5142   if (TLI.isConstTrueVal(N1.getNode()) && isSetCCEquivalent(N0, LHS, RHS, CC)) {
5143     bool isInt = LHS.getValueType().isInteger();
5144     ISD::CondCode NotCC = ISD::getSetCCInverse(cast<CondCodeSDNode>(CC)->get(),
5145                                                isInt);
5146 
5147     if (!LegalOperations ||
5148         TLI.isCondCodeLegal(NotCC, LHS.getSimpleValueType())) {
5149       switch (N0.getOpcode()) {
5150       default:
5151         llvm_unreachable("Unhandled SetCC Equivalent!");
5152       case ISD::SETCC:
5153         return DAG.getSetCC(SDLoc(N0), VT, LHS, RHS, NotCC);
5154       case ISD::SELECT_CC:
5155         return DAG.getSelectCC(SDLoc(N0), LHS, RHS, N0.getOperand(2),
5156                                N0.getOperand(3), NotCC);
5157       }
5158     }
5159   }
5160 
5161   // fold (not (zext (setcc x, y))) -> (zext (not (setcc x, y)))
5162   if (isOneConstant(N1) && N0.getOpcode() == ISD::ZERO_EXTEND &&
5163       N0.getNode()->hasOneUse() &&
5164       isSetCCEquivalent(N0.getOperand(0), LHS, RHS, CC)){
5165     SDValue V = N0.getOperand(0);
5166     SDLoc DL(N0);
5167     V = DAG.getNode(ISD::XOR, DL, V.getValueType(), V,
5168                     DAG.getConstant(1, DL, V.getValueType()));
5169     AddToWorklist(V.getNode());
5170     return DAG.getNode(ISD::ZERO_EXTEND, SDLoc(N), VT, V);
5171   }
5172 
5173   // fold (not (or x, y)) -> (and (not x), (not y)) iff x or y are setcc
5174   if (isOneConstant(N1) && VT == MVT::i1 &&
5175       (N0.getOpcode() == ISD::OR || N0.getOpcode() == ISD::AND)) {
5176     SDValue LHS = N0.getOperand(0), RHS = N0.getOperand(1);
5177     if (isOneUseSetCC(RHS) || isOneUseSetCC(LHS)) {
5178       unsigned NewOpcode = N0.getOpcode() == ISD::AND ? ISD::OR : ISD::AND;
5179       LHS = DAG.getNode(ISD::XOR, SDLoc(LHS), VT, LHS, N1); // LHS = ~LHS
5180       RHS = DAG.getNode(ISD::XOR, SDLoc(RHS), VT, RHS, N1); // RHS = ~RHS
5181       AddToWorklist(LHS.getNode()); AddToWorklist(RHS.getNode());
5182       return DAG.getNode(NewOpcode, SDLoc(N), VT, LHS, RHS);
5183     }
5184   }
5185   // fold (not (or x, y)) -> (and (not x), (not y)) iff x or y are constants
5186   if (isAllOnesConstant(N1) &&
5187       (N0.getOpcode() == ISD::OR || N0.getOpcode() == ISD::AND)) {
5188     SDValue LHS = N0.getOperand(0), RHS = N0.getOperand(1);
5189     if (isa<ConstantSDNode>(RHS) || isa<ConstantSDNode>(LHS)) {
5190       unsigned NewOpcode = N0.getOpcode() == ISD::AND ? ISD::OR : ISD::AND;
5191       LHS = DAG.getNode(ISD::XOR, SDLoc(LHS), VT, LHS, N1); // LHS = ~LHS
5192       RHS = DAG.getNode(ISD::XOR, SDLoc(RHS), VT, RHS, N1); // RHS = ~RHS
5193       AddToWorklist(LHS.getNode()); AddToWorklist(RHS.getNode());
5194       return DAG.getNode(NewOpcode, SDLoc(N), VT, LHS, RHS);
5195     }
5196   }
5197   // fold (xor (and x, y), y) -> (and (not x), y)
5198   if (N0.getOpcode() == ISD::AND && N0.getNode()->hasOneUse() &&
5199       N0->getOperand(1) == N1) {
5200     SDValue X = N0->getOperand(0);
5201     SDValue NotX = DAG.getNOT(SDLoc(X), X, VT);
5202     AddToWorklist(NotX.getNode());
5203     return DAG.getNode(ISD::AND, SDLoc(N), VT, NotX, N1);
5204   }
5205   // fold (xor (xor x, c1), c2) -> (xor x, (xor c1, c2))
5206   if (N1C && N0.getOpcode() == ISD::XOR) {
5207     if (const ConstantSDNode *N00C = getAsNonOpaqueConstant(N0.getOperand(0))) {
5208       SDLoc DL(N);
5209       return DAG.getNode(ISD::XOR, DL, VT, N0.getOperand(1),
5210                          DAG.getConstant(N1C->getAPIntValue() ^
5211                                          N00C->getAPIntValue(), DL, VT));
5212     }
5213     if (const ConstantSDNode *N01C = getAsNonOpaqueConstant(N0.getOperand(1))) {
5214       SDLoc DL(N);
5215       return DAG.getNode(ISD::XOR, DL, VT, N0.getOperand(0),
5216                          DAG.getConstant(N1C->getAPIntValue() ^
5217                                          N01C->getAPIntValue(), DL, VT));
5218     }
5219   }
5220 
5221   // fold Y = sra (X, size(X)-1); xor (add (X, Y), Y) -> (abs X)
5222   unsigned OpSizeInBits = VT.getScalarSizeInBits();
5223   if (N0.getOpcode() == ISD::ADD && N0.getOperand(1) == N1 &&
5224       N1.getOpcode() == ISD::SRA && N1.getOperand(0) == N0.getOperand(0) &&
5225       TLI.isOperationLegalOrCustom(ISD::ABS, VT)) {
5226     if (ConstantSDNode *C = isConstOrConstSplat(N1.getOperand(1)))
5227       if (C->getAPIntValue() == (OpSizeInBits - 1))
5228         return DAG.getNode(ISD::ABS, SDLoc(N), VT, N0.getOperand(0));
5229   }
5230 
5231   // fold (xor x, x) -> 0
5232   if (N0 == N1)
5233     return tryFoldToZero(SDLoc(N), TLI, VT, DAG, LegalOperations, LegalTypes);
5234 
5235   // fold (xor (shl 1, x), -1) -> (rotl ~1, x)
5236   // Here is a concrete example of this equivalence:
5237   // i16   x ==  14
5238   // i16 shl ==   1 << 14  == 16384 == 0b0100000000000000
5239   // i16 xor == ~(1 << 14) == 49151 == 0b1011111111111111
5240   //
5241   // =>
5242   //
5243   // i16     ~1      == 0b1111111111111110
5244   // i16 rol(~1, 14) == 0b1011111111111111
5245   //
5246   // Some additional tips to help conceptualize this transform:
5247   // - Try to see the operation as placing a single zero in a value of all ones.
5248   // - There exists no value for x which would allow the result to contain zero.
5249   // - Values of x larger than the bitwidth are undefined and do not require a
5250   //   consistent result.
5251   // - Pushing the zero left requires shifting one bits in from the right.
5252   // A rotate left of ~1 is a nice way of achieving the desired result.
5253   if (TLI.isOperationLegalOrCustom(ISD::ROTL, VT) && N0.getOpcode() == ISD::SHL
5254       && isAllOnesConstant(N1) && isOneConstant(N0.getOperand(0))) {
5255     SDLoc DL(N);
5256     return DAG.getNode(ISD::ROTL, DL, VT, DAG.getConstant(~1, DL, VT),
5257                        N0.getOperand(1));
5258   }
5259 
5260   // Simplify: xor (op x...), (op y...)  -> (op (xor x, y))
5261   if (N0.getOpcode() == N1.getOpcode())
5262     if (SDValue Tmp = SimplifyBinOpWithSameOpcodeHands(N))
5263       return Tmp;
5264 
5265   // Simplify the expression using non-local knowledge.
5266   if (SimplifyDemandedBits(SDValue(N, 0)))
5267     return SDValue(N, 0);
5268 
5269   return SDValue();
5270 }
5271 
5272 /// Handle transforms common to the three shifts, when the shift amount is a
5273 /// constant.
5274 SDValue DAGCombiner::visitShiftByConstant(SDNode *N, ConstantSDNode *Amt) {
5275   SDNode *LHS = N->getOperand(0).getNode();
5276   if (!LHS->hasOneUse()) return SDValue();
5277 
5278   // We want to pull some binops through shifts, so that we have (and (shift))
5279   // instead of (shift (and)), likewise for add, or, xor, etc.  This sort of
5280   // thing happens with address calculations, so it's important to canonicalize
5281   // it.
5282   bool HighBitSet = false;  // Can we transform this if the high bit is set?
5283 
5284   switch (LHS->getOpcode()) {
5285   default: return SDValue();
5286   case ISD::OR:
5287   case ISD::XOR:
5288     HighBitSet = false; // We can only transform sra if the high bit is clear.
5289     break;
5290   case ISD::AND:
5291     HighBitSet = true;  // We can only transform sra if the high bit is set.
5292     break;
5293   case ISD::ADD:
5294     if (N->getOpcode() != ISD::SHL)
5295       return SDValue(); // only shl(add) not sr[al](add).
5296     HighBitSet = false; // We can only transform sra if the high bit is clear.
5297     break;
5298   }
5299 
5300   // We require the RHS of the binop to be a constant and not opaque as well.
5301   ConstantSDNode *BinOpCst = getAsNonOpaqueConstant(LHS->getOperand(1));
5302   if (!BinOpCst) return SDValue();
5303 
5304   // FIXME: disable this unless the input to the binop is a shift by a constant
5305   // or is copy/select.Enable this in other cases when figure out it's exactly profitable.
5306   SDNode *BinOpLHSVal = LHS->getOperand(0).getNode();
5307   bool isShift = BinOpLHSVal->getOpcode() == ISD::SHL ||
5308                  BinOpLHSVal->getOpcode() == ISD::SRA ||
5309                  BinOpLHSVal->getOpcode() == ISD::SRL;
5310   bool isCopyOrSelect = BinOpLHSVal->getOpcode() == ISD::CopyFromReg ||
5311                         BinOpLHSVal->getOpcode() == ISD::SELECT;
5312 
5313   if ((!isShift || !isa<ConstantSDNode>(BinOpLHSVal->getOperand(1))) &&
5314       !isCopyOrSelect)
5315     return SDValue();
5316 
5317   if (isCopyOrSelect && N->hasOneUse())
5318     return SDValue();
5319 
5320   EVT VT = N->getValueType(0);
5321 
5322   // If this is a signed shift right, and the high bit is modified by the
5323   // logical operation, do not perform the transformation. The highBitSet
5324   // boolean indicates the value of the high bit of the constant which would
5325   // cause it to be modified for this operation.
5326   if (N->getOpcode() == ISD::SRA) {
5327     bool BinOpRHSSignSet = BinOpCst->getAPIntValue().isNegative();
5328     if (BinOpRHSSignSet != HighBitSet)
5329       return SDValue();
5330   }
5331 
5332   if (!TLI.isDesirableToCommuteWithShift(LHS))
5333     return SDValue();
5334 
5335   // Fold the constants, shifting the binop RHS by the shift amount.
5336   SDValue NewRHS = DAG.getNode(N->getOpcode(), SDLoc(LHS->getOperand(1)),
5337                                N->getValueType(0),
5338                                LHS->getOperand(1), N->getOperand(1));
5339   assert(isa<ConstantSDNode>(NewRHS) && "Folding was not successful!");
5340 
5341   // Create the new shift.
5342   SDValue NewShift = DAG.getNode(N->getOpcode(),
5343                                  SDLoc(LHS->getOperand(0)),
5344                                  VT, LHS->getOperand(0), N->getOperand(1));
5345 
5346   // Create the new binop.
5347   return DAG.getNode(LHS->getOpcode(), SDLoc(N), VT, NewShift, NewRHS);
5348 }
5349 
5350 SDValue DAGCombiner::distributeTruncateThroughAnd(SDNode *N) {
5351   assert(N->getOpcode() == ISD::TRUNCATE);
5352   assert(N->getOperand(0).getOpcode() == ISD::AND);
5353 
5354   // (truncate:TruncVT (and N00, N01C)) -> (and (truncate:TruncVT N00), TruncC)
5355   if (N->hasOneUse() && N->getOperand(0).hasOneUse()) {
5356     SDValue N01 = N->getOperand(0).getOperand(1);
5357     if (isConstantOrConstantVector(N01, /* NoOpaques */ true)) {
5358       SDLoc DL(N);
5359       EVT TruncVT = N->getValueType(0);
5360       SDValue N00 = N->getOperand(0).getOperand(0);
5361       SDValue Trunc00 = DAG.getNode(ISD::TRUNCATE, DL, TruncVT, N00);
5362       SDValue Trunc01 = DAG.getNode(ISD::TRUNCATE, DL, TruncVT, N01);
5363       AddToWorklist(Trunc00.getNode());
5364       AddToWorklist(Trunc01.getNode());
5365       return DAG.getNode(ISD::AND, DL, TruncVT, Trunc00, Trunc01);
5366     }
5367   }
5368 
5369   return SDValue();
5370 }
5371 
5372 SDValue DAGCombiner::visitRotate(SDNode *N) {
5373   SDLoc dl(N);
5374   SDValue N0 = N->getOperand(0);
5375   SDValue N1 = N->getOperand(1);
5376   EVT VT = N->getValueType(0);
5377   unsigned Bitsize = VT.getScalarSizeInBits();
5378 
5379   // fold (rot x, 0) -> x
5380   if (isNullConstantOrNullSplatConstant(N1))
5381     return N0;
5382 
5383   // fold (rot x, c) -> (rot x, c % BitSize)
5384   if (ConstantSDNode *Cst = isConstOrConstSplat(N1)) {
5385     if (Cst->getAPIntValue().uge(Bitsize)) {
5386       uint64_t RotAmt = Cst->getAPIntValue().urem(Bitsize);
5387       return DAG.getNode(N->getOpcode(), dl, VT, N0,
5388                          DAG.getConstant(RotAmt, dl, N1.getValueType()));
5389     }
5390   }
5391 
5392   // fold (rot* x, (trunc (and y, c))) -> (rot* x, (and (trunc y), (trunc c))).
5393   if (N1.getOpcode() == ISD::TRUNCATE &&
5394       N1.getOperand(0).getOpcode() == ISD::AND) {
5395     if (SDValue NewOp1 = distributeTruncateThroughAnd(N1.getNode()))
5396       return DAG.getNode(N->getOpcode(), dl, VT, N0, NewOp1);
5397   }
5398 
5399   unsigned NextOp = N0.getOpcode();
5400   // fold (rot* (rot* x, c2), c1) -> (rot* x, c1 +- c2 % bitsize)
5401   if (NextOp == ISD::ROTL || NextOp == ISD::ROTR) {
5402     SDNode *C1 = DAG.isConstantIntBuildVectorOrConstantInt(N1);
5403     SDNode *C2 = DAG.isConstantIntBuildVectorOrConstantInt(N0.getOperand(1));
5404     if (C1 && C2 && C1->getValueType(0) == C2->getValueType(0)) {
5405       EVT ShiftVT = C1->getValueType(0);
5406       bool SameSide = (N->getOpcode() == NextOp);
5407       unsigned CombineOp = SameSide ? ISD::ADD : ISD::SUB;
5408       if (SDValue CombinedShift =
5409               DAG.FoldConstantArithmetic(CombineOp, dl, ShiftVT, C1, C2)) {
5410         SDValue BitsizeC = DAG.getConstant(Bitsize, dl, ShiftVT);
5411         SDValue CombinedShiftNorm = DAG.FoldConstantArithmetic(
5412             ISD::SREM, dl, ShiftVT, CombinedShift.getNode(),
5413             BitsizeC.getNode());
5414         return DAG.getNode(N->getOpcode(), dl, VT, N0->getOperand(0),
5415                            CombinedShiftNorm);
5416       }
5417     }
5418   }
5419   return SDValue();
5420 }
5421 
5422 SDValue DAGCombiner::visitSHL(SDNode *N) {
5423   SDValue N0 = N->getOperand(0);
5424   SDValue N1 = N->getOperand(1);
5425   EVT VT = N0.getValueType();
5426   unsigned OpSizeInBits = VT.getScalarSizeInBits();
5427 
5428   // fold vector ops
5429   if (VT.isVector()) {
5430     if (SDValue FoldedVOp = SimplifyVBinOp(N))
5431       return FoldedVOp;
5432 
5433     BuildVectorSDNode *N1CV = dyn_cast<BuildVectorSDNode>(N1);
5434     // If setcc produces all-one true value then:
5435     // (shl (and (setcc) N01CV) N1CV) -> (and (setcc) N01CV<<N1CV)
5436     if (N1CV && N1CV->isConstant()) {
5437       if (N0.getOpcode() == ISD::AND) {
5438         SDValue N00 = N0->getOperand(0);
5439         SDValue N01 = N0->getOperand(1);
5440         BuildVectorSDNode *N01CV = dyn_cast<BuildVectorSDNode>(N01);
5441 
5442         if (N01CV && N01CV->isConstant() && N00.getOpcode() == ISD::SETCC &&
5443             TLI.getBooleanContents(N00.getOperand(0).getValueType()) ==
5444                 TargetLowering::ZeroOrNegativeOneBooleanContent) {
5445           if (SDValue C = DAG.FoldConstantArithmetic(ISD::SHL, SDLoc(N), VT,
5446                                                      N01CV, N1CV))
5447             return DAG.getNode(ISD::AND, SDLoc(N), VT, N00, C);
5448         }
5449       }
5450     }
5451   }
5452 
5453   ConstantSDNode *N1C = isConstOrConstSplat(N1);
5454 
5455   // fold (shl c1, c2) -> c1<<c2
5456   ConstantSDNode *N0C = getAsNonOpaqueConstant(N0);
5457   if (N0C && N1C && !N1C->isOpaque())
5458     return DAG.FoldConstantArithmetic(ISD::SHL, SDLoc(N), VT, N0C, N1C);
5459   // fold (shl 0, x) -> 0
5460   if (isNullConstantOrNullSplatConstant(N0))
5461     return N0;
5462   // fold (shl x, c >= size(x)) -> undef
5463   // NOTE: ALL vector elements must be too big to avoid partial UNDEFs.
5464   auto MatchShiftTooBig = [OpSizeInBits](ConstantSDNode *Val) {
5465     return Val->getAPIntValue().uge(OpSizeInBits);
5466   };
5467   if (matchUnaryPredicate(N1, MatchShiftTooBig))
5468     return DAG.getUNDEF(VT);
5469   // fold (shl x, 0) -> x
5470   if (N1C && N1C->isNullValue())
5471     return N0;
5472   // fold (shl undef, x) -> 0
5473   if (N0.isUndef())
5474     return DAG.getConstant(0, SDLoc(N), VT);
5475 
5476   if (SDValue NewSel = foldBinOpIntoSelect(N))
5477     return NewSel;
5478 
5479   // if (shl x, c) is known to be zero, return 0
5480   if (DAG.MaskedValueIsZero(SDValue(N, 0),
5481                             APInt::getAllOnesValue(OpSizeInBits)))
5482     return DAG.getConstant(0, SDLoc(N), VT);
5483   // fold (shl x, (trunc (and y, c))) -> (shl x, (and (trunc y), (trunc c))).
5484   if (N1.getOpcode() == ISD::TRUNCATE &&
5485       N1.getOperand(0).getOpcode() == ISD::AND) {
5486     if (SDValue NewOp1 = distributeTruncateThroughAnd(N1.getNode()))
5487       return DAG.getNode(ISD::SHL, SDLoc(N), VT, N0, NewOp1);
5488   }
5489 
5490   if (N1C && SimplifyDemandedBits(SDValue(N, 0)))
5491     return SDValue(N, 0);
5492 
5493   // fold (shl (shl x, c1), c2) -> 0 or (shl x, (add c1, c2))
5494   if (N0.getOpcode() == ISD::SHL) {
5495     auto MatchOutOfRange = [OpSizeInBits](ConstantSDNode *LHS,
5496                                           ConstantSDNode *RHS) {
5497       APInt c1 = LHS->getAPIntValue();
5498       APInt c2 = RHS->getAPIntValue();
5499       zeroExtendToMatch(c1, c2, 1 /* Overflow Bit */);
5500       return (c1 + c2).uge(OpSizeInBits);
5501     };
5502     if (matchBinaryPredicate(N1, N0.getOperand(1), MatchOutOfRange))
5503       return DAG.getConstant(0, SDLoc(N), VT);
5504 
5505     auto MatchInRange = [OpSizeInBits](ConstantSDNode *LHS,
5506                                        ConstantSDNode *RHS) {
5507       APInt c1 = LHS->getAPIntValue();
5508       APInt c2 = RHS->getAPIntValue();
5509       zeroExtendToMatch(c1, c2, 1 /* Overflow Bit */);
5510       return (c1 + c2).ult(OpSizeInBits);
5511     };
5512     if (matchBinaryPredicate(N1, N0.getOperand(1), MatchInRange)) {
5513       SDLoc DL(N);
5514       EVT ShiftVT = N1.getValueType();
5515       SDValue Sum = DAG.getNode(ISD::ADD, DL, ShiftVT, N1, N0.getOperand(1));
5516       return DAG.getNode(ISD::SHL, DL, VT, N0.getOperand(0), Sum);
5517     }
5518   }
5519 
5520   // fold (shl (ext (shl x, c1)), c2) -> (ext (shl x, (add c1, c2)))
5521   // For this to be valid, the second form must not preserve any of the bits
5522   // that are shifted out by the inner shift in the first form.  This means
5523   // the outer shift size must be >= the number of bits added by the ext.
5524   // As a corollary, we don't care what kind of ext it is.
5525   if (N1C && (N0.getOpcode() == ISD::ZERO_EXTEND ||
5526               N0.getOpcode() == ISD::ANY_EXTEND ||
5527               N0.getOpcode() == ISD::SIGN_EXTEND) &&
5528       N0.getOperand(0).getOpcode() == ISD::SHL) {
5529     SDValue N0Op0 = N0.getOperand(0);
5530     if (ConstantSDNode *N0Op0C1 = isConstOrConstSplat(N0Op0.getOperand(1))) {
5531       APInt c1 = N0Op0C1->getAPIntValue();
5532       APInt c2 = N1C->getAPIntValue();
5533       zeroExtendToMatch(c1, c2, 1 /* Overflow Bit */);
5534 
5535       EVT InnerShiftVT = N0Op0.getValueType();
5536       uint64_t InnerShiftSize = InnerShiftVT.getScalarSizeInBits();
5537       if (c2.uge(OpSizeInBits - InnerShiftSize)) {
5538         SDLoc DL(N0);
5539         APInt Sum = c1 + c2;
5540         if (Sum.uge(OpSizeInBits))
5541           return DAG.getConstant(0, DL, VT);
5542 
5543         return DAG.getNode(
5544             ISD::SHL, DL, VT,
5545             DAG.getNode(N0.getOpcode(), DL, VT, N0Op0->getOperand(0)),
5546             DAG.getConstant(Sum.getZExtValue(), DL, N1.getValueType()));
5547       }
5548     }
5549   }
5550 
5551   // fold (shl (zext (srl x, C)), C) -> (zext (shl (srl x, C), C))
5552   // Only fold this if the inner zext has no other uses to avoid increasing
5553   // the total number of instructions.
5554   if (N1C && N0.getOpcode() == ISD::ZERO_EXTEND && N0.hasOneUse() &&
5555       N0.getOperand(0).getOpcode() == ISD::SRL) {
5556     SDValue N0Op0 = N0.getOperand(0);
5557     if (ConstantSDNode *N0Op0C1 = isConstOrConstSplat(N0Op0.getOperand(1))) {
5558       if (N0Op0C1->getAPIntValue().ult(VT.getScalarSizeInBits())) {
5559         uint64_t c1 = N0Op0C1->getZExtValue();
5560         uint64_t c2 = N1C->getZExtValue();
5561         if (c1 == c2) {
5562           SDValue NewOp0 = N0.getOperand(0);
5563           EVT CountVT = NewOp0.getOperand(1).getValueType();
5564           SDLoc DL(N);
5565           SDValue NewSHL = DAG.getNode(ISD::SHL, DL, NewOp0.getValueType(),
5566                                        NewOp0,
5567                                        DAG.getConstant(c2, DL, CountVT));
5568           AddToWorklist(NewSHL.getNode());
5569           return DAG.getNode(ISD::ZERO_EXTEND, SDLoc(N0), VT, NewSHL);
5570         }
5571       }
5572     }
5573   }
5574 
5575   // fold (shl (sr[la] exact X,  C1), C2) -> (shl    X, (C2-C1)) if C1 <= C2
5576   // fold (shl (sr[la] exact X,  C1), C2) -> (sr[la] X, (C2-C1)) if C1  > C2
5577   if (N1C && (N0.getOpcode() == ISD::SRL || N0.getOpcode() == ISD::SRA) &&
5578       N0->getFlags().hasExact()) {
5579     if (ConstantSDNode *N0C1 = isConstOrConstSplat(N0.getOperand(1))) {
5580       uint64_t C1 = N0C1->getZExtValue();
5581       uint64_t C2 = N1C->getZExtValue();
5582       SDLoc DL(N);
5583       if (C1 <= C2)
5584         return DAG.getNode(ISD::SHL, DL, VT, N0.getOperand(0),
5585                            DAG.getConstant(C2 - C1, DL, N1.getValueType()));
5586       return DAG.getNode(N0.getOpcode(), DL, VT, N0.getOperand(0),
5587                          DAG.getConstant(C1 - C2, DL, N1.getValueType()));
5588     }
5589   }
5590 
5591   // fold (shl (srl x, c1), c2) -> (and (shl x, (sub c2, c1), MASK) or
5592   //                               (and (srl x, (sub c1, c2), MASK)
5593   // Only fold this if the inner shift has no other uses -- if it does, folding
5594   // this will increase the total number of instructions.
5595   if (N1C && N0.getOpcode() == ISD::SRL && N0.hasOneUse()) {
5596     if (ConstantSDNode *N0C1 = isConstOrConstSplat(N0.getOperand(1))) {
5597       uint64_t c1 = N0C1->getZExtValue();
5598       if (c1 < OpSizeInBits) {
5599         uint64_t c2 = N1C->getZExtValue();
5600         APInt Mask = APInt::getHighBitsSet(OpSizeInBits, OpSizeInBits - c1);
5601         SDValue Shift;
5602         if (c2 > c1) {
5603           Mask <<= c2 - c1;
5604           SDLoc DL(N);
5605           Shift = DAG.getNode(ISD::SHL, DL, VT, N0.getOperand(0),
5606                               DAG.getConstant(c2 - c1, DL, N1.getValueType()));
5607         } else {
5608           Mask.lshrInPlace(c1 - c2);
5609           SDLoc DL(N);
5610           Shift = DAG.getNode(ISD::SRL, DL, VT, N0.getOperand(0),
5611                               DAG.getConstant(c1 - c2, DL, N1.getValueType()));
5612         }
5613         SDLoc DL(N0);
5614         return DAG.getNode(ISD::AND, DL, VT, Shift,
5615                            DAG.getConstant(Mask, DL, VT));
5616       }
5617     }
5618   }
5619 
5620   // fold (shl (sra x, c1), c1) -> (and x, (shl -1, c1))
5621   if (N0.getOpcode() == ISD::SRA && N1 == N0.getOperand(1) &&
5622       isConstantOrConstantVector(N1, /* No Opaques */ true)) {
5623     SDLoc DL(N);
5624     SDValue AllBits = DAG.getAllOnesConstant(DL, VT);
5625     SDValue HiBitsMask = DAG.getNode(ISD::SHL, DL, VT, AllBits, N1);
5626     return DAG.getNode(ISD::AND, DL, VT, N0.getOperand(0), HiBitsMask);
5627   }
5628 
5629   // fold (shl (add x, c1), c2) -> (add (shl x, c2), c1 << c2)
5630   // fold (shl (or x, c1), c2) -> (or (shl x, c2), c1 << c2)
5631   // Variant of version done on multiply, except mul by a power of 2 is turned
5632   // into a shift.
5633   if ((N0.getOpcode() == ISD::ADD || N0.getOpcode() == ISD::OR) &&
5634       N0.getNode()->hasOneUse() &&
5635       isConstantOrConstantVector(N1, /* No Opaques */ true) &&
5636       isConstantOrConstantVector(N0.getOperand(1), /* No Opaques */ true)) {
5637     SDValue Shl0 = DAG.getNode(ISD::SHL, SDLoc(N0), VT, N0.getOperand(0), N1);
5638     SDValue Shl1 = DAG.getNode(ISD::SHL, SDLoc(N1), VT, N0.getOperand(1), N1);
5639     AddToWorklist(Shl0.getNode());
5640     AddToWorklist(Shl1.getNode());
5641     return DAG.getNode(N0.getOpcode(), SDLoc(N), VT, Shl0, Shl1);
5642   }
5643 
5644   // fold (shl (mul x, c1), c2) -> (mul x, c1 << c2)
5645   if (N0.getOpcode() == ISD::MUL && N0.getNode()->hasOneUse() &&
5646       isConstantOrConstantVector(N1, /* No Opaques */ true) &&
5647       isConstantOrConstantVector(N0.getOperand(1), /* No Opaques */ true)) {
5648     SDValue Shl = DAG.getNode(ISD::SHL, SDLoc(N1), VT, N0.getOperand(1), N1);
5649     if (isConstantOrConstantVector(Shl))
5650       return DAG.getNode(ISD::MUL, SDLoc(N), VT, N0.getOperand(0), Shl);
5651   }
5652 
5653   if (N1C && !N1C->isOpaque())
5654     if (SDValue NewSHL = visitShiftByConstant(N, N1C))
5655       return NewSHL;
5656 
5657   return SDValue();
5658 }
5659 
5660 SDValue DAGCombiner::visitSRA(SDNode *N) {
5661   SDValue N0 = N->getOperand(0);
5662   SDValue N1 = N->getOperand(1);
5663   EVT VT = N0.getValueType();
5664   unsigned OpSizeInBits = VT.getScalarSizeInBits();
5665 
5666   // Arithmetic shifting an all-sign-bit value is a no-op.
5667   // fold (sra 0, x) -> 0
5668   // fold (sra -1, x) -> -1
5669   if (DAG.ComputeNumSignBits(N0) == OpSizeInBits)
5670     return N0;
5671 
5672   // fold vector ops
5673   if (VT.isVector())
5674     if (SDValue FoldedVOp = SimplifyVBinOp(N))
5675       return FoldedVOp;
5676 
5677   ConstantSDNode *N1C = isConstOrConstSplat(N1);
5678 
5679   // fold (sra c1, c2) -> (sra c1, c2)
5680   ConstantSDNode *N0C = getAsNonOpaqueConstant(N0);
5681   if (N0C && N1C && !N1C->isOpaque())
5682     return DAG.FoldConstantArithmetic(ISD::SRA, SDLoc(N), VT, N0C, N1C);
5683   // fold (sra x, c >= size(x)) -> undef
5684   // NOTE: ALL vector elements must be too big to avoid partial UNDEFs.
5685   auto MatchShiftTooBig = [OpSizeInBits](ConstantSDNode *Val) {
5686     return Val->getAPIntValue().uge(OpSizeInBits);
5687   };
5688   if (matchUnaryPredicate(N1, MatchShiftTooBig))
5689     return DAG.getUNDEF(VT);
5690   // fold (sra x, 0) -> x
5691   if (N1C && N1C->isNullValue())
5692     return N0;
5693 
5694   if (SDValue NewSel = foldBinOpIntoSelect(N))
5695     return NewSel;
5696 
5697   // fold (sra (shl x, c1), c1) -> sext_inreg for some c1 and target supports
5698   // sext_inreg.
5699   if (N1C && N0.getOpcode() == ISD::SHL && N1 == N0.getOperand(1)) {
5700     unsigned LowBits = OpSizeInBits - (unsigned)N1C->getZExtValue();
5701     EVT ExtVT = EVT::getIntegerVT(*DAG.getContext(), LowBits);
5702     if (VT.isVector())
5703       ExtVT = EVT::getVectorVT(*DAG.getContext(),
5704                                ExtVT, VT.getVectorNumElements());
5705     if ((!LegalOperations ||
5706          TLI.isOperationLegal(ISD::SIGN_EXTEND_INREG, ExtVT)))
5707       return DAG.getNode(ISD::SIGN_EXTEND_INREG, SDLoc(N), VT,
5708                          N0.getOperand(0), DAG.getValueType(ExtVT));
5709   }
5710 
5711   // fold (sra (sra x, c1), c2) -> (sra x, (add c1, c2))
5712   if (N0.getOpcode() == ISD::SRA) {
5713     SDLoc DL(N);
5714     EVT ShiftVT = N1.getValueType();
5715 
5716     auto MatchOutOfRange = [OpSizeInBits](ConstantSDNode *LHS,
5717                                           ConstantSDNode *RHS) {
5718       APInt c1 = LHS->getAPIntValue();
5719       APInt c2 = RHS->getAPIntValue();
5720       zeroExtendToMatch(c1, c2, 1 /* Overflow Bit */);
5721       return (c1 + c2).uge(OpSizeInBits);
5722     };
5723     if (matchBinaryPredicate(N1, N0.getOperand(1), MatchOutOfRange))
5724       return DAG.getNode(ISD::SRA, DL, VT, N0.getOperand(0),
5725                          DAG.getConstant(OpSizeInBits - 1, DL, ShiftVT));
5726 
5727     auto MatchInRange = [OpSizeInBits](ConstantSDNode *LHS,
5728                                        ConstantSDNode *RHS) {
5729       APInt c1 = LHS->getAPIntValue();
5730       APInt c2 = RHS->getAPIntValue();
5731       zeroExtendToMatch(c1, c2, 1 /* Overflow Bit */);
5732       return (c1 + c2).ult(OpSizeInBits);
5733     };
5734     if (matchBinaryPredicate(N1, N0.getOperand(1), MatchInRange)) {
5735       SDValue Sum = DAG.getNode(ISD::ADD, DL, ShiftVT, N1, N0.getOperand(1));
5736       return DAG.getNode(ISD::SRA, DL, VT, N0.getOperand(0), Sum);
5737     }
5738   }
5739 
5740   // fold (sra (shl X, m), (sub result_size, n))
5741   // -> (sign_extend (trunc (shl X, (sub (sub result_size, n), m)))) for
5742   // result_size - n != m.
5743   // If truncate is free for the target sext(shl) is likely to result in better
5744   // code.
5745   if (N0.getOpcode() == ISD::SHL && N1C) {
5746     // Get the two constanst of the shifts, CN0 = m, CN = n.
5747     const ConstantSDNode *N01C = isConstOrConstSplat(N0.getOperand(1));
5748     if (N01C) {
5749       LLVMContext &Ctx = *DAG.getContext();
5750       // Determine what the truncate's result bitsize and type would be.
5751       EVT TruncVT = EVT::getIntegerVT(Ctx, OpSizeInBits - N1C->getZExtValue());
5752 
5753       if (VT.isVector())
5754         TruncVT = EVT::getVectorVT(Ctx, TruncVT, VT.getVectorNumElements());
5755 
5756       // Determine the residual right-shift amount.
5757       int ShiftAmt = N1C->getZExtValue() - N01C->getZExtValue();
5758 
5759       // If the shift is not a no-op (in which case this should be just a sign
5760       // extend already), the truncated to type is legal, sign_extend is legal
5761       // on that type, and the truncate to that type is both legal and free,
5762       // perform the transform.
5763       if ((ShiftAmt > 0) &&
5764           TLI.isOperationLegalOrCustom(ISD::SIGN_EXTEND, TruncVT) &&
5765           TLI.isOperationLegalOrCustom(ISD::TRUNCATE, VT) &&
5766           TLI.isTruncateFree(VT, TruncVT)) {
5767         SDLoc DL(N);
5768         SDValue Amt = DAG.getConstant(ShiftAmt, DL,
5769             getShiftAmountTy(N0.getOperand(0).getValueType()));
5770         SDValue Shift = DAG.getNode(ISD::SRL, DL, VT,
5771                                     N0.getOperand(0), Amt);
5772         SDValue Trunc = DAG.getNode(ISD::TRUNCATE, DL, TruncVT,
5773                                     Shift);
5774         return DAG.getNode(ISD::SIGN_EXTEND, DL,
5775                            N->getValueType(0), Trunc);
5776       }
5777     }
5778   }
5779 
5780   // fold (sra x, (trunc (and y, c))) -> (sra x, (and (trunc y), (trunc c))).
5781   if (N1.getOpcode() == ISD::TRUNCATE &&
5782       N1.getOperand(0).getOpcode() == ISD::AND) {
5783     if (SDValue NewOp1 = distributeTruncateThroughAnd(N1.getNode()))
5784       return DAG.getNode(ISD::SRA, SDLoc(N), VT, N0, NewOp1);
5785   }
5786 
5787   // fold (sra (trunc (srl x, c1)), c2) -> (trunc (sra x, c1 + c2))
5788   //      if c1 is equal to the number of bits the trunc removes
5789   if (N0.getOpcode() == ISD::TRUNCATE &&
5790       (N0.getOperand(0).getOpcode() == ISD::SRL ||
5791        N0.getOperand(0).getOpcode() == ISD::SRA) &&
5792       N0.getOperand(0).hasOneUse() &&
5793       N0.getOperand(0).getOperand(1).hasOneUse() &&
5794       N1C) {
5795     SDValue N0Op0 = N0.getOperand(0);
5796     if (ConstantSDNode *LargeShift = isConstOrConstSplat(N0Op0.getOperand(1))) {
5797       unsigned LargeShiftVal = LargeShift->getZExtValue();
5798       EVT LargeVT = N0Op0.getValueType();
5799 
5800       if (LargeVT.getScalarSizeInBits() - OpSizeInBits == LargeShiftVal) {
5801         SDLoc DL(N);
5802         SDValue Amt =
5803           DAG.getConstant(LargeShiftVal + N1C->getZExtValue(), DL,
5804                           getShiftAmountTy(N0Op0.getOperand(0).getValueType()));
5805         SDValue SRA = DAG.getNode(ISD::SRA, DL, LargeVT,
5806                                   N0Op0.getOperand(0), Amt);
5807         return DAG.getNode(ISD::TRUNCATE, DL, VT, SRA);
5808       }
5809     }
5810   }
5811 
5812   // Simplify, based on bits shifted out of the LHS.
5813   if (N1C && SimplifyDemandedBits(SDValue(N, 0)))
5814     return SDValue(N, 0);
5815 
5816   // If the sign bit is known to be zero, switch this to a SRL.
5817   if (DAG.SignBitIsZero(N0))
5818     return DAG.getNode(ISD::SRL, SDLoc(N), VT, N0, N1);
5819 
5820   if (N1C && !N1C->isOpaque())
5821     if (SDValue NewSRA = visitShiftByConstant(N, N1C))
5822       return NewSRA;
5823 
5824   return SDValue();
5825 }
5826 
5827 SDValue DAGCombiner::visitSRL(SDNode *N) {
5828   SDValue N0 = N->getOperand(0);
5829   SDValue N1 = N->getOperand(1);
5830   EVT VT = N0.getValueType();
5831   unsigned OpSizeInBits = VT.getScalarSizeInBits();
5832 
5833   // fold vector ops
5834   if (VT.isVector())
5835     if (SDValue FoldedVOp = SimplifyVBinOp(N))
5836       return FoldedVOp;
5837 
5838   ConstantSDNode *N1C = isConstOrConstSplat(N1);
5839 
5840   // fold (srl c1, c2) -> c1 >>u c2
5841   ConstantSDNode *N0C = getAsNonOpaqueConstant(N0);
5842   if (N0C && N1C && !N1C->isOpaque())
5843     return DAG.FoldConstantArithmetic(ISD::SRL, SDLoc(N), VT, N0C, N1C);
5844   // fold (srl 0, x) -> 0
5845   if (isNullConstantOrNullSplatConstant(N0))
5846     return N0;
5847   // fold (srl x, c >= size(x)) -> undef
5848   // NOTE: ALL vector elements must be too big to avoid partial UNDEFs.
5849   auto MatchShiftTooBig = [OpSizeInBits](ConstantSDNode *Val) {
5850     return Val->getAPIntValue().uge(OpSizeInBits);
5851   };
5852   if (matchUnaryPredicate(N1, MatchShiftTooBig))
5853     return DAG.getUNDEF(VT);
5854   // fold (srl x, 0) -> x
5855   if (N1C && N1C->isNullValue())
5856     return N0;
5857 
5858   if (SDValue NewSel = foldBinOpIntoSelect(N))
5859     return NewSel;
5860 
5861   // if (srl x, c) is known to be zero, return 0
5862   if (N1C && DAG.MaskedValueIsZero(SDValue(N, 0),
5863                                    APInt::getAllOnesValue(OpSizeInBits)))
5864     return DAG.getConstant(0, SDLoc(N), VT);
5865 
5866   // fold (srl (srl x, c1), c2) -> 0 or (srl x, (add c1, c2))
5867   if (N0.getOpcode() == ISD::SRL) {
5868     auto MatchOutOfRange = [OpSizeInBits](ConstantSDNode *LHS,
5869                                           ConstantSDNode *RHS) {
5870       APInt c1 = LHS->getAPIntValue();
5871       APInt c2 = RHS->getAPIntValue();
5872       zeroExtendToMatch(c1, c2, 1 /* Overflow Bit */);
5873       return (c1 + c2).uge(OpSizeInBits);
5874     };
5875     if (matchBinaryPredicate(N1, N0.getOperand(1), MatchOutOfRange))
5876       return DAG.getConstant(0, SDLoc(N), VT);
5877 
5878     auto MatchInRange = [OpSizeInBits](ConstantSDNode *LHS,
5879                                        ConstantSDNode *RHS) {
5880       APInt c1 = LHS->getAPIntValue();
5881       APInt c2 = RHS->getAPIntValue();
5882       zeroExtendToMatch(c1, c2, 1 /* Overflow Bit */);
5883       return (c1 + c2).ult(OpSizeInBits);
5884     };
5885     if (matchBinaryPredicate(N1, N0.getOperand(1), MatchInRange)) {
5886       SDLoc DL(N);
5887       EVT ShiftVT = N1.getValueType();
5888       SDValue Sum = DAG.getNode(ISD::ADD, DL, ShiftVT, N1, N0.getOperand(1));
5889       return DAG.getNode(ISD::SRL, DL, VT, N0.getOperand(0), Sum);
5890     }
5891   }
5892 
5893   // fold (srl (trunc (srl x, c1)), c2) -> 0 or (trunc (srl x, (add c1, c2)))
5894   if (N1C && N0.getOpcode() == ISD::TRUNCATE &&
5895       N0.getOperand(0).getOpcode() == ISD::SRL) {
5896     if (auto N001C = isConstOrConstSplat(N0.getOperand(0).getOperand(1))) {
5897       uint64_t c1 = N001C->getZExtValue();
5898       uint64_t c2 = N1C->getZExtValue();
5899       EVT InnerShiftVT = N0.getOperand(0).getValueType();
5900       EVT ShiftCountVT = N0.getOperand(0).getOperand(1).getValueType();
5901       uint64_t InnerShiftSize = InnerShiftVT.getScalarSizeInBits();
5902       // This is only valid if the OpSizeInBits + c1 = size of inner shift.
5903       if (c1 + OpSizeInBits == InnerShiftSize) {
5904         SDLoc DL(N0);
5905         if (c1 + c2 >= InnerShiftSize)
5906           return DAG.getConstant(0, DL, VT);
5907         return DAG.getNode(ISD::TRUNCATE, DL, VT,
5908                            DAG.getNode(ISD::SRL, DL, InnerShiftVT,
5909                                        N0.getOperand(0).getOperand(0),
5910                                        DAG.getConstant(c1 + c2, DL,
5911                                                        ShiftCountVT)));
5912       }
5913     }
5914   }
5915 
5916   // fold (srl (shl x, c), c) -> (and x, cst2)
5917   if (N0.getOpcode() == ISD::SHL && N0.getOperand(1) == N1 &&
5918       isConstantOrConstantVector(N1, /* NoOpaques */ true)) {
5919     SDLoc DL(N);
5920     SDValue Mask =
5921         DAG.getNode(ISD::SRL, DL, VT, DAG.getAllOnesConstant(DL, VT), N1);
5922     AddToWorklist(Mask.getNode());
5923     return DAG.getNode(ISD::AND, DL, VT, N0.getOperand(0), Mask);
5924   }
5925 
5926   // fold (srl (anyextend x), c) -> (and (anyextend (srl x, c)), mask)
5927   if (N1C && N0.getOpcode() == ISD::ANY_EXTEND) {
5928     // Shifting in all undef bits?
5929     EVT SmallVT = N0.getOperand(0).getValueType();
5930     unsigned BitSize = SmallVT.getScalarSizeInBits();
5931     if (N1C->getZExtValue() >= BitSize)
5932       return DAG.getUNDEF(VT);
5933 
5934     if (!LegalTypes || TLI.isTypeDesirableForOp(ISD::SRL, SmallVT)) {
5935       uint64_t ShiftAmt = N1C->getZExtValue();
5936       SDLoc DL0(N0);
5937       SDValue SmallShift = DAG.getNode(ISD::SRL, DL0, SmallVT,
5938                                        N0.getOperand(0),
5939                           DAG.getConstant(ShiftAmt, DL0,
5940                                           getShiftAmountTy(SmallVT)));
5941       AddToWorklist(SmallShift.getNode());
5942       APInt Mask = APInt::getLowBitsSet(OpSizeInBits, OpSizeInBits - ShiftAmt);
5943       SDLoc DL(N);
5944       return DAG.getNode(ISD::AND, DL, VT,
5945                          DAG.getNode(ISD::ANY_EXTEND, DL, VT, SmallShift),
5946                          DAG.getConstant(Mask, DL, VT));
5947     }
5948   }
5949 
5950   // fold (srl (sra X, Y), 31) -> (srl X, 31).  This srl only looks at the sign
5951   // bit, which is unmodified by sra.
5952   if (N1C && N1C->getZExtValue() + 1 == OpSizeInBits) {
5953     if (N0.getOpcode() == ISD::SRA)
5954       return DAG.getNode(ISD::SRL, SDLoc(N), VT, N0.getOperand(0), N1);
5955   }
5956 
5957   // fold (srl (ctlz x), "5") -> x  iff x has one bit set (the low bit).
5958   if (N1C && N0.getOpcode() == ISD::CTLZ &&
5959       N1C->getAPIntValue() == Log2_32(OpSizeInBits)) {
5960     KnownBits Known;
5961     DAG.computeKnownBits(N0.getOperand(0), Known);
5962 
5963     // If any of the input bits are KnownOne, then the input couldn't be all
5964     // zeros, thus the result of the srl will always be zero.
5965     if (Known.One.getBoolValue()) return DAG.getConstant(0, SDLoc(N0), VT);
5966 
5967     // If all of the bits input the to ctlz node are known to be zero, then
5968     // the result of the ctlz is "32" and the result of the shift is one.
5969     APInt UnknownBits = ~Known.Zero;
5970     if (UnknownBits == 0) return DAG.getConstant(1, SDLoc(N0), VT);
5971 
5972     // Otherwise, check to see if there is exactly one bit input to the ctlz.
5973     if (UnknownBits.isPowerOf2()) {
5974       // Okay, we know that only that the single bit specified by UnknownBits
5975       // could be set on input to the CTLZ node. If this bit is set, the SRL
5976       // will return 0, if it is clear, it returns 1. Change the CTLZ/SRL pair
5977       // to an SRL/XOR pair, which is likely to simplify more.
5978       unsigned ShAmt = UnknownBits.countTrailingZeros();
5979       SDValue Op = N0.getOperand(0);
5980 
5981       if (ShAmt) {
5982         SDLoc DL(N0);
5983         Op = DAG.getNode(ISD::SRL, DL, VT, Op,
5984                   DAG.getConstant(ShAmt, DL,
5985                                   getShiftAmountTy(Op.getValueType())));
5986         AddToWorklist(Op.getNode());
5987       }
5988 
5989       SDLoc DL(N);
5990       return DAG.getNode(ISD::XOR, DL, VT,
5991                          Op, DAG.getConstant(1, DL, VT));
5992     }
5993   }
5994 
5995   // fold (srl x, (trunc (and y, c))) -> (srl x, (and (trunc y), (trunc c))).
5996   if (N1.getOpcode() == ISD::TRUNCATE &&
5997       N1.getOperand(0).getOpcode() == ISD::AND) {
5998     if (SDValue NewOp1 = distributeTruncateThroughAnd(N1.getNode()))
5999       return DAG.getNode(ISD::SRL, SDLoc(N), VT, N0, NewOp1);
6000   }
6001 
6002   // fold operands of srl based on knowledge that the low bits are not
6003   // demanded.
6004   if (N1C && SimplifyDemandedBits(SDValue(N, 0)))
6005     return SDValue(N, 0);
6006 
6007   if (N1C && !N1C->isOpaque())
6008     if (SDValue NewSRL = visitShiftByConstant(N, N1C))
6009       return NewSRL;
6010 
6011   // Attempt to convert a srl of a load into a narrower zero-extending load.
6012   if (SDValue NarrowLoad = ReduceLoadWidth(N))
6013     return NarrowLoad;
6014 
6015   // Here is a common situation. We want to optimize:
6016   //
6017   //   %a = ...
6018   //   %b = and i32 %a, 2
6019   //   %c = srl i32 %b, 1
6020   //   brcond i32 %c ...
6021   //
6022   // into
6023   //
6024   //   %a = ...
6025   //   %b = and %a, 2
6026   //   %c = setcc eq %b, 0
6027   //   brcond %c ...
6028   //
6029   // However when after the source operand of SRL is optimized into AND, the SRL
6030   // itself may not be optimized further. Look for it and add the BRCOND into
6031   // the worklist.
6032   if (N->hasOneUse()) {
6033     SDNode *Use = *N->use_begin();
6034     if (Use->getOpcode() == ISD::BRCOND)
6035       AddToWorklist(Use);
6036     else if (Use->getOpcode() == ISD::TRUNCATE && Use->hasOneUse()) {
6037       // Also look pass the truncate.
6038       Use = *Use->use_begin();
6039       if (Use->getOpcode() == ISD::BRCOND)
6040         AddToWorklist(Use);
6041     }
6042   }
6043 
6044   return SDValue();
6045 }
6046 
6047 SDValue DAGCombiner::visitABS(SDNode *N) {
6048   SDValue N0 = N->getOperand(0);
6049   EVT VT = N->getValueType(0);
6050 
6051   // fold (abs c1) -> c2
6052   if (DAG.isConstantIntBuildVectorOrConstantInt(N0))
6053     return DAG.getNode(ISD::ABS, SDLoc(N), VT, N0);
6054   // fold (abs (abs x)) -> (abs x)
6055   if (N0.getOpcode() == ISD::ABS)
6056     return N0;
6057   // fold (abs x) -> x iff not-negative
6058   if (DAG.SignBitIsZero(N0))
6059     return N0;
6060   return SDValue();
6061 }
6062 
6063 SDValue DAGCombiner::visitBSWAP(SDNode *N) {
6064   SDValue N0 = N->getOperand(0);
6065   EVT VT = N->getValueType(0);
6066 
6067   // fold (bswap c1) -> c2
6068   if (DAG.isConstantIntBuildVectorOrConstantInt(N0))
6069     return DAG.getNode(ISD::BSWAP, SDLoc(N), VT, N0);
6070   // fold (bswap (bswap x)) -> x
6071   if (N0.getOpcode() == ISD::BSWAP)
6072     return N0->getOperand(0);
6073   return SDValue();
6074 }
6075 
6076 SDValue DAGCombiner::visitBITREVERSE(SDNode *N) {
6077   SDValue N0 = N->getOperand(0);
6078   EVT VT = N->getValueType(0);
6079 
6080   // fold (bitreverse c1) -> c2
6081   if (DAG.isConstantIntBuildVectorOrConstantInt(N0))
6082     return DAG.getNode(ISD::BITREVERSE, SDLoc(N), VT, N0);
6083   // fold (bitreverse (bitreverse x)) -> x
6084   if (N0.getOpcode() == ISD::BITREVERSE)
6085     return N0.getOperand(0);
6086   return SDValue();
6087 }
6088 
6089 SDValue DAGCombiner::visitCTLZ(SDNode *N) {
6090   SDValue N0 = N->getOperand(0);
6091   EVT VT = N->getValueType(0);
6092 
6093   // fold (ctlz c1) -> c2
6094   if (DAG.isConstantIntBuildVectorOrConstantInt(N0))
6095     return DAG.getNode(ISD::CTLZ, SDLoc(N), VT, N0);
6096   return SDValue();
6097 }
6098 
6099 SDValue DAGCombiner::visitCTLZ_ZERO_UNDEF(SDNode *N) {
6100   SDValue N0 = N->getOperand(0);
6101   EVT VT = N->getValueType(0);
6102 
6103   // fold (ctlz_zero_undef c1) -> c2
6104   if (DAG.isConstantIntBuildVectorOrConstantInt(N0))
6105     return DAG.getNode(ISD::CTLZ_ZERO_UNDEF, SDLoc(N), VT, N0);
6106   return SDValue();
6107 }
6108 
6109 SDValue DAGCombiner::visitCTTZ(SDNode *N) {
6110   SDValue N0 = N->getOperand(0);
6111   EVT VT = N->getValueType(0);
6112 
6113   // fold (cttz c1) -> c2
6114   if (DAG.isConstantIntBuildVectorOrConstantInt(N0))
6115     return DAG.getNode(ISD::CTTZ, SDLoc(N), VT, N0);
6116   return SDValue();
6117 }
6118 
6119 SDValue DAGCombiner::visitCTTZ_ZERO_UNDEF(SDNode *N) {
6120   SDValue N0 = N->getOperand(0);
6121   EVT VT = N->getValueType(0);
6122 
6123   // fold (cttz_zero_undef c1) -> c2
6124   if (DAG.isConstantIntBuildVectorOrConstantInt(N0))
6125     return DAG.getNode(ISD::CTTZ_ZERO_UNDEF, SDLoc(N), VT, N0);
6126   return SDValue();
6127 }
6128 
6129 SDValue DAGCombiner::visitCTPOP(SDNode *N) {
6130   SDValue N0 = N->getOperand(0);
6131   EVT VT = N->getValueType(0);
6132 
6133   // fold (ctpop c1) -> c2
6134   if (DAG.isConstantIntBuildVectorOrConstantInt(N0))
6135     return DAG.getNode(ISD::CTPOP, SDLoc(N), VT, N0);
6136   return SDValue();
6137 }
6138 
6139 /// \brief Generate Min/Max node
6140 static SDValue combineMinNumMaxNum(const SDLoc &DL, EVT VT, SDValue LHS,
6141                                    SDValue RHS, SDValue True, SDValue False,
6142                                    ISD::CondCode CC, const TargetLowering &TLI,
6143                                    SelectionDAG &DAG) {
6144   if (!(LHS == True && RHS == False) && !(LHS == False && RHS == True))
6145     return SDValue();
6146 
6147   switch (CC) {
6148   case ISD::SETOLT:
6149   case ISD::SETOLE:
6150   case ISD::SETLT:
6151   case ISD::SETLE:
6152   case ISD::SETULT:
6153   case ISD::SETULE: {
6154     unsigned Opcode = (LHS == True) ? ISD::FMINNUM : ISD::FMAXNUM;
6155     if (TLI.isOperationLegal(Opcode, VT))
6156       return DAG.getNode(Opcode, DL, VT, LHS, RHS);
6157     return SDValue();
6158   }
6159   case ISD::SETOGT:
6160   case ISD::SETOGE:
6161   case ISD::SETGT:
6162   case ISD::SETGE:
6163   case ISD::SETUGT:
6164   case ISD::SETUGE: {
6165     unsigned Opcode = (LHS == True) ? ISD::FMAXNUM : ISD::FMINNUM;
6166     if (TLI.isOperationLegal(Opcode, VT))
6167       return DAG.getNode(Opcode, DL, VT, LHS, RHS);
6168     return SDValue();
6169   }
6170   default:
6171     return SDValue();
6172   }
6173 }
6174 
6175 SDValue DAGCombiner::foldSelectOfConstants(SDNode *N) {
6176   SDValue Cond = N->getOperand(0);
6177   SDValue N1 = N->getOperand(1);
6178   SDValue N2 = N->getOperand(2);
6179   EVT VT = N->getValueType(0);
6180   EVT CondVT = Cond.getValueType();
6181   SDLoc DL(N);
6182 
6183   if (!VT.isInteger())
6184     return SDValue();
6185 
6186   auto *C1 = dyn_cast<ConstantSDNode>(N1);
6187   auto *C2 = dyn_cast<ConstantSDNode>(N2);
6188   if (!C1 || !C2)
6189     return SDValue();
6190 
6191   // Only do this before legalization to avoid conflicting with target-specific
6192   // transforms in the other direction (create a select from a zext/sext). There
6193   // is also a target-independent combine here in DAGCombiner in the other
6194   // direction for (select Cond, -1, 0) when the condition is not i1.
6195   if (CondVT == MVT::i1 && !LegalOperations) {
6196     if (C1->isNullValue() && C2->isOne()) {
6197       // select Cond, 0, 1 --> zext (!Cond)
6198       SDValue NotCond = DAG.getNOT(DL, Cond, MVT::i1);
6199       if (VT != MVT::i1)
6200         NotCond = DAG.getNode(ISD::ZERO_EXTEND, DL, VT, NotCond);
6201       return NotCond;
6202     }
6203     if (C1->isNullValue() && C2->isAllOnesValue()) {
6204       // select Cond, 0, -1 --> sext (!Cond)
6205       SDValue NotCond = DAG.getNOT(DL, Cond, MVT::i1);
6206       if (VT != MVT::i1)
6207         NotCond = DAG.getNode(ISD::SIGN_EXTEND, DL, VT, NotCond);
6208       return NotCond;
6209     }
6210     if (C1->isOne() && C2->isNullValue()) {
6211       // select Cond, 1, 0 --> zext (Cond)
6212       if (VT != MVT::i1)
6213         Cond = DAG.getNode(ISD::ZERO_EXTEND, DL, VT, Cond);
6214       return Cond;
6215     }
6216     if (C1->isAllOnesValue() && C2->isNullValue()) {
6217       // select Cond, -1, 0 --> sext (Cond)
6218       if (VT != MVT::i1)
6219         Cond = DAG.getNode(ISD::SIGN_EXTEND, DL, VT, Cond);
6220       return Cond;
6221     }
6222 
6223     // For any constants that differ by 1, we can transform the select into an
6224     // extend and add. Use a target hook because some targets may prefer to
6225     // transform in the other direction.
6226     if (TLI.convertSelectOfConstantsToMath(VT)) {
6227       if (C1->getAPIntValue() - 1 == C2->getAPIntValue()) {
6228         // select Cond, C1, C1-1 --> add (zext Cond), C1-1
6229         if (VT != MVT::i1)
6230           Cond = DAG.getNode(ISD::ZERO_EXTEND, DL, VT, Cond);
6231         return DAG.getNode(ISD::ADD, DL, VT, Cond, N2);
6232       }
6233       if (C1->getAPIntValue() + 1 == C2->getAPIntValue()) {
6234         // select Cond, C1, C1+1 --> add (sext Cond), C1+1
6235         if (VT != MVT::i1)
6236           Cond = DAG.getNode(ISD::SIGN_EXTEND, DL, VT, Cond);
6237         return DAG.getNode(ISD::ADD, DL, VT, Cond, N2);
6238       }
6239     }
6240 
6241     return SDValue();
6242   }
6243 
6244   // fold (select Cond, 0, 1) -> (xor Cond, 1)
6245   // We can't do this reliably if integer based booleans have different contents
6246   // to floating point based booleans. This is because we can't tell whether we
6247   // have an integer-based boolean or a floating-point-based boolean unless we
6248   // can find the SETCC that produced it and inspect its operands. This is
6249   // fairly easy if C is the SETCC node, but it can potentially be
6250   // undiscoverable (or not reasonably discoverable). For example, it could be
6251   // in another basic block or it could require searching a complicated
6252   // expression.
6253   if (CondVT.isInteger() &&
6254       TLI.getBooleanContents(false, true) ==
6255           TargetLowering::ZeroOrOneBooleanContent &&
6256       TLI.getBooleanContents(false, false) ==
6257           TargetLowering::ZeroOrOneBooleanContent &&
6258       C1->isNullValue() && C2->isOne()) {
6259     SDValue NotCond =
6260         DAG.getNode(ISD::XOR, DL, CondVT, Cond, DAG.getConstant(1, DL, CondVT));
6261     if (VT.bitsEq(CondVT))
6262       return NotCond;
6263     return DAG.getZExtOrTrunc(NotCond, DL, VT);
6264   }
6265 
6266   return SDValue();
6267 }
6268 
6269 SDValue DAGCombiner::visitSELECT(SDNode *N) {
6270   SDValue N0 = N->getOperand(0);
6271   SDValue N1 = N->getOperand(1);
6272   SDValue N2 = N->getOperand(2);
6273   EVT VT = N->getValueType(0);
6274   EVT VT0 = N0.getValueType();
6275   SDLoc DL(N);
6276 
6277   // fold (select C, X, X) -> X
6278   if (N1 == N2)
6279     return N1;
6280 
6281   if (const ConstantSDNode *N0C = dyn_cast<const ConstantSDNode>(N0)) {
6282     // fold (select true, X, Y) -> X
6283     // fold (select false, X, Y) -> Y
6284     return !N0C->isNullValue() ? N1 : N2;
6285   }
6286 
6287   // fold (select X, X, Y) -> (or X, Y)
6288   // fold (select X, 1, Y) -> (or C, Y)
6289   if (VT == VT0 && VT == MVT::i1 && (N0 == N1 || isOneConstant(N1)))
6290     return DAG.getNode(ISD::OR, DL, VT, N0, N2);
6291 
6292   if (SDValue V = foldSelectOfConstants(N))
6293     return V;
6294 
6295   // fold (select C, 0, X) -> (and (not C), X)
6296   if (VT == VT0 && VT == MVT::i1 && isNullConstant(N1)) {
6297     SDValue NOTNode = DAG.getNOT(SDLoc(N0), N0, VT);
6298     AddToWorklist(NOTNode.getNode());
6299     return DAG.getNode(ISD::AND, DL, VT, NOTNode, N2);
6300   }
6301   // fold (select C, X, 1) -> (or (not C), X)
6302   if (VT == VT0 && VT == MVT::i1 && isOneConstant(N2)) {
6303     SDValue NOTNode = DAG.getNOT(SDLoc(N0), N0, VT);
6304     AddToWorklist(NOTNode.getNode());
6305     return DAG.getNode(ISD::OR, DL, VT, NOTNode, N1);
6306   }
6307   // fold (select X, Y, X) -> (and X, Y)
6308   // fold (select X, Y, 0) -> (and X, Y)
6309   if (VT == VT0 && VT == MVT::i1 && (N0 == N2 || isNullConstant(N2)))
6310     return DAG.getNode(ISD::AND, DL, VT, N0, N1);
6311 
6312   // If we can fold this based on the true/false value, do so.
6313   if (SimplifySelectOps(N, N1, N2))
6314     return SDValue(N, 0); // Don't revisit N.
6315 
6316   if (VT0 == MVT::i1) {
6317     // The code in this block deals with the following 2 equivalences:
6318     //    select(C0|C1, x, y) <=> select(C0, x, select(C1, x, y))
6319     //    select(C0&C1, x, y) <=> select(C0, select(C1, x, y), y)
6320     // The target can specify its preferred form with the
6321     // shouldNormalizeToSelectSequence() callback. However we always transform
6322     // to the right anyway if we find the inner select exists in the DAG anyway
6323     // and we always transform to the left side if we know that we can further
6324     // optimize the combination of the conditions.
6325     bool normalizeToSequence =
6326         TLI.shouldNormalizeToSelectSequence(*DAG.getContext(), VT);
6327     // select (and Cond0, Cond1), X, Y
6328     //   -> select Cond0, (select Cond1, X, Y), Y
6329     if (N0->getOpcode() == ISD::AND && N0->hasOneUse()) {
6330       SDValue Cond0 = N0->getOperand(0);
6331       SDValue Cond1 = N0->getOperand(1);
6332       SDValue InnerSelect =
6333           DAG.getNode(ISD::SELECT, DL, N1.getValueType(), Cond1, N1, N2);
6334       if (normalizeToSequence || !InnerSelect.use_empty())
6335         return DAG.getNode(ISD::SELECT, DL, N1.getValueType(), Cond0,
6336                            InnerSelect, N2);
6337     }
6338     // select (or Cond0, Cond1), X, Y -> select Cond0, X, (select Cond1, X, Y)
6339     if (N0->getOpcode() == ISD::OR && N0->hasOneUse()) {
6340       SDValue Cond0 = N0->getOperand(0);
6341       SDValue Cond1 = N0->getOperand(1);
6342       SDValue InnerSelect =
6343           DAG.getNode(ISD::SELECT, DL, N1.getValueType(), Cond1, N1, N2);
6344       if (normalizeToSequence || !InnerSelect.use_empty())
6345         return DAG.getNode(ISD::SELECT, DL, N1.getValueType(), Cond0, N1,
6346                            InnerSelect);
6347     }
6348 
6349     // select Cond0, (select Cond1, X, Y), Y -> select (and Cond0, Cond1), X, Y
6350     if (N1->getOpcode() == ISD::SELECT && N1->hasOneUse()) {
6351       SDValue N1_0 = N1->getOperand(0);
6352       SDValue N1_1 = N1->getOperand(1);
6353       SDValue N1_2 = N1->getOperand(2);
6354       if (N1_2 == N2 && N0.getValueType() == N1_0.getValueType()) {
6355         // Create the actual and node if we can generate good code for it.
6356         if (!normalizeToSequence) {
6357           SDValue And = DAG.getNode(ISD::AND, DL, N0.getValueType(), N0, N1_0);
6358           return DAG.getNode(ISD::SELECT, DL, N1.getValueType(), And, N1_1, N2);
6359         }
6360         // Otherwise see if we can optimize the "and" to a better pattern.
6361         if (SDValue Combined = visitANDLike(N0, N1_0, N))
6362           return DAG.getNode(ISD::SELECT, DL, N1.getValueType(), Combined, N1_1,
6363                              N2);
6364       }
6365     }
6366     // select Cond0, X, (select Cond1, X, Y) -> select (or Cond0, Cond1), X, Y
6367     if (N2->getOpcode() == ISD::SELECT && N2->hasOneUse()) {
6368       SDValue N2_0 = N2->getOperand(0);
6369       SDValue N2_1 = N2->getOperand(1);
6370       SDValue N2_2 = N2->getOperand(2);
6371       if (N2_1 == N1 && N0.getValueType() == N2_0.getValueType()) {
6372         // Create the actual or node if we can generate good code for it.
6373         if (!normalizeToSequence) {
6374           SDValue Or = DAG.getNode(ISD::OR, DL, N0.getValueType(), N0, N2_0);
6375           return DAG.getNode(ISD::SELECT, DL, N1.getValueType(), Or, N1, N2_2);
6376         }
6377         // Otherwise see if we can optimize to a better pattern.
6378         if (SDValue Combined = visitORLike(N0, N2_0, N))
6379           return DAG.getNode(ISD::SELECT, DL, N1.getValueType(), Combined, N1,
6380                              N2_2);
6381       }
6382     }
6383   }
6384 
6385   // select (xor Cond, 1), X, Y -> select Cond, Y, X
6386   if (VT0 == MVT::i1) {
6387     if (N0->getOpcode() == ISD::XOR) {
6388       if (auto *C = dyn_cast<ConstantSDNode>(N0->getOperand(1))) {
6389         SDValue Cond0 = N0->getOperand(0);
6390         if (C->isOne())
6391           return DAG.getNode(ISD::SELECT, DL, N1.getValueType(), Cond0, N2, N1);
6392       }
6393     }
6394   }
6395 
6396   // fold selects based on a setcc into other things, such as min/max/abs
6397   if (N0.getOpcode() == ISD::SETCC) {
6398     // select x, y (fcmp lt x, y) -> fminnum x, y
6399     // select x, y (fcmp gt x, y) -> fmaxnum x, y
6400     //
6401     // This is OK if we don't care about what happens if either operand is a
6402     // NaN.
6403     //
6404 
6405     // FIXME: Instead of testing for UnsafeFPMath, this should be checking for
6406     // no signed zeros as well as no nans.
6407     const TargetOptions &Options = DAG.getTarget().Options;
6408     if (Options.UnsafeFPMath && VT.isFloatingPoint() && N0.hasOneUse() &&
6409         DAG.isKnownNeverNaN(N1) && DAG.isKnownNeverNaN(N2)) {
6410       ISD::CondCode CC = cast<CondCodeSDNode>(N0.getOperand(2))->get();
6411 
6412       if (SDValue FMinMax = combineMinNumMaxNum(
6413               DL, VT, N0.getOperand(0), N0.getOperand(1), N1, N2, CC, TLI, DAG))
6414         return FMinMax;
6415     }
6416 
6417     if ((!LegalOperations &&
6418          TLI.isOperationLegalOrCustom(ISD::SELECT_CC, VT)) ||
6419         TLI.isOperationLegal(ISD::SELECT_CC, VT))
6420       return DAG.getNode(ISD::SELECT_CC, DL, VT, N0.getOperand(0),
6421                          N0.getOperand(1), N1, N2, N0.getOperand(2));
6422     return SimplifySelect(DL, N0, N1, N2);
6423   }
6424 
6425   return SDValue();
6426 }
6427 
6428 static
6429 std::pair<SDValue, SDValue> SplitVSETCC(const SDNode *N, SelectionDAG &DAG) {
6430   SDLoc DL(N);
6431   EVT LoVT, HiVT;
6432   std::tie(LoVT, HiVT) = DAG.GetSplitDestVTs(N->getValueType(0));
6433 
6434   // Split the inputs.
6435   SDValue Lo, Hi, LL, LH, RL, RH;
6436   std::tie(LL, LH) = DAG.SplitVectorOperand(N, 0);
6437   std::tie(RL, RH) = DAG.SplitVectorOperand(N, 1);
6438 
6439   Lo = DAG.getNode(N->getOpcode(), DL, LoVT, LL, RL, N->getOperand(2));
6440   Hi = DAG.getNode(N->getOpcode(), DL, HiVT, LH, RH, N->getOperand(2));
6441 
6442   return std::make_pair(Lo, Hi);
6443 }
6444 
6445 // This function assumes all the vselect's arguments are CONCAT_VECTOR
6446 // nodes and that the condition is a BV of ConstantSDNodes (or undefs).
6447 static SDValue ConvertSelectToConcatVector(SDNode *N, SelectionDAG &DAG) {
6448   SDLoc DL(N);
6449   SDValue Cond = N->getOperand(0);
6450   SDValue LHS = N->getOperand(1);
6451   SDValue RHS = N->getOperand(2);
6452   EVT VT = N->getValueType(0);
6453   int NumElems = VT.getVectorNumElements();
6454   assert(LHS.getOpcode() == ISD::CONCAT_VECTORS &&
6455          RHS.getOpcode() == ISD::CONCAT_VECTORS &&
6456          Cond.getOpcode() == ISD::BUILD_VECTOR);
6457 
6458   // CONCAT_VECTOR can take an arbitrary number of arguments. We only care about
6459   // binary ones here.
6460   if (LHS->getNumOperands() != 2 || RHS->getNumOperands() != 2)
6461     return SDValue();
6462 
6463   // We're sure we have an even number of elements due to the
6464   // concat_vectors we have as arguments to vselect.
6465   // Skip BV elements until we find one that's not an UNDEF
6466   // After we find an UNDEF element, keep looping until we get to half the
6467   // length of the BV and see if all the non-undef nodes are the same.
6468   ConstantSDNode *BottomHalf = nullptr;
6469   for (int i = 0; i < NumElems / 2; ++i) {
6470     if (Cond->getOperand(i)->isUndef())
6471       continue;
6472 
6473     if (BottomHalf == nullptr)
6474       BottomHalf = cast<ConstantSDNode>(Cond.getOperand(i));
6475     else if (Cond->getOperand(i).getNode() != BottomHalf)
6476       return SDValue();
6477   }
6478 
6479   // Do the same for the second half of the BuildVector
6480   ConstantSDNode *TopHalf = nullptr;
6481   for (int i = NumElems / 2; i < NumElems; ++i) {
6482     if (Cond->getOperand(i)->isUndef())
6483       continue;
6484 
6485     if (TopHalf == nullptr)
6486       TopHalf = cast<ConstantSDNode>(Cond.getOperand(i));
6487     else if (Cond->getOperand(i).getNode() != TopHalf)
6488       return SDValue();
6489   }
6490 
6491   assert(TopHalf && BottomHalf &&
6492          "One half of the selector was all UNDEFs and the other was all the "
6493          "same value. This should have been addressed before this function.");
6494   return DAG.getNode(
6495       ISD::CONCAT_VECTORS, DL, VT,
6496       BottomHalf->isNullValue() ? RHS->getOperand(0) : LHS->getOperand(0),
6497       TopHalf->isNullValue() ? RHS->getOperand(1) : LHS->getOperand(1));
6498 }
6499 
6500 SDValue DAGCombiner::visitMSCATTER(SDNode *N) {
6501   if (Level >= AfterLegalizeTypes)
6502     return SDValue();
6503 
6504   MaskedScatterSDNode *MSC = cast<MaskedScatterSDNode>(N);
6505   SDValue Mask = MSC->getMask();
6506   SDValue Data  = MSC->getValue();
6507   SDLoc DL(N);
6508 
6509   // If the MSCATTER data type requires splitting and the mask is provided by a
6510   // SETCC, then split both nodes and its operands before legalization. This
6511   // prevents the type legalizer from unrolling SETCC into scalar comparisons
6512   // and enables future optimizations (e.g. min/max pattern matching on X86).
6513   if (Mask.getOpcode() != ISD::SETCC)
6514     return SDValue();
6515 
6516   // Check if any splitting is required.
6517   if (TLI.getTypeAction(*DAG.getContext(), Data.getValueType()) !=
6518       TargetLowering::TypeSplitVector)
6519     return SDValue();
6520   SDValue MaskLo, MaskHi, Lo, Hi;
6521   std::tie(MaskLo, MaskHi) = SplitVSETCC(Mask.getNode(), DAG);
6522 
6523   EVT LoVT, HiVT;
6524   std::tie(LoVT, HiVT) = DAG.GetSplitDestVTs(MSC->getValueType(0));
6525 
6526   SDValue Chain = MSC->getChain();
6527 
6528   EVT MemoryVT = MSC->getMemoryVT();
6529   unsigned Alignment = MSC->getOriginalAlignment();
6530 
6531   EVT LoMemVT, HiMemVT;
6532   std::tie(LoMemVT, HiMemVT) = DAG.GetSplitDestVTs(MemoryVT);
6533 
6534   SDValue DataLo, DataHi;
6535   std::tie(DataLo, DataHi) = DAG.SplitVector(Data, DL);
6536 
6537   SDValue BasePtr = MSC->getBasePtr();
6538   SDValue IndexLo, IndexHi;
6539   std::tie(IndexLo, IndexHi) = DAG.SplitVector(MSC->getIndex(), DL);
6540 
6541   MachineMemOperand *MMO = DAG.getMachineFunction().
6542     getMachineMemOperand(MSC->getPointerInfo(),
6543                           MachineMemOperand::MOStore,  LoMemVT.getStoreSize(),
6544                           Alignment, MSC->getAAInfo(), MSC->getRanges());
6545 
6546   SDValue OpsLo[] = { Chain, DataLo, MaskLo, BasePtr, IndexLo };
6547   Lo = DAG.getMaskedScatter(DAG.getVTList(MVT::Other), DataLo.getValueType(),
6548                             DL, OpsLo, MMO);
6549 
6550   SDValue OpsHi[] = {Chain, DataHi, MaskHi, BasePtr, IndexHi};
6551   Hi = DAG.getMaskedScatter(DAG.getVTList(MVT::Other), DataHi.getValueType(),
6552                             DL, OpsHi, MMO);
6553 
6554   AddToWorklist(Lo.getNode());
6555   AddToWorklist(Hi.getNode());
6556 
6557   return DAG.getNode(ISD::TokenFactor, DL, MVT::Other, Lo, Hi);
6558 }
6559 
6560 SDValue DAGCombiner::visitMSTORE(SDNode *N) {
6561   if (Level >= AfterLegalizeTypes)
6562     return SDValue();
6563 
6564   MaskedStoreSDNode *MST = dyn_cast<MaskedStoreSDNode>(N);
6565   SDValue Mask = MST->getMask();
6566   SDValue Data  = MST->getValue();
6567   EVT VT = Data.getValueType();
6568   SDLoc DL(N);
6569 
6570   // If the MSTORE data type requires splitting and the mask is provided by a
6571   // SETCC, then split both nodes and its operands before legalization. This
6572   // prevents the type legalizer from unrolling SETCC into scalar comparisons
6573   // and enables future optimizations (e.g. min/max pattern matching on X86).
6574   if (Mask.getOpcode() == ISD::SETCC) {
6575     // Check if any splitting is required.
6576     if (TLI.getTypeAction(*DAG.getContext(), VT) !=
6577         TargetLowering::TypeSplitVector)
6578       return SDValue();
6579 
6580     SDValue MaskLo, MaskHi, Lo, Hi;
6581     std::tie(MaskLo, MaskHi) = SplitVSETCC(Mask.getNode(), DAG);
6582 
6583     SDValue Chain = MST->getChain();
6584     SDValue Ptr   = MST->getBasePtr();
6585 
6586     EVT MemoryVT = MST->getMemoryVT();
6587     unsigned Alignment = MST->getOriginalAlignment();
6588 
6589     // if Alignment is equal to the vector size,
6590     // take the half of it for the second part
6591     unsigned SecondHalfAlignment =
6592       (Alignment == VT.getSizeInBits() / 8) ? Alignment / 2 : Alignment;
6593 
6594     EVT LoMemVT, HiMemVT;
6595     std::tie(LoMemVT, HiMemVT) = DAG.GetSplitDestVTs(MemoryVT);
6596 
6597     SDValue DataLo, DataHi;
6598     std::tie(DataLo, DataHi) = DAG.SplitVector(Data, DL);
6599 
6600     MachineMemOperand *MMO = DAG.getMachineFunction().
6601       getMachineMemOperand(MST->getPointerInfo(),
6602                            MachineMemOperand::MOStore,  LoMemVT.getStoreSize(),
6603                            Alignment, MST->getAAInfo(), MST->getRanges());
6604 
6605     Lo = DAG.getMaskedStore(Chain, DL, DataLo, Ptr, MaskLo, LoMemVT, MMO,
6606                             MST->isTruncatingStore(),
6607                             MST->isCompressingStore());
6608 
6609     Ptr = TLI.IncrementMemoryAddress(Ptr, MaskLo, DL, LoMemVT, DAG,
6610                                      MST->isCompressingStore());
6611 
6612     MMO = DAG.getMachineFunction().
6613       getMachineMemOperand(MST->getPointerInfo(),
6614                            MachineMemOperand::MOStore,  HiMemVT.getStoreSize(),
6615                            SecondHalfAlignment, MST->getAAInfo(),
6616                            MST->getRanges());
6617 
6618     Hi = DAG.getMaskedStore(Chain, DL, DataHi, Ptr, MaskHi, HiMemVT, MMO,
6619                             MST->isTruncatingStore(),
6620                             MST->isCompressingStore());
6621 
6622     AddToWorklist(Lo.getNode());
6623     AddToWorklist(Hi.getNode());
6624 
6625     return DAG.getNode(ISD::TokenFactor, DL, MVT::Other, Lo, Hi);
6626   }
6627   return SDValue();
6628 }
6629 
6630 SDValue DAGCombiner::visitMGATHER(SDNode *N) {
6631   if (Level >= AfterLegalizeTypes)
6632     return SDValue();
6633 
6634   MaskedGatherSDNode *MGT = dyn_cast<MaskedGatherSDNode>(N);
6635   SDValue Mask = MGT->getMask();
6636   SDLoc DL(N);
6637 
6638   // If the MGATHER result requires splitting and the mask is provided by a
6639   // SETCC, then split both nodes and its operands before legalization. This
6640   // prevents the type legalizer from unrolling SETCC into scalar comparisons
6641   // and enables future optimizations (e.g. min/max pattern matching on X86).
6642 
6643   if (Mask.getOpcode() != ISD::SETCC)
6644     return SDValue();
6645 
6646   EVT VT = N->getValueType(0);
6647 
6648   // Check if any splitting is required.
6649   if (TLI.getTypeAction(*DAG.getContext(), VT) !=
6650       TargetLowering::TypeSplitVector)
6651     return SDValue();
6652 
6653   SDValue MaskLo, MaskHi, Lo, Hi;
6654   std::tie(MaskLo, MaskHi) = SplitVSETCC(Mask.getNode(), DAG);
6655 
6656   SDValue Src0 = MGT->getValue();
6657   SDValue Src0Lo, Src0Hi;
6658   std::tie(Src0Lo, Src0Hi) = DAG.SplitVector(Src0, DL);
6659 
6660   EVT LoVT, HiVT;
6661   std::tie(LoVT, HiVT) = DAG.GetSplitDestVTs(VT);
6662 
6663   SDValue Chain = MGT->getChain();
6664   EVT MemoryVT = MGT->getMemoryVT();
6665   unsigned Alignment = MGT->getOriginalAlignment();
6666 
6667   EVT LoMemVT, HiMemVT;
6668   std::tie(LoMemVT, HiMemVT) = DAG.GetSplitDestVTs(MemoryVT);
6669 
6670   SDValue BasePtr = MGT->getBasePtr();
6671   SDValue Index = MGT->getIndex();
6672   SDValue IndexLo, IndexHi;
6673   std::tie(IndexLo, IndexHi) = DAG.SplitVector(Index, DL);
6674 
6675   MachineMemOperand *MMO = DAG.getMachineFunction().
6676     getMachineMemOperand(MGT->getPointerInfo(),
6677                           MachineMemOperand::MOLoad,  LoMemVT.getStoreSize(),
6678                           Alignment, MGT->getAAInfo(), MGT->getRanges());
6679 
6680   SDValue OpsLo[] = { Chain, Src0Lo, MaskLo, BasePtr, IndexLo };
6681   Lo = DAG.getMaskedGather(DAG.getVTList(LoVT, MVT::Other), LoVT, DL, OpsLo,
6682                             MMO);
6683 
6684   SDValue OpsHi[] = {Chain, Src0Hi, MaskHi, BasePtr, IndexHi};
6685   Hi = DAG.getMaskedGather(DAG.getVTList(HiVT, MVT::Other), HiVT, DL, OpsHi,
6686                             MMO);
6687 
6688   AddToWorklist(Lo.getNode());
6689   AddToWorklist(Hi.getNode());
6690 
6691   // Build a factor node to remember that this load is independent of the
6692   // other one.
6693   Chain = DAG.getNode(ISD::TokenFactor, DL, MVT::Other, Lo.getValue(1),
6694                       Hi.getValue(1));
6695 
6696   // Legalized the chain result - switch anything that used the old chain to
6697   // use the new one.
6698   DAG.ReplaceAllUsesOfValueWith(SDValue(MGT, 1), Chain);
6699 
6700   SDValue GatherRes = DAG.getNode(ISD::CONCAT_VECTORS, DL, VT, Lo, Hi);
6701 
6702   SDValue RetOps[] = { GatherRes, Chain };
6703   return DAG.getMergeValues(RetOps, DL);
6704 }
6705 
6706 SDValue DAGCombiner::visitMLOAD(SDNode *N) {
6707   if (Level >= AfterLegalizeTypes)
6708     return SDValue();
6709 
6710   MaskedLoadSDNode *MLD = dyn_cast<MaskedLoadSDNode>(N);
6711   SDValue Mask = MLD->getMask();
6712   SDLoc DL(N);
6713 
6714   // If the MLOAD result requires splitting and the mask is provided by a
6715   // SETCC, then split both nodes and its operands before legalization. This
6716   // prevents the type legalizer from unrolling SETCC into scalar comparisons
6717   // and enables future optimizations (e.g. min/max pattern matching on X86).
6718   if (Mask.getOpcode() == ISD::SETCC) {
6719     EVT VT = N->getValueType(0);
6720 
6721     // Check if any splitting is required.
6722     if (TLI.getTypeAction(*DAG.getContext(), VT) !=
6723         TargetLowering::TypeSplitVector)
6724       return SDValue();
6725 
6726     SDValue MaskLo, MaskHi, Lo, Hi;
6727     std::tie(MaskLo, MaskHi) = SplitVSETCC(Mask.getNode(), DAG);
6728 
6729     SDValue Src0 = MLD->getSrc0();
6730     SDValue Src0Lo, Src0Hi;
6731     std::tie(Src0Lo, Src0Hi) = DAG.SplitVector(Src0, DL);
6732 
6733     EVT LoVT, HiVT;
6734     std::tie(LoVT, HiVT) = DAG.GetSplitDestVTs(MLD->getValueType(0));
6735 
6736     SDValue Chain = MLD->getChain();
6737     SDValue Ptr   = MLD->getBasePtr();
6738     EVT MemoryVT = MLD->getMemoryVT();
6739     unsigned Alignment = MLD->getOriginalAlignment();
6740 
6741     // if Alignment is equal to the vector size,
6742     // take the half of it for the second part
6743     unsigned SecondHalfAlignment =
6744       (Alignment == MLD->getValueType(0).getSizeInBits()/8) ?
6745          Alignment/2 : Alignment;
6746 
6747     EVT LoMemVT, HiMemVT;
6748     std::tie(LoMemVT, HiMemVT) = DAG.GetSplitDestVTs(MemoryVT);
6749 
6750     MachineMemOperand *MMO = DAG.getMachineFunction().
6751     getMachineMemOperand(MLD->getPointerInfo(),
6752                          MachineMemOperand::MOLoad,  LoMemVT.getStoreSize(),
6753                          Alignment, MLD->getAAInfo(), MLD->getRanges());
6754 
6755     Lo = DAG.getMaskedLoad(LoVT, DL, Chain, Ptr, MaskLo, Src0Lo, LoMemVT, MMO,
6756                            ISD::NON_EXTLOAD, MLD->isExpandingLoad());
6757 
6758     Ptr = TLI.IncrementMemoryAddress(Ptr, MaskLo, DL, LoMemVT, DAG,
6759                                      MLD->isExpandingLoad());
6760 
6761     MMO = DAG.getMachineFunction().
6762     getMachineMemOperand(MLD->getPointerInfo(),
6763                          MachineMemOperand::MOLoad,  HiMemVT.getStoreSize(),
6764                          SecondHalfAlignment, MLD->getAAInfo(), MLD->getRanges());
6765 
6766     Hi = DAG.getMaskedLoad(HiVT, DL, Chain, Ptr, MaskHi, Src0Hi, HiMemVT, MMO,
6767                            ISD::NON_EXTLOAD, MLD->isExpandingLoad());
6768 
6769     AddToWorklist(Lo.getNode());
6770     AddToWorklist(Hi.getNode());
6771 
6772     // Build a factor node to remember that this load is independent of the
6773     // other one.
6774     Chain = DAG.getNode(ISD::TokenFactor, DL, MVT::Other, Lo.getValue(1),
6775                         Hi.getValue(1));
6776 
6777     // Legalized the chain result - switch anything that used the old chain to
6778     // use the new one.
6779     DAG.ReplaceAllUsesOfValueWith(SDValue(MLD, 1), Chain);
6780 
6781     SDValue LoadRes = DAG.getNode(ISD::CONCAT_VECTORS, DL, VT, Lo, Hi);
6782 
6783     SDValue RetOps[] = { LoadRes, Chain };
6784     return DAG.getMergeValues(RetOps, DL);
6785   }
6786   return SDValue();
6787 }
6788 
6789 /// A vector select of 2 constant vectors can be simplified to math/logic to
6790 /// avoid a variable select instruction and possibly avoid constant loads.
6791 SDValue DAGCombiner::foldVSelectOfConstants(SDNode *N) {
6792   SDValue Cond = N->getOperand(0);
6793   SDValue N1 = N->getOperand(1);
6794   SDValue N2 = N->getOperand(2);
6795   EVT VT = N->getValueType(0);
6796   if (!Cond.hasOneUse() || Cond.getScalarValueSizeInBits() != 1 ||
6797       !TLI.convertSelectOfConstantsToMath(VT) ||
6798       !ISD::isBuildVectorOfConstantSDNodes(N1.getNode()) ||
6799       !ISD::isBuildVectorOfConstantSDNodes(N2.getNode()))
6800     return SDValue();
6801 
6802   // Check if we can use the condition value to increment/decrement a single
6803   // constant value. This simplifies a select to an add and removes a constant
6804   // load/materialization from the general case.
6805   bool AllAddOne = true;
6806   bool AllSubOne = true;
6807   unsigned Elts = VT.getVectorNumElements();
6808   for (unsigned i = 0; i != Elts; ++i) {
6809     SDValue N1Elt = N1.getOperand(i);
6810     SDValue N2Elt = N2.getOperand(i);
6811     if (N1Elt.isUndef() || N2Elt.isUndef())
6812       continue;
6813 
6814     const APInt &C1 = cast<ConstantSDNode>(N1Elt)->getAPIntValue();
6815     const APInt &C2 = cast<ConstantSDNode>(N2Elt)->getAPIntValue();
6816     if (C1 != C2 + 1)
6817       AllAddOne = false;
6818     if (C1 != C2 - 1)
6819       AllSubOne = false;
6820   }
6821 
6822   // Further simplifications for the extra-special cases where the constants are
6823   // all 0 or all -1 should be implemented as folds of these patterns.
6824   SDLoc DL(N);
6825   if (AllAddOne || AllSubOne) {
6826     // vselect <N x i1> Cond, C+1, C --> add (zext Cond), C
6827     // vselect <N x i1> Cond, C-1, C --> add (sext Cond), C
6828     auto ExtendOpcode = AllAddOne ? ISD::ZERO_EXTEND : ISD::SIGN_EXTEND;
6829     SDValue ExtendedCond = DAG.getNode(ExtendOpcode, DL, VT, Cond);
6830     return DAG.getNode(ISD::ADD, DL, VT, ExtendedCond, N2);
6831   }
6832 
6833   // The general case for select-of-constants:
6834   // vselect <N x i1> Cond, C1, C2 --> xor (and (sext Cond), (C1^C2)), C2
6835   // ...but that only makes sense if a vselect is slower than 2 logic ops, so
6836   // leave that to a machine-specific pass.
6837   return SDValue();
6838 }
6839 
6840 SDValue DAGCombiner::visitVSELECT(SDNode *N) {
6841   SDValue N0 = N->getOperand(0);
6842   SDValue N1 = N->getOperand(1);
6843   SDValue N2 = N->getOperand(2);
6844   SDLoc DL(N);
6845 
6846   // fold (vselect C, X, X) -> X
6847   if (N1 == N2)
6848     return N1;
6849 
6850   // Canonicalize integer abs.
6851   // vselect (setg[te] X,  0),  X, -X ->
6852   // vselect (setgt    X, -1),  X, -X ->
6853   // vselect (setl[te] X,  0), -X,  X ->
6854   // Y = sra (X, size(X)-1); xor (add (X, Y), Y)
6855   if (N0.getOpcode() == ISD::SETCC) {
6856     SDValue LHS = N0.getOperand(0), RHS = N0.getOperand(1);
6857     ISD::CondCode CC = cast<CondCodeSDNode>(N0.getOperand(2))->get();
6858     bool isAbs = false;
6859     bool RHSIsAllZeros = ISD::isBuildVectorAllZeros(RHS.getNode());
6860 
6861     if (((RHSIsAllZeros && (CC == ISD::SETGT || CC == ISD::SETGE)) ||
6862          (ISD::isBuildVectorAllOnes(RHS.getNode()) && CC == ISD::SETGT)) &&
6863         N1 == LHS && N2.getOpcode() == ISD::SUB && N1 == N2.getOperand(1))
6864       isAbs = ISD::isBuildVectorAllZeros(N2.getOperand(0).getNode());
6865     else if ((RHSIsAllZeros && (CC == ISD::SETLT || CC == ISD::SETLE)) &&
6866              N2 == LHS && N1.getOpcode() == ISD::SUB && N2 == N1.getOperand(1))
6867       isAbs = ISD::isBuildVectorAllZeros(N1.getOperand(0).getNode());
6868 
6869     if (isAbs) {
6870       EVT VT = LHS.getValueType();
6871       if (TLI.isOperationLegalOrCustom(ISD::ABS, VT))
6872         return DAG.getNode(ISD::ABS, DL, VT, LHS);
6873 
6874       SDValue Shift = DAG.getNode(
6875           ISD::SRA, DL, VT, LHS,
6876           DAG.getConstant(VT.getScalarSizeInBits() - 1, DL, VT));
6877       SDValue Add = DAG.getNode(ISD::ADD, DL, VT, LHS, Shift);
6878       AddToWorklist(Shift.getNode());
6879       AddToWorklist(Add.getNode());
6880       return DAG.getNode(ISD::XOR, DL, VT, Add, Shift);
6881     }
6882   }
6883 
6884   if (SimplifySelectOps(N, N1, N2))
6885     return SDValue(N, 0);  // Don't revisit N.
6886 
6887   // Fold (vselect (build_vector all_ones), N1, N2) -> N1
6888   if (ISD::isBuildVectorAllOnes(N0.getNode()))
6889     return N1;
6890   // Fold (vselect (build_vector all_zeros), N1, N2) -> N2
6891   if (ISD::isBuildVectorAllZeros(N0.getNode()))
6892     return N2;
6893 
6894   // The ConvertSelectToConcatVector function is assuming both the above
6895   // checks for (vselect (build_vector all{ones,zeros) ...) have been made
6896   // and addressed.
6897   if (N1.getOpcode() == ISD::CONCAT_VECTORS &&
6898       N2.getOpcode() == ISD::CONCAT_VECTORS &&
6899       ISD::isBuildVectorOfConstantSDNodes(N0.getNode())) {
6900     if (SDValue CV = ConvertSelectToConcatVector(N, DAG))
6901       return CV;
6902   }
6903 
6904   if (SDValue V = foldVSelectOfConstants(N))
6905     return V;
6906 
6907   return SDValue();
6908 }
6909 
6910 SDValue DAGCombiner::visitSELECT_CC(SDNode *N) {
6911   SDValue N0 = N->getOperand(0);
6912   SDValue N1 = N->getOperand(1);
6913   SDValue N2 = N->getOperand(2);
6914   SDValue N3 = N->getOperand(3);
6915   SDValue N4 = N->getOperand(4);
6916   ISD::CondCode CC = cast<CondCodeSDNode>(N4)->get();
6917 
6918   // fold select_cc lhs, rhs, x, x, cc -> x
6919   if (N2 == N3)
6920     return N2;
6921 
6922   // Determine if the condition we're dealing with is constant
6923   if (SDValue SCC = SimplifySetCC(getSetCCResultType(N0.getValueType()), N0, N1,
6924                                   CC, SDLoc(N), false)) {
6925     AddToWorklist(SCC.getNode());
6926 
6927     if (ConstantSDNode *SCCC = dyn_cast<ConstantSDNode>(SCC.getNode())) {
6928       if (!SCCC->isNullValue())
6929         return N2;    // cond always true -> true val
6930       else
6931         return N3;    // cond always false -> false val
6932     } else if (SCC->isUndef()) {
6933       // When the condition is UNDEF, just return the first operand. This is
6934       // coherent the DAG creation, no setcc node is created in this case
6935       return N2;
6936     } else if (SCC.getOpcode() == ISD::SETCC) {
6937       // Fold to a simpler select_cc
6938       return DAG.getNode(ISD::SELECT_CC, SDLoc(N), N2.getValueType(),
6939                          SCC.getOperand(0), SCC.getOperand(1), N2, N3,
6940                          SCC.getOperand(2));
6941     }
6942   }
6943 
6944   // If we can fold this based on the true/false value, do so.
6945   if (SimplifySelectOps(N, N2, N3))
6946     return SDValue(N, 0);  // Don't revisit N.
6947 
6948   // fold select_cc into other things, such as min/max/abs
6949   return SimplifySelectCC(SDLoc(N), N0, N1, N2, N3, CC);
6950 }
6951 
6952 SDValue DAGCombiner::visitSETCC(SDNode *N) {
6953   return SimplifySetCC(N->getValueType(0), N->getOperand(0), N->getOperand(1),
6954                        cast<CondCodeSDNode>(N->getOperand(2))->get(),
6955                        SDLoc(N));
6956 }
6957 
6958 SDValue DAGCombiner::visitSETCCE(SDNode *N) {
6959   SDValue LHS = N->getOperand(0);
6960   SDValue RHS = N->getOperand(1);
6961   SDValue Carry = N->getOperand(2);
6962   SDValue Cond = N->getOperand(3);
6963 
6964   // If Carry is false, fold to a regular SETCC.
6965   if (Carry.getOpcode() == ISD::CARRY_FALSE)
6966     return DAG.getNode(ISD::SETCC, SDLoc(N), N->getVTList(), LHS, RHS, Cond);
6967 
6968   return SDValue();
6969 }
6970 
6971 SDValue DAGCombiner::visitSETCCCARRY(SDNode *N) {
6972   SDValue LHS = N->getOperand(0);
6973   SDValue RHS = N->getOperand(1);
6974   SDValue Carry = N->getOperand(2);
6975   SDValue Cond = N->getOperand(3);
6976 
6977   // If Carry is false, fold to a regular SETCC.
6978   if (isNullConstant(Carry))
6979     return DAG.getNode(ISD::SETCC, SDLoc(N), N->getVTList(), LHS, RHS, Cond);
6980 
6981   return SDValue();
6982 }
6983 
6984 /// Try to fold a sext/zext/aext dag node into a ConstantSDNode or
6985 /// a build_vector of constants.
6986 /// This function is called by the DAGCombiner when visiting sext/zext/aext
6987 /// dag nodes (see for example method DAGCombiner::visitSIGN_EXTEND).
6988 /// Vector extends are not folded if operations are legal; this is to
6989 /// avoid introducing illegal build_vector dag nodes.
6990 static SDNode *tryToFoldExtendOfConstant(SDNode *N, const TargetLowering &TLI,
6991                                          SelectionDAG &DAG, bool LegalTypes,
6992                                          bool LegalOperations) {
6993   unsigned Opcode = N->getOpcode();
6994   SDValue N0 = N->getOperand(0);
6995   EVT VT = N->getValueType(0);
6996 
6997   assert((Opcode == ISD::SIGN_EXTEND || Opcode == ISD::ZERO_EXTEND ||
6998          Opcode == ISD::ANY_EXTEND || Opcode == ISD::SIGN_EXTEND_VECTOR_INREG ||
6999          Opcode == ISD::ZERO_EXTEND_VECTOR_INREG)
7000          && "Expected EXTEND dag node in input!");
7001 
7002   // fold (sext c1) -> c1
7003   // fold (zext c1) -> c1
7004   // fold (aext c1) -> c1
7005   if (isa<ConstantSDNode>(N0))
7006     return DAG.getNode(Opcode, SDLoc(N), VT, N0).getNode();
7007 
7008   // fold (sext (build_vector AllConstants) -> (build_vector AllConstants)
7009   // fold (zext (build_vector AllConstants) -> (build_vector AllConstants)
7010   // fold (aext (build_vector AllConstants) -> (build_vector AllConstants)
7011   EVT SVT = VT.getScalarType();
7012   if (!(VT.isVector() &&
7013       (!LegalTypes || (!LegalOperations && TLI.isTypeLegal(SVT))) &&
7014       ISD::isBuildVectorOfConstantSDNodes(N0.getNode())))
7015     return nullptr;
7016 
7017   // We can fold this node into a build_vector.
7018   unsigned VTBits = SVT.getSizeInBits();
7019   unsigned EVTBits = N0->getValueType(0).getScalarSizeInBits();
7020   SmallVector<SDValue, 8> Elts;
7021   unsigned NumElts = VT.getVectorNumElements();
7022   SDLoc DL(N);
7023 
7024   for (unsigned i=0; i != NumElts; ++i) {
7025     SDValue Op = N0->getOperand(i);
7026     if (Op->isUndef()) {
7027       Elts.push_back(DAG.getUNDEF(SVT));
7028       continue;
7029     }
7030 
7031     SDLoc DL(Op);
7032     // Get the constant value and if needed trunc it to the size of the type.
7033     // Nodes like build_vector might have constants wider than the scalar type.
7034     APInt C = cast<ConstantSDNode>(Op)->getAPIntValue().zextOrTrunc(EVTBits);
7035     if (Opcode == ISD::SIGN_EXTEND || Opcode == ISD::SIGN_EXTEND_VECTOR_INREG)
7036       Elts.push_back(DAG.getConstant(C.sext(VTBits), DL, SVT));
7037     else
7038       Elts.push_back(DAG.getConstant(C.zext(VTBits), DL, SVT));
7039   }
7040 
7041   return DAG.getBuildVector(VT, DL, Elts).getNode();
7042 }
7043 
7044 // ExtendUsesToFormExtLoad - Trying to extend uses of a load to enable this:
7045 // "fold ({s|z|a}ext (load x)) -> ({s|z|a}ext (truncate ({s|z|a}extload x)))"
7046 // transformation. Returns true if extension are possible and the above
7047 // mentioned transformation is profitable.
7048 static bool ExtendUsesToFormExtLoad(SDNode *N, SDValue N0,
7049                                     unsigned ExtOpc,
7050                                     SmallVectorImpl<SDNode *> &ExtendNodes,
7051                                     const TargetLowering &TLI) {
7052   bool HasCopyToRegUses = false;
7053   bool isTruncFree = TLI.isTruncateFree(N->getValueType(0), N0.getValueType());
7054   for (SDNode::use_iterator UI = N0.getNode()->use_begin(),
7055                             UE = N0.getNode()->use_end();
7056        UI != UE; ++UI) {
7057     SDNode *User = *UI;
7058     if (User == N)
7059       continue;
7060     if (UI.getUse().getResNo() != N0.getResNo())
7061       continue;
7062     // FIXME: Only extend SETCC N, N and SETCC N, c for now.
7063     if (ExtOpc != ISD::ANY_EXTEND && User->getOpcode() == ISD::SETCC) {
7064       ISD::CondCode CC = cast<CondCodeSDNode>(User->getOperand(2))->get();
7065       if (ExtOpc == ISD::ZERO_EXTEND && ISD::isSignedIntSetCC(CC))
7066         // Sign bits will be lost after a zext.
7067         return false;
7068       bool Add = false;
7069       for (unsigned i = 0; i != 2; ++i) {
7070         SDValue UseOp = User->getOperand(i);
7071         if (UseOp == N0)
7072           continue;
7073         if (!isa<ConstantSDNode>(UseOp))
7074           return false;
7075         Add = true;
7076       }
7077       if (Add)
7078         ExtendNodes.push_back(User);
7079       continue;
7080     }
7081     // If truncates aren't free and there are users we can't
7082     // extend, it isn't worthwhile.
7083     if (!isTruncFree)
7084       return false;
7085     // Remember if this value is live-out.
7086     if (User->getOpcode() == ISD::CopyToReg)
7087       HasCopyToRegUses = true;
7088   }
7089 
7090   if (HasCopyToRegUses) {
7091     bool BothLiveOut = false;
7092     for (SDNode::use_iterator UI = N->use_begin(), UE = N->use_end();
7093          UI != UE; ++UI) {
7094       SDUse &Use = UI.getUse();
7095       if (Use.getResNo() == 0 && Use.getUser()->getOpcode() == ISD::CopyToReg) {
7096         BothLiveOut = true;
7097         break;
7098       }
7099     }
7100     if (BothLiveOut)
7101       // Both unextended and extended values are live out. There had better be
7102       // a good reason for the transformation.
7103       return ExtendNodes.size();
7104   }
7105   return true;
7106 }
7107 
7108 void DAGCombiner::ExtendSetCCUses(const SmallVectorImpl<SDNode *> &SetCCs,
7109                                   SDValue Trunc, SDValue ExtLoad,
7110                                   const SDLoc &DL, ISD::NodeType ExtType) {
7111   // Extend SetCC uses if necessary.
7112   for (unsigned i = 0, e = SetCCs.size(); i != e; ++i) {
7113     SDNode *SetCC = SetCCs[i];
7114     SmallVector<SDValue, 4> Ops;
7115 
7116     for (unsigned j = 0; j != 2; ++j) {
7117       SDValue SOp = SetCC->getOperand(j);
7118       if (SOp == Trunc)
7119         Ops.push_back(ExtLoad);
7120       else
7121         Ops.push_back(DAG.getNode(ExtType, DL, ExtLoad->getValueType(0), SOp));
7122     }
7123 
7124     Ops.push_back(SetCC->getOperand(2));
7125     CombineTo(SetCC, DAG.getNode(ISD::SETCC, DL, SetCC->getValueType(0), Ops));
7126   }
7127 }
7128 
7129 // FIXME: Bring more similar combines here, common to sext/zext (maybe aext?).
7130 SDValue DAGCombiner::CombineExtLoad(SDNode *N) {
7131   SDValue N0 = N->getOperand(0);
7132   EVT DstVT = N->getValueType(0);
7133   EVT SrcVT = N0.getValueType();
7134 
7135   assert((N->getOpcode() == ISD::SIGN_EXTEND ||
7136           N->getOpcode() == ISD::ZERO_EXTEND) &&
7137          "Unexpected node type (not an extend)!");
7138 
7139   // fold (sext (load x)) to multiple smaller sextloads; same for zext.
7140   // For example, on a target with legal v4i32, but illegal v8i32, turn:
7141   //   (v8i32 (sext (v8i16 (load x))))
7142   // into:
7143   //   (v8i32 (concat_vectors (v4i32 (sextload x)),
7144   //                          (v4i32 (sextload (x + 16)))))
7145   // Where uses of the original load, i.e.:
7146   //   (v8i16 (load x))
7147   // are replaced with:
7148   //   (v8i16 (truncate
7149   //     (v8i32 (concat_vectors (v4i32 (sextload x)),
7150   //                            (v4i32 (sextload (x + 16)))))))
7151   //
7152   // This combine is only applicable to illegal, but splittable, vectors.
7153   // All legal types, and illegal non-vector types, are handled elsewhere.
7154   // This combine is controlled by TargetLowering::isVectorLoadExtDesirable.
7155   //
7156   if (N0->getOpcode() != ISD::LOAD)
7157     return SDValue();
7158 
7159   LoadSDNode *LN0 = cast<LoadSDNode>(N0);
7160 
7161   if (!ISD::isNON_EXTLoad(LN0) || !ISD::isUNINDEXEDLoad(LN0) ||
7162       !N0.hasOneUse() || LN0->isVolatile() || !DstVT.isVector() ||
7163       !DstVT.isPow2VectorType() || !TLI.isVectorLoadExtDesirable(SDValue(N, 0)))
7164     return SDValue();
7165 
7166   SmallVector<SDNode *, 4> SetCCs;
7167   if (!ExtendUsesToFormExtLoad(N, N0, N->getOpcode(), SetCCs, TLI))
7168     return SDValue();
7169 
7170   ISD::LoadExtType ExtType =
7171       N->getOpcode() == ISD::SIGN_EXTEND ? ISD::SEXTLOAD : ISD::ZEXTLOAD;
7172 
7173   // Try to split the vector types to get down to legal types.
7174   EVT SplitSrcVT = SrcVT;
7175   EVT SplitDstVT = DstVT;
7176   while (!TLI.isLoadExtLegalOrCustom(ExtType, SplitDstVT, SplitSrcVT) &&
7177          SplitSrcVT.getVectorNumElements() > 1) {
7178     SplitDstVT = DAG.GetSplitDestVTs(SplitDstVT).first;
7179     SplitSrcVT = DAG.GetSplitDestVTs(SplitSrcVT).first;
7180   }
7181 
7182   if (!TLI.isLoadExtLegalOrCustom(ExtType, SplitDstVT, SplitSrcVT))
7183     return SDValue();
7184 
7185   SDLoc DL(N);
7186   const unsigned NumSplits =
7187       DstVT.getVectorNumElements() / SplitDstVT.getVectorNumElements();
7188   const unsigned Stride = SplitSrcVT.getStoreSize();
7189   SmallVector<SDValue, 4> Loads;
7190   SmallVector<SDValue, 4> Chains;
7191 
7192   SDValue BasePtr = LN0->getBasePtr();
7193   for (unsigned Idx = 0; Idx < NumSplits; Idx++) {
7194     const unsigned Offset = Idx * Stride;
7195     const unsigned Align = MinAlign(LN0->getAlignment(), Offset);
7196 
7197     SDValue SplitLoad = DAG.getExtLoad(
7198         ExtType, DL, SplitDstVT, LN0->getChain(), BasePtr,
7199         LN0->getPointerInfo().getWithOffset(Offset), SplitSrcVT, Align,
7200         LN0->getMemOperand()->getFlags(), LN0->getAAInfo());
7201 
7202     BasePtr = DAG.getNode(ISD::ADD, DL, BasePtr.getValueType(), BasePtr,
7203                           DAG.getConstant(Stride, DL, BasePtr.getValueType()));
7204 
7205     Loads.push_back(SplitLoad.getValue(0));
7206     Chains.push_back(SplitLoad.getValue(1));
7207   }
7208 
7209   SDValue NewChain = DAG.getNode(ISD::TokenFactor, DL, MVT::Other, Chains);
7210   SDValue NewValue = DAG.getNode(ISD::CONCAT_VECTORS, DL, DstVT, Loads);
7211 
7212   // Simplify TF.
7213   AddToWorklist(NewChain.getNode());
7214 
7215   CombineTo(N, NewValue);
7216 
7217   // Replace uses of the original load (before extension)
7218   // with a truncate of the concatenated sextloaded vectors.
7219   SDValue Trunc =
7220       DAG.getNode(ISD::TRUNCATE, SDLoc(N0), N0.getValueType(), NewValue);
7221   CombineTo(N0.getNode(), Trunc, NewChain);
7222   ExtendSetCCUses(SetCCs, Trunc, NewValue, DL,
7223                   (ISD::NodeType)N->getOpcode());
7224   return SDValue(N, 0); // Return N so it doesn't get rechecked!
7225 }
7226 
7227 /// If we're narrowing or widening the result of a vector select and the final
7228 /// size is the same size as a setcc (compare) feeding the select, then try to
7229 /// apply the cast operation to the select's operands because matching vector
7230 /// sizes for a select condition and other operands should be more efficient.
7231 SDValue DAGCombiner::matchVSelectOpSizesWithSetCC(SDNode *Cast) {
7232   unsigned CastOpcode = Cast->getOpcode();
7233   assert((CastOpcode == ISD::SIGN_EXTEND || CastOpcode == ISD::ZERO_EXTEND ||
7234           CastOpcode == ISD::TRUNCATE || CastOpcode == ISD::FP_EXTEND ||
7235           CastOpcode == ISD::FP_ROUND) &&
7236          "Unexpected opcode for vector select narrowing/widening");
7237 
7238   // We only do this transform before legal ops because the pattern may be
7239   // obfuscated by target-specific operations after legalization. Do not create
7240   // an illegal select op, however, because that may be difficult to lower.
7241   EVT VT = Cast->getValueType(0);
7242   if (LegalOperations || !TLI.isOperationLegalOrCustom(ISD::VSELECT, VT))
7243     return SDValue();
7244 
7245   SDValue VSel = Cast->getOperand(0);
7246   if (VSel.getOpcode() != ISD::VSELECT || !VSel.hasOneUse() ||
7247       VSel.getOperand(0).getOpcode() != ISD::SETCC)
7248     return SDValue();
7249 
7250   // Does the setcc have the same vector size as the casted select?
7251   SDValue SetCC = VSel.getOperand(0);
7252   EVT SetCCVT = getSetCCResultType(SetCC.getOperand(0).getValueType());
7253   if (SetCCVT.getSizeInBits() != VT.getSizeInBits())
7254     return SDValue();
7255 
7256   // cast (vsel (setcc X), A, B) --> vsel (setcc X), (cast A), (cast B)
7257   SDValue A = VSel.getOperand(1);
7258   SDValue B = VSel.getOperand(2);
7259   SDValue CastA, CastB;
7260   SDLoc DL(Cast);
7261   if (CastOpcode == ISD::FP_ROUND) {
7262     // FP_ROUND (fptrunc) has an extra flag operand to pass along.
7263     CastA = DAG.getNode(CastOpcode, DL, VT, A, Cast->getOperand(1));
7264     CastB = DAG.getNode(CastOpcode, DL, VT, B, Cast->getOperand(1));
7265   } else {
7266     CastA = DAG.getNode(CastOpcode, DL, VT, A);
7267     CastB = DAG.getNode(CastOpcode, DL, VT, B);
7268   }
7269   return DAG.getNode(ISD::VSELECT, DL, VT, SetCC, CastA, CastB);
7270 }
7271 
7272 SDValue DAGCombiner::visitSIGN_EXTEND(SDNode *N) {
7273   SDValue N0 = N->getOperand(0);
7274   EVT VT = N->getValueType(0);
7275   SDLoc DL(N);
7276 
7277   if (SDNode *Res = tryToFoldExtendOfConstant(N, TLI, DAG, LegalTypes,
7278                                               LegalOperations))
7279     return SDValue(Res, 0);
7280 
7281   // fold (sext (sext x)) -> (sext x)
7282   // fold (sext (aext x)) -> (sext x)
7283   if (N0.getOpcode() == ISD::SIGN_EXTEND || N0.getOpcode() == ISD::ANY_EXTEND)
7284     return DAG.getNode(ISD::SIGN_EXTEND, DL, VT, N0.getOperand(0));
7285 
7286   if (N0.getOpcode() == ISD::TRUNCATE) {
7287     // fold (sext (truncate (load x))) -> (sext (smaller load x))
7288     // fold (sext (truncate (srl (load x), c))) -> (sext (smaller load (x+c/n)))
7289     if (SDValue NarrowLoad = ReduceLoadWidth(N0.getNode())) {
7290       SDNode *oye = N0.getOperand(0).getNode();
7291       if (NarrowLoad.getNode() != N0.getNode()) {
7292         CombineTo(N0.getNode(), NarrowLoad);
7293         // CombineTo deleted the truncate, if needed, but not what's under it.
7294         AddToWorklist(oye);
7295       }
7296       return SDValue(N, 0);   // Return N so it doesn't get rechecked!
7297     }
7298 
7299     // See if the value being truncated is already sign extended.  If so, just
7300     // eliminate the trunc/sext pair.
7301     SDValue Op = N0.getOperand(0);
7302     unsigned OpBits   = Op.getScalarValueSizeInBits();
7303     unsigned MidBits  = N0.getScalarValueSizeInBits();
7304     unsigned DestBits = VT.getScalarSizeInBits();
7305     unsigned NumSignBits = DAG.ComputeNumSignBits(Op);
7306 
7307     if (OpBits == DestBits) {
7308       // Op is i32, Mid is i8, and Dest is i32.  If Op has more than 24 sign
7309       // bits, it is already ready.
7310       if (NumSignBits > DestBits-MidBits)
7311         return Op;
7312     } else if (OpBits < DestBits) {
7313       // Op is i32, Mid is i8, and Dest is i64.  If Op has more than 24 sign
7314       // bits, just sext from i32.
7315       if (NumSignBits > OpBits-MidBits)
7316         return DAG.getNode(ISD::SIGN_EXTEND, DL, VT, Op);
7317     } else {
7318       // Op is i64, Mid is i8, and Dest is i32.  If Op has more than 56 sign
7319       // bits, just truncate to i32.
7320       if (NumSignBits > OpBits-MidBits)
7321         return DAG.getNode(ISD::TRUNCATE, DL, VT, Op);
7322     }
7323 
7324     // fold (sext (truncate x)) -> (sextinreg x).
7325     if (!LegalOperations || TLI.isOperationLegal(ISD::SIGN_EXTEND_INREG,
7326                                                  N0.getValueType())) {
7327       if (OpBits < DestBits)
7328         Op = DAG.getNode(ISD::ANY_EXTEND, SDLoc(N0), VT, Op);
7329       else if (OpBits > DestBits)
7330         Op = DAG.getNode(ISD::TRUNCATE, SDLoc(N0), VT, Op);
7331       return DAG.getNode(ISD::SIGN_EXTEND_INREG, DL, VT, Op,
7332                          DAG.getValueType(N0.getValueType()));
7333     }
7334   }
7335 
7336   // fold (sext (load x)) -> (sext (truncate (sextload x)))
7337   // Only generate vector extloads when 1) they're legal, and 2) they are
7338   // deemed desirable by the target.
7339   if (ISD::isNON_EXTLoad(N0.getNode()) && ISD::isUNINDEXEDLoad(N0.getNode()) &&
7340       ((!LegalOperations && !VT.isVector() &&
7341         !cast<LoadSDNode>(N0)->isVolatile()) ||
7342        TLI.isLoadExtLegal(ISD::SEXTLOAD, VT, N0.getValueType()))) {
7343     bool DoXform = true;
7344     SmallVector<SDNode*, 4> SetCCs;
7345     if (!N0.hasOneUse())
7346       DoXform = ExtendUsesToFormExtLoad(N, N0, ISD::SIGN_EXTEND, SetCCs, TLI);
7347     if (VT.isVector())
7348       DoXform &= TLI.isVectorLoadExtDesirable(SDValue(N, 0));
7349     if (DoXform) {
7350       LoadSDNode *LN0 = cast<LoadSDNode>(N0);
7351       SDValue ExtLoad = DAG.getExtLoad(ISD::SEXTLOAD, DL, VT, LN0->getChain(),
7352                                        LN0->getBasePtr(), N0.getValueType(),
7353                                        LN0->getMemOperand());
7354       SDValue Trunc = DAG.getNode(ISD::TRUNCATE, SDLoc(N0),
7355                                   N0.getValueType(), ExtLoad);
7356       ExtendSetCCUses(SetCCs, Trunc, ExtLoad, DL, ISD::SIGN_EXTEND);
7357       // If the load value is used only by N, replace it via CombineTo N.
7358       bool NoReplaceTrunc = SDValue(LN0, 0).hasOneUse();
7359       CombineTo(N, ExtLoad);
7360       if (NoReplaceTrunc)
7361         DAG.ReplaceAllUsesOfValueWith(SDValue(LN0, 1), ExtLoad.getValue(1));
7362       else
7363         CombineTo(LN0, Trunc, ExtLoad.getValue(1));
7364       return SDValue(N, 0);
7365     }
7366   }
7367 
7368   // fold (sext (load x)) to multiple smaller sextloads.
7369   // Only on illegal but splittable vectors.
7370   if (SDValue ExtLoad = CombineExtLoad(N))
7371     return ExtLoad;
7372 
7373   // fold (sext (sextload x)) -> (sext (truncate (sextload x)))
7374   // fold (sext ( extload x)) -> (sext (truncate (sextload x)))
7375   if ((ISD::isSEXTLoad(N0.getNode()) || ISD::isEXTLoad(N0.getNode())) &&
7376       ISD::isUNINDEXEDLoad(N0.getNode()) && N0.hasOneUse()) {
7377     LoadSDNode *LN0 = cast<LoadSDNode>(N0);
7378     EVT MemVT = LN0->getMemoryVT();
7379     if ((!LegalOperations && !LN0->isVolatile()) ||
7380         TLI.isLoadExtLegal(ISD::SEXTLOAD, VT, MemVT)) {
7381       SDValue ExtLoad = DAG.getExtLoad(ISD::SEXTLOAD, DL, VT, LN0->getChain(),
7382                                        LN0->getBasePtr(), MemVT,
7383                                        LN0->getMemOperand());
7384       CombineTo(N, ExtLoad);
7385       CombineTo(N0.getNode(),
7386                 DAG.getNode(ISD::TRUNCATE, SDLoc(N0),
7387                             N0.getValueType(), ExtLoad),
7388                 ExtLoad.getValue(1));
7389       return SDValue(N, 0);   // Return N so it doesn't get rechecked!
7390     }
7391   }
7392 
7393   // fold (sext (and/or/xor (load x), cst)) ->
7394   //      (and/or/xor (sextload x), (sext cst))
7395   if ((N0.getOpcode() == ISD::AND || N0.getOpcode() == ISD::OR ||
7396        N0.getOpcode() == ISD::XOR) &&
7397       isa<LoadSDNode>(N0.getOperand(0)) &&
7398       N0.getOperand(1).getOpcode() == ISD::Constant &&
7399       TLI.isLoadExtLegal(ISD::SEXTLOAD, VT, N0.getValueType()) &&
7400       (!LegalOperations && TLI.isOperationLegal(N0.getOpcode(), VT))) {
7401     LoadSDNode *LN0 = cast<LoadSDNode>(N0.getOperand(0));
7402     if (LN0->getExtensionType() != ISD::ZEXTLOAD && LN0->isUnindexed()) {
7403       bool DoXform = true;
7404       SmallVector<SDNode*, 4> SetCCs;
7405       if (!N0.hasOneUse())
7406         DoXform = ExtendUsesToFormExtLoad(N, N0.getOperand(0), ISD::SIGN_EXTEND,
7407                                           SetCCs, TLI);
7408       if (DoXform) {
7409         SDValue ExtLoad = DAG.getExtLoad(ISD::SEXTLOAD, SDLoc(LN0), VT,
7410                                          LN0->getChain(), LN0->getBasePtr(),
7411                                          LN0->getMemoryVT(),
7412                                          LN0->getMemOperand());
7413         APInt Mask = cast<ConstantSDNode>(N0.getOperand(1))->getAPIntValue();
7414         Mask = Mask.sext(VT.getSizeInBits());
7415         SDValue And = DAG.getNode(N0.getOpcode(), DL, VT,
7416                                   ExtLoad, DAG.getConstant(Mask, DL, VT));
7417         SDValue Trunc = DAG.getNode(ISD::TRUNCATE,
7418                                     SDLoc(N0.getOperand(0)),
7419                                     N0.getOperand(0).getValueType(), ExtLoad);
7420         ExtendSetCCUses(SetCCs, Trunc, ExtLoad, DL, ISD::SIGN_EXTEND);
7421         bool NoReplaceTruncAnd = !N0.hasOneUse();
7422         bool NoReplaceTrunc = SDValue(LN0, 0).hasOneUse();
7423         CombineTo(N, And);
7424         // If N0 has multiple uses, change other uses as well.
7425         if (NoReplaceTruncAnd) {
7426           SDValue TruncAnd =
7427               DAG.getNode(ISD::TRUNCATE, DL, N0.getValueType(), And);
7428           CombineTo(N0.getNode(), TruncAnd);
7429         }
7430         if (NoReplaceTrunc)
7431           DAG.ReplaceAllUsesOfValueWith(SDValue(LN0, 1), ExtLoad.getValue(1));
7432         else
7433           CombineTo(LN0, Trunc, ExtLoad.getValue(1));
7434         return SDValue(N,0); // Return N so it doesn't get rechecked!
7435       }
7436     }
7437   }
7438 
7439   if (N0.getOpcode() == ISD::SETCC) {
7440     SDValue N00 = N0.getOperand(0);
7441     SDValue N01 = N0.getOperand(1);
7442     ISD::CondCode CC = cast<CondCodeSDNode>(N0.getOperand(2))->get();
7443     EVT N00VT = N0.getOperand(0).getValueType();
7444 
7445     // sext(setcc) -> sext_in_reg(vsetcc) for vectors.
7446     // Only do this before legalize for now.
7447     if (VT.isVector() && !LegalOperations &&
7448         TLI.getBooleanContents(N00VT) ==
7449             TargetLowering::ZeroOrNegativeOneBooleanContent) {
7450       // On some architectures (such as SSE/NEON/etc) the SETCC result type is
7451       // of the same size as the compared operands. Only optimize sext(setcc())
7452       // if this is the case.
7453       EVT SVT = getSetCCResultType(N00VT);
7454 
7455       // We know that the # elements of the results is the same as the
7456       // # elements of the compare (and the # elements of the compare result
7457       // for that matter).  Check to see that they are the same size.  If so,
7458       // we know that the element size of the sext'd result matches the
7459       // element size of the compare operands.
7460       if (VT.getSizeInBits() == SVT.getSizeInBits())
7461         return DAG.getSetCC(DL, VT, N00, N01, CC);
7462 
7463       // If the desired elements are smaller or larger than the source
7464       // elements, we can use a matching integer vector type and then
7465       // truncate/sign extend.
7466       EVT MatchingVecType = N00VT.changeVectorElementTypeToInteger();
7467       if (SVT == MatchingVecType) {
7468         SDValue VsetCC = DAG.getSetCC(DL, MatchingVecType, N00, N01, CC);
7469         return DAG.getSExtOrTrunc(VsetCC, DL, VT);
7470       }
7471     }
7472 
7473     // sext(setcc x, y, cc) -> (select (setcc x, y, cc), T, 0)
7474     // Here, T can be 1 or -1, depending on the type of the setcc and
7475     // getBooleanContents().
7476     unsigned SetCCWidth = N0.getScalarValueSizeInBits();
7477 
7478     // To determine the "true" side of the select, we need to know the high bit
7479     // of the value returned by the setcc if it evaluates to true.
7480     // If the type of the setcc is i1, then the true case of the select is just
7481     // sext(i1 1), that is, -1.
7482     // If the type of the setcc is larger (say, i8) then the value of the high
7483     // bit depends on getBooleanContents(), so ask TLI for a real "true" value
7484     // of the appropriate width.
7485     SDValue ExtTrueVal = (SetCCWidth == 1) ? DAG.getAllOnesConstant(DL, VT)
7486                                            : TLI.getConstTrueVal(DAG, VT, DL);
7487     SDValue Zero = DAG.getConstant(0, DL, VT);
7488     if (SDValue SCC =
7489             SimplifySelectCC(DL, N00, N01, ExtTrueVal, Zero, CC, true))
7490       return SCC;
7491 
7492     if (!VT.isVector() && !TLI.convertSelectOfConstantsToMath(VT)) {
7493       EVT SetCCVT = getSetCCResultType(N00VT);
7494       // Don't do this transform for i1 because there's a select transform
7495       // that would reverse it.
7496       // TODO: We should not do this transform at all without a target hook
7497       // because a sext is likely cheaper than a select?
7498       if (SetCCVT.getScalarSizeInBits() != 1 &&
7499           (!LegalOperations || TLI.isOperationLegal(ISD::SETCC, N00VT))) {
7500         SDValue SetCC = DAG.getSetCC(DL, SetCCVT, N00, N01, CC);
7501         return DAG.getSelect(DL, VT, SetCC, ExtTrueVal, Zero);
7502       }
7503     }
7504   }
7505 
7506   // fold (sext x) -> (zext x) if the sign bit is known zero.
7507   if ((!LegalOperations || TLI.isOperationLegal(ISD::ZERO_EXTEND, VT)) &&
7508       DAG.SignBitIsZero(N0))
7509     return DAG.getNode(ISD::ZERO_EXTEND, DL, VT, N0);
7510 
7511   if (SDValue NewVSel = matchVSelectOpSizesWithSetCC(N))
7512     return NewVSel;
7513 
7514   return SDValue();
7515 }
7516 
7517 // isTruncateOf - If N is a truncate of some other value, return true, record
7518 // the value being truncated in Op and which of Op's bits are zero/one in Known.
7519 // This function computes KnownBits to avoid a duplicated call to
7520 // computeKnownBits in the caller.
7521 static bool isTruncateOf(SelectionDAG &DAG, SDValue N, SDValue &Op,
7522                          KnownBits &Known) {
7523   if (N->getOpcode() == ISD::TRUNCATE) {
7524     Op = N->getOperand(0);
7525     DAG.computeKnownBits(Op, Known);
7526     return true;
7527   }
7528 
7529   if (N->getOpcode() != ISD::SETCC || N->getValueType(0) != MVT::i1 ||
7530       cast<CondCodeSDNode>(N->getOperand(2))->get() != ISD::SETNE)
7531     return false;
7532 
7533   SDValue Op0 = N->getOperand(0);
7534   SDValue Op1 = N->getOperand(1);
7535   assert(Op0.getValueType() == Op1.getValueType());
7536 
7537   if (isNullConstant(Op0))
7538     Op = Op1;
7539   else if (isNullConstant(Op1))
7540     Op = Op0;
7541   else
7542     return false;
7543 
7544   DAG.computeKnownBits(Op, Known);
7545 
7546   if (!(Known.Zero | 1).isAllOnesValue())
7547     return false;
7548 
7549   return true;
7550 }
7551 
7552 SDValue DAGCombiner::visitZERO_EXTEND(SDNode *N) {
7553   SDValue N0 = N->getOperand(0);
7554   EVT VT = N->getValueType(0);
7555 
7556   if (SDNode *Res = tryToFoldExtendOfConstant(N, TLI, DAG, LegalTypes,
7557                                               LegalOperations))
7558     return SDValue(Res, 0);
7559 
7560   // fold (zext (zext x)) -> (zext x)
7561   // fold (zext (aext x)) -> (zext x)
7562   if (N0.getOpcode() == ISD::ZERO_EXTEND || N0.getOpcode() == ISD::ANY_EXTEND)
7563     return DAG.getNode(ISD::ZERO_EXTEND, SDLoc(N), VT,
7564                        N0.getOperand(0));
7565 
7566   // fold (zext (truncate x)) -> (zext x) or
7567   //      (zext (truncate x)) -> (truncate x)
7568   // This is valid when the truncated bits of x are already zero.
7569   // FIXME: We should extend this to work for vectors too.
7570   SDValue Op;
7571   KnownBits Known;
7572   if (!VT.isVector() && isTruncateOf(DAG, N0, Op, Known)) {
7573     APInt TruncatedBits =
7574       (Op.getValueSizeInBits() == N0.getValueSizeInBits()) ?
7575       APInt(Op.getValueSizeInBits(), 0) :
7576       APInt::getBitsSet(Op.getValueSizeInBits(),
7577                         N0.getValueSizeInBits(),
7578                         std::min(Op.getValueSizeInBits(),
7579                                  VT.getSizeInBits()));
7580     if (TruncatedBits.isSubsetOf(Known.Zero))
7581       return DAG.getZExtOrTrunc(Op, SDLoc(N), VT);
7582   }
7583 
7584   // fold (zext (truncate x)) -> (and x, mask)
7585   if (N0.getOpcode() == ISD::TRUNCATE) {
7586     // fold (zext (truncate (load x))) -> (zext (smaller load x))
7587     // fold (zext (truncate (srl (load x), c))) -> (zext (smaller load (x+c/n)))
7588     if (SDValue NarrowLoad = ReduceLoadWidth(N0.getNode())) {
7589       SDNode *oye = N0.getOperand(0).getNode();
7590       if (NarrowLoad.getNode() != N0.getNode()) {
7591         CombineTo(N0.getNode(), NarrowLoad);
7592         // CombineTo deleted the truncate, if needed, but not what's under it.
7593         AddToWorklist(oye);
7594       }
7595       return SDValue(N, 0); // Return N so it doesn't get rechecked!
7596     }
7597 
7598     EVT SrcVT = N0.getOperand(0).getValueType();
7599     EVT MinVT = N0.getValueType();
7600 
7601     // Try to mask before the extension to avoid having to generate a larger mask,
7602     // possibly over several sub-vectors.
7603     if (SrcVT.bitsLT(VT)) {
7604       if (!LegalOperations || (TLI.isOperationLegal(ISD::AND, SrcVT) &&
7605                                TLI.isOperationLegal(ISD::ZERO_EXTEND, VT))) {
7606         SDValue Op = N0.getOperand(0);
7607         Op = DAG.getZeroExtendInReg(Op, SDLoc(N), MinVT.getScalarType());
7608         AddToWorklist(Op.getNode());
7609         return DAG.getZExtOrTrunc(Op, SDLoc(N), VT);
7610       }
7611     }
7612 
7613     if (!LegalOperations || TLI.isOperationLegal(ISD::AND, VT)) {
7614       SDValue Op = DAG.getAnyExtOrTrunc(N0.getOperand(0), SDLoc(N), VT);
7615       AddToWorklist(Op.getNode());
7616       SDValue And = DAG.getZeroExtendInReg(Op, SDLoc(N), MinVT.getScalarType());
7617       // We may safely transfer the debug info describing the truncate node over
7618       // to the equivalent and operation.
7619       DAG.transferDbgValues(N0, And);
7620       return And;
7621     }
7622   }
7623 
7624   // Fold (zext (and (trunc x), cst)) -> (and x, cst),
7625   // if either of the casts is not free.
7626   if (N0.getOpcode() == ISD::AND &&
7627       N0.getOperand(0).getOpcode() == ISD::TRUNCATE &&
7628       N0.getOperand(1).getOpcode() == ISD::Constant &&
7629       (!TLI.isTruncateFree(N0.getOperand(0).getOperand(0).getValueType(),
7630                            N0.getValueType()) ||
7631        !TLI.isZExtFree(N0.getValueType(), VT))) {
7632     SDValue X = N0.getOperand(0).getOperand(0);
7633     X = DAG.getAnyExtOrTrunc(X, SDLoc(X), VT);
7634     APInt Mask = cast<ConstantSDNode>(N0.getOperand(1))->getAPIntValue();
7635     Mask = Mask.zext(VT.getSizeInBits());
7636     SDLoc DL(N);
7637     return DAG.getNode(ISD::AND, DL, VT,
7638                        X, DAG.getConstant(Mask, DL, VT));
7639   }
7640 
7641   // fold (zext (load x)) -> (zext (truncate (zextload x)))
7642   // Only generate vector extloads when 1) they're legal, and 2) they are
7643   // deemed desirable by the target.
7644   if (ISD::isNON_EXTLoad(N0.getNode()) && ISD::isUNINDEXEDLoad(N0.getNode()) &&
7645       ((!LegalOperations && !VT.isVector() &&
7646         !cast<LoadSDNode>(N0)->isVolatile()) ||
7647        TLI.isLoadExtLegal(ISD::ZEXTLOAD, VT, N0.getValueType()))) {
7648     bool DoXform = true;
7649     SmallVector<SDNode*, 4> SetCCs;
7650     if (!N0.hasOneUse())
7651       DoXform = ExtendUsesToFormExtLoad(N, N0, ISD::ZERO_EXTEND, SetCCs, TLI);
7652     if (VT.isVector())
7653       DoXform &= TLI.isVectorLoadExtDesirable(SDValue(N, 0));
7654     if (DoXform) {
7655       LoadSDNode *LN0 = cast<LoadSDNode>(N0);
7656       SDValue ExtLoad = DAG.getExtLoad(ISD::ZEXTLOAD, SDLoc(N), VT,
7657                                        LN0->getChain(),
7658                                        LN0->getBasePtr(), N0.getValueType(),
7659                                        LN0->getMemOperand());
7660 
7661       SDValue Trunc = DAG.getNode(ISD::TRUNCATE, SDLoc(N0),
7662                                   N0.getValueType(), ExtLoad);
7663       ExtendSetCCUses(SetCCs, Trunc, ExtLoad, SDLoc(N), ISD::ZERO_EXTEND);
7664       // If the load value is used only by N, replace it via CombineTo N.
7665       bool NoReplaceTrunc = SDValue(LN0, 0).hasOneUse();
7666       CombineTo(N, ExtLoad);
7667       if (NoReplaceTrunc)
7668         DAG.ReplaceAllUsesOfValueWith(SDValue(LN0, 1), ExtLoad.getValue(1));
7669       else
7670         CombineTo(LN0, Trunc, ExtLoad.getValue(1));
7671       return SDValue(N, 0); // Return N so it doesn't get rechecked!
7672     }
7673   }
7674 
7675   // fold (zext (load x)) to multiple smaller zextloads.
7676   // Only on illegal but splittable vectors.
7677   if (SDValue ExtLoad = CombineExtLoad(N))
7678     return ExtLoad;
7679 
7680   // fold (zext (and/or/xor (load x), cst)) ->
7681   //      (and/or/xor (zextload x), (zext cst))
7682   // Unless (and (load x) cst) will match as a zextload already and has
7683   // additional users.
7684   if ((N0.getOpcode() == ISD::AND || N0.getOpcode() == ISD::OR ||
7685        N0.getOpcode() == ISD::XOR) &&
7686       isa<LoadSDNode>(N0.getOperand(0)) &&
7687       N0.getOperand(1).getOpcode() == ISD::Constant &&
7688       TLI.isLoadExtLegal(ISD::ZEXTLOAD, VT, N0.getValueType()) &&
7689       (!LegalOperations && TLI.isOperationLegal(N0.getOpcode(), VT))) {
7690     LoadSDNode *LN0 = cast<LoadSDNode>(N0.getOperand(0));
7691     if (LN0->getExtensionType() != ISD::SEXTLOAD && LN0->isUnindexed()) {
7692       bool DoXform = true;
7693       SmallVector<SDNode*, 4> SetCCs;
7694       if (!N0.hasOneUse()) {
7695         if (N0.getOpcode() == ISD::AND) {
7696           auto *AndC = cast<ConstantSDNode>(N0.getOperand(1));
7697           auto NarrowLoad = false;
7698           EVT LoadResultTy = AndC->getValueType(0);
7699           EVT ExtVT, LoadedVT;
7700           if (isAndLoadExtLoad(AndC, LN0, LoadResultTy, ExtVT, LoadedVT,
7701                                NarrowLoad))
7702             DoXform = false;
7703         }
7704         if (DoXform)
7705           DoXform = ExtendUsesToFormExtLoad(N, N0.getOperand(0),
7706                                             ISD::ZERO_EXTEND, SetCCs, TLI);
7707       }
7708       if (DoXform) {
7709         SDValue ExtLoad = DAG.getExtLoad(ISD::ZEXTLOAD, SDLoc(LN0), VT,
7710                                          LN0->getChain(), LN0->getBasePtr(),
7711                                          LN0->getMemoryVT(),
7712                                          LN0->getMemOperand());
7713         APInt Mask = cast<ConstantSDNode>(N0.getOperand(1))->getAPIntValue();
7714         Mask = Mask.zext(VT.getSizeInBits());
7715         SDLoc DL(N);
7716         SDValue And = DAG.getNode(N0.getOpcode(), DL, VT,
7717                                   ExtLoad, DAG.getConstant(Mask, DL, VT));
7718         SDValue Trunc = DAG.getNode(ISD::TRUNCATE,
7719                                     SDLoc(N0.getOperand(0)),
7720                                     N0.getOperand(0).getValueType(), ExtLoad);
7721         ExtendSetCCUses(SetCCs, Trunc, ExtLoad, DL, ISD::ZERO_EXTEND);
7722         bool NoReplaceTruncAnd = !N0.hasOneUse();
7723         bool NoReplaceTrunc = SDValue(LN0, 0).hasOneUse();
7724         CombineTo(N, And);
7725         // If N0 has multiple uses, change other uses as well.
7726         if (NoReplaceTruncAnd) {
7727           SDValue TruncAnd =
7728               DAG.getNode(ISD::TRUNCATE, DL, N0.getValueType(), And);
7729           CombineTo(N0.getNode(), TruncAnd);
7730         }
7731         if (NoReplaceTrunc)
7732           DAG.ReplaceAllUsesOfValueWith(SDValue(LN0, 1), ExtLoad.getValue(1));
7733         else
7734           CombineTo(LN0, Trunc, ExtLoad.getValue(1));
7735         return SDValue(N,0); // Return N so it doesn't get rechecked!
7736       }
7737     }
7738   }
7739 
7740   // fold (zext (zextload x)) -> (zext (truncate (zextload x)))
7741   // fold (zext ( extload x)) -> (zext (truncate (zextload x)))
7742   if ((ISD::isZEXTLoad(N0.getNode()) || ISD::isEXTLoad(N0.getNode())) &&
7743       ISD::isUNINDEXEDLoad(N0.getNode()) && N0.hasOneUse()) {
7744     LoadSDNode *LN0 = cast<LoadSDNode>(N0);
7745     EVT MemVT = LN0->getMemoryVT();
7746     if ((!LegalOperations && !LN0->isVolatile()) ||
7747         TLI.isLoadExtLegal(ISD::ZEXTLOAD, VT, MemVT)) {
7748       SDValue ExtLoad = DAG.getExtLoad(ISD::ZEXTLOAD, SDLoc(N), VT,
7749                                        LN0->getChain(),
7750                                        LN0->getBasePtr(), MemVT,
7751                                        LN0->getMemOperand());
7752       CombineTo(N, ExtLoad);
7753       CombineTo(N0.getNode(),
7754                 DAG.getNode(ISD::TRUNCATE, SDLoc(N0), N0.getValueType(),
7755                             ExtLoad),
7756                 ExtLoad.getValue(1));
7757       return SDValue(N, 0);   // Return N so it doesn't get rechecked!
7758     }
7759   }
7760 
7761   if (N0.getOpcode() == ISD::SETCC) {
7762     // Only do this before legalize for now.
7763     if (!LegalOperations && VT.isVector() &&
7764         N0.getValueType().getVectorElementType() == MVT::i1) {
7765       EVT N00VT = N0.getOperand(0).getValueType();
7766       if (getSetCCResultType(N00VT) == N0.getValueType())
7767         return SDValue();
7768 
7769       // We know that the # elements of the results is the same as the #
7770       // elements of the compare (and the # elements of the compare result for
7771       // that matter). Check to see that they are the same size. If so, we know
7772       // that the element size of the sext'd result matches the element size of
7773       // the compare operands.
7774       SDLoc DL(N);
7775       SDValue VecOnes = DAG.getConstant(1, DL, VT);
7776       if (VT.getSizeInBits() == N00VT.getSizeInBits()) {
7777         // zext(setcc) -> (and (vsetcc), (1, 1, ...) for vectors.
7778         SDValue VSetCC = DAG.getNode(ISD::SETCC, DL, VT, N0.getOperand(0),
7779                                      N0.getOperand(1), N0.getOperand(2));
7780         return DAG.getNode(ISD::AND, DL, VT, VSetCC, VecOnes);
7781       }
7782 
7783       // If the desired elements are smaller or larger than the source
7784       // elements we can use a matching integer vector type and then
7785       // truncate/sign extend.
7786       EVT MatchingElementType = EVT::getIntegerVT(
7787           *DAG.getContext(), N00VT.getScalarSizeInBits());
7788       EVT MatchingVectorType = EVT::getVectorVT(
7789           *DAG.getContext(), MatchingElementType, N00VT.getVectorNumElements());
7790       SDValue VsetCC =
7791           DAG.getNode(ISD::SETCC, DL, MatchingVectorType, N0.getOperand(0),
7792                       N0.getOperand(1), N0.getOperand(2));
7793       return DAG.getNode(ISD::AND, DL, VT, DAG.getSExtOrTrunc(VsetCC, DL, VT),
7794                          VecOnes);
7795     }
7796 
7797     // zext(setcc x,y,cc) -> select_cc x, y, 1, 0, cc
7798     SDLoc DL(N);
7799     if (SDValue SCC = SimplifySelectCC(
7800             DL, N0.getOperand(0), N0.getOperand(1), DAG.getConstant(1, DL, VT),
7801             DAG.getConstant(0, DL, VT),
7802             cast<CondCodeSDNode>(N0.getOperand(2))->get(), true))
7803       return SCC;
7804   }
7805 
7806   // (zext (shl (zext x), cst)) -> (shl (zext x), cst)
7807   if ((N0.getOpcode() == ISD::SHL || N0.getOpcode() == ISD::SRL) &&
7808       isa<ConstantSDNode>(N0.getOperand(1)) &&
7809       N0.getOperand(0).getOpcode() == ISD::ZERO_EXTEND &&
7810       N0.hasOneUse()) {
7811     SDValue ShAmt = N0.getOperand(1);
7812     unsigned ShAmtVal = cast<ConstantSDNode>(ShAmt)->getZExtValue();
7813     if (N0.getOpcode() == ISD::SHL) {
7814       SDValue InnerZExt = N0.getOperand(0);
7815       // If the original shl may be shifting out bits, do not perform this
7816       // transformation.
7817       unsigned KnownZeroBits = InnerZExt.getValueSizeInBits() -
7818         InnerZExt.getOperand(0).getValueSizeInBits();
7819       if (ShAmtVal > KnownZeroBits)
7820         return SDValue();
7821     }
7822 
7823     SDLoc DL(N);
7824 
7825     // Ensure that the shift amount is wide enough for the shifted value.
7826     if (VT.getSizeInBits() >= 256)
7827       ShAmt = DAG.getNode(ISD::ZERO_EXTEND, DL, MVT::i32, ShAmt);
7828 
7829     return DAG.getNode(N0.getOpcode(), DL, VT,
7830                        DAG.getNode(ISD::ZERO_EXTEND, DL, VT, N0.getOperand(0)),
7831                        ShAmt);
7832   }
7833 
7834   if (SDValue NewVSel = matchVSelectOpSizesWithSetCC(N))
7835     return NewVSel;
7836 
7837   return SDValue();
7838 }
7839 
7840 SDValue DAGCombiner::visitANY_EXTEND(SDNode *N) {
7841   SDValue N0 = N->getOperand(0);
7842   EVT VT = N->getValueType(0);
7843 
7844   if (SDNode *Res = tryToFoldExtendOfConstant(N, TLI, DAG, LegalTypes,
7845                                               LegalOperations))
7846     return SDValue(Res, 0);
7847 
7848   // fold (aext (aext x)) -> (aext x)
7849   // fold (aext (zext x)) -> (zext x)
7850   // fold (aext (sext x)) -> (sext x)
7851   if (N0.getOpcode() == ISD::ANY_EXTEND  ||
7852       N0.getOpcode() == ISD::ZERO_EXTEND ||
7853       N0.getOpcode() == ISD::SIGN_EXTEND)
7854     return DAG.getNode(N0.getOpcode(), SDLoc(N), VT, N0.getOperand(0));
7855 
7856   // fold (aext (truncate (load x))) -> (aext (smaller load x))
7857   // fold (aext (truncate (srl (load x), c))) -> (aext (small load (x+c/n)))
7858   if (N0.getOpcode() == ISD::TRUNCATE) {
7859     if (SDValue NarrowLoad = ReduceLoadWidth(N0.getNode())) {
7860       SDNode *oye = N0.getOperand(0).getNode();
7861       if (NarrowLoad.getNode() != N0.getNode()) {
7862         CombineTo(N0.getNode(), NarrowLoad);
7863         // CombineTo deleted the truncate, if needed, but not what's under it.
7864         AddToWorklist(oye);
7865       }
7866       return SDValue(N, 0);   // Return N so it doesn't get rechecked!
7867     }
7868   }
7869 
7870   // fold (aext (truncate x))
7871   if (N0.getOpcode() == ISD::TRUNCATE)
7872     return DAG.getAnyExtOrTrunc(N0.getOperand(0), SDLoc(N), VT);
7873 
7874   // Fold (aext (and (trunc x), cst)) -> (and x, cst)
7875   // if the trunc is not free.
7876   if (N0.getOpcode() == ISD::AND &&
7877       N0.getOperand(0).getOpcode() == ISD::TRUNCATE &&
7878       N0.getOperand(1).getOpcode() == ISD::Constant &&
7879       !TLI.isTruncateFree(N0.getOperand(0).getOperand(0).getValueType(),
7880                           N0.getValueType())) {
7881     SDLoc DL(N);
7882     SDValue X = N0.getOperand(0).getOperand(0);
7883     X = DAG.getAnyExtOrTrunc(X, DL, VT);
7884     APInt Mask = cast<ConstantSDNode>(N0.getOperand(1))->getAPIntValue();
7885     Mask = Mask.zext(VT.getSizeInBits());
7886     return DAG.getNode(ISD::AND, DL, VT,
7887                        X, DAG.getConstant(Mask, DL, VT));
7888   }
7889 
7890   // fold (aext (load x)) -> (aext (truncate (extload x)))
7891   // None of the supported targets knows how to perform load and any_ext
7892   // on vectors in one instruction.  We only perform this transformation on
7893   // scalars.
7894   if (ISD::isNON_EXTLoad(N0.getNode()) && !VT.isVector() &&
7895       ISD::isUNINDEXEDLoad(N0.getNode()) &&
7896       TLI.isLoadExtLegal(ISD::EXTLOAD, VT, N0.getValueType())) {
7897     bool DoXform = true;
7898     SmallVector<SDNode*, 4> SetCCs;
7899     if (!N0.hasOneUse())
7900       DoXform = ExtendUsesToFormExtLoad(N, N0, ISD::ANY_EXTEND, SetCCs, TLI);
7901     if (DoXform) {
7902       LoadSDNode *LN0 = cast<LoadSDNode>(N0);
7903       SDValue ExtLoad = DAG.getExtLoad(ISD::EXTLOAD, SDLoc(N), VT,
7904                                        LN0->getChain(),
7905                                        LN0->getBasePtr(), N0.getValueType(),
7906                                        LN0->getMemOperand());
7907       SDValue Trunc = DAG.getNode(ISD::TRUNCATE, SDLoc(N0),
7908                                   N0.getValueType(), ExtLoad);
7909       ExtendSetCCUses(SetCCs, Trunc, ExtLoad, SDLoc(N),
7910                       ISD::ANY_EXTEND);
7911       // If the load value is used only by N, replace it via CombineTo N.
7912       bool NoReplaceTrunc = N0.hasOneUse();
7913       CombineTo(N, ExtLoad);
7914       if (NoReplaceTrunc)
7915         DAG.ReplaceAllUsesOfValueWith(SDValue(LN0, 1), ExtLoad.getValue(1));
7916       else
7917         CombineTo(LN0, Trunc, ExtLoad.getValue(1));
7918       return SDValue(N, 0); // Return N so it doesn't get rechecked!
7919     }
7920   }
7921 
7922   // fold (aext (zextload x)) -> (aext (truncate (zextload x)))
7923   // fold (aext (sextload x)) -> (aext (truncate (sextload x)))
7924   // fold (aext ( extload x)) -> (aext (truncate (extload  x)))
7925   if (N0.getOpcode() == ISD::LOAD &&
7926       !ISD::isNON_EXTLoad(N0.getNode()) && ISD::isUNINDEXEDLoad(N0.getNode()) &&
7927       N0.hasOneUse()) {
7928     LoadSDNode *LN0 = cast<LoadSDNode>(N0);
7929     ISD::LoadExtType ExtType = LN0->getExtensionType();
7930     EVT MemVT = LN0->getMemoryVT();
7931     if (!LegalOperations || TLI.isLoadExtLegal(ExtType, VT, MemVT)) {
7932       SDValue ExtLoad = DAG.getExtLoad(ExtType, SDLoc(N),
7933                                        VT, LN0->getChain(), LN0->getBasePtr(),
7934                                        MemVT, LN0->getMemOperand());
7935       CombineTo(N, ExtLoad);
7936       CombineTo(N0.getNode(),
7937                 DAG.getNode(ISD::TRUNCATE, SDLoc(N0),
7938                             N0.getValueType(), ExtLoad),
7939                 ExtLoad.getValue(1));
7940       return SDValue(N, 0);   // Return N so it doesn't get rechecked!
7941     }
7942   }
7943 
7944   if (N0.getOpcode() == ISD::SETCC) {
7945     // For vectors:
7946     // aext(setcc) -> vsetcc
7947     // aext(setcc) -> truncate(vsetcc)
7948     // aext(setcc) -> aext(vsetcc)
7949     // Only do this before legalize for now.
7950     if (VT.isVector() && !LegalOperations) {
7951       EVT N0VT = N0.getOperand(0).getValueType();
7952         // We know that the # elements of the results is the same as the
7953         // # elements of the compare (and the # elements of the compare result
7954         // for that matter).  Check to see that they are the same size.  If so,
7955         // we know that the element size of the sext'd result matches the
7956         // element size of the compare operands.
7957       if (VT.getSizeInBits() == N0VT.getSizeInBits())
7958         return DAG.getSetCC(SDLoc(N), VT, N0.getOperand(0),
7959                              N0.getOperand(1),
7960                              cast<CondCodeSDNode>(N0.getOperand(2))->get());
7961       // If the desired elements are smaller or larger than the source
7962       // elements we can use a matching integer vector type and then
7963       // truncate/any extend
7964       else {
7965         EVT MatchingVectorType = N0VT.changeVectorElementTypeToInteger();
7966         SDValue VsetCC =
7967           DAG.getSetCC(SDLoc(N), MatchingVectorType, N0.getOperand(0),
7968                         N0.getOperand(1),
7969                         cast<CondCodeSDNode>(N0.getOperand(2))->get());
7970         return DAG.getAnyExtOrTrunc(VsetCC, SDLoc(N), VT);
7971       }
7972     }
7973 
7974     // aext(setcc x,y,cc) -> select_cc x, y, 1, 0, cc
7975     SDLoc DL(N);
7976     if (SDValue SCC = SimplifySelectCC(
7977             DL, N0.getOperand(0), N0.getOperand(1), DAG.getConstant(1, DL, VT),
7978             DAG.getConstant(0, DL, VT),
7979             cast<CondCodeSDNode>(N0.getOperand(2))->get(), true))
7980       return SCC;
7981   }
7982 
7983   return SDValue();
7984 }
7985 
7986 SDValue DAGCombiner::visitAssertExt(SDNode *N) {
7987   unsigned Opcode = N->getOpcode();
7988   SDValue N0 = N->getOperand(0);
7989   SDValue N1 = N->getOperand(1);
7990   EVT AssertVT = cast<VTSDNode>(N1)->getVT();
7991 
7992   // fold (assert?ext (assert?ext x, vt), vt) -> (assert?ext x, vt)
7993   if (N0.getOpcode() == Opcode &&
7994       AssertVT == cast<VTSDNode>(N0.getOperand(1))->getVT())
7995     return N0;
7996 
7997   if (N0.getOpcode() == ISD::TRUNCATE && N0.hasOneUse() &&
7998       N0.getOperand(0).getOpcode() == Opcode) {
7999     // We have an assert, truncate, assert sandwich. Make one stronger assert
8000     // by asserting on the smallest asserted type to the larger source type.
8001     // This eliminates the later assert:
8002     // assert (trunc (assert X, i8) to iN), i1 --> trunc (assert X, i1) to iN
8003     // assert (trunc (assert X, i1) to iN), i8 --> trunc (assert X, i1) to iN
8004     SDValue BigA = N0.getOperand(0);
8005     EVT BigA_AssertVT = cast<VTSDNode>(BigA.getOperand(1))->getVT();
8006     assert(BigA_AssertVT.bitsLE(N0.getValueType()) &&
8007            "Asserting zero/sign-extended bits to a type larger than the "
8008            "truncated destination does not provide information");
8009 
8010     SDLoc DL(N);
8011     EVT MinAssertVT = AssertVT.bitsLT(BigA_AssertVT) ? AssertVT : BigA_AssertVT;
8012     SDValue MinAssertVTVal = DAG.getValueType(MinAssertVT);
8013     SDValue NewAssert = DAG.getNode(Opcode, DL, BigA.getValueType(),
8014                                     BigA.getOperand(0), MinAssertVTVal);
8015     return DAG.getNode(ISD::TRUNCATE, DL, N->getValueType(0), NewAssert);
8016   }
8017 
8018   return SDValue();
8019 }
8020 
8021 /// If the result of a wider load is shifted to right of N  bits and then
8022 /// truncated to a narrower type and where N is a multiple of number of bits of
8023 /// the narrower type, transform it to a narrower load from address + N / num of
8024 /// bits of new type. If the result is to be extended, also fold the extension
8025 /// to form a extending load.
8026 SDValue DAGCombiner::ReduceLoadWidth(SDNode *N) {
8027   unsigned Opc = N->getOpcode();
8028 
8029   ISD::LoadExtType ExtType = ISD::NON_EXTLOAD;
8030   SDValue N0 = N->getOperand(0);
8031   EVT VT = N->getValueType(0);
8032   EVT ExtVT = VT;
8033 
8034   // This transformation isn't valid for vector loads.
8035   if (VT.isVector())
8036     return SDValue();
8037 
8038   // Special case: SIGN_EXTEND_INREG is basically truncating to ExtVT then
8039   // extended to VT.
8040   if (Opc == ISD::SIGN_EXTEND_INREG) {
8041     ExtType = ISD::SEXTLOAD;
8042     ExtVT = cast<VTSDNode>(N->getOperand(1))->getVT();
8043   } else if (Opc == ISD::SRL) {
8044     // Another special-case: SRL is basically zero-extending a narrower value.
8045     ExtType = ISD::ZEXTLOAD;
8046     N0 = SDValue(N, 0);
8047     ConstantSDNode *N01 = dyn_cast<ConstantSDNode>(N0.getOperand(1));
8048     if (!N01) return SDValue();
8049     ExtVT = EVT::getIntegerVT(*DAG.getContext(),
8050                               VT.getSizeInBits() - N01->getZExtValue());
8051   }
8052   if (LegalOperations && !TLI.isLoadExtLegal(ExtType, VT, ExtVT))
8053     return SDValue();
8054 
8055   unsigned EVTBits = ExtVT.getSizeInBits();
8056 
8057   // Do not generate loads of non-round integer types since these can
8058   // be expensive (and would be wrong if the type is not byte sized).
8059   if (!ExtVT.isRound())
8060     return SDValue();
8061 
8062   unsigned ShAmt = 0;
8063   if (N0.getOpcode() == ISD::SRL && N0.hasOneUse()) {
8064     if (ConstantSDNode *N01 = dyn_cast<ConstantSDNode>(N0.getOperand(1))) {
8065       ShAmt = N01->getZExtValue();
8066       // Is the shift amount a multiple of size of VT?
8067       if ((ShAmt & (EVTBits-1)) == 0) {
8068         N0 = N0.getOperand(0);
8069         // Is the load width a multiple of size of VT?
8070         if ((N0.getValueSizeInBits() & (EVTBits-1)) != 0)
8071           return SDValue();
8072       }
8073 
8074       // At this point, we must have a load or else we can't do the transform.
8075       if (!isa<LoadSDNode>(N0)) return SDValue();
8076 
8077       // Because a SRL must be assumed to *need* to zero-extend the high bits
8078       // (as opposed to anyext the high bits), we can't combine the zextload
8079       // lowering of SRL and an sextload.
8080       if (cast<LoadSDNode>(N0)->getExtensionType() == ISD::SEXTLOAD)
8081         return SDValue();
8082 
8083       // If the shift amount is larger than the input type then we're not
8084       // accessing any of the loaded bytes.  If the load was a zextload/extload
8085       // then the result of the shift+trunc is zero/undef (handled elsewhere).
8086       if (ShAmt >= cast<LoadSDNode>(N0)->getMemoryVT().getSizeInBits())
8087         return SDValue();
8088     }
8089   }
8090 
8091   // If the load is shifted left (and the result isn't shifted back right),
8092   // we can fold the truncate through the shift.
8093   unsigned ShLeftAmt = 0;
8094   if (ShAmt == 0 && N0.getOpcode() == ISD::SHL && N0.hasOneUse() &&
8095       ExtVT == VT && TLI.isNarrowingProfitable(N0.getValueType(), VT)) {
8096     if (ConstantSDNode *N01 = dyn_cast<ConstantSDNode>(N0.getOperand(1))) {
8097       ShLeftAmt = N01->getZExtValue();
8098       N0 = N0.getOperand(0);
8099     }
8100   }
8101 
8102   // If we haven't found a load, we can't narrow it.  Don't transform one with
8103   // multiple uses, this would require adding a new load.
8104   if (!isa<LoadSDNode>(N0) || !N0.hasOneUse())
8105     return SDValue();
8106 
8107   // Don't change the width of a volatile load.
8108   LoadSDNode *LN0 = cast<LoadSDNode>(N0);
8109   if (LN0->isVolatile())
8110     return SDValue();
8111 
8112   // Verify that we are actually reducing a load width here.
8113   if (LN0->getMemoryVT().getSizeInBits() < EVTBits)
8114     return SDValue();
8115 
8116   // For the transform to be legal, the load must produce only two values
8117   // (the value loaded and the chain).  Don't transform a pre-increment
8118   // load, for example, which produces an extra value.  Otherwise the
8119   // transformation is not equivalent, and the downstream logic to replace
8120   // uses gets things wrong.
8121   if (LN0->getNumValues() > 2)
8122     return SDValue();
8123 
8124   // If the load that we're shrinking is an extload and we're not just
8125   // discarding the extension we can't simply shrink the load. Bail.
8126   // TODO: It would be possible to merge the extensions in some cases.
8127   if (LN0->getExtensionType() != ISD::NON_EXTLOAD &&
8128       LN0->getMemoryVT().getSizeInBits() < ExtVT.getSizeInBits() + ShAmt)
8129     return SDValue();
8130 
8131   if (!TLI.shouldReduceLoadWidth(LN0, ExtType, ExtVT))
8132     return SDValue();
8133 
8134   EVT PtrType = N0.getOperand(1).getValueType();
8135 
8136   if (PtrType == MVT::Untyped || PtrType.isExtended())
8137     // It's not possible to generate a constant of extended or untyped type.
8138     return SDValue();
8139 
8140   // For big endian targets, we need to adjust the offset to the pointer to
8141   // load the correct bytes.
8142   if (DAG.getDataLayout().isBigEndian()) {
8143     unsigned LVTStoreBits = LN0->getMemoryVT().getStoreSizeInBits();
8144     unsigned EVTStoreBits = ExtVT.getStoreSizeInBits();
8145     ShAmt = LVTStoreBits - EVTStoreBits - ShAmt;
8146   }
8147 
8148   uint64_t PtrOff = ShAmt / 8;
8149   unsigned NewAlign = MinAlign(LN0->getAlignment(), PtrOff);
8150   SDLoc DL(LN0);
8151   // The original load itself didn't wrap, so an offset within it doesn't.
8152   SDNodeFlags Flags;
8153   Flags.setNoUnsignedWrap(true);
8154   SDValue NewPtr = DAG.getNode(ISD::ADD, DL,
8155                                PtrType, LN0->getBasePtr(),
8156                                DAG.getConstant(PtrOff, DL, PtrType),
8157                                Flags);
8158   AddToWorklist(NewPtr.getNode());
8159 
8160   SDValue Load;
8161   if (ExtType == ISD::NON_EXTLOAD)
8162     Load = DAG.getLoad(VT, SDLoc(N0), LN0->getChain(), NewPtr,
8163                        LN0->getPointerInfo().getWithOffset(PtrOff), NewAlign,
8164                        LN0->getMemOperand()->getFlags(), LN0->getAAInfo());
8165   else
8166     Load = DAG.getExtLoad(ExtType, SDLoc(N0), VT, LN0->getChain(), NewPtr,
8167                           LN0->getPointerInfo().getWithOffset(PtrOff), ExtVT,
8168                           NewAlign, LN0->getMemOperand()->getFlags(),
8169                           LN0->getAAInfo());
8170 
8171   // Replace the old load's chain with the new load's chain.
8172   WorklistRemover DeadNodes(*this);
8173   DAG.ReplaceAllUsesOfValueWith(N0.getValue(1), Load.getValue(1));
8174 
8175   // Shift the result left, if we've swallowed a left shift.
8176   SDValue Result = Load;
8177   if (ShLeftAmt != 0) {
8178     EVT ShImmTy = getShiftAmountTy(Result.getValueType());
8179     if (!isUIntN(ShImmTy.getSizeInBits(), ShLeftAmt))
8180       ShImmTy = VT;
8181     // If the shift amount is as large as the result size (but, presumably,
8182     // no larger than the source) then the useful bits of the result are
8183     // zero; we can't simply return the shortened shift, because the result
8184     // of that operation is undefined.
8185     SDLoc DL(N0);
8186     if (ShLeftAmt >= VT.getSizeInBits())
8187       Result = DAG.getConstant(0, DL, VT);
8188     else
8189       Result = DAG.getNode(ISD::SHL, DL, VT,
8190                           Result, DAG.getConstant(ShLeftAmt, DL, ShImmTy));
8191   }
8192 
8193   // Return the new loaded value.
8194   return Result;
8195 }
8196 
8197 SDValue DAGCombiner::visitSIGN_EXTEND_INREG(SDNode *N) {
8198   SDValue N0 = N->getOperand(0);
8199   SDValue N1 = N->getOperand(1);
8200   EVT VT = N->getValueType(0);
8201   EVT EVT = cast<VTSDNode>(N1)->getVT();
8202   unsigned VTBits = VT.getScalarSizeInBits();
8203   unsigned EVTBits = EVT.getScalarSizeInBits();
8204 
8205   if (N0.isUndef())
8206     return DAG.getUNDEF(VT);
8207 
8208   // fold (sext_in_reg c1) -> c1
8209   if (DAG.isConstantIntBuildVectorOrConstantInt(N0))
8210     return DAG.getNode(ISD::SIGN_EXTEND_INREG, SDLoc(N), VT, N0, N1);
8211 
8212   // If the input is already sign extended, just drop the extension.
8213   if (DAG.ComputeNumSignBits(N0) >= VTBits-EVTBits+1)
8214     return N0;
8215 
8216   // fold (sext_in_reg (sext_in_reg x, VT2), VT1) -> (sext_in_reg x, minVT) pt2
8217   if (N0.getOpcode() == ISD::SIGN_EXTEND_INREG &&
8218       EVT.bitsLT(cast<VTSDNode>(N0.getOperand(1))->getVT()))
8219     return DAG.getNode(ISD::SIGN_EXTEND_INREG, SDLoc(N), VT,
8220                        N0.getOperand(0), N1);
8221 
8222   // fold (sext_in_reg (sext x)) -> (sext x)
8223   // fold (sext_in_reg (aext x)) -> (sext x)
8224   // if x is small enough.
8225   if (N0.getOpcode() == ISD::SIGN_EXTEND || N0.getOpcode() == ISD::ANY_EXTEND) {
8226     SDValue N00 = N0.getOperand(0);
8227     if (N00.getScalarValueSizeInBits() <= EVTBits &&
8228         (!LegalOperations || TLI.isOperationLegal(ISD::SIGN_EXTEND, VT)))
8229       return DAG.getNode(ISD::SIGN_EXTEND, SDLoc(N), VT, N00, N1);
8230   }
8231 
8232   // fold (sext_in_reg (*_extend_vector_inreg x)) -> (sext_vector_in_reg x)
8233   if ((N0.getOpcode() == ISD::ANY_EXTEND_VECTOR_INREG ||
8234        N0.getOpcode() == ISD::SIGN_EXTEND_VECTOR_INREG ||
8235        N0.getOpcode() == ISD::ZERO_EXTEND_VECTOR_INREG) &&
8236       N0.getOperand(0).getScalarValueSizeInBits() == EVTBits) {
8237     if (!LegalOperations ||
8238         TLI.isOperationLegal(ISD::SIGN_EXTEND_VECTOR_INREG, VT))
8239       return DAG.getSignExtendVectorInReg(N0.getOperand(0), SDLoc(N), VT);
8240   }
8241 
8242   // fold (sext_in_reg (zext x)) -> (sext x)
8243   // iff we are extending the source sign bit.
8244   if (N0.getOpcode() == ISD::ZERO_EXTEND) {
8245     SDValue N00 = N0.getOperand(0);
8246     if (N00.getScalarValueSizeInBits() == EVTBits &&
8247         (!LegalOperations || TLI.isOperationLegal(ISD::SIGN_EXTEND, VT)))
8248       return DAG.getNode(ISD::SIGN_EXTEND, SDLoc(N), VT, N00, N1);
8249   }
8250 
8251   // fold (sext_in_reg x) -> (zext_in_reg x) if the sign bit is known zero.
8252   if (DAG.MaskedValueIsZero(N0, APInt::getOneBitSet(VTBits, EVTBits - 1)))
8253     return DAG.getZeroExtendInReg(N0, SDLoc(N), EVT.getScalarType());
8254 
8255   // fold operands of sext_in_reg based on knowledge that the top bits are not
8256   // demanded.
8257   if (SimplifyDemandedBits(SDValue(N, 0)))
8258     return SDValue(N, 0);
8259 
8260   // fold (sext_in_reg (load x)) -> (smaller sextload x)
8261   // fold (sext_in_reg (srl (load x), c)) -> (smaller sextload (x+c/evtbits))
8262   if (SDValue NarrowLoad = ReduceLoadWidth(N))
8263     return NarrowLoad;
8264 
8265   // fold (sext_in_reg (srl X, 24), i8) -> (sra X, 24)
8266   // fold (sext_in_reg (srl X, 23), i8) -> (sra X, 23) iff possible.
8267   // We already fold "(sext_in_reg (srl X, 25), i8) -> srl X, 25" above.
8268   if (N0.getOpcode() == ISD::SRL) {
8269     if (ConstantSDNode *ShAmt = dyn_cast<ConstantSDNode>(N0.getOperand(1)))
8270       if (ShAmt->getZExtValue()+EVTBits <= VTBits) {
8271         // We can turn this into an SRA iff the input to the SRL is already sign
8272         // extended enough.
8273         unsigned InSignBits = DAG.ComputeNumSignBits(N0.getOperand(0));
8274         if (VTBits-(ShAmt->getZExtValue()+EVTBits) < InSignBits)
8275           return DAG.getNode(ISD::SRA, SDLoc(N), VT,
8276                              N0.getOperand(0), N0.getOperand(1));
8277       }
8278   }
8279 
8280   // fold (sext_inreg (extload x)) -> (sextload x)
8281   // If sextload is not supported by target, we can only do the combine when
8282   // load has one use. Doing otherwise can block folding the extload with other
8283   // extends that the target does support.
8284   if (ISD::isEXTLoad(N0.getNode()) &&
8285       ISD::isUNINDEXEDLoad(N0.getNode()) &&
8286       EVT == cast<LoadSDNode>(N0)->getMemoryVT() &&
8287       ((!LegalOperations && !cast<LoadSDNode>(N0)->isVolatile() &&
8288         N0.hasOneUse()) ||
8289        TLI.isLoadExtLegal(ISD::SEXTLOAD, VT, EVT))) {
8290     LoadSDNode *LN0 = cast<LoadSDNode>(N0);
8291     SDValue ExtLoad = DAG.getExtLoad(ISD::SEXTLOAD, SDLoc(N), VT,
8292                                      LN0->getChain(),
8293                                      LN0->getBasePtr(), EVT,
8294                                      LN0->getMemOperand());
8295     CombineTo(N, ExtLoad);
8296     CombineTo(N0.getNode(), ExtLoad, ExtLoad.getValue(1));
8297     AddToWorklist(ExtLoad.getNode());
8298     return SDValue(N, 0);   // Return N so it doesn't get rechecked!
8299   }
8300   // fold (sext_inreg (zextload x)) -> (sextload x) iff load has one use
8301   if (ISD::isZEXTLoad(N0.getNode()) && ISD::isUNINDEXEDLoad(N0.getNode()) &&
8302       N0.hasOneUse() &&
8303       EVT == cast<LoadSDNode>(N0)->getMemoryVT() &&
8304       ((!LegalOperations && !cast<LoadSDNode>(N0)->isVolatile()) ||
8305        TLI.isLoadExtLegal(ISD::SEXTLOAD, VT, EVT))) {
8306     LoadSDNode *LN0 = cast<LoadSDNode>(N0);
8307     SDValue ExtLoad = DAG.getExtLoad(ISD::SEXTLOAD, SDLoc(N), VT,
8308                                      LN0->getChain(),
8309                                      LN0->getBasePtr(), EVT,
8310                                      LN0->getMemOperand());
8311     CombineTo(N, ExtLoad);
8312     CombineTo(N0.getNode(), ExtLoad, ExtLoad.getValue(1));
8313     return SDValue(N, 0);   // Return N so it doesn't get rechecked!
8314   }
8315 
8316   // Form (sext_inreg (bswap >> 16)) or (sext_inreg (rotl (bswap) 16))
8317   if (EVTBits <= 16 && N0.getOpcode() == ISD::OR) {
8318     if (SDValue BSwap = MatchBSwapHWordLow(N0.getNode(), N0.getOperand(0),
8319                                            N0.getOperand(1), false))
8320       return DAG.getNode(ISD::SIGN_EXTEND_INREG, SDLoc(N), VT,
8321                          BSwap, N1);
8322   }
8323 
8324   return SDValue();
8325 }
8326 
8327 SDValue DAGCombiner::visitSIGN_EXTEND_VECTOR_INREG(SDNode *N) {
8328   SDValue N0 = N->getOperand(0);
8329   EVT VT = N->getValueType(0);
8330 
8331   if (N0.isUndef())
8332     return DAG.getUNDEF(VT);
8333 
8334   if (SDNode *Res = tryToFoldExtendOfConstant(N, TLI, DAG, LegalTypes,
8335                                               LegalOperations))
8336     return SDValue(Res, 0);
8337 
8338   return SDValue();
8339 }
8340 
8341 SDValue DAGCombiner::visitZERO_EXTEND_VECTOR_INREG(SDNode *N) {
8342   SDValue N0 = N->getOperand(0);
8343   EVT VT = N->getValueType(0);
8344 
8345   if (N0.isUndef())
8346     return DAG.getUNDEF(VT);
8347 
8348   if (SDNode *Res = tryToFoldExtendOfConstant(N, TLI, DAG, LegalTypes,
8349                                               LegalOperations))
8350     return SDValue(Res, 0);
8351 
8352   return SDValue();
8353 }
8354 
8355 SDValue DAGCombiner::visitTRUNCATE(SDNode *N) {
8356   SDValue N0 = N->getOperand(0);
8357   EVT VT = N->getValueType(0);
8358   bool isLE = DAG.getDataLayout().isLittleEndian();
8359 
8360   // noop truncate
8361   if (N0.getValueType() == N->getValueType(0))
8362     return N0;
8363 
8364   // fold (truncate (truncate x)) -> (truncate x)
8365   if (N0.getOpcode() == ISD::TRUNCATE)
8366     return DAG.getNode(ISD::TRUNCATE, SDLoc(N), VT, N0.getOperand(0));
8367 
8368   // fold (truncate c1) -> c1
8369   if (DAG.isConstantIntBuildVectorOrConstantInt(N0)) {
8370     SDValue C = DAG.getNode(ISD::TRUNCATE, SDLoc(N), VT, N0);
8371     if (C.getNode() != N)
8372       return C;
8373   }
8374 
8375   // fold (truncate (ext x)) -> (ext x) or (truncate x) or x
8376   if (N0.getOpcode() == ISD::ZERO_EXTEND ||
8377       N0.getOpcode() == ISD::SIGN_EXTEND ||
8378       N0.getOpcode() == ISD::ANY_EXTEND) {
8379     // if the source is smaller than the dest, we still need an extend.
8380     if (N0.getOperand(0).getValueType().bitsLT(VT))
8381       return DAG.getNode(N0.getOpcode(), SDLoc(N), VT, N0.getOperand(0));
8382     // if the source is larger than the dest, than we just need the truncate.
8383     if (N0.getOperand(0).getValueType().bitsGT(VT))
8384       return DAG.getNode(ISD::TRUNCATE, SDLoc(N), VT, N0.getOperand(0));
8385     // if the source and dest are the same type, we can drop both the extend
8386     // and the truncate.
8387     return N0.getOperand(0);
8388   }
8389 
8390   // If this is anyext(trunc), don't fold it, allow ourselves to be folded.
8391   if (N->hasOneUse() && (N->use_begin()->getOpcode() == ISD::ANY_EXTEND))
8392     return SDValue();
8393 
8394   // Fold extract-and-trunc into a narrow extract. For example:
8395   //   i64 x = EXTRACT_VECTOR_ELT(v2i64 val, i32 1)
8396   //   i32 y = TRUNCATE(i64 x)
8397   //        -- becomes --
8398   //   v16i8 b = BITCAST (v2i64 val)
8399   //   i8 x = EXTRACT_VECTOR_ELT(v16i8 b, i32 8)
8400   //
8401   // Note: We only run this optimization after type legalization (which often
8402   // creates this pattern) and before operation legalization after which
8403   // we need to be more careful about the vector instructions that we generate.
8404   if (N0.getOpcode() == ISD::EXTRACT_VECTOR_ELT &&
8405       LegalTypes && !LegalOperations && N0->hasOneUse() && VT != MVT::i1) {
8406     EVT VecTy = N0.getOperand(0).getValueType();
8407     EVT ExTy = N0.getValueType();
8408     EVT TrTy = N->getValueType(0);
8409 
8410     unsigned NumElem = VecTy.getVectorNumElements();
8411     unsigned SizeRatio = ExTy.getSizeInBits()/TrTy.getSizeInBits();
8412 
8413     EVT NVT = EVT::getVectorVT(*DAG.getContext(), TrTy, SizeRatio * NumElem);
8414     assert(NVT.getSizeInBits() == VecTy.getSizeInBits() && "Invalid Size");
8415 
8416     SDValue EltNo = N0->getOperand(1);
8417     if (isa<ConstantSDNode>(EltNo) && isTypeLegal(NVT)) {
8418       int Elt = cast<ConstantSDNode>(EltNo)->getZExtValue();
8419       EVT IndexTy = TLI.getVectorIdxTy(DAG.getDataLayout());
8420       int Index = isLE ? (Elt*SizeRatio) : (Elt*SizeRatio + (SizeRatio-1));
8421 
8422       SDLoc DL(N);
8423       return DAG.getNode(ISD::EXTRACT_VECTOR_ELT, DL, TrTy,
8424                          DAG.getBitcast(NVT, N0.getOperand(0)),
8425                          DAG.getConstant(Index, DL, IndexTy));
8426     }
8427   }
8428 
8429   // trunc (select c, a, b) -> select c, (trunc a), (trunc b)
8430   if (N0.getOpcode() == ISD::SELECT && N0.hasOneUse()) {
8431     EVT SrcVT = N0.getValueType();
8432     if ((!LegalOperations || TLI.isOperationLegal(ISD::SELECT, SrcVT)) &&
8433         TLI.isTruncateFree(SrcVT, VT)) {
8434       SDLoc SL(N0);
8435       SDValue Cond = N0.getOperand(0);
8436       SDValue TruncOp0 = DAG.getNode(ISD::TRUNCATE, SL, VT, N0.getOperand(1));
8437       SDValue TruncOp1 = DAG.getNode(ISD::TRUNCATE, SL, VT, N0.getOperand(2));
8438       return DAG.getNode(ISD::SELECT, SDLoc(N), VT, Cond, TruncOp0, TruncOp1);
8439     }
8440   }
8441 
8442   // trunc (shl x, K) -> shl (trunc x), K => K < VT.getScalarSizeInBits()
8443   if (N0.getOpcode() == ISD::SHL && N0.hasOneUse() &&
8444       (!LegalOperations || TLI.isOperationLegalOrCustom(ISD::SHL, VT)) &&
8445       TLI.isTypeDesirableForOp(ISD::SHL, VT)) {
8446     SDValue Amt = N0.getOperand(1);
8447     KnownBits Known;
8448     DAG.computeKnownBits(Amt, Known);
8449     unsigned Size = VT.getScalarSizeInBits();
8450     if (Known.getBitWidth() - Known.countMinLeadingZeros() <= Log2_32(Size)) {
8451       SDLoc SL(N);
8452       EVT AmtVT = TLI.getShiftAmountTy(VT, DAG.getDataLayout());
8453 
8454       SDValue Trunc = DAG.getNode(ISD::TRUNCATE, SL, VT, N0.getOperand(0));
8455       if (AmtVT != Amt.getValueType()) {
8456         Amt = DAG.getZExtOrTrunc(Amt, SL, AmtVT);
8457         AddToWorklist(Amt.getNode());
8458       }
8459       return DAG.getNode(ISD::SHL, SL, VT, Trunc, Amt);
8460     }
8461   }
8462 
8463   // Fold a series of buildvector, bitcast, and truncate if possible.
8464   // For example fold
8465   //   (2xi32 trunc (bitcast ((4xi32)buildvector x, x, y, y) 2xi64)) to
8466   //   (2xi32 (buildvector x, y)).
8467   if (Level == AfterLegalizeVectorOps && VT.isVector() &&
8468       N0.getOpcode() == ISD::BITCAST && N0.hasOneUse() &&
8469       N0.getOperand(0).getOpcode() == ISD::BUILD_VECTOR &&
8470       N0.getOperand(0).hasOneUse()) {
8471     SDValue BuildVect = N0.getOperand(0);
8472     EVT BuildVectEltTy = BuildVect.getValueType().getVectorElementType();
8473     EVT TruncVecEltTy = VT.getVectorElementType();
8474 
8475     // Check that the element types match.
8476     if (BuildVectEltTy == TruncVecEltTy) {
8477       // Now we only need to compute the offset of the truncated elements.
8478       unsigned BuildVecNumElts =  BuildVect.getNumOperands();
8479       unsigned TruncVecNumElts = VT.getVectorNumElements();
8480       unsigned TruncEltOffset = BuildVecNumElts / TruncVecNumElts;
8481 
8482       assert((BuildVecNumElts % TruncVecNumElts) == 0 &&
8483              "Invalid number of elements");
8484 
8485       SmallVector<SDValue, 8> Opnds;
8486       for (unsigned i = 0, e = BuildVecNumElts; i != e; i += TruncEltOffset)
8487         Opnds.push_back(BuildVect.getOperand(i));
8488 
8489       return DAG.getBuildVector(VT, SDLoc(N), Opnds);
8490     }
8491   }
8492 
8493   // See if we can simplify the input to this truncate through knowledge that
8494   // only the low bits are being used.
8495   // For example "trunc (or (shl x, 8), y)" // -> trunc y
8496   // Currently we only perform this optimization on scalars because vectors
8497   // may have different active low bits.
8498   if (!VT.isVector()) {
8499     APInt Mask =
8500         APInt::getLowBitsSet(N0.getValueSizeInBits(), VT.getSizeInBits());
8501     if (SDValue Shorter = DAG.GetDemandedBits(N0, Mask))
8502       return DAG.getNode(ISD::TRUNCATE, SDLoc(N), VT, Shorter);
8503   }
8504 
8505   // fold (truncate (load x)) -> (smaller load x)
8506   // fold (truncate (srl (load x), c)) -> (smaller load (x+c/evtbits))
8507   if (!LegalTypes || TLI.isTypeDesirableForOp(N0.getOpcode(), VT)) {
8508     if (SDValue Reduced = ReduceLoadWidth(N))
8509       return Reduced;
8510 
8511     // Handle the case where the load remains an extending load even
8512     // after truncation.
8513     if (N0.hasOneUse() && ISD::isUNINDEXEDLoad(N0.getNode())) {
8514       LoadSDNode *LN0 = cast<LoadSDNode>(N0);
8515       if (!LN0->isVolatile() &&
8516           LN0->getMemoryVT().getStoreSizeInBits() < VT.getSizeInBits()) {
8517         SDValue NewLoad = DAG.getExtLoad(LN0->getExtensionType(), SDLoc(LN0),
8518                                          VT, LN0->getChain(), LN0->getBasePtr(),
8519                                          LN0->getMemoryVT(),
8520                                          LN0->getMemOperand());
8521         DAG.ReplaceAllUsesOfValueWith(N0.getValue(1), NewLoad.getValue(1));
8522         return NewLoad;
8523       }
8524     }
8525   }
8526 
8527   // fold (trunc (concat ... x ...)) -> (concat ..., (trunc x), ...)),
8528   // where ... are all 'undef'.
8529   if (N0.getOpcode() == ISD::CONCAT_VECTORS && !LegalTypes) {
8530     SmallVector<EVT, 8> VTs;
8531     SDValue V;
8532     unsigned Idx = 0;
8533     unsigned NumDefs = 0;
8534 
8535     for (unsigned i = 0, e = N0.getNumOperands(); i != e; ++i) {
8536       SDValue X = N0.getOperand(i);
8537       if (!X.isUndef()) {
8538         V = X;
8539         Idx = i;
8540         NumDefs++;
8541       }
8542       // Stop if more than one members are non-undef.
8543       if (NumDefs > 1)
8544         break;
8545       VTs.push_back(EVT::getVectorVT(*DAG.getContext(),
8546                                      VT.getVectorElementType(),
8547                                      X.getValueType().getVectorNumElements()));
8548     }
8549 
8550     if (NumDefs == 0)
8551       return DAG.getUNDEF(VT);
8552 
8553     if (NumDefs == 1) {
8554       assert(V.getNode() && "The single defined operand is empty!");
8555       SmallVector<SDValue, 8> Opnds;
8556       for (unsigned i = 0, e = VTs.size(); i != e; ++i) {
8557         if (i != Idx) {
8558           Opnds.push_back(DAG.getUNDEF(VTs[i]));
8559           continue;
8560         }
8561         SDValue NV = DAG.getNode(ISD::TRUNCATE, SDLoc(V), VTs[i], V);
8562         AddToWorklist(NV.getNode());
8563         Opnds.push_back(NV);
8564       }
8565       return DAG.getNode(ISD::CONCAT_VECTORS, SDLoc(N), VT, Opnds);
8566     }
8567   }
8568 
8569   // Fold truncate of a bitcast of a vector to an extract of the low vector
8570   // element.
8571   //
8572   // e.g. trunc (i64 (bitcast v2i32:x)) -> extract_vector_elt v2i32:x, idx
8573   if (N0.getOpcode() == ISD::BITCAST && !VT.isVector()) {
8574     SDValue VecSrc = N0.getOperand(0);
8575     EVT SrcVT = VecSrc.getValueType();
8576     if (SrcVT.isVector() && SrcVT.getScalarType() == VT &&
8577         (!LegalOperations ||
8578          TLI.isOperationLegal(ISD::EXTRACT_VECTOR_ELT, SrcVT))) {
8579       SDLoc SL(N);
8580 
8581       EVT IdxVT = TLI.getVectorIdxTy(DAG.getDataLayout());
8582       unsigned Idx = isLE ? 0 : SrcVT.getVectorNumElements() - 1;
8583       return DAG.getNode(ISD::EXTRACT_VECTOR_ELT, SL, VT,
8584                          VecSrc, DAG.getConstant(Idx, SL, IdxVT));
8585     }
8586   }
8587 
8588   // Simplify the operands using demanded-bits information.
8589   if (!VT.isVector() &&
8590       SimplifyDemandedBits(SDValue(N, 0)))
8591     return SDValue(N, 0);
8592 
8593   // (trunc adde(X, Y, Carry)) -> (adde trunc(X), trunc(Y), Carry)
8594   // (trunc addcarry(X, Y, Carry)) -> (addcarry trunc(X), trunc(Y), Carry)
8595   // When the adde's carry is not used.
8596   if ((N0.getOpcode() == ISD::ADDE || N0.getOpcode() == ISD::ADDCARRY) &&
8597       N0.hasOneUse() && !N0.getNode()->hasAnyUseOfValue(1) &&
8598       (!LegalOperations || TLI.isOperationLegal(N0.getOpcode(), VT))) {
8599     SDLoc SL(N);
8600     auto X = DAG.getNode(ISD::TRUNCATE, SL, VT, N0.getOperand(0));
8601     auto Y = DAG.getNode(ISD::TRUNCATE, SL, VT, N0.getOperand(1));
8602     auto VTs = DAG.getVTList(VT, N0->getValueType(1));
8603     return DAG.getNode(N0.getOpcode(), SL, VTs, X, Y, N0.getOperand(2));
8604   }
8605 
8606   if (SDValue NewVSel = matchVSelectOpSizesWithSetCC(N))
8607     return NewVSel;
8608 
8609   return SDValue();
8610 }
8611 
8612 static SDNode *getBuildPairElt(SDNode *N, unsigned i) {
8613   SDValue Elt = N->getOperand(i);
8614   if (Elt.getOpcode() != ISD::MERGE_VALUES)
8615     return Elt.getNode();
8616   return Elt.getOperand(Elt.getResNo()).getNode();
8617 }
8618 
8619 /// build_pair (load, load) -> load
8620 /// if load locations are consecutive.
8621 SDValue DAGCombiner::CombineConsecutiveLoads(SDNode *N, EVT VT) {
8622   assert(N->getOpcode() == ISD::BUILD_PAIR);
8623 
8624   LoadSDNode *LD1 = dyn_cast<LoadSDNode>(getBuildPairElt(N, 0));
8625   LoadSDNode *LD2 = dyn_cast<LoadSDNode>(getBuildPairElt(N, 1));
8626   if (!LD1 || !LD2 || !ISD::isNON_EXTLoad(LD1) || !LD1->hasOneUse() ||
8627       LD1->getAddressSpace() != LD2->getAddressSpace())
8628     return SDValue();
8629   EVT LD1VT = LD1->getValueType(0);
8630   unsigned LD1Bytes = LD1VT.getSizeInBits() / 8;
8631   if (ISD::isNON_EXTLoad(LD2) && LD2->hasOneUse() &&
8632       DAG.areNonVolatileConsecutiveLoads(LD2, LD1, LD1Bytes, 1)) {
8633     unsigned Align = LD1->getAlignment();
8634     unsigned NewAlign = DAG.getDataLayout().getABITypeAlignment(
8635         VT.getTypeForEVT(*DAG.getContext()));
8636 
8637     if (NewAlign <= Align &&
8638         (!LegalOperations || TLI.isOperationLegal(ISD::LOAD, VT)))
8639       return DAG.getLoad(VT, SDLoc(N), LD1->getChain(), LD1->getBasePtr(),
8640                          LD1->getPointerInfo(), Align);
8641   }
8642 
8643   return SDValue();
8644 }
8645 
8646 static unsigned getPPCf128HiElementSelector(const SelectionDAG &DAG) {
8647   // On little-endian machines, bitcasting from ppcf128 to i128 does swap the Hi
8648   // and Lo parts; on big-endian machines it doesn't.
8649   return DAG.getDataLayout().isBigEndian() ? 1 : 0;
8650 }
8651 
8652 static SDValue foldBitcastedFPLogic(SDNode *N, SelectionDAG &DAG,
8653                                     const TargetLowering &TLI) {
8654   // If this is not a bitcast to an FP type or if the target doesn't have
8655   // IEEE754-compliant FP logic, we're done.
8656   EVT VT = N->getValueType(0);
8657   if (!VT.isFloatingPoint() || !TLI.hasBitPreservingFPLogic(VT))
8658     return SDValue();
8659 
8660   // TODO: Use splat values for the constant-checking below and remove this
8661   // restriction.
8662   SDValue N0 = N->getOperand(0);
8663   EVT SourceVT = N0.getValueType();
8664   if (SourceVT.isVector())
8665     return SDValue();
8666 
8667   unsigned FPOpcode;
8668   APInt SignMask;
8669   switch (N0.getOpcode()) {
8670   case ISD::AND:
8671     FPOpcode = ISD::FABS;
8672     SignMask = ~APInt::getSignMask(SourceVT.getSizeInBits());
8673     break;
8674   case ISD::XOR:
8675     FPOpcode = ISD::FNEG;
8676     SignMask = APInt::getSignMask(SourceVT.getSizeInBits());
8677     break;
8678   // TODO: ISD::OR --> ISD::FNABS?
8679   default:
8680     return SDValue();
8681   }
8682 
8683   // Fold (bitcast int (and (bitcast fp X to int), 0x7fff...) to fp) -> fabs X
8684   // Fold (bitcast int (xor (bitcast fp X to int), 0x8000...) to fp) -> fneg X
8685   SDValue LogicOp0 = N0.getOperand(0);
8686   ConstantSDNode *LogicOp1 = dyn_cast<ConstantSDNode>(N0.getOperand(1));
8687   if (LogicOp1 && LogicOp1->getAPIntValue() == SignMask &&
8688       LogicOp0.getOpcode() == ISD::BITCAST &&
8689       LogicOp0->getOperand(0).getValueType() == VT)
8690     return DAG.getNode(FPOpcode, SDLoc(N), VT, LogicOp0->getOperand(0));
8691 
8692   return SDValue();
8693 }
8694 
8695 SDValue DAGCombiner::visitBITCAST(SDNode *N) {
8696   SDValue N0 = N->getOperand(0);
8697   EVT VT = N->getValueType(0);
8698 
8699   if (N0.isUndef())
8700     return DAG.getUNDEF(VT);
8701 
8702   // If the input is a BUILD_VECTOR with all constant elements, fold this now.
8703   // Only do this before legalize, since afterward the target may be depending
8704   // on the bitconvert.
8705   // First check to see if this is all constant.
8706   if (!LegalTypes &&
8707       N0.getOpcode() == ISD::BUILD_VECTOR && N0.getNode()->hasOneUse() &&
8708       VT.isVector()) {
8709     bool isSimple = cast<BuildVectorSDNode>(N0)->isConstant();
8710 
8711     EVT DestEltVT = N->getValueType(0).getVectorElementType();
8712     assert(!DestEltVT.isVector() &&
8713            "Element type of vector ValueType must not be vector!");
8714     if (isSimple)
8715       return ConstantFoldBITCASTofBUILD_VECTOR(N0.getNode(), DestEltVT);
8716   }
8717 
8718   // If the input is a constant, let getNode fold it.
8719   if (isa<ConstantSDNode>(N0) || isa<ConstantFPSDNode>(N0)) {
8720     // If we can't allow illegal operations, we need to check that this is just
8721     // a fp -> int or int -> conversion and that the resulting operation will
8722     // be legal.
8723     if (!LegalOperations ||
8724         (isa<ConstantSDNode>(N0) && VT.isFloatingPoint() && !VT.isVector() &&
8725          TLI.isOperationLegal(ISD::ConstantFP, VT)) ||
8726         (isa<ConstantFPSDNode>(N0) && VT.isInteger() && !VT.isVector() &&
8727          TLI.isOperationLegal(ISD::Constant, VT)))
8728       return DAG.getBitcast(VT, N0);
8729   }
8730 
8731   // (conv (conv x, t1), t2) -> (conv x, t2)
8732   if (N0.getOpcode() == ISD::BITCAST)
8733     return DAG.getBitcast(VT, N0.getOperand(0));
8734 
8735   // fold (conv (load x)) -> (load (conv*)x)
8736   // If the resultant load doesn't need a higher alignment than the original!
8737   if (ISD::isNormalLoad(N0.getNode()) && N0.hasOneUse() &&
8738       // Do not change the width of a volatile load.
8739       !cast<LoadSDNode>(N0)->isVolatile() &&
8740       // Do not remove the cast if the types differ in endian layout.
8741       TLI.hasBigEndianPartOrdering(N0.getValueType(), DAG.getDataLayout()) ==
8742           TLI.hasBigEndianPartOrdering(VT, DAG.getDataLayout()) &&
8743       (!LegalOperations || TLI.isOperationLegal(ISD::LOAD, VT)) &&
8744       TLI.isLoadBitCastBeneficial(N0.getValueType(), VT)) {
8745     LoadSDNode *LN0 = cast<LoadSDNode>(N0);
8746     unsigned OrigAlign = LN0->getAlignment();
8747 
8748     bool Fast = false;
8749     if (TLI.allowsMemoryAccess(*DAG.getContext(), DAG.getDataLayout(), VT,
8750                                LN0->getAddressSpace(), OrigAlign, &Fast) &&
8751         Fast) {
8752       SDValue Load =
8753           DAG.getLoad(VT, SDLoc(N), LN0->getChain(), LN0->getBasePtr(),
8754                       LN0->getPointerInfo(), OrigAlign,
8755                       LN0->getMemOperand()->getFlags(), LN0->getAAInfo());
8756       DAG.ReplaceAllUsesOfValueWith(N0.getValue(1), Load.getValue(1));
8757       return Load;
8758     }
8759   }
8760 
8761   if (SDValue V = foldBitcastedFPLogic(N, DAG, TLI))
8762     return V;
8763 
8764   // fold (bitconvert (fneg x)) -> (xor (bitconvert x), signbit)
8765   // fold (bitconvert (fabs x)) -> (and (bitconvert x), (not signbit))
8766   //
8767   // For ppc_fp128:
8768   // fold (bitcast (fneg x)) ->
8769   //     flipbit = signbit
8770   //     (xor (bitcast x) (build_pair flipbit, flipbit))
8771   //
8772   // fold (bitcast (fabs x)) ->
8773   //     flipbit = (and (extract_element (bitcast x), 0), signbit)
8774   //     (xor (bitcast x) (build_pair flipbit, flipbit))
8775   // This often reduces constant pool loads.
8776   if (((N0.getOpcode() == ISD::FNEG && !TLI.isFNegFree(N0.getValueType())) ||
8777        (N0.getOpcode() == ISD::FABS && !TLI.isFAbsFree(N0.getValueType()))) &&
8778       N0.getNode()->hasOneUse() && VT.isInteger() &&
8779       !VT.isVector() && !N0.getValueType().isVector()) {
8780     SDValue NewConv = DAG.getBitcast(VT, N0.getOperand(0));
8781     AddToWorklist(NewConv.getNode());
8782 
8783     SDLoc DL(N);
8784     if (N0.getValueType() == MVT::ppcf128 && !LegalTypes) {
8785       assert(VT.getSizeInBits() == 128);
8786       SDValue SignBit = DAG.getConstant(
8787           APInt::getSignMask(VT.getSizeInBits() / 2), SDLoc(N0), MVT::i64);
8788       SDValue FlipBit;
8789       if (N0.getOpcode() == ISD::FNEG) {
8790         FlipBit = SignBit;
8791         AddToWorklist(FlipBit.getNode());
8792       } else {
8793         assert(N0.getOpcode() == ISD::FABS);
8794         SDValue Hi =
8795             DAG.getNode(ISD::EXTRACT_ELEMENT, SDLoc(NewConv), MVT::i64, NewConv,
8796                         DAG.getIntPtrConstant(getPPCf128HiElementSelector(DAG),
8797                                               SDLoc(NewConv)));
8798         AddToWorklist(Hi.getNode());
8799         FlipBit = DAG.getNode(ISD::AND, SDLoc(N0), MVT::i64, Hi, SignBit);
8800         AddToWorklist(FlipBit.getNode());
8801       }
8802       SDValue FlipBits =
8803           DAG.getNode(ISD::BUILD_PAIR, SDLoc(N0), VT, FlipBit, FlipBit);
8804       AddToWorklist(FlipBits.getNode());
8805       return DAG.getNode(ISD::XOR, DL, VT, NewConv, FlipBits);
8806     }
8807     APInt SignBit = APInt::getSignMask(VT.getSizeInBits());
8808     if (N0.getOpcode() == ISD::FNEG)
8809       return DAG.getNode(ISD::XOR, DL, VT,
8810                          NewConv, DAG.getConstant(SignBit, DL, VT));
8811     assert(N0.getOpcode() == ISD::FABS);
8812     return DAG.getNode(ISD::AND, DL, VT,
8813                        NewConv, DAG.getConstant(~SignBit, DL, VT));
8814   }
8815 
8816   // fold (bitconvert (fcopysign cst, x)) ->
8817   //         (or (and (bitconvert x), sign), (and cst, (not sign)))
8818   // Note that we don't handle (copysign x, cst) because this can always be
8819   // folded to an fneg or fabs.
8820   //
8821   // For ppc_fp128:
8822   // fold (bitcast (fcopysign cst, x)) ->
8823   //     flipbit = (and (extract_element
8824   //                     (xor (bitcast cst), (bitcast x)), 0),
8825   //                    signbit)
8826   //     (xor (bitcast cst) (build_pair flipbit, flipbit))
8827   if (N0.getOpcode() == ISD::FCOPYSIGN && N0.getNode()->hasOneUse() &&
8828       isa<ConstantFPSDNode>(N0.getOperand(0)) &&
8829       VT.isInteger() && !VT.isVector()) {
8830     unsigned OrigXWidth = N0.getOperand(1).getValueSizeInBits();
8831     EVT IntXVT = EVT::getIntegerVT(*DAG.getContext(), OrigXWidth);
8832     if (isTypeLegal(IntXVT)) {
8833       SDValue X = DAG.getBitcast(IntXVT, N0.getOperand(1));
8834       AddToWorklist(X.getNode());
8835 
8836       // If X has a different width than the result/lhs, sext it or truncate it.
8837       unsigned VTWidth = VT.getSizeInBits();
8838       if (OrigXWidth < VTWidth) {
8839         X = DAG.getNode(ISD::SIGN_EXTEND, SDLoc(N), VT, X);
8840         AddToWorklist(X.getNode());
8841       } else if (OrigXWidth > VTWidth) {
8842         // To get the sign bit in the right place, we have to shift it right
8843         // before truncating.
8844         SDLoc DL(X);
8845         X = DAG.getNode(ISD::SRL, DL,
8846                         X.getValueType(), X,
8847                         DAG.getConstant(OrigXWidth-VTWidth, DL,
8848                                         X.getValueType()));
8849         AddToWorklist(X.getNode());
8850         X = DAG.getNode(ISD::TRUNCATE, SDLoc(X), VT, X);
8851         AddToWorklist(X.getNode());
8852       }
8853 
8854       if (N0.getValueType() == MVT::ppcf128 && !LegalTypes) {
8855         APInt SignBit = APInt::getSignMask(VT.getSizeInBits() / 2);
8856         SDValue Cst = DAG.getBitcast(VT, N0.getOperand(0));
8857         AddToWorklist(Cst.getNode());
8858         SDValue X = DAG.getBitcast(VT, N0.getOperand(1));
8859         AddToWorklist(X.getNode());
8860         SDValue XorResult = DAG.getNode(ISD::XOR, SDLoc(N0), VT, Cst, X);
8861         AddToWorklist(XorResult.getNode());
8862         SDValue XorResult64 = DAG.getNode(
8863             ISD::EXTRACT_ELEMENT, SDLoc(XorResult), MVT::i64, XorResult,
8864             DAG.getIntPtrConstant(getPPCf128HiElementSelector(DAG),
8865                                   SDLoc(XorResult)));
8866         AddToWorklist(XorResult64.getNode());
8867         SDValue FlipBit =
8868             DAG.getNode(ISD::AND, SDLoc(XorResult64), MVT::i64, XorResult64,
8869                         DAG.getConstant(SignBit, SDLoc(XorResult64), MVT::i64));
8870         AddToWorklist(FlipBit.getNode());
8871         SDValue FlipBits =
8872             DAG.getNode(ISD::BUILD_PAIR, SDLoc(N0), VT, FlipBit, FlipBit);
8873         AddToWorklist(FlipBits.getNode());
8874         return DAG.getNode(ISD::XOR, SDLoc(N), VT, Cst, FlipBits);
8875       }
8876       APInt SignBit = APInt::getSignMask(VT.getSizeInBits());
8877       X = DAG.getNode(ISD::AND, SDLoc(X), VT,
8878                       X, DAG.getConstant(SignBit, SDLoc(X), VT));
8879       AddToWorklist(X.getNode());
8880 
8881       SDValue Cst = DAG.getBitcast(VT, N0.getOperand(0));
8882       Cst = DAG.getNode(ISD::AND, SDLoc(Cst), VT,
8883                         Cst, DAG.getConstant(~SignBit, SDLoc(Cst), VT));
8884       AddToWorklist(Cst.getNode());
8885 
8886       return DAG.getNode(ISD::OR, SDLoc(N), VT, X, Cst);
8887     }
8888   }
8889 
8890   // bitconvert(build_pair(ld, ld)) -> ld iff load locations are consecutive.
8891   if (N0.getOpcode() == ISD::BUILD_PAIR)
8892     if (SDValue CombineLD = CombineConsecutiveLoads(N0.getNode(), VT))
8893       return CombineLD;
8894 
8895   // Remove double bitcasts from shuffles - this is often a legacy of
8896   // XformToShuffleWithZero being used to combine bitmaskings (of
8897   // float vectors bitcast to integer vectors) into shuffles.
8898   // bitcast(shuffle(bitcast(s0),bitcast(s1))) -> shuffle(s0,s1)
8899   if (Level < AfterLegalizeDAG && TLI.isTypeLegal(VT) && VT.isVector() &&
8900       N0->getOpcode() == ISD::VECTOR_SHUFFLE &&
8901       VT.getVectorNumElements() >= N0.getValueType().getVectorNumElements() &&
8902       !(VT.getVectorNumElements() % N0.getValueType().getVectorNumElements())) {
8903     ShuffleVectorSDNode *SVN = cast<ShuffleVectorSDNode>(N0);
8904 
8905     // If operands are a bitcast, peek through if it casts the original VT.
8906     // If operands are a constant, just bitcast back to original VT.
8907     auto PeekThroughBitcast = [&](SDValue Op) {
8908       if (Op.getOpcode() == ISD::BITCAST &&
8909           Op.getOperand(0).getValueType() == VT)
8910         return SDValue(Op.getOperand(0));
8911       if (Op.isUndef() || ISD::isBuildVectorOfConstantSDNodes(Op.getNode()) ||
8912           ISD::isBuildVectorOfConstantFPSDNodes(Op.getNode()))
8913         return DAG.getBitcast(VT, Op);
8914       return SDValue();
8915     };
8916 
8917     // FIXME: If either input vector is bitcast, try to convert the shuffle to
8918     // the result type of this bitcast. This would eliminate at least one
8919     // bitcast. See the transform in InstCombine.
8920     SDValue SV0 = PeekThroughBitcast(N0->getOperand(0));
8921     SDValue SV1 = PeekThroughBitcast(N0->getOperand(1));
8922     if (!(SV0 && SV1))
8923       return SDValue();
8924 
8925     int MaskScale =
8926         VT.getVectorNumElements() / N0.getValueType().getVectorNumElements();
8927     SmallVector<int, 8> NewMask;
8928     for (int M : SVN->getMask())
8929       for (int i = 0; i != MaskScale; ++i)
8930         NewMask.push_back(M < 0 ? -1 : M * MaskScale + i);
8931 
8932     bool LegalMask = TLI.isShuffleMaskLegal(NewMask, VT);
8933     if (!LegalMask) {
8934       std::swap(SV0, SV1);
8935       ShuffleVectorSDNode::commuteMask(NewMask);
8936       LegalMask = TLI.isShuffleMaskLegal(NewMask, VT);
8937     }
8938 
8939     if (LegalMask)
8940       return DAG.getVectorShuffle(VT, SDLoc(N), SV0, SV1, NewMask);
8941   }
8942 
8943   return SDValue();
8944 }
8945 
8946 SDValue DAGCombiner::visitBUILD_PAIR(SDNode *N) {
8947   EVT VT = N->getValueType(0);
8948   return CombineConsecutiveLoads(N, VT);
8949 }
8950 
8951 /// We know that BV is a build_vector node with Constant, ConstantFP or Undef
8952 /// operands. DstEltVT indicates the destination element value type.
8953 SDValue DAGCombiner::
8954 ConstantFoldBITCASTofBUILD_VECTOR(SDNode *BV, EVT DstEltVT) {
8955   EVT SrcEltVT = BV->getValueType(0).getVectorElementType();
8956 
8957   // If this is already the right type, we're done.
8958   if (SrcEltVT == DstEltVT) return SDValue(BV, 0);
8959 
8960   unsigned SrcBitSize = SrcEltVT.getSizeInBits();
8961   unsigned DstBitSize = DstEltVT.getSizeInBits();
8962 
8963   // If this is a conversion of N elements of one type to N elements of another
8964   // type, convert each element.  This handles FP<->INT cases.
8965   if (SrcBitSize == DstBitSize) {
8966     EVT VT = EVT::getVectorVT(*DAG.getContext(), DstEltVT,
8967                               BV->getValueType(0).getVectorNumElements());
8968 
8969     // Due to the FP element handling below calling this routine recursively,
8970     // we can end up with a scalar-to-vector node here.
8971     if (BV->getOpcode() == ISD::SCALAR_TO_VECTOR)
8972       return DAG.getNode(ISD::SCALAR_TO_VECTOR, SDLoc(BV), VT,
8973                          DAG.getBitcast(DstEltVT, BV->getOperand(0)));
8974 
8975     SmallVector<SDValue, 8> Ops;
8976     for (SDValue Op : BV->op_values()) {
8977       // If the vector element type is not legal, the BUILD_VECTOR operands
8978       // are promoted and implicitly truncated.  Make that explicit here.
8979       if (Op.getValueType() != SrcEltVT)
8980         Op = DAG.getNode(ISD::TRUNCATE, SDLoc(BV), SrcEltVT, Op);
8981       Ops.push_back(DAG.getBitcast(DstEltVT, Op));
8982       AddToWorklist(Ops.back().getNode());
8983     }
8984     return DAG.getBuildVector(VT, SDLoc(BV), Ops);
8985   }
8986 
8987   // Otherwise, we're growing or shrinking the elements.  To avoid having to
8988   // handle annoying details of growing/shrinking FP values, we convert them to
8989   // int first.
8990   if (SrcEltVT.isFloatingPoint()) {
8991     // Convert the input float vector to a int vector where the elements are the
8992     // same sizes.
8993     EVT IntVT = EVT::getIntegerVT(*DAG.getContext(), SrcEltVT.getSizeInBits());
8994     BV = ConstantFoldBITCASTofBUILD_VECTOR(BV, IntVT).getNode();
8995     SrcEltVT = IntVT;
8996   }
8997 
8998   // Now we know the input is an integer vector.  If the output is a FP type,
8999   // convert to integer first, then to FP of the right size.
9000   if (DstEltVT.isFloatingPoint()) {
9001     EVT TmpVT = EVT::getIntegerVT(*DAG.getContext(), DstEltVT.getSizeInBits());
9002     SDNode *Tmp = ConstantFoldBITCASTofBUILD_VECTOR(BV, TmpVT).getNode();
9003 
9004     // Next, convert to FP elements of the same size.
9005     return ConstantFoldBITCASTofBUILD_VECTOR(Tmp, DstEltVT);
9006   }
9007 
9008   SDLoc DL(BV);
9009 
9010   // Okay, we know the src/dst types are both integers of differing types.
9011   // Handling growing first.
9012   assert(SrcEltVT.isInteger() && DstEltVT.isInteger());
9013   if (SrcBitSize < DstBitSize) {
9014     unsigned NumInputsPerOutput = DstBitSize/SrcBitSize;
9015 
9016     SmallVector<SDValue, 8> Ops;
9017     for (unsigned i = 0, e = BV->getNumOperands(); i != e;
9018          i += NumInputsPerOutput) {
9019       bool isLE = DAG.getDataLayout().isLittleEndian();
9020       APInt NewBits = APInt(DstBitSize, 0);
9021       bool EltIsUndef = true;
9022       for (unsigned j = 0; j != NumInputsPerOutput; ++j) {
9023         // Shift the previously computed bits over.
9024         NewBits <<= SrcBitSize;
9025         SDValue Op = BV->getOperand(i+ (isLE ? (NumInputsPerOutput-j-1) : j));
9026         if (Op.isUndef()) continue;
9027         EltIsUndef = false;
9028 
9029         NewBits |= cast<ConstantSDNode>(Op)->getAPIntValue().
9030                    zextOrTrunc(SrcBitSize).zext(DstBitSize);
9031       }
9032 
9033       if (EltIsUndef)
9034         Ops.push_back(DAG.getUNDEF(DstEltVT));
9035       else
9036         Ops.push_back(DAG.getConstant(NewBits, DL, DstEltVT));
9037     }
9038 
9039     EVT VT = EVT::getVectorVT(*DAG.getContext(), DstEltVT, Ops.size());
9040     return DAG.getBuildVector(VT, DL, Ops);
9041   }
9042 
9043   // Finally, this must be the case where we are shrinking elements: each input
9044   // turns into multiple outputs.
9045   unsigned NumOutputsPerInput = SrcBitSize/DstBitSize;
9046   EVT VT = EVT::getVectorVT(*DAG.getContext(), DstEltVT,
9047                             NumOutputsPerInput*BV->getNumOperands());
9048   SmallVector<SDValue, 8> Ops;
9049 
9050   for (const SDValue &Op : BV->op_values()) {
9051     if (Op.isUndef()) {
9052       Ops.append(NumOutputsPerInput, DAG.getUNDEF(DstEltVT));
9053       continue;
9054     }
9055 
9056     APInt OpVal = cast<ConstantSDNode>(Op)->
9057                   getAPIntValue().zextOrTrunc(SrcBitSize);
9058 
9059     for (unsigned j = 0; j != NumOutputsPerInput; ++j) {
9060       APInt ThisVal = OpVal.trunc(DstBitSize);
9061       Ops.push_back(DAG.getConstant(ThisVal, DL, DstEltVT));
9062       OpVal.lshrInPlace(DstBitSize);
9063     }
9064 
9065     // For big endian targets, swap the order of the pieces of each element.
9066     if (DAG.getDataLayout().isBigEndian())
9067       std::reverse(Ops.end()-NumOutputsPerInput, Ops.end());
9068   }
9069 
9070   return DAG.getBuildVector(VT, DL, Ops);
9071 }
9072 
9073 static bool isContractable(SDNode *N) {
9074   SDNodeFlags F = N->getFlags();
9075   return F.hasAllowContract() || F.hasUnsafeAlgebra();
9076 }
9077 
9078 /// Try to perform FMA combining on a given FADD node.
9079 SDValue DAGCombiner::visitFADDForFMACombine(SDNode *N) {
9080   SDValue N0 = N->getOperand(0);
9081   SDValue N1 = N->getOperand(1);
9082   EVT VT = N->getValueType(0);
9083   SDLoc SL(N);
9084 
9085   const TargetOptions &Options = DAG.getTarget().Options;
9086 
9087   // Floating-point multiply-add with intermediate rounding.
9088   bool HasFMAD = (LegalOperations && TLI.isOperationLegal(ISD::FMAD, VT));
9089 
9090   // Floating-point multiply-add without intermediate rounding.
9091   bool HasFMA =
9092       TLI.isFMAFasterThanFMulAndFAdd(VT) &&
9093       (!LegalOperations || TLI.isOperationLegalOrCustom(ISD::FMA, VT));
9094 
9095   // No valid opcode, do not combine.
9096   if (!HasFMAD && !HasFMA)
9097     return SDValue();
9098 
9099   bool AllowFusionGlobally = (Options.AllowFPOpFusion == FPOpFusion::Fast ||
9100                               Options.UnsafeFPMath || HasFMAD);
9101   // If the addition is not contractable, do not combine.
9102   if (!AllowFusionGlobally && !isContractable(N))
9103     return SDValue();
9104 
9105   const SelectionDAGTargetInfo *STI = DAG.getSubtarget().getSelectionDAGInfo();
9106   if (STI && STI->generateFMAsInMachineCombiner(OptLevel))
9107     return SDValue();
9108 
9109   // Always prefer FMAD to FMA for precision.
9110   unsigned PreferredFusedOpcode = HasFMAD ? ISD::FMAD : ISD::FMA;
9111   bool Aggressive = TLI.enableAggressiveFMAFusion(VT);
9112 
9113   // Is the node an FMUL and contractable either due to global flags or
9114   // SDNodeFlags.
9115   auto isContractableFMUL = [AllowFusionGlobally](SDValue N) {
9116     if (N.getOpcode() != ISD::FMUL)
9117       return false;
9118     return AllowFusionGlobally || isContractable(N.getNode());
9119   };
9120   // If we have two choices trying to fold (fadd (fmul u, v), (fmul x, y)),
9121   // prefer to fold the multiply with fewer uses.
9122   if (Aggressive && isContractableFMUL(N0) && isContractableFMUL(N1)) {
9123     if (N0.getNode()->use_size() > N1.getNode()->use_size())
9124       std::swap(N0, N1);
9125   }
9126 
9127   // fold (fadd (fmul x, y), z) -> (fma x, y, z)
9128   if (isContractableFMUL(N0) && (Aggressive || N0->hasOneUse())) {
9129     return DAG.getNode(PreferredFusedOpcode, SL, VT,
9130                        N0.getOperand(0), N0.getOperand(1), N1);
9131   }
9132 
9133   // fold (fadd x, (fmul y, z)) -> (fma y, z, x)
9134   // Note: Commutes FADD operands.
9135   if (isContractableFMUL(N1) && (Aggressive || N1->hasOneUse())) {
9136     return DAG.getNode(PreferredFusedOpcode, SL, VT,
9137                        N1.getOperand(0), N1.getOperand(1), N0);
9138   }
9139 
9140   // Look through FP_EXTEND nodes to do more combining.
9141 
9142   // fold (fadd (fpext (fmul x, y)), z) -> (fma (fpext x), (fpext y), z)
9143   if (N0.getOpcode() == ISD::FP_EXTEND) {
9144     SDValue N00 = N0.getOperand(0);
9145     if (isContractableFMUL(N00) &&
9146         TLI.isFPExtFoldable(PreferredFusedOpcode, VT, N00.getValueType())) {
9147       return DAG.getNode(PreferredFusedOpcode, SL, VT,
9148                          DAG.getNode(ISD::FP_EXTEND, SL, VT,
9149                                      N00.getOperand(0)),
9150                          DAG.getNode(ISD::FP_EXTEND, SL, VT,
9151                                      N00.getOperand(1)), N1);
9152     }
9153   }
9154 
9155   // fold (fadd x, (fpext (fmul y, z))) -> (fma (fpext y), (fpext z), x)
9156   // Note: Commutes FADD operands.
9157   if (N1.getOpcode() == ISD::FP_EXTEND) {
9158     SDValue N10 = N1.getOperand(0);
9159     if (isContractableFMUL(N10) &&
9160         TLI.isFPExtFoldable(PreferredFusedOpcode, VT, N10.getValueType())) {
9161       return DAG.getNode(PreferredFusedOpcode, SL, VT,
9162                          DAG.getNode(ISD::FP_EXTEND, SL, VT,
9163                                      N10.getOperand(0)),
9164                          DAG.getNode(ISD::FP_EXTEND, SL, VT,
9165                                      N10.getOperand(1)), N0);
9166     }
9167   }
9168 
9169   // More folding opportunities when target permits.
9170   if (Aggressive) {
9171     // fold (fadd (fma x, y, (fmul u, v)), z) -> (fma x, y (fma u, v, z))
9172     // FIXME: The UnsafeAlgebra flag should be propagated to FMA/FMAD, but FMF
9173     // are currently only supported on binary nodes.
9174     if (Options.UnsafeFPMath &&
9175         N0.getOpcode() == PreferredFusedOpcode &&
9176         N0.getOperand(2).getOpcode() == ISD::FMUL &&
9177         N0->hasOneUse() && N0.getOperand(2)->hasOneUse()) {
9178       return DAG.getNode(PreferredFusedOpcode, SL, VT,
9179                          N0.getOperand(0), N0.getOperand(1),
9180                          DAG.getNode(PreferredFusedOpcode, SL, VT,
9181                                      N0.getOperand(2).getOperand(0),
9182                                      N0.getOperand(2).getOperand(1),
9183                                      N1));
9184     }
9185 
9186     // fold (fadd x, (fma y, z, (fmul u, v)) -> (fma y, z (fma u, v, x))
9187     // FIXME: The UnsafeAlgebra flag should be propagated to FMA/FMAD, but FMF
9188     // are currently only supported on binary nodes.
9189     if (Options.UnsafeFPMath &&
9190         N1->getOpcode() == PreferredFusedOpcode &&
9191         N1.getOperand(2).getOpcode() == ISD::FMUL &&
9192         N1->hasOneUse() && N1.getOperand(2)->hasOneUse()) {
9193       return DAG.getNode(PreferredFusedOpcode, SL, VT,
9194                          N1.getOperand(0), N1.getOperand(1),
9195                          DAG.getNode(PreferredFusedOpcode, SL, VT,
9196                                      N1.getOperand(2).getOperand(0),
9197                                      N1.getOperand(2).getOperand(1),
9198                                      N0));
9199     }
9200 
9201 
9202     // fold (fadd (fma x, y, (fpext (fmul u, v))), z)
9203     //   -> (fma x, y, (fma (fpext u), (fpext v), z))
9204     auto FoldFAddFMAFPExtFMul = [&] (
9205       SDValue X, SDValue Y, SDValue U, SDValue V, SDValue Z) {
9206       return DAG.getNode(PreferredFusedOpcode, SL, VT, X, Y,
9207                          DAG.getNode(PreferredFusedOpcode, SL, VT,
9208                                      DAG.getNode(ISD::FP_EXTEND, SL, VT, U),
9209                                      DAG.getNode(ISD::FP_EXTEND, SL, VT, V),
9210                                      Z));
9211     };
9212     if (N0.getOpcode() == PreferredFusedOpcode) {
9213       SDValue N02 = N0.getOperand(2);
9214       if (N02.getOpcode() == ISD::FP_EXTEND) {
9215         SDValue N020 = N02.getOperand(0);
9216         if (isContractableFMUL(N020) &&
9217             TLI.isFPExtFoldable(PreferredFusedOpcode, VT, N020.getValueType())) {
9218           return FoldFAddFMAFPExtFMul(N0.getOperand(0), N0.getOperand(1),
9219                                       N020.getOperand(0), N020.getOperand(1),
9220                                       N1);
9221         }
9222       }
9223     }
9224 
9225     // fold (fadd (fpext (fma x, y, (fmul u, v))), z)
9226     //   -> (fma (fpext x), (fpext y), (fma (fpext u), (fpext v), z))
9227     // FIXME: This turns two single-precision and one double-precision
9228     // operation into two double-precision operations, which might not be
9229     // interesting for all targets, especially GPUs.
9230     auto FoldFAddFPExtFMAFMul = [&] (
9231       SDValue X, SDValue Y, SDValue U, SDValue V, SDValue Z) {
9232       return DAG.getNode(PreferredFusedOpcode, SL, VT,
9233                          DAG.getNode(ISD::FP_EXTEND, SL, VT, X),
9234                          DAG.getNode(ISD::FP_EXTEND, SL, VT, Y),
9235                          DAG.getNode(PreferredFusedOpcode, SL, VT,
9236                                      DAG.getNode(ISD::FP_EXTEND, SL, VT, U),
9237                                      DAG.getNode(ISD::FP_EXTEND, SL, VT, V),
9238                                      Z));
9239     };
9240     if (N0.getOpcode() == ISD::FP_EXTEND) {
9241       SDValue N00 = N0.getOperand(0);
9242       if (N00.getOpcode() == PreferredFusedOpcode) {
9243         SDValue N002 = N00.getOperand(2);
9244         if (isContractableFMUL(N002) &&
9245             TLI.isFPExtFoldable(PreferredFusedOpcode, VT, N00.getValueType())) {
9246           return FoldFAddFPExtFMAFMul(N00.getOperand(0), N00.getOperand(1),
9247                                       N002.getOperand(0), N002.getOperand(1),
9248                                       N1);
9249         }
9250       }
9251     }
9252 
9253     // fold (fadd x, (fma y, z, (fpext (fmul u, v)))
9254     //   -> (fma y, z, (fma (fpext u), (fpext v), x))
9255     if (N1.getOpcode() == PreferredFusedOpcode) {
9256       SDValue N12 = N1.getOperand(2);
9257       if (N12.getOpcode() == ISD::FP_EXTEND) {
9258         SDValue N120 = N12.getOperand(0);
9259         if (isContractableFMUL(N120) &&
9260             TLI.isFPExtFoldable(PreferredFusedOpcode, VT, N120.getValueType())) {
9261           return FoldFAddFMAFPExtFMul(N1.getOperand(0), N1.getOperand(1),
9262                                       N120.getOperand(0), N120.getOperand(1),
9263                                       N0);
9264         }
9265       }
9266     }
9267 
9268     // fold (fadd x, (fpext (fma y, z, (fmul u, v)))
9269     //   -> (fma (fpext y), (fpext z), (fma (fpext u), (fpext v), x))
9270     // FIXME: This turns two single-precision and one double-precision
9271     // operation into two double-precision operations, which might not be
9272     // interesting for all targets, especially GPUs.
9273     if (N1.getOpcode() == ISD::FP_EXTEND) {
9274       SDValue N10 = N1.getOperand(0);
9275       if (N10.getOpcode() == PreferredFusedOpcode) {
9276         SDValue N102 = N10.getOperand(2);
9277         if (isContractableFMUL(N102) &&
9278             TLI.isFPExtFoldable(PreferredFusedOpcode, VT, N10.getValueType())) {
9279           return FoldFAddFPExtFMAFMul(N10.getOperand(0), N10.getOperand(1),
9280                                       N102.getOperand(0), N102.getOperand(1),
9281                                       N0);
9282         }
9283       }
9284     }
9285   }
9286 
9287   return SDValue();
9288 }
9289 
9290 /// Try to perform FMA combining on a given FSUB node.
9291 SDValue DAGCombiner::visitFSUBForFMACombine(SDNode *N) {
9292   SDValue N0 = N->getOperand(0);
9293   SDValue N1 = N->getOperand(1);
9294   EVT VT = N->getValueType(0);
9295   SDLoc SL(N);
9296 
9297   const TargetOptions &Options = DAG.getTarget().Options;
9298   // Floating-point multiply-add with intermediate rounding.
9299   bool HasFMAD = (LegalOperations && TLI.isOperationLegal(ISD::FMAD, VT));
9300 
9301   // Floating-point multiply-add without intermediate rounding.
9302   bool HasFMA =
9303       TLI.isFMAFasterThanFMulAndFAdd(VT) &&
9304       (!LegalOperations || TLI.isOperationLegalOrCustom(ISD::FMA, VT));
9305 
9306   // No valid opcode, do not combine.
9307   if (!HasFMAD && !HasFMA)
9308     return SDValue();
9309 
9310   bool AllowFusionGlobally = (Options.AllowFPOpFusion == FPOpFusion::Fast ||
9311                               Options.UnsafeFPMath || HasFMAD);
9312   // If the subtraction is not contractable, do not combine.
9313   if (!AllowFusionGlobally && !isContractable(N))
9314     return SDValue();
9315 
9316   const SelectionDAGTargetInfo *STI = DAG.getSubtarget().getSelectionDAGInfo();
9317   if (STI && STI->generateFMAsInMachineCombiner(OptLevel))
9318     return SDValue();
9319 
9320   // Always prefer FMAD to FMA for precision.
9321   unsigned PreferredFusedOpcode = HasFMAD ? ISD::FMAD : ISD::FMA;
9322   bool Aggressive = TLI.enableAggressiveFMAFusion(VT);
9323 
9324   // Is the node an FMUL and contractable either due to global flags or
9325   // SDNodeFlags.
9326   auto isContractableFMUL = [AllowFusionGlobally](SDValue N) {
9327     if (N.getOpcode() != ISD::FMUL)
9328       return false;
9329     return AllowFusionGlobally || isContractable(N.getNode());
9330   };
9331 
9332   // fold (fsub (fmul x, y), z) -> (fma x, y, (fneg z))
9333   if (isContractableFMUL(N0) && (Aggressive || N0->hasOneUse())) {
9334     return DAG.getNode(PreferredFusedOpcode, SL, VT,
9335                        N0.getOperand(0), N0.getOperand(1),
9336                        DAG.getNode(ISD::FNEG, SL, VT, N1));
9337   }
9338 
9339   // fold (fsub x, (fmul y, z)) -> (fma (fneg y), z, x)
9340   // Note: Commutes FSUB operands.
9341   if (isContractableFMUL(N1) && (Aggressive || N1->hasOneUse()))
9342     return DAG.getNode(PreferredFusedOpcode, SL, VT,
9343                        DAG.getNode(ISD::FNEG, SL, VT,
9344                                    N1.getOperand(0)),
9345                        N1.getOperand(1), N0);
9346 
9347   // fold (fsub (fneg (fmul, x, y)), z) -> (fma (fneg x), y, (fneg z))
9348   if (N0.getOpcode() == ISD::FNEG && isContractableFMUL(N0.getOperand(0)) &&
9349       (Aggressive || (N0->hasOneUse() && N0.getOperand(0).hasOneUse()))) {
9350     SDValue N00 = N0.getOperand(0).getOperand(0);
9351     SDValue N01 = N0.getOperand(0).getOperand(1);
9352     return DAG.getNode(PreferredFusedOpcode, SL, VT,
9353                        DAG.getNode(ISD::FNEG, SL, VT, N00), N01,
9354                        DAG.getNode(ISD::FNEG, SL, VT, N1));
9355   }
9356 
9357   // Look through FP_EXTEND nodes to do more combining.
9358 
9359   // fold (fsub (fpext (fmul x, y)), z)
9360   //   -> (fma (fpext x), (fpext y), (fneg z))
9361   if (N0.getOpcode() == ISD::FP_EXTEND) {
9362     SDValue N00 = N0.getOperand(0);
9363     if (isContractableFMUL(N00) &&
9364         TLI.isFPExtFoldable(PreferredFusedOpcode, VT, N00.getValueType())) {
9365       return DAG.getNode(PreferredFusedOpcode, SL, VT,
9366                          DAG.getNode(ISD::FP_EXTEND, SL, VT,
9367                                      N00.getOperand(0)),
9368                          DAG.getNode(ISD::FP_EXTEND, SL, VT,
9369                                      N00.getOperand(1)),
9370                          DAG.getNode(ISD::FNEG, SL, VT, N1));
9371     }
9372   }
9373 
9374   // fold (fsub x, (fpext (fmul y, z)))
9375   //   -> (fma (fneg (fpext y)), (fpext z), x)
9376   // Note: Commutes FSUB operands.
9377   if (N1.getOpcode() == ISD::FP_EXTEND) {
9378     SDValue N10 = N1.getOperand(0);
9379     if (isContractableFMUL(N10) &&
9380         TLI.isFPExtFoldable(PreferredFusedOpcode, VT, N10.getValueType())) {
9381       return DAG.getNode(PreferredFusedOpcode, SL, VT,
9382                          DAG.getNode(ISD::FNEG, SL, VT,
9383                                      DAG.getNode(ISD::FP_EXTEND, SL, VT,
9384                                                  N10.getOperand(0))),
9385                          DAG.getNode(ISD::FP_EXTEND, SL, VT,
9386                                      N10.getOperand(1)),
9387                          N0);
9388     }
9389   }
9390 
9391   // fold (fsub (fpext (fneg (fmul, x, y))), z)
9392   //   -> (fneg (fma (fpext x), (fpext y), z))
9393   // Note: This could be removed with appropriate canonicalization of the
9394   // input expression into (fneg (fadd (fpext (fmul, x, y)), z). However, the
9395   // orthogonal flags -fp-contract=fast and -enable-unsafe-fp-math prevent
9396   // from implementing the canonicalization in visitFSUB.
9397   if (N0.getOpcode() == ISD::FP_EXTEND) {
9398     SDValue N00 = N0.getOperand(0);
9399     if (N00.getOpcode() == ISD::FNEG) {
9400       SDValue N000 = N00.getOperand(0);
9401       if (isContractableFMUL(N000) &&
9402           TLI.isFPExtFoldable(PreferredFusedOpcode, VT, N00.getValueType())) {
9403         return DAG.getNode(ISD::FNEG, SL, VT,
9404                            DAG.getNode(PreferredFusedOpcode, SL, VT,
9405                                        DAG.getNode(ISD::FP_EXTEND, SL, VT,
9406                                                    N000.getOperand(0)),
9407                                        DAG.getNode(ISD::FP_EXTEND, SL, VT,
9408                                                    N000.getOperand(1)),
9409                                        N1));
9410       }
9411     }
9412   }
9413 
9414   // fold (fsub (fneg (fpext (fmul, x, y))), z)
9415   //   -> (fneg (fma (fpext x)), (fpext y), z)
9416   // Note: This could be removed with appropriate canonicalization of the
9417   // input expression into (fneg (fadd (fpext (fmul, x, y)), z). However, the
9418   // orthogonal flags -fp-contract=fast and -enable-unsafe-fp-math prevent
9419   // from implementing the canonicalization in visitFSUB.
9420   if (N0.getOpcode() == ISD::FNEG) {
9421     SDValue N00 = N0.getOperand(0);
9422     if (N00.getOpcode() == ISD::FP_EXTEND) {
9423       SDValue N000 = N00.getOperand(0);
9424       if (isContractableFMUL(N000) &&
9425           TLI.isFPExtFoldable(PreferredFusedOpcode, VT, N000.getValueType())) {
9426         return DAG.getNode(ISD::FNEG, SL, VT,
9427                            DAG.getNode(PreferredFusedOpcode, SL, VT,
9428                                        DAG.getNode(ISD::FP_EXTEND, SL, VT,
9429                                                    N000.getOperand(0)),
9430                                        DAG.getNode(ISD::FP_EXTEND, SL, VT,
9431                                                    N000.getOperand(1)),
9432                                        N1));
9433       }
9434     }
9435   }
9436 
9437   // More folding opportunities when target permits.
9438   if (Aggressive) {
9439     // fold (fsub (fma x, y, (fmul u, v)), z)
9440     //   -> (fma x, y (fma u, v, (fneg z)))
9441     // FIXME: The UnsafeAlgebra flag should be propagated to FMA/FMAD, but FMF
9442     // are currently only supported on binary nodes.
9443     if (Options.UnsafeFPMath && N0.getOpcode() == PreferredFusedOpcode &&
9444         isContractableFMUL(N0.getOperand(2)) && N0->hasOneUse() &&
9445         N0.getOperand(2)->hasOneUse()) {
9446       return DAG.getNode(PreferredFusedOpcode, SL, VT,
9447                          N0.getOperand(0), N0.getOperand(1),
9448                          DAG.getNode(PreferredFusedOpcode, SL, VT,
9449                                      N0.getOperand(2).getOperand(0),
9450                                      N0.getOperand(2).getOperand(1),
9451                                      DAG.getNode(ISD::FNEG, SL, VT,
9452                                                  N1)));
9453     }
9454 
9455     // fold (fsub x, (fma y, z, (fmul u, v)))
9456     //   -> (fma (fneg y), z, (fma (fneg u), v, x))
9457     // FIXME: The UnsafeAlgebra flag should be propagated to FMA/FMAD, but FMF
9458     // are currently only supported on binary nodes.
9459     if (Options.UnsafeFPMath && N1.getOpcode() == PreferredFusedOpcode &&
9460         isContractableFMUL(N1.getOperand(2))) {
9461       SDValue N20 = N1.getOperand(2).getOperand(0);
9462       SDValue N21 = N1.getOperand(2).getOperand(1);
9463       return DAG.getNode(PreferredFusedOpcode, SL, VT,
9464                          DAG.getNode(ISD::FNEG, SL, VT,
9465                                      N1.getOperand(0)),
9466                          N1.getOperand(1),
9467                          DAG.getNode(PreferredFusedOpcode, SL, VT,
9468                                      DAG.getNode(ISD::FNEG, SL, VT, N20),
9469 
9470                                      N21, N0));
9471     }
9472 
9473 
9474     // fold (fsub (fma x, y, (fpext (fmul u, v))), z)
9475     //   -> (fma x, y (fma (fpext u), (fpext v), (fneg z)))
9476     if (N0.getOpcode() == PreferredFusedOpcode) {
9477       SDValue N02 = N0.getOperand(2);
9478       if (N02.getOpcode() == ISD::FP_EXTEND) {
9479         SDValue N020 = N02.getOperand(0);
9480         if (isContractableFMUL(N020) &&
9481             TLI.isFPExtFoldable(PreferredFusedOpcode, VT, N020.getValueType())) {
9482           return DAG.getNode(PreferredFusedOpcode, SL, VT,
9483                              N0.getOperand(0), N0.getOperand(1),
9484                              DAG.getNode(PreferredFusedOpcode, SL, VT,
9485                                          DAG.getNode(ISD::FP_EXTEND, SL, VT,
9486                                                      N020.getOperand(0)),
9487                                          DAG.getNode(ISD::FP_EXTEND, SL, VT,
9488                                                      N020.getOperand(1)),
9489                                          DAG.getNode(ISD::FNEG, SL, VT,
9490                                                      N1)));
9491         }
9492       }
9493     }
9494 
9495     // fold (fsub (fpext (fma x, y, (fmul u, v))), z)
9496     //   -> (fma (fpext x), (fpext y),
9497     //           (fma (fpext u), (fpext v), (fneg z)))
9498     // FIXME: This turns two single-precision and one double-precision
9499     // operation into two double-precision operations, which might not be
9500     // interesting for all targets, especially GPUs.
9501     if (N0.getOpcode() == ISD::FP_EXTEND) {
9502       SDValue N00 = N0.getOperand(0);
9503       if (N00.getOpcode() == PreferredFusedOpcode) {
9504         SDValue N002 = N00.getOperand(2);
9505         if (isContractableFMUL(N002) &&
9506             TLI.isFPExtFoldable(PreferredFusedOpcode, VT, N00.getValueType())) {
9507           return DAG.getNode(PreferredFusedOpcode, SL, VT,
9508                              DAG.getNode(ISD::FP_EXTEND, SL, VT,
9509                                          N00.getOperand(0)),
9510                              DAG.getNode(ISD::FP_EXTEND, SL, VT,
9511                                          N00.getOperand(1)),
9512                              DAG.getNode(PreferredFusedOpcode, SL, VT,
9513                                          DAG.getNode(ISD::FP_EXTEND, SL, VT,
9514                                                      N002.getOperand(0)),
9515                                          DAG.getNode(ISD::FP_EXTEND, SL, VT,
9516                                                      N002.getOperand(1)),
9517                                          DAG.getNode(ISD::FNEG, SL, VT,
9518                                                      N1)));
9519         }
9520       }
9521     }
9522 
9523     // fold (fsub x, (fma y, z, (fpext (fmul u, v))))
9524     //   -> (fma (fneg y), z, (fma (fneg (fpext u)), (fpext v), x))
9525     if (N1.getOpcode() == PreferredFusedOpcode &&
9526         N1.getOperand(2).getOpcode() == ISD::FP_EXTEND) {
9527       SDValue N120 = N1.getOperand(2).getOperand(0);
9528       if (isContractableFMUL(N120) &&
9529           TLI.isFPExtFoldable(PreferredFusedOpcode, VT, N120.getValueType())) {
9530         SDValue N1200 = N120.getOperand(0);
9531         SDValue N1201 = N120.getOperand(1);
9532         return DAG.getNode(PreferredFusedOpcode, SL, VT,
9533                            DAG.getNode(ISD::FNEG, SL, VT, N1.getOperand(0)),
9534                            N1.getOperand(1),
9535                            DAG.getNode(PreferredFusedOpcode, SL, VT,
9536                                        DAG.getNode(ISD::FNEG, SL, VT,
9537                                                    DAG.getNode(ISD::FP_EXTEND, SL,
9538                                                                VT, N1200)),
9539                                        DAG.getNode(ISD::FP_EXTEND, SL, VT,
9540                                                    N1201),
9541                                        N0));
9542       }
9543     }
9544 
9545     // fold (fsub x, (fpext (fma y, z, (fmul u, v))))
9546     //   -> (fma (fneg (fpext y)), (fpext z),
9547     //           (fma (fneg (fpext u)), (fpext v), x))
9548     // FIXME: This turns two single-precision and one double-precision
9549     // operation into two double-precision operations, which might not be
9550     // interesting for all targets, especially GPUs.
9551     if (N1.getOpcode() == ISD::FP_EXTEND &&
9552         N1.getOperand(0).getOpcode() == PreferredFusedOpcode) {
9553       SDValue CvtSrc = N1.getOperand(0);
9554       SDValue N100 = CvtSrc.getOperand(0);
9555       SDValue N101 = CvtSrc.getOperand(1);
9556       SDValue N102 = CvtSrc.getOperand(2);
9557       if (isContractableFMUL(N102) &&
9558           TLI.isFPExtFoldable(PreferredFusedOpcode, VT, CvtSrc.getValueType())) {
9559         SDValue N1020 = N102.getOperand(0);
9560         SDValue N1021 = N102.getOperand(1);
9561         return DAG.getNode(PreferredFusedOpcode, SL, VT,
9562                            DAG.getNode(ISD::FNEG, SL, VT,
9563                                        DAG.getNode(ISD::FP_EXTEND, SL, VT,
9564                                                    N100)),
9565                            DAG.getNode(ISD::FP_EXTEND, SL, VT, N101),
9566                            DAG.getNode(PreferredFusedOpcode, SL, VT,
9567                                        DAG.getNode(ISD::FNEG, SL, VT,
9568                                                    DAG.getNode(ISD::FP_EXTEND, SL,
9569                                                                VT, N1020)),
9570                                        DAG.getNode(ISD::FP_EXTEND, SL, VT,
9571                                                    N1021),
9572                                        N0));
9573       }
9574     }
9575   }
9576 
9577   return SDValue();
9578 }
9579 
9580 /// Try to perform FMA combining on a given FMUL node based on the distributive
9581 /// law x * (y + 1) = x * y + x and variants thereof (commuted versions,
9582 /// subtraction instead of addition).
9583 SDValue DAGCombiner::visitFMULForFMADistributiveCombine(SDNode *N) {
9584   SDValue N0 = N->getOperand(0);
9585   SDValue N1 = N->getOperand(1);
9586   EVT VT = N->getValueType(0);
9587   SDLoc SL(N);
9588 
9589   assert(N->getOpcode() == ISD::FMUL && "Expected FMUL Operation");
9590 
9591   const TargetOptions &Options = DAG.getTarget().Options;
9592 
9593   // The transforms below are incorrect when x == 0 and y == inf, because the
9594   // intermediate multiplication produces a nan.
9595   if (!Options.NoInfsFPMath)
9596     return SDValue();
9597 
9598   // Floating-point multiply-add without intermediate rounding.
9599   bool HasFMA =
9600       (Options.AllowFPOpFusion == FPOpFusion::Fast || Options.UnsafeFPMath) &&
9601       TLI.isFMAFasterThanFMulAndFAdd(VT) &&
9602       (!LegalOperations || TLI.isOperationLegalOrCustom(ISD::FMA, VT));
9603 
9604   // Floating-point multiply-add with intermediate rounding. This can result
9605   // in a less precise result due to the changed rounding order.
9606   bool HasFMAD = Options.UnsafeFPMath &&
9607                  (LegalOperations && TLI.isOperationLegal(ISD::FMAD, VT));
9608 
9609   // No valid opcode, do not combine.
9610   if (!HasFMAD && !HasFMA)
9611     return SDValue();
9612 
9613   // Always prefer FMAD to FMA for precision.
9614   unsigned PreferredFusedOpcode = HasFMAD ? ISD::FMAD : ISD::FMA;
9615   bool Aggressive = TLI.enableAggressiveFMAFusion(VT);
9616 
9617   // fold (fmul (fadd x, +1.0), y) -> (fma x, y, y)
9618   // fold (fmul (fadd x, -1.0), y) -> (fma x, y, (fneg y))
9619   auto FuseFADD = [&](SDValue X, SDValue Y) {
9620     if (X.getOpcode() == ISD::FADD && (Aggressive || X->hasOneUse())) {
9621       auto XC1 = isConstOrConstSplatFP(X.getOperand(1));
9622       if (XC1 && XC1->isExactlyValue(+1.0))
9623         return DAG.getNode(PreferredFusedOpcode, SL, VT, X.getOperand(0), Y, Y);
9624       if (XC1 && XC1->isExactlyValue(-1.0))
9625         return DAG.getNode(PreferredFusedOpcode, SL, VT, X.getOperand(0), Y,
9626                            DAG.getNode(ISD::FNEG, SL, VT, Y));
9627     }
9628     return SDValue();
9629   };
9630 
9631   if (SDValue FMA = FuseFADD(N0, N1))
9632     return FMA;
9633   if (SDValue FMA = FuseFADD(N1, N0))
9634     return FMA;
9635 
9636   // fold (fmul (fsub +1.0, x), y) -> (fma (fneg x), y, y)
9637   // fold (fmul (fsub -1.0, x), y) -> (fma (fneg x), y, (fneg y))
9638   // fold (fmul (fsub x, +1.0), y) -> (fma x, y, (fneg y))
9639   // fold (fmul (fsub x, -1.0), y) -> (fma x, y, y)
9640   auto FuseFSUB = [&](SDValue X, SDValue Y) {
9641     if (X.getOpcode() == ISD::FSUB && (Aggressive || X->hasOneUse())) {
9642       auto XC0 = isConstOrConstSplatFP(X.getOperand(0));
9643       if (XC0 && XC0->isExactlyValue(+1.0))
9644         return DAG.getNode(PreferredFusedOpcode, SL, VT,
9645                            DAG.getNode(ISD::FNEG, SL, VT, X.getOperand(1)), Y,
9646                            Y);
9647       if (XC0 && XC0->isExactlyValue(-1.0))
9648         return DAG.getNode(PreferredFusedOpcode, SL, VT,
9649                            DAG.getNode(ISD::FNEG, SL, VT, X.getOperand(1)), Y,
9650                            DAG.getNode(ISD::FNEG, SL, VT, Y));
9651 
9652       auto XC1 = isConstOrConstSplatFP(X.getOperand(1));
9653       if (XC1 && XC1->isExactlyValue(+1.0))
9654         return DAG.getNode(PreferredFusedOpcode, SL, VT, X.getOperand(0), Y,
9655                            DAG.getNode(ISD::FNEG, SL, VT, Y));
9656       if (XC1 && XC1->isExactlyValue(-1.0))
9657         return DAG.getNode(PreferredFusedOpcode, SL, VT, X.getOperand(0), Y, Y);
9658     }
9659     return SDValue();
9660   };
9661 
9662   if (SDValue FMA = FuseFSUB(N0, N1))
9663     return FMA;
9664   if (SDValue FMA = FuseFSUB(N1, N0))
9665     return FMA;
9666 
9667   return SDValue();
9668 }
9669 
9670 static bool isFMulNegTwo(SDValue &N) {
9671   if (N.getOpcode() != ISD::FMUL)
9672     return false;
9673   if (ConstantFPSDNode *CFP = isConstOrConstSplatFP(N.getOperand(1)))
9674     return CFP->isExactlyValue(-2.0);
9675   return false;
9676 }
9677 
9678 SDValue DAGCombiner::visitFADD(SDNode *N) {
9679   SDValue N0 = N->getOperand(0);
9680   SDValue N1 = N->getOperand(1);
9681   bool N0CFP = isConstantFPBuildVectorOrConstantFP(N0);
9682   bool N1CFP = isConstantFPBuildVectorOrConstantFP(N1);
9683   EVT VT = N->getValueType(0);
9684   SDLoc DL(N);
9685   const TargetOptions &Options = DAG.getTarget().Options;
9686   const SDNodeFlags Flags = N->getFlags();
9687 
9688   // fold vector ops
9689   if (VT.isVector())
9690     if (SDValue FoldedVOp = SimplifyVBinOp(N))
9691       return FoldedVOp;
9692 
9693   // fold (fadd c1, c2) -> c1 + c2
9694   if (N0CFP && N1CFP)
9695     return DAG.getNode(ISD::FADD, DL, VT, N0, N1, Flags);
9696 
9697   // canonicalize constant to RHS
9698   if (N0CFP && !N1CFP)
9699     return DAG.getNode(ISD::FADD, DL, VT, N1, N0, Flags);
9700 
9701   if (SDValue NewSel = foldBinOpIntoSelect(N))
9702     return NewSel;
9703 
9704   // fold (fadd A, (fneg B)) -> (fsub A, B)
9705   if ((!LegalOperations || TLI.isOperationLegalOrCustom(ISD::FSUB, VT)) &&
9706       isNegatibleForFree(N1, LegalOperations, TLI, &Options) == 2)
9707     return DAG.getNode(ISD::FSUB, DL, VT, N0,
9708                        GetNegatedExpression(N1, DAG, LegalOperations), Flags);
9709 
9710   // fold (fadd (fneg A), B) -> (fsub B, A)
9711   if ((!LegalOperations || TLI.isOperationLegalOrCustom(ISD::FSUB, VT)) &&
9712       isNegatibleForFree(N0, LegalOperations, TLI, &Options) == 2)
9713     return DAG.getNode(ISD::FSUB, DL, VT, N1,
9714                        GetNegatedExpression(N0, DAG, LegalOperations), Flags);
9715 
9716   // fold (fadd A, (fmul B, -2.0)) -> (fsub A, (fadd B, B))
9717   // fold (fadd (fmul B, -2.0), A) -> (fsub A, (fadd B, B))
9718   if ((isFMulNegTwo(N0) && N0.hasOneUse()) ||
9719       (isFMulNegTwo(N1) && N1.hasOneUse())) {
9720     bool N1IsFMul = isFMulNegTwo(N1);
9721     SDValue AddOp = N1IsFMul ? N1.getOperand(0) : N0.getOperand(0);
9722     SDValue Add = DAG.getNode(ISD::FADD, DL, VT, AddOp, AddOp, Flags);
9723     return DAG.getNode(ISD::FSUB, DL, VT, N1IsFMul ? N0 : N1, Add, Flags);
9724   }
9725 
9726   // FIXME: Auto-upgrade the target/function-level option.
9727   if (Options.NoSignedZerosFPMath || N->getFlags().hasNoSignedZeros()) {
9728     // fold (fadd A, 0) -> A
9729     if (ConstantFPSDNode *N1C = isConstOrConstSplatFP(N1))
9730       if (N1C->isZero())
9731         return N0;
9732   }
9733 
9734   // If 'unsafe math' is enabled, fold lots of things.
9735   if (Options.UnsafeFPMath) {
9736     // No FP constant should be created after legalization as Instruction
9737     // Selection pass has a hard time dealing with FP constants.
9738     bool AllowNewConst = (Level < AfterLegalizeDAG);
9739 
9740     // fold (fadd (fadd x, c1), c2) -> (fadd x, (fadd c1, c2))
9741     if (N1CFP && N0.getOpcode() == ISD::FADD && N0.getNode()->hasOneUse() &&
9742         isConstantFPBuildVectorOrConstantFP(N0.getOperand(1)))
9743       return DAG.getNode(ISD::FADD, DL, VT, N0.getOperand(0),
9744                          DAG.getNode(ISD::FADD, DL, VT, N0.getOperand(1), N1,
9745                                      Flags),
9746                          Flags);
9747 
9748     // If allowed, fold (fadd (fneg x), x) -> 0.0
9749     if (AllowNewConst && N0.getOpcode() == ISD::FNEG && N0.getOperand(0) == N1)
9750       return DAG.getConstantFP(0.0, DL, VT);
9751 
9752     // If allowed, fold (fadd x, (fneg x)) -> 0.0
9753     if (AllowNewConst && N1.getOpcode() == ISD::FNEG && N1.getOperand(0) == N0)
9754       return DAG.getConstantFP(0.0, DL, VT);
9755 
9756     // We can fold chains of FADD's of the same value into multiplications.
9757     // This transform is not safe in general because we are reducing the number
9758     // of rounding steps.
9759     if (TLI.isOperationLegalOrCustom(ISD::FMUL, VT) && !N0CFP && !N1CFP) {
9760       if (N0.getOpcode() == ISD::FMUL) {
9761         bool CFP00 = isConstantFPBuildVectorOrConstantFP(N0.getOperand(0));
9762         bool CFP01 = isConstantFPBuildVectorOrConstantFP(N0.getOperand(1));
9763 
9764         // (fadd (fmul x, c), x) -> (fmul x, c+1)
9765         if (CFP01 && !CFP00 && N0.getOperand(0) == N1) {
9766           SDValue NewCFP = DAG.getNode(ISD::FADD, DL, VT, N0.getOperand(1),
9767                                        DAG.getConstantFP(1.0, DL, VT), Flags);
9768           return DAG.getNode(ISD::FMUL, DL, VT, N1, NewCFP, Flags);
9769         }
9770 
9771         // (fadd (fmul x, c), (fadd x, x)) -> (fmul x, c+2)
9772         if (CFP01 && !CFP00 && N1.getOpcode() == ISD::FADD &&
9773             N1.getOperand(0) == N1.getOperand(1) &&
9774             N0.getOperand(0) == N1.getOperand(0)) {
9775           SDValue NewCFP = DAG.getNode(ISD::FADD, DL, VT, N0.getOperand(1),
9776                                        DAG.getConstantFP(2.0, DL, VT), Flags);
9777           return DAG.getNode(ISD::FMUL, DL, VT, N0.getOperand(0), NewCFP, Flags);
9778         }
9779       }
9780 
9781       if (N1.getOpcode() == ISD::FMUL) {
9782         bool CFP10 = isConstantFPBuildVectorOrConstantFP(N1.getOperand(0));
9783         bool CFP11 = isConstantFPBuildVectorOrConstantFP(N1.getOperand(1));
9784 
9785         // (fadd x, (fmul x, c)) -> (fmul x, c+1)
9786         if (CFP11 && !CFP10 && N1.getOperand(0) == N0) {
9787           SDValue NewCFP = DAG.getNode(ISD::FADD, DL, VT, N1.getOperand(1),
9788                                        DAG.getConstantFP(1.0, DL, VT), Flags);
9789           return DAG.getNode(ISD::FMUL, DL, VT, N0, NewCFP, Flags);
9790         }
9791 
9792         // (fadd (fadd x, x), (fmul x, c)) -> (fmul x, c+2)
9793         if (CFP11 && !CFP10 && N0.getOpcode() == ISD::FADD &&
9794             N0.getOperand(0) == N0.getOperand(1) &&
9795             N1.getOperand(0) == N0.getOperand(0)) {
9796           SDValue NewCFP = DAG.getNode(ISD::FADD, DL, VT, N1.getOperand(1),
9797                                        DAG.getConstantFP(2.0, DL, VT), Flags);
9798           return DAG.getNode(ISD::FMUL, DL, VT, N1.getOperand(0), NewCFP, Flags);
9799         }
9800       }
9801 
9802       if (N0.getOpcode() == ISD::FADD && AllowNewConst) {
9803         bool CFP00 = isConstantFPBuildVectorOrConstantFP(N0.getOperand(0));
9804         // (fadd (fadd x, x), x) -> (fmul x, 3.0)
9805         if (!CFP00 && N0.getOperand(0) == N0.getOperand(1) &&
9806             (N0.getOperand(0) == N1)) {
9807           return DAG.getNode(ISD::FMUL, DL, VT,
9808                              N1, DAG.getConstantFP(3.0, DL, VT), Flags);
9809         }
9810       }
9811 
9812       if (N1.getOpcode() == ISD::FADD && AllowNewConst) {
9813         bool CFP10 = isConstantFPBuildVectorOrConstantFP(N1.getOperand(0));
9814         // (fadd x, (fadd x, x)) -> (fmul x, 3.0)
9815         if (!CFP10 && N1.getOperand(0) == N1.getOperand(1) &&
9816             N1.getOperand(0) == N0) {
9817           return DAG.getNode(ISD::FMUL, DL, VT,
9818                              N0, DAG.getConstantFP(3.0, DL, VT), Flags);
9819         }
9820       }
9821 
9822       // (fadd (fadd x, x), (fadd x, x)) -> (fmul x, 4.0)
9823       if (AllowNewConst &&
9824           N0.getOpcode() == ISD::FADD && N1.getOpcode() == ISD::FADD &&
9825           N0.getOperand(0) == N0.getOperand(1) &&
9826           N1.getOperand(0) == N1.getOperand(1) &&
9827           N0.getOperand(0) == N1.getOperand(0)) {
9828         return DAG.getNode(ISD::FMUL, DL, VT, N0.getOperand(0),
9829                            DAG.getConstantFP(4.0, DL, VT), Flags);
9830       }
9831     }
9832   } // enable-unsafe-fp-math
9833 
9834   // FADD -> FMA combines:
9835   if (SDValue Fused = visitFADDForFMACombine(N)) {
9836     AddToWorklist(Fused.getNode());
9837     return Fused;
9838   }
9839   return SDValue();
9840 }
9841 
9842 SDValue DAGCombiner::visitFSUB(SDNode *N) {
9843   SDValue N0 = N->getOperand(0);
9844   SDValue N1 = N->getOperand(1);
9845   ConstantFPSDNode *N0CFP = isConstOrConstSplatFP(N0);
9846   ConstantFPSDNode *N1CFP = isConstOrConstSplatFP(N1);
9847   EVT VT = N->getValueType(0);
9848   SDLoc DL(N);
9849   const TargetOptions &Options = DAG.getTarget().Options;
9850   const SDNodeFlags Flags = N->getFlags();
9851 
9852   // fold vector ops
9853   if (VT.isVector())
9854     if (SDValue FoldedVOp = SimplifyVBinOp(N))
9855       return FoldedVOp;
9856 
9857   // fold (fsub c1, c2) -> c1-c2
9858   if (N0CFP && N1CFP)
9859     return DAG.getNode(ISD::FSUB, DL, VT, N0, N1, Flags);
9860 
9861   if (SDValue NewSel = foldBinOpIntoSelect(N))
9862     return NewSel;
9863 
9864   // fold (fsub A, (fneg B)) -> (fadd A, B)
9865   if (isNegatibleForFree(N1, LegalOperations, TLI, &Options))
9866     return DAG.getNode(ISD::FADD, DL, VT, N0,
9867                        GetNegatedExpression(N1, DAG, LegalOperations), Flags);
9868 
9869   // FIXME: Auto-upgrade the target/function-level option.
9870   if (Options.NoSignedZerosFPMath  || N->getFlags().hasNoSignedZeros()) {
9871     // (fsub 0, B) -> -B
9872     if (N0CFP && N0CFP->isZero()) {
9873       if (isNegatibleForFree(N1, LegalOperations, TLI, &Options))
9874         return GetNegatedExpression(N1, DAG, LegalOperations);
9875       if (!LegalOperations || TLI.isOperationLegal(ISD::FNEG, VT))
9876         return DAG.getNode(ISD::FNEG, DL, VT, N1, Flags);
9877     }
9878   }
9879 
9880   // If 'unsafe math' is enabled, fold lots of things.
9881   if (Options.UnsafeFPMath) {
9882     // (fsub A, 0) -> A
9883     if (N1CFP && N1CFP->isZero())
9884       return N0;
9885 
9886     // (fsub x, x) -> 0.0
9887     if (N0 == N1)
9888       return DAG.getConstantFP(0.0f, DL, VT);
9889 
9890     // (fsub x, (fadd x, y)) -> (fneg y)
9891     // (fsub x, (fadd y, x)) -> (fneg y)
9892     if (N1.getOpcode() == ISD::FADD) {
9893       SDValue N10 = N1->getOperand(0);
9894       SDValue N11 = N1->getOperand(1);
9895 
9896       if (N10 == N0 && isNegatibleForFree(N11, LegalOperations, TLI, &Options))
9897         return GetNegatedExpression(N11, DAG, LegalOperations);
9898 
9899       if (N11 == N0 && isNegatibleForFree(N10, LegalOperations, TLI, &Options))
9900         return GetNegatedExpression(N10, DAG, LegalOperations);
9901     }
9902   }
9903 
9904   // FSUB -> FMA combines:
9905   if (SDValue Fused = visitFSUBForFMACombine(N)) {
9906     AddToWorklist(Fused.getNode());
9907     return Fused;
9908   }
9909 
9910   return SDValue();
9911 }
9912 
9913 SDValue DAGCombiner::visitFMUL(SDNode *N) {
9914   SDValue N0 = N->getOperand(0);
9915   SDValue N1 = N->getOperand(1);
9916   ConstantFPSDNode *N0CFP = isConstOrConstSplatFP(N0);
9917   ConstantFPSDNode *N1CFP = isConstOrConstSplatFP(N1);
9918   EVT VT = N->getValueType(0);
9919   SDLoc DL(N);
9920   const TargetOptions &Options = DAG.getTarget().Options;
9921   const SDNodeFlags Flags = N->getFlags();
9922 
9923   // fold vector ops
9924   if (VT.isVector()) {
9925     // This just handles C1 * C2 for vectors. Other vector folds are below.
9926     if (SDValue FoldedVOp = SimplifyVBinOp(N))
9927       return FoldedVOp;
9928   }
9929 
9930   // fold (fmul c1, c2) -> c1*c2
9931   if (N0CFP && N1CFP)
9932     return DAG.getNode(ISD::FMUL, DL, VT, N0, N1, Flags);
9933 
9934   // canonicalize constant to RHS
9935   if (isConstantFPBuildVectorOrConstantFP(N0) &&
9936      !isConstantFPBuildVectorOrConstantFP(N1))
9937     return DAG.getNode(ISD::FMUL, DL, VT, N1, N0, Flags);
9938 
9939   // fold (fmul A, 1.0) -> A
9940   if (N1CFP && N1CFP->isExactlyValue(1.0))
9941     return N0;
9942 
9943   if (SDValue NewSel = foldBinOpIntoSelect(N))
9944     return NewSel;
9945 
9946   if (Options.UnsafeFPMath) {
9947     // fold (fmul A, 0) -> 0
9948     if (N1CFP && N1CFP->isZero())
9949       return N1;
9950 
9951     // fold (fmul (fmul x, c1), c2) -> (fmul x, (fmul c1, c2))
9952     if (N0.getOpcode() == ISD::FMUL) {
9953       // Fold scalars or any vector constants (not just splats).
9954       // This fold is done in general by InstCombine, but extra fmul insts
9955       // may have been generated during lowering.
9956       SDValue N00 = N0.getOperand(0);
9957       SDValue N01 = N0.getOperand(1);
9958       auto *BV1 = dyn_cast<BuildVectorSDNode>(N1);
9959       auto *BV00 = dyn_cast<BuildVectorSDNode>(N00);
9960       auto *BV01 = dyn_cast<BuildVectorSDNode>(N01);
9961 
9962       // Check 1: Make sure that the first operand of the inner multiply is NOT
9963       // a constant. Otherwise, we may induce infinite looping.
9964       if (!(isConstOrConstSplatFP(N00) || (BV00 && BV00->isConstant()))) {
9965         // Check 2: Make sure that the second operand of the inner multiply and
9966         // the second operand of the outer multiply are constants.
9967         if ((N1CFP && isConstOrConstSplatFP(N01)) ||
9968             (BV1 && BV01 && BV1->isConstant() && BV01->isConstant())) {
9969           SDValue MulConsts = DAG.getNode(ISD::FMUL, DL, VT, N01, N1, Flags);
9970           return DAG.getNode(ISD::FMUL, DL, VT, N00, MulConsts, Flags);
9971         }
9972       }
9973     }
9974 
9975     // fold (fmul (fadd x, x), c) -> (fmul x, (fmul 2.0, c))
9976     // Undo the fmul 2.0, x -> fadd x, x transformation, since if it occurs
9977     // during an early run of DAGCombiner can prevent folding with fmuls
9978     // inserted during lowering.
9979     if (N0.getOpcode() == ISD::FADD &&
9980         (N0.getOperand(0) == N0.getOperand(1)) &&
9981         N0.hasOneUse()) {
9982       const SDValue Two = DAG.getConstantFP(2.0, DL, VT);
9983       SDValue MulConsts = DAG.getNode(ISD::FMUL, DL, VT, Two, N1, Flags);
9984       return DAG.getNode(ISD::FMUL, DL, VT, N0.getOperand(0), MulConsts, Flags);
9985     }
9986   }
9987 
9988   // fold (fmul X, 2.0) -> (fadd X, X)
9989   if (N1CFP && N1CFP->isExactlyValue(+2.0))
9990     return DAG.getNode(ISD::FADD, DL, VT, N0, N0, Flags);
9991 
9992   // fold (fmul X, -1.0) -> (fneg X)
9993   if (N1CFP && N1CFP->isExactlyValue(-1.0))
9994     if (!LegalOperations || TLI.isOperationLegal(ISD::FNEG, VT))
9995       return DAG.getNode(ISD::FNEG, DL, VT, N0);
9996 
9997   // fold (fmul (fneg X), (fneg Y)) -> (fmul X, Y)
9998   if (char LHSNeg = isNegatibleForFree(N0, LegalOperations, TLI, &Options)) {
9999     if (char RHSNeg = isNegatibleForFree(N1, LegalOperations, TLI, &Options)) {
10000       // Both can be negated for free, check to see if at least one is cheaper
10001       // negated.
10002       if (LHSNeg == 2 || RHSNeg == 2)
10003         return DAG.getNode(ISD::FMUL, DL, VT,
10004                            GetNegatedExpression(N0, DAG, LegalOperations),
10005                            GetNegatedExpression(N1, DAG, LegalOperations),
10006                            Flags);
10007     }
10008   }
10009 
10010   // fold (fmul X, (select (fcmp X > 0.0), -1.0, 1.0)) -> (fneg (fabs X))
10011   // fold (fmul X, (select (fcmp X > 0.0), 1.0, -1.0)) -> (fabs X)
10012   if (Flags.hasNoNaNs() && Flags.hasNoSignedZeros() &&
10013       (N0.getOpcode() == ISD::SELECT || N1.getOpcode() == ISD::SELECT) &&
10014       TLI.isOperationLegal(ISD::FABS, VT)) {
10015     SDValue Select = N0, X = N1;
10016     if (Select.getOpcode() != ISD::SELECT)
10017       std::swap(Select, X);
10018 
10019     SDValue Cond = Select.getOperand(0);
10020     auto TrueOpnd  = dyn_cast<ConstantFPSDNode>(Select.getOperand(1));
10021     auto FalseOpnd = dyn_cast<ConstantFPSDNode>(Select.getOperand(2));
10022 
10023     if (TrueOpnd && FalseOpnd &&
10024         Cond.getOpcode() == ISD::SETCC && Cond.getOperand(0) == X &&
10025         isa<ConstantFPSDNode>(Cond.getOperand(1)) &&
10026         cast<ConstantFPSDNode>(Cond.getOperand(1))->isExactlyValue(0.0)) {
10027       ISD::CondCode CC = cast<CondCodeSDNode>(Cond.getOperand(2))->get();
10028       switch (CC) {
10029       default: break;
10030       case ISD::SETOLT:
10031       case ISD::SETULT:
10032       case ISD::SETOLE:
10033       case ISD::SETULE:
10034       case ISD::SETLT:
10035       case ISD::SETLE:
10036         std::swap(TrueOpnd, FalseOpnd);
10037         // Fall through
10038       case ISD::SETOGT:
10039       case ISD::SETUGT:
10040       case ISD::SETOGE:
10041       case ISD::SETUGE:
10042       case ISD::SETGT:
10043       case ISD::SETGE:
10044         if (TrueOpnd->isExactlyValue(-1.0) && FalseOpnd->isExactlyValue(1.0) &&
10045             TLI.isOperationLegal(ISD::FNEG, VT))
10046           return DAG.getNode(ISD::FNEG, DL, VT,
10047                    DAG.getNode(ISD::FABS, DL, VT, X));
10048         if (TrueOpnd->isExactlyValue(1.0) && FalseOpnd->isExactlyValue(-1.0))
10049           return DAG.getNode(ISD::FABS, DL, VT, X);
10050 
10051         break;
10052       }
10053     }
10054   }
10055 
10056   // FMUL -> FMA combines:
10057   if (SDValue Fused = visitFMULForFMADistributiveCombine(N)) {
10058     AddToWorklist(Fused.getNode());
10059     return Fused;
10060   }
10061 
10062   return SDValue();
10063 }
10064 
10065 SDValue DAGCombiner::visitFMA(SDNode *N) {
10066   SDValue N0 = N->getOperand(0);
10067   SDValue N1 = N->getOperand(1);
10068   SDValue N2 = N->getOperand(2);
10069   ConstantFPSDNode *N0CFP = dyn_cast<ConstantFPSDNode>(N0);
10070   ConstantFPSDNode *N1CFP = dyn_cast<ConstantFPSDNode>(N1);
10071   EVT VT = N->getValueType(0);
10072   SDLoc DL(N);
10073   const TargetOptions &Options = DAG.getTarget().Options;
10074 
10075   // Constant fold FMA.
10076   if (isa<ConstantFPSDNode>(N0) &&
10077       isa<ConstantFPSDNode>(N1) &&
10078       isa<ConstantFPSDNode>(N2)) {
10079     return DAG.getNode(ISD::FMA, DL, VT, N0, N1, N2);
10080   }
10081 
10082   if (Options.UnsafeFPMath) {
10083     if (N0CFP && N0CFP->isZero())
10084       return N2;
10085     if (N1CFP && N1CFP->isZero())
10086       return N2;
10087   }
10088   // TODO: The FMA node should have flags that propagate to these nodes.
10089   if (N0CFP && N0CFP->isExactlyValue(1.0))
10090     return DAG.getNode(ISD::FADD, SDLoc(N), VT, N1, N2);
10091   if (N1CFP && N1CFP->isExactlyValue(1.0))
10092     return DAG.getNode(ISD::FADD, SDLoc(N), VT, N0, N2);
10093 
10094   // Canonicalize (fma c, x, y) -> (fma x, c, y)
10095   if (isConstantFPBuildVectorOrConstantFP(N0) &&
10096      !isConstantFPBuildVectorOrConstantFP(N1))
10097     return DAG.getNode(ISD::FMA, SDLoc(N), VT, N1, N0, N2);
10098 
10099   // TODO: FMA nodes should have flags that propagate to the created nodes.
10100   // For now, create a Flags object for use with all unsafe math transforms.
10101   SDNodeFlags Flags;
10102   Flags.setUnsafeAlgebra(true);
10103 
10104   if (Options.UnsafeFPMath) {
10105     // (fma x, c1, (fmul x, c2)) -> (fmul x, c1+c2)
10106     if (N2.getOpcode() == ISD::FMUL && N0 == N2.getOperand(0) &&
10107         isConstantFPBuildVectorOrConstantFP(N1) &&
10108         isConstantFPBuildVectorOrConstantFP(N2.getOperand(1))) {
10109       return DAG.getNode(ISD::FMUL, DL, VT, N0,
10110                          DAG.getNode(ISD::FADD, DL, VT, N1, N2.getOperand(1),
10111                                      Flags), Flags);
10112     }
10113 
10114     // (fma (fmul x, c1), c2, y) -> (fma x, c1*c2, y)
10115     if (N0.getOpcode() == ISD::FMUL &&
10116         isConstantFPBuildVectorOrConstantFP(N1) &&
10117         isConstantFPBuildVectorOrConstantFP(N0.getOperand(1))) {
10118       return DAG.getNode(ISD::FMA, DL, VT,
10119                          N0.getOperand(0),
10120                          DAG.getNode(ISD::FMUL, DL, VT, N1, N0.getOperand(1),
10121                                      Flags),
10122                          N2);
10123     }
10124   }
10125 
10126   // (fma x, 1, y) -> (fadd x, y)
10127   // (fma x, -1, y) -> (fadd (fneg x), y)
10128   if (N1CFP) {
10129     if (N1CFP->isExactlyValue(1.0))
10130       // TODO: The FMA node should have flags that propagate to this node.
10131       return DAG.getNode(ISD::FADD, DL, VT, N0, N2);
10132 
10133     if (N1CFP->isExactlyValue(-1.0) &&
10134         (!LegalOperations || TLI.isOperationLegal(ISD::FNEG, VT))) {
10135       SDValue RHSNeg = DAG.getNode(ISD::FNEG, DL, VT, N0);
10136       AddToWorklist(RHSNeg.getNode());
10137       // TODO: The FMA node should have flags that propagate to this node.
10138       return DAG.getNode(ISD::FADD, DL, VT, N2, RHSNeg);
10139     }
10140 
10141     // fma (fneg x), K, y -> fma x -K, y
10142     if (N0.getOpcode() == ISD::FNEG &&
10143         (TLI.isOperationLegal(ISD::ConstantFP, VT) ||
10144          (N1.hasOneUse() && !TLI.isFPImmLegal(N1CFP->getValueAPF(), VT)))) {
10145       return DAG.getNode(ISD::FMA, DL, VT, N0.getOperand(0),
10146                          DAG.getNode(ISD::FNEG, DL, VT, N1, Flags), N2);
10147     }
10148   }
10149 
10150   if (Options.UnsafeFPMath) {
10151     // (fma x, c, x) -> (fmul x, (c+1))
10152     if (N1CFP && N0 == N2) {
10153       return DAG.getNode(ISD::FMUL, DL, VT, N0,
10154                          DAG.getNode(ISD::FADD, DL, VT, N1,
10155                                      DAG.getConstantFP(1.0, DL, VT), Flags),
10156                          Flags);
10157     }
10158 
10159     // (fma x, c, (fneg x)) -> (fmul x, (c-1))
10160     if (N1CFP && N2.getOpcode() == ISD::FNEG && N2.getOperand(0) == N0) {
10161       return DAG.getNode(ISD::FMUL, DL, VT, N0,
10162                          DAG.getNode(ISD::FADD, DL, VT, N1,
10163                                      DAG.getConstantFP(-1.0, DL, VT), Flags),
10164                          Flags);
10165     }
10166   }
10167 
10168   return SDValue();
10169 }
10170 
10171 // Combine multiple FDIVs with the same divisor into multiple FMULs by the
10172 // reciprocal.
10173 // E.g., (a / D; b / D;) -> (recip = 1.0 / D; a * recip; b * recip)
10174 // Notice that this is not always beneficial. One reason is different targets
10175 // may have different costs for FDIV and FMUL, so sometimes the cost of two
10176 // FDIVs may be lower than the cost of one FDIV and two FMULs. Another reason
10177 // is the critical path is increased from "one FDIV" to "one FDIV + one FMUL".
10178 SDValue DAGCombiner::combineRepeatedFPDivisors(SDNode *N) {
10179   bool UnsafeMath = DAG.getTarget().Options.UnsafeFPMath;
10180   const SDNodeFlags Flags = N->getFlags();
10181   if (!UnsafeMath && !Flags.hasAllowReciprocal())
10182     return SDValue();
10183 
10184   // Skip if current node is a reciprocal.
10185   SDValue N0 = N->getOperand(0);
10186   ConstantFPSDNode *N0CFP = dyn_cast<ConstantFPSDNode>(N0);
10187   if (N0CFP && N0CFP->isExactlyValue(1.0))
10188     return SDValue();
10189 
10190   // Exit early if the target does not want this transform or if there can't
10191   // possibly be enough uses of the divisor to make the transform worthwhile.
10192   SDValue N1 = N->getOperand(1);
10193   unsigned MinUses = TLI.combineRepeatedFPDivisors();
10194   if (!MinUses || N1->use_size() < MinUses)
10195     return SDValue();
10196 
10197   // Find all FDIV users of the same divisor.
10198   // Use a set because duplicates may be present in the user list.
10199   SetVector<SDNode *> Users;
10200   for (auto *U : N1->uses()) {
10201     if (U->getOpcode() == ISD::FDIV && U->getOperand(1) == N1) {
10202       // This division is eligible for optimization only if global unsafe math
10203       // is enabled or if this division allows reciprocal formation.
10204       if (UnsafeMath || U->getFlags().hasAllowReciprocal())
10205         Users.insert(U);
10206     }
10207   }
10208 
10209   // Now that we have the actual number of divisor uses, make sure it meets
10210   // the minimum threshold specified by the target.
10211   if (Users.size() < MinUses)
10212     return SDValue();
10213 
10214   EVT VT = N->getValueType(0);
10215   SDLoc DL(N);
10216   SDValue FPOne = DAG.getConstantFP(1.0, DL, VT);
10217   SDValue Reciprocal = DAG.getNode(ISD::FDIV, DL, VT, FPOne, N1, Flags);
10218 
10219   // Dividend / Divisor -> Dividend * Reciprocal
10220   for (auto *U : Users) {
10221     SDValue Dividend = U->getOperand(0);
10222     if (Dividend != FPOne) {
10223       SDValue NewNode = DAG.getNode(ISD::FMUL, SDLoc(U), VT, Dividend,
10224                                     Reciprocal, Flags);
10225       CombineTo(U, NewNode);
10226     } else if (U != Reciprocal.getNode()) {
10227       // In the absence of fast-math-flags, this user node is always the
10228       // same node as Reciprocal, but with FMF they may be different nodes.
10229       CombineTo(U, Reciprocal);
10230     }
10231   }
10232   return SDValue(N, 0);  // N was replaced.
10233 }
10234 
10235 SDValue DAGCombiner::visitFDIV(SDNode *N) {
10236   SDValue N0 = N->getOperand(0);
10237   SDValue N1 = N->getOperand(1);
10238   ConstantFPSDNode *N0CFP = dyn_cast<ConstantFPSDNode>(N0);
10239   ConstantFPSDNode *N1CFP = dyn_cast<ConstantFPSDNode>(N1);
10240   EVT VT = N->getValueType(0);
10241   SDLoc DL(N);
10242   const TargetOptions &Options = DAG.getTarget().Options;
10243   SDNodeFlags Flags = N->getFlags();
10244 
10245   // fold vector ops
10246   if (VT.isVector())
10247     if (SDValue FoldedVOp = SimplifyVBinOp(N))
10248       return FoldedVOp;
10249 
10250   // fold (fdiv c1, c2) -> c1/c2
10251   if (N0CFP && N1CFP)
10252     return DAG.getNode(ISD::FDIV, SDLoc(N), VT, N0, N1, Flags);
10253 
10254   if (SDValue NewSel = foldBinOpIntoSelect(N))
10255     return NewSel;
10256 
10257   if (Options.UnsafeFPMath) {
10258     // fold (fdiv X, c2) -> fmul X, 1/c2 if losing precision is acceptable.
10259     if (N1CFP) {
10260       // Compute the reciprocal 1.0 / c2.
10261       const APFloat &N1APF = N1CFP->getValueAPF();
10262       APFloat Recip(N1APF.getSemantics(), 1); // 1.0
10263       APFloat::opStatus st = Recip.divide(N1APF, APFloat::rmNearestTiesToEven);
10264       // Only do the transform if the reciprocal is a legal fp immediate that
10265       // isn't too nasty (eg NaN, denormal, ...).
10266       if ((st == APFloat::opOK || st == APFloat::opInexact) && // Not too nasty
10267           (!LegalOperations ||
10268            // FIXME: custom lowering of ConstantFP might fail (see e.g. ARM
10269            // backend)... we should handle this gracefully after Legalize.
10270            // TLI.isOperationLegalOrCustom(ISD::ConstantFP, VT) ||
10271            TLI.isOperationLegal(ISD::ConstantFP, VT) ||
10272            TLI.isFPImmLegal(Recip, VT)))
10273         return DAG.getNode(ISD::FMUL, DL, VT, N0,
10274                            DAG.getConstantFP(Recip, DL, VT), Flags);
10275     }
10276 
10277     // If this FDIV is part of a reciprocal square root, it may be folded
10278     // into a target-specific square root estimate instruction.
10279     if (N1.getOpcode() == ISD::FSQRT) {
10280       if (SDValue RV = buildRsqrtEstimate(N1.getOperand(0), Flags)) {
10281         return DAG.getNode(ISD::FMUL, DL, VT, N0, RV, Flags);
10282       }
10283     } else if (N1.getOpcode() == ISD::FP_EXTEND &&
10284                N1.getOperand(0).getOpcode() == ISD::FSQRT) {
10285       if (SDValue RV = buildRsqrtEstimate(N1.getOperand(0).getOperand(0),
10286                                           Flags)) {
10287         RV = DAG.getNode(ISD::FP_EXTEND, SDLoc(N1), VT, RV);
10288         AddToWorklist(RV.getNode());
10289         return DAG.getNode(ISD::FMUL, DL, VT, N0, RV, Flags);
10290       }
10291     } else if (N1.getOpcode() == ISD::FP_ROUND &&
10292                N1.getOperand(0).getOpcode() == ISD::FSQRT) {
10293       if (SDValue RV = buildRsqrtEstimate(N1.getOperand(0).getOperand(0),
10294                                           Flags)) {
10295         RV = DAG.getNode(ISD::FP_ROUND, SDLoc(N1), VT, RV, N1.getOperand(1));
10296         AddToWorklist(RV.getNode());
10297         return DAG.getNode(ISD::FMUL, DL, VT, N0, RV, Flags);
10298       }
10299     } else if (N1.getOpcode() == ISD::FMUL) {
10300       // Look through an FMUL. Even though this won't remove the FDIV directly,
10301       // it's still worthwhile to get rid of the FSQRT if possible.
10302       SDValue SqrtOp;
10303       SDValue OtherOp;
10304       if (N1.getOperand(0).getOpcode() == ISD::FSQRT) {
10305         SqrtOp = N1.getOperand(0);
10306         OtherOp = N1.getOperand(1);
10307       } else if (N1.getOperand(1).getOpcode() == ISD::FSQRT) {
10308         SqrtOp = N1.getOperand(1);
10309         OtherOp = N1.getOperand(0);
10310       }
10311       if (SqrtOp.getNode()) {
10312         // We found a FSQRT, so try to make this fold:
10313         // x / (y * sqrt(z)) -> x * (rsqrt(z) / y)
10314         if (SDValue RV = buildRsqrtEstimate(SqrtOp.getOperand(0), Flags)) {
10315           RV = DAG.getNode(ISD::FDIV, SDLoc(N1), VT, RV, OtherOp, Flags);
10316           AddToWorklist(RV.getNode());
10317           return DAG.getNode(ISD::FMUL, DL, VT, N0, RV, Flags);
10318         }
10319       }
10320     }
10321 
10322     // Fold into a reciprocal estimate and multiply instead of a real divide.
10323     if (SDValue RV = BuildReciprocalEstimate(N1, Flags)) {
10324       AddToWorklist(RV.getNode());
10325       return DAG.getNode(ISD::FMUL, DL, VT, N0, RV, Flags);
10326     }
10327   }
10328 
10329   // (fdiv (fneg X), (fneg Y)) -> (fdiv X, Y)
10330   if (char LHSNeg = isNegatibleForFree(N0, LegalOperations, TLI, &Options)) {
10331     if (char RHSNeg = isNegatibleForFree(N1, LegalOperations, TLI, &Options)) {
10332       // Both can be negated for free, check to see if at least one is cheaper
10333       // negated.
10334       if (LHSNeg == 2 || RHSNeg == 2)
10335         return DAG.getNode(ISD::FDIV, SDLoc(N), VT,
10336                            GetNegatedExpression(N0, DAG, LegalOperations),
10337                            GetNegatedExpression(N1, DAG, LegalOperations),
10338                            Flags);
10339     }
10340   }
10341 
10342   if (SDValue CombineRepeatedDivisors = combineRepeatedFPDivisors(N))
10343     return CombineRepeatedDivisors;
10344 
10345   return SDValue();
10346 }
10347 
10348 SDValue DAGCombiner::visitFREM(SDNode *N) {
10349   SDValue N0 = N->getOperand(0);
10350   SDValue N1 = N->getOperand(1);
10351   ConstantFPSDNode *N0CFP = dyn_cast<ConstantFPSDNode>(N0);
10352   ConstantFPSDNode *N1CFP = dyn_cast<ConstantFPSDNode>(N1);
10353   EVT VT = N->getValueType(0);
10354 
10355   // fold (frem c1, c2) -> fmod(c1,c2)
10356   if (N0CFP && N1CFP)
10357     return DAG.getNode(ISD::FREM, SDLoc(N), VT, N0, N1, N->getFlags());
10358 
10359   if (SDValue NewSel = foldBinOpIntoSelect(N))
10360     return NewSel;
10361 
10362   return SDValue();
10363 }
10364 
10365 SDValue DAGCombiner::visitFSQRT(SDNode *N) {
10366   if (!DAG.getTarget().Options.UnsafeFPMath)
10367     return SDValue();
10368 
10369   SDValue N0 = N->getOperand(0);
10370   if (TLI.isFsqrtCheap(N0, DAG))
10371     return SDValue();
10372 
10373   // TODO: FSQRT nodes should have flags that propagate to the created nodes.
10374   // For now, create a Flags object for use with all unsafe math transforms.
10375   SDNodeFlags Flags;
10376   Flags.setUnsafeAlgebra(true);
10377   return buildSqrtEstimate(N0, Flags);
10378 }
10379 
10380 /// copysign(x, fp_extend(y)) -> copysign(x, y)
10381 /// copysign(x, fp_round(y)) -> copysign(x, y)
10382 static inline bool CanCombineFCOPYSIGN_EXTEND_ROUND(SDNode *N) {
10383   SDValue N1 = N->getOperand(1);
10384   if ((N1.getOpcode() == ISD::FP_EXTEND ||
10385        N1.getOpcode() == ISD::FP_ROUND)) {
10386     // Do not optimize out type conversion of f128 type yet.
10387     // For some targets like x86_64, configuration is changed to keep one f128
10388     // value in one SSE register, but instruction selection cannot handle
10389     // FCOPYSIGN on SSE registers yet.
10390     EVT N1VT = N1->getValueType(0);
10391     EVT N1Op0VT = N1->getOperand(0)->getValueType(0);
10392     return (N1VT == N1Op0VT || N1Op0VT != MVT::f128);
10393   }
10394   return false;
10395 }
10396 
10397 SDValue DAGCombiner::visitFCOPYSIGN(SDNode *N) {
10398   SDValue N0 = N->getOperand(0);
10399   SDValue N1 = N->getOperand(1);
10400   ConstantFPSDNode *N0CFP = dyn_cast<ConstantFPSDNode>(N0);
10401   ConstantFPSDNode *N1CFP = dyn_cast<ConstantFPSDNode>(N1);
10402   EVT VT = N->getValueType(0);
10403 
10404   if (N0CFP && N1CFP) // Constant fold
10405     return DAG.getNode(ISD::FCOPYSIGN, SDLoc(N), VT, N0, N1);
10406 
10407   if (N1CFP) {
10408     const APFloat &V = N1CFP->getValueAPF();
10409     // copysign(x, c1) -> fabs(x)       iff ispos(c1)
10410     // copysign(x, c1) -> fneg(fabs(x)) iff isneg(c1)
10411     if (!V.isNegative()) {
10412       if (!LegalOperations || TLI.isOperationLegal(ISD::FABS, VT))
10413         return DAG.getNode(ISD::FABS, SDLoc(N), VT, N0);
10414     } else {
10415       if (!LegalOperations || TLI.isOperationLegal(ISD::FNEG, VT))
10416         return DAG.getNode(ISD::FNEG, SDLoc(N), VT,
10417                            DAG.getNode(ISD::FABS, SDLoc(N0), VT, N0));
10418     }
10419   }
10420 
10421   // copysign(fabs(x), y) -> copysign(x, y)
10422   // copysign(fneg(x), y) -> copysign(x, y)
10423   // copysign(copysign(x,z), y) -> copysign(x, y)
10424   if (N0.getOpcode() == ISD::FABS || N0.getOpcode() == ISD::FNEG ||
10425       N0.getOpcode() == ISD::FCOPYSIGN)
10426     return DAG.getNode(ISD::FCOPYSIGN, SDLoc(N), VT, N0.getOperand(0), N1);
10427 
10428   // copysign(x, abs(y)) -> abs(x)
10429   if (N1.getOpcode() == ISD::FABS)
10430     return DAG.getNode(ISD::FABS, SDLoc(N), VT, N0);
10431 
10432   // copysign(x, copysign(y,z)) -> copysign(x, z)
10433   if (N1.getOpcode() == ISD::FCOPYSIGN)
10434     return DAG.getNode(ISD::FCOPYSIGN, SDLoc(N), VT, N0, N1.getOperand(1));
10435 
10436   // copysign(x, fp_extend(y)) -> copysign(x, y)
10437   // copysign(x, fp_round(y)) -> copysign(x, y)
10438   if (CanCombineFCOPYSIGN_EXTEND_ROUND(N))
10439     return DAG.getNode(ISD::FCOPYSIGN, SDLoc(N), VT, N0, N1.getOperand(0));
10440 
10441   return SDValue();
10442 }
10443 
10444 SDValue DAGCombiner::visitSINT_TO_FP(SDNode *N) {
10445   SDValue N0 = N->getOperand(0);
10446   EVT VT = N->getValueType(0);
10447   EVT OpVT = N0.getValueType();
10448 
10449   // fold (sint_to_fp c1) -> c1fp
10450   if (DAG.isConstantIntBuildVectorOrConstantInt(N0) &&
10451       // ...but only if the target supports immediate floating-point values
10452       (!LegalOperations ||
10453        TLI.isOperationLegalOrCustom(ISD::ConstantFP, VT)))
10454     return DAG.getNode(ISD::SINT_TO_FP, SDLoc(N), VT, N0);
10455 
10456   // If the input is a legal type, and SINT_TO_FP is not legal on this target,
10457   // but UINT_TO_FP is legal on this target, try to convert.
10458   if (!TLI.isOperationLegalOrCustom(ISD::SINT_TO_FP, OpVT) &&
10459       TLI.isOperationLegalOrCustom(ISD::UINT_TO_FP, OpVT)) {
10460     // If the sign bit is known to be zero, we can change this to UINT_TO_FP.
10461     if (DAG.SignBitIsZero(N0))
10462       return DAG.getNode(ISD::UINT_TO_FP, SDLoc(N), VT, N0);
10463   }
10464 
10465   // The next optimizations are desirable only if SELECT_CC can be lowered.
10466   if (TLI.isOperationLegalOrCustom(ISD::SELECT_CC, VT) || !LegalOperations) {
10467     // fold (sint_to_fp (setcc x, y, cc)) -> (select_cc x, y, -1.0, 0.0,, cc)
10468     if (N0.getOpcode() == ISD::SETCC && N0.getValueType() == MVT::i1 &&
10469         !VT.isVector() &&
10470         (!LegalOperations ||
10471          TLI.isOperationLegalOrCustom(ISD::ConstantFP, VT))) {
10472       SDLoc DL(N);
10473       SDValue Ops[] =
10474         { N0.getOperand(0), N0.getOperand(1),
10475           DAG.getConstantFP(-1.0, DL, VT), DAG.getConstantFP(0.0, DL, VT),
10476           N0.getOperand(2) };
10477       return DAG.getNode(ISD::SELECT_CC, DL, VT, Ops);
10478     }
10479 
10480     // fold (sint_to_fp (zext (setcc x, y, cc))) ->
10481     //      (select_cc x, y, 1.0, 0.0,, cc)
10482     if (N0.getOpcode() == ISD::ZERO_EXTEND &&
10483         N0.getOperand(0).getOpcode() == ISD::SETCC &&!VT.isVector() &&
10484         (!LegalOperations ||
10485          TLI.isOperationLegalOrCustom(ISD::ConstantFP, VT))) {
10486       SDLoc DL(N);
10487       SDValue Ops[] =
10488         { N0.getOperand(0).getOperand(0), N0.getOperand(0).getOperand(1),
10489           DAG.getConstantFP(1.0, DL, VT), DAG.getConstantFP(0.0, DL, VT),
10490           N0.getOperand(0).getOperand(2) };
10491       return DAG.getNode(ISD::SELECT_CC, DL, VT, Ops);
10492     }
10493   }
10494 
10495   return SDValue();
10496 }
10497 
10498 SDValue DAGCombiner::visitUINT_TO_FP(SDNode *N) {
10499   SDValue N0 = N->getOperand(0);
10500   EVT VT = N->getValueType(0);
10501   EVT OpVT = N0.getValueType();
10502 
10503   // fold (uint_to_fp c1) -> c1fp
10504   if (DAG.isConstantIntBuildVectorOrConstantInt(N0) &&
10505       // ...but only if the target supports immediate floating-point values
10506       (!LegalOperations ||
10507        TLI.isOperationLegalOrCustom(ISD::ConstantFP, VT)))
10508     return DAG.getNode(ISD::UINT_TO_FP, SDLoc(N), VT, N0);
10509 
10510   // If the input is a legal type, and UINT_TO_FP is not legal on this target,
10511   // but SINT_TO_FP is legal on this target, try to convert.
10512   if (!TLI.isOperationLegalOrCustom(ISD::UINT_TO_FP, OpVT) &&
10513       TLI.isOperationLegalOrCustom(ISD::SINT_TO_FP, OpVT)) {
10514     // If the sign bit is known to be zero, we can change this to SINT_TO_FP.
10515     if (DAG.SignBitIsZero(N0))
10516       return DAG.getNode(ISD::SINT_TO_FP, SDLoc(N), VT, N0);
10517   }
10518 
10519   // The next optimizations are desirable only if SELECT_CC can be lowered.
10520   if (TLI.isOperationLegalOrCustom(ISD::SELECT_CC, VT) || !LegalOperations) {
10521     // fold (uint_to_fp (setcc x, y, cc)) -> (select_cc x, y, -1.0, 0.0,, cc)
10522     if (N0.getOpcode() == ISD::SETCC && !VT.isVector() &&
10523         (!LegalOperations ||
10524          TLI.isOperationLegalOrCustom(ISD::ConstantFP, VT))) {
10525       SDLoc DL(N);
10526       SDValue Ops[] =
10527         { N0.getOperand(0), N0.getOperand(1),
10528           DAG.getConstantFP(1.0, DL, VT), DAG.getConstantFP(0.0, DL, VT),
10529           N0.getOperand(2) };
10530       return DAG.getNode(ISD::SELECT_CC, DL, VT, Ops);
10531     }
10532   }
10533 
10534   return SDValue();
10535 }
10536 
10537 // Fold (fp_to_{s/u}int ({s/u}int_to_fpx)) -> zext x, sext x, trunc x, or x
10538 static SDValue FoldIntToFPToInt(SDNode *N, SelectionDAG &DAG) {
10539   SDValue N0 = N->getOperand(0);
10540   EVT VT = N->getValueType(0);
10541 
10542   if (N0.getOpcode() != ISD::UINT_TO_FP && N0.getOpcode() != ISD::SINT_TO_FP)
10543     return SDValue();
10544 
10545   SDValue Src = N0.getOperand(0);
10546   EVT SrcVT = Src.getValueType();
10547   bool IsInputSigned = N0.getOpcode() == ISD::SINT_TO_FP;
10548   bool IsOutputSigned = N->getOpcode() == ISD::FP_TO_SINT;
10549 
10550   // We can safely assume the conversion won't overflow the output range,
10551   // because (for example) (uint8_t)18293.f is undefined behavior.
10552 
10553   // Since we can assume the conversion won't overflow, our decision as to
10554   // whether the input will fit in the float should depend on the minimum
10555   // of the input range and output range.
10556 
10557   // This means this is also safe for a signed input and unsigned output, since
10558   // a negative input would lead to undefined behavior.
10559   unsigned InputSize = (int)SrcVT.getScalarSizeInBits() - IsInputSigned;
10560   unsigned OutputSize = (int)VT.getScalarSizeInBits() - IsOutputSigned;
10561   unsigned ActualSize = std::min(InputSize, OutputSize);
10562   const fltSemantics &sem = DAG.EVTToAPFloatSemantics(N0.getValueType());
10563 
10564   // We can only fold away the float conversion if the input range can be
10565   // represented exactly in the float range.
10566   if (APFloat::semanticsPrecision(sem) >= ActualSize) {
10567     if (VT.getScalarSizeInBits() > SrcVT.getScalarSizeInBits()) {
10568       unsigned ExtOp = IsInputSigned && IsOutputSigned ? ISD::SIGN_EXTEND
10569                                                        : ISD::ZERO_EXTEND;
10570       return DAG.getNode(ExtOp, SDLoc(N), VT, Src);
10571     }
10572     if (VT.getScalarSizeInBits() < SrcVT.getScalarSizeInBits())
10573       return DAG.getNode(ISD::TRUNCATE, SDLoc(N), VT, Src);
10574     return DAG.getBitcast(VT, Src);
10575   }
10576   return SDValue();
10577 }
10578 
10579 SDValue DAGCombiner::visitFP_TO_SINT(SDNode *N) {
10580   SDValue N0 = N->getOperand(0);
10581   EVT VT = N->getValueType(0);
10582 
10583   // fold (fp_to_sint c1fp) -> c1
10584   if (isConstantFPBuildVectorOrConstantFP(N0))
10585     return DAG.getNode(ISD::FP_TO_SINT, SDLoc(N), VT, N0);
10586 
10587   return FoldIntToFPToInt(N, DAG);
10588 }
10589 
10590 SDValue DAGCombiner::visitFP_TO_UINT(SDNode *N) {
10591   SDValue N0 = N->getOperand(0);
10592   EVT VT = N->getValueType(0);
10593 
10594   // fold (fp_to_uint c1fp) -> c1
10595   if (isConstantFPBuildVectorOrConstantFP(N0))
10596     return DAG.getNode(ISD::FP_TO_UINT, SDLoc(N), VT, N0);
10597 
10598   return FoldIntToFPToInt(N, DAG);
10599 }
10600 
10601 SDValue DAGCombiner::visitFP_ROUND(SDNode *N) {
10602   SDValue N0 = N->getOperand(0);
10603   SDValue N1 = N->getOperand(1);
10604   ConstantFPSDNode *N0CFP = dyn_cast<ConstantFPSDNode>(N0);
10605   EVT VT = N->getValueType(0);
10606 
10607   // fold (fp_round c1fp) -> c1fp
10608   if (N0CFP)
10609     return DAG.getNode(ISD::FP_ROUND, SDLoc(N), VT, N0, N1);
10610 
10611   // fold (fp_round (fp_extend x)) -> x
10612   if (N0.getOpcode() == ISD::FP_EXTEND && VT == N0.getOperand(0).getValueType())
10613     return N0.getOperand(0);
10614 
10615   // fold (fp_round (fp_round x)) -> (fp_round x)
10616   if (N0.getOpcode() == ISD::FP_ROUND) {
10617     const bool NIsTrunc = N->getConstantOperandVal(1) == 1;
10618     const bool N0IsTrunc = N0.getConstantOperandVal(1) == 1;
10619 
10620     // Skip this folding if it results in an fp_round from f80 to f16.
10621     //
10622     // f80 to f16 always generates an expensive (and as yet, unimplemented)
10623     // libcall to __truncxfhf2 instead of selecting native f16 conversion
10624     // instructions from f32 or f64.  Moreover, the first (value-preserving)
10625     // fp_round from f80 to either f32 or f64 may become a NOP in platforms like
10626     // x86.
10627     if (N0.getOperand(0).getValueType() == MVT::f80 && VT == MVT::f16)
10628       return SDValue();
10629 
10630     // If the first fp_round isn't a value preserving truncation, it might
10631     // introduce a tie in the second fp_round, that wouldn't occur in the
10632     // single-step fp_round we want to fold to.
10633     // In other words, double rounding isn't the same as rounding.
10634     // Also, this is a value preserving truncation iff both fp_round's are.
10635     if (DAG.getTarget().Options.UnsafeFPMath || N0IsTrunc) {
10636       SDLoc DL(N);
10637       return DAG.getNode(ISD::FP_ROUND, DL, VT, N0.getOperand(0),
10638                          DAG.getIntPtrConstant(NIsTrunc && N0IsTrunc, DL));
10639     }
10640   }
10641 
10642   // fold (fp_round (copysign X, Y)) -> (copysign (fp_round X), Y)
10643   if (N0.getOpcode() == ISD::FCOPYSIGN && N0.getNode()->hasOneUse()) {
10644     SDValue Tmp = DAG.getNode(ISD::FP_ROUND, SDLoc(N0), VT,
10645                               N0.getOperand(0), N1);
10646     AddToWorklist(Tmp.getNode());
10647     return DAG.getNode(ISD::FCOPYSIGN, SDLoc(N), VT,
10648                        Tmp, N0.getOperand(1));
10649   }
10650 
10651   if (SDValue NewVSel = matchVSelectOpSizesWithSetCC(N))
10652     return NewVSel;
10653 
10654   return SDValue();
10655 }
10656 
10657 SDValue DAGCombiner::visitFP_ROUND_INREG(SDNode *N) {
10658   SDValue N0 = N->getOperand(0);
10659   EVT VT = N->getValueType(0);
10660   EVT EVT = cast<VTSDNode>(N->getOperand(1))->getVT();
10661   ConstantFPSDNode *N0CFP = dyn_cast<ConstantFPSDNode>(N0);
10662 
10663   // fold (fp_round_inreg c1fp) -> c1fp
10664   if (N0CFP && isTypeLegal(EVT)) {
10665     SDLoc DL(N);
10666     SDValue Round = DAG.getConstantFP(*N0CFP->getConstantFPValue(), DL, EVT);
10667     return DAG.getNode(ISD::FP_EXTEND, DL, VT, Round);
10668   }
10669 
10670   return SDValue();
10671 }
10672 
10673 SDValue DAGCombiner::visitFP_EXTEND(SDNode *N) {
10674   SDValue N0 = N->getOperand(0);
10675   EVT VT = N->getValueType(0);
10676 
10677   // If this is fp_round(fpextend), don't fold it, allow ourselves to be folded.
10678   if (N->hasOneUse() &&
10679       N->use_begin()->getOpcode() == ISD::FP_ROUND)
10680     return SDValue();
10681 
10682   // fold (fp_extend c1fp) -> c1fp
10683   if (isConstantFPBuildVectorOrConstantFP(N0))
10684     return DAG.getNode(ISD::FP_EXTEND, SDLoc(N), VT, N0);
10685 
10686   // fold (fp_extend (fp16_to_fp op)) -> (fp16_to_fp op)
10687   if (N0.getOpcode() == ISD::FP16_TO_FP &&
10688       TLI.getOperationAction(ISD::FP16_TO_FP, VT) == TargetLowering::Legal)
10689     return DAG.getNode(ISD::FP16_TO_FP, SDLoc(N), VT, N0.getOperand(0));
10690 
10691   // Turn fp_extend(fp_round(X, 1)) -> x since the fp_round doesn't affect the
10692   // value of X.
10693   if (N0.getOpcode() == ISD::FP_ROUND
10694       && N0.getConstantOperandVal(1) == 1) {
10695     SDValue In = N0.getOperand(0);
10696     if (In.getValueType() == VT) return In;
10697     if (VT.bitsLT(In.getValueType()))
10698       return DAG.getNode(ISD::FP_ROUND, SDLoc(N), VT,
10699                          In, N0.getOperand(1));
10700     return DAG.getNode(ISD::FP_EXTEND, SDLoc(N), VT, In);
10701   }
10702 
10703   // fold (fpext (load x)) -> (fpext (fptrunc (extload x)))
10704   if (ISD::isNormalLoad(N0.getNode()) && N0.hasOneUse() &&
10705        TLI.isLoadExtLegal(ISD::EXTLOAD, VT, N0.getValueType())) {
10706     LoadSDNode *LN0 = cast<LoadSDNode>(N0);
10707     SDValue ExtLoad = DAG.getExtLoad(ISD::EXTLOAD, SDLoc(N), VT,
10708                                      LN0->getChain(),
10709                                      LN0->getBasePtr(), N0.getValueType(),
10710                                      LN0->getMemOperand());
10711     CombineTo(N, ExtLoad);
10712     CombineTo(N0.getNode(),
10713               DAG.getNode(ISD::FP_ROUND, SDLoc(N0),
10714                           N0.getValueType(), ExtLoad,
10715                           DAG.getIntPtrConstant(1, SDLoc(N0))),
10716               ExtLoad.getValue(1));
10717     return SDValue(N, 0);   // Return N so it doesn't get rechecked!
10718   }
10719 
10720   if (SDValue NewVSel = matchVSelectOpSizesWithSetCC(N))
10721     return NewVSel;
10722 
10723   return SDValue();
10724 }
10725 
10726 SDValue DAGCombiner::visitFCEIL(SDNode *N) {
10727   SDValue N0 = N->getOperand(0);
10728   EVT VT = N->getValueType(0);
10729 
10730   // fold (fceil c1) -> fceil(c1)
10731   if (isConstantFPBuildVectorOrConstantFP(N0))
10732     return DAG.getNode(ISD::FCEIL, SDLoc(N), VT, N0);
10733 
10734   return SDValue();
10735 }
10736 
10737 SDValue DAGCombiner::visitFTRUNC(SDNode *N) {
10738   SDValue N0 = N->getOperand(0);
10739   EVT VT = N->getValueType(0);
10740 
10741   // fold (ftrunc c1) -> ftrunc(c1)
10742   if (isConstantFPBuildVectorOrConstantFP(N0))
10743     return DAG.getNode(ISD::FTRUNC, SDLoc(N), VT, N0);
10744 
10745   // fold ftrunc (known rounded int x) -> x
10746   // ftrunc is a part of fptosi/fptoui expansion on some targets, so this is
10747   // likely to be generated to extract integer from a rounded floating value.
10748   switch (N0.getOpcode()) {
10749   default: break;
10750   case ISD::FRINT:
10751   case ISD::FTRUNC:
10752   case ISD::FNEARBYINT:
10753   case ISD::FFLOOR:
10754   case ISD::FCEIL:
10755     return N0;
10756   }
10757 
10758   return SDValue();
10759 }
10760 
10761 SDValue DAGCombiner::visitFFLOOR(SDNode *N) {
10762   SDValue N0 = N->getOperand(0);
10763   EVT VT = N->getValueType(0);
10764 
10765   // fold (ffloor c1) -> ffloor(c1)
10766   if (isConstantFPBuildVectorOrConstantFP(N0))
10767     return DAG.getNode(ISD::FFLOOR, SDLoc(N), VT, N0);
10768 
10769   return SDValue();
10770 }
10771 
10772 // FIXME: FNEG and FABS have a lot in common; refactor.
10773 SDValue DAGCombiner::visitFNEG(SDNode *N) {
10774   SDValue N0 = N->getOperand(0);
10775   EVT VT = N->getValueType(0);
10776 
10777   // Constant fold FNEG.
10778   if (isConstantFPBuildVectorOrConstantFP(N0))
10779     return DAG.getNode(ISD::FNEG, SDLoc(N), VT, N0);
10780 
10781   if (isNegatibleForFree(N0, LegalOperations, DAG.getTargetLoweringInfo(),
10782                          &DAG.getTarget().Options))
10783     return GetNegatedExpression(N0, DAG, LegalOperations);
10784 
10785   // Transform fneg(bitconvert(x)) -> bitconvert(x ^ sign) to avoid loading
10786   // constant pool values.
10787   if (!TLI.isFNegFree(VT) &&
10788       N0.getOpcode() == ISD::BITCAST &&
10789       N0.getNode()->hasOneUse()) {
10790     SDValue Int = N0.getOperand(0);
10791     EVT IntVT = Int.getValueType();
10792     if (IntVT.isInteger() && !IntVT.isVector()) {
10793       APInt SignMask;
10794       if (N0.getValueType().isVector()) {
10795         // For a vector, get a mask such as 0x80... per scalar element
10796         // and splat it.
10797         SignMask = APInt::getSignMask(N0.getScalarValueSizeInBits());
10798         SignMask = APInt::getSplat(IntVT.getSizeInBits(), SignMask);
10799       } else {
10800         // For a scalar, just generate 0x80...
10801         SignMask = APInt::getSignMask(IntVT.getSizeInBits());
10802       }
10803       SDLoc DL0(N0);
10804       Int = DAG.getNode(ISD::XOR, DL0, IntVT, Int,
10805                         DAG.getConstant(SignMask, DL0, IntVT));
10806       AddToWorklist(Int.getNode());
10807       return DAG.getBitcast(VT, Int);
10808     }
10809   }
10810 
10811   // (fneg (fmul c, x)) -> (fmul -c, x)
10812   if (N0.getOpcode() == ISD::FMUL &&
10813       (N0.getNode()->hasOneUse() || !TLI.isFNegFree(VT))) {
10814     ConstantFPSDNode *CFP1 = dyn_cast<ConstantFPSDNode>(N0.getOperand(1));
10815     if (CFP1) {
10816       APFloat CVal = CFP1->getValueAPF();
10817       CVal.changeSign();
10818       if (Level >= AfterLegalizeDAG &&
10819           (TLI.isFPImmLegal(CVal, VT) ||
10820            TLI.isOperationLegal(ISD::ConstantFP, VT)))
10821         return DAG.getNode(
10822             ISD::FMUL, SDLoc(N), VT, N0.getOperand(0),
10823             DAG.getNode(ISD::FNEG, SDLoc(N), VT, N0.getOperand(1)),
10824             N0->getFlags());
10825     }
10826   }
10827 
10828   return SDValue();
10829 }
10830 
10831 SDValue DAGCombiner::visitFMINNUM(SDNode *N) {
10832   SDValue N0 = N->getOperand(0);
10833   SDValue N1 = N->getOperand(1);
10834   EVT VT = N->getValueType(0);
10835   const ConstantFPSDNode *N0CFP = isConstOrConstSplatFP(N0);
10836   const ConstantFPSDNode *N1CFP = isConstOrConstSplatFP(N1);
10837 
10838   if (N0CFP && N1CFP) {
10839     const APFloat &C0 = N0CFP->getValueAPF();
10840     const APFloat &C1 = N1CFP->getValueAPF();
10841     return DAG.getConstantFP(minnum(C0, C1), SDLoc(N), VT);
10842   }
10843 
10844   // Canonicalize to constant on RHS.
10845   if (isConstantFPBuildVectorOrConstantFP(N0) &&
10846      !isConstantFPBuildVectorOrConstantFP(N1))
10847     return DAG.getNode(ISD::FMINNUM, SDLoc(N), VT, N1, N0);
10848 
10849   return SDValue();
10850 }
10851 
10852 SDValue DAGCombiner::visitFMAXNUM(SDNode *N) {
10853   SDValue N0 = N->getOperand(0);
10854   SDValue N1 = N->getOperand(1);
10855   EVT VT = N->getValueType(0);
10856   const ConstantFPSDNode *N0CFP = isConstOrConstSplatFP(N0);
10857   const ConstantFPSDNode *N1CFP = isConstOrConstSplatFP(N1);
10858 
10859   if (N0CFP && N1CFP) {
10860     const APFloat &C0 = N0CFP->getValueAPF();
10861     const APFloat &C1 = N1CFP->getValueAPF();
10862     return DAG.getConstantFP(maxnum(C0, C1), SDLoc(N), VT);
10863   }
10864 
10865   // Canonicalize to constant on RHS.
10866   if (isConstantFPBuildVectorOrConstantFP(N0) &&
10867      !isConstantFPBuildVectorOrConstantFP(N1))
10868     return DAG.getNode(ISD::FMAXNUM, SDLoc(N), VT, N1, N0);
10869 
10870   return SDValue();
10871 }
10872 
10873 SDValue DAGCombiner::visitFABS(SDNode *N) {
10874   SDValue N0 = N->getOperand(0);
10875   EVT VT = N->getValueType(0);
10876 
10877   // fold (fabs c1) -> fabs(c1)
10878   if (isConstantFPBuildVectorOrConstantFP(N0))
10879     return DAG.getNode(ISD::FABS, SDLoc(N), VT, N0);
10880 
10881   // fold (fabs (fabs x)) -> (fabs x)
10882   if (N0.getOpcode() == ISD::FABS)
10883     return N->getOperand(0);
10884 
10885   // fold (fabs (fneg x)) -> (fabs x)
10886   // fold (fabs (fcopysign x, y)) -> (fabs x)
10887   if (N0.getOpcode() == ISD::FNEG || N0.getOpcode() == ISD::FCOPYSIGN)
10888     return DAG.getNode(ISD::FABS, SDLoc(N), VT, N0.getOperand(0));
10889 
10890   // Transform fabs(bitconvert(x)) -> bitconvert(x & ~sign) to avoid loading
10891   // constant pool values.
10892   if (!TLI.isFAbsFree(VT) &&
10893       N0.getOpcode() == ISD::BITCAST &&
10894       N0.getNode()->hasOneUse()) {
10895     SDValue Int = N0.getOperand(0);
10896     EVT IntVT = Int.getValueType();
10897     if (IntVT.isInteger() && !IntVT.isVector()) {
10898       APInt SignMask;
10899       if (N0.getValueType().isVector()) {
10900         // For a vector, get a mask such as 0x7f... per scalar element
10901         // and splat it.
10902         SignMask = ~APInt::getSignMask(N0.getScalarValueSizeInBits());
10903         SignMask = APInt::getSplat(IntVT.getSizeInBits(), SignMask);
10904       } else {
10905         // For a scalar, just generate 0x7f...
10906         SignMask = ~APInt::getSignMask(IntVT.getSizeInBits());
10907       }
10908       SDLoc DL(N0);
10909       Int = DAG.getNode(ISD::AND, DL, IntVT, Int,
10910                         DAG.getConstant(SignMask, DL, IntVT));
10911       AddToWorklist(Int.getNode());
10912       return DAG.getBitcast(N->getValueType(0), Int);
10913     }
10914   }
10915 
10916   return SDValue();
10917 }
10918 
10919 SDValue DAGCombiner::visitBRCOND(SDNode *N) {
10920   SDValue Chain = N->getOperand(0);
10921   SDValue N1 = N->getOperand(1);
10922   SDValue N2 = N->getOperand(2);
10923 
10924   // If N is a constant we could fold this into a fallthrough or unconditional
10925   // branch. However that doesn't happen very often in normal code, because
10926   // Instcombine/SimplifyCFG should have handled the available opportunities.
10927   // If we did this folding here, it would be necessary to update the
10928   // MachineBasicBlock CFG, which is awkward.
10929 
10930   // fold a brcond with a setcc condition into a BR_CC node if BR_CC is legal
10931   // on the target.
10932   if (N1.getOpcode() == ISD::SETCC &&
10933       TLI.isOperationLegalOrCustom(ISD::BR_CC,
10934                                    N1.getOperand(0).getValueType())) {
10935     return DAG.getNode(ISD::BR_CC, SDLoc(N), MVT::Other,
10936                        Chain, N1.getOperand(2),
10937                        N1.getOperand(0), N1.getOperand(1), N2);
10938   }
10939 
10940   if ((N1.hasOneUse() && N1.getOpcode() == ISD::SRL) ||
10941       ((N1.getOpcode() == ISD::TRUNCATE && N1.hasOneUse()) &&
10942        (N1.getOperand(0).hasOneUse() &&
10943         N1.getOperand(0).getOpcode() == ISD::SRL))) {
10944     SDNode *Trunc = nullptr;
10945     if (N1.getOpcode() == ISD::TRUNCATE) {
10946       // Look pass the truncate.
10947       Trunc = N1.getNode();
10948       N1 = N1.getOperand(0);
10949     }
10950 
10951     // Match this pattern so that we can generate simpler code:
10952     //
10953     //   %a = ...
10954     //   %b = and i32 %a, 2
10955     //   %c = srl i32 %b, 1
10956     //   brcond i32 %c ...
10957     //
10958     // into
10959     //
10960     //   %a = ...
10961     //   %b = and i32 %a, 2
10962     //   %c = setcc eq %b, 0
10963     //   brcond %c ...
10964     //
10965     // This applies only when the AND constant value has one bit set and the
10966     // SRL constant is equal to the log2 of the AND constant. The back-end is
10967     // smart enough to convert the result into a TEST/JMP sequence.
10968     SDValue Op0 = N1.getOperand(0);
10969     SDValue Op1 = N1.getOperand(1);
10970 
10971     if (Op0.getOpcode() == ISD::AND &&
10972         Op1.getOpcode() == ISD::Constant) {
10973       SDValue AndOp1 = Op0.getOperand(1);
10974 
10975       if (AndOp1.getOpcode() == ISD::Constant) {
10976         const APInt &AndConst = cast<ConstantSDNode>(AndOp1)->getAPIntValue();
10977 
10978         if (AndConst.isPowerOf2() &&
10979             cast<ConstantSDNode>(Op1)->getAPIntValue()==AndConst.logBase2()) {
10980           SDLoc DL(N);
10981           SDValue SetCC =
10982             DAG.getSetCC(DL,
10983                          getSetCCResultType(Op0.getValueType()),
10984                          Op0, DAG.getConstant(0, DL, Op0.getValueType()),
10985                          ISD::SETNE);
10986 
10987           SDValue NewBRCond = DAG.getNode(ISD::BRCOND, DL,
10988                                           MVT::Other, Chain, SetCC, N2);
10989           // Don't add the new BRCond into the worklist or else SimplifySelectCC
10990           // will convert it back to (X & C1) >> C2.
10991           CombineTo(N, NewBRCond, false);
10992           // Truncate is dead.
10993           if (Trunc)
10994             deleteAndRecombine(Trunc);
10995           // Replace the uses of SRL with SETCC
10996           WorklistRemover DeadNodes(*this);
10997           DAG.ReplaceAllUsesOfValueWith(N1, SetCC);
10998           deleteAndRecombine(N1.getNode());
10999           return SDValue(N, 0);   // Return N so it doesn't get rechecked!
11000         }
11001       }
11002     }
11003 
11004     if (Trunc)
11005       // Restore N1 if the above transformation doesn't match.
11006       N1 = N->getOperand(1);
11007   }
11008 
11009   // Transform br(xor(x, y)) -> br(x != y)
11010   // Transform br(xor(xor(x,y), 1)) -> br (x == y)
11011   if (N1.hasOneUse() && N1.getOpcode() == ISD::XOR) {
11012     SDNode *TheXor = N1.getNode();
11013     SDValue Op0 = TheXor->getOperand(0);
11014     SDValue Op1 = TheXor->getOperand(1);
11015     if (Op0.getOpcode() == Op1.getOpcode()) {
11016       // Avoid missing important xor optimizations.
11017       if (SDValue Tmp = visitXOR(TheXor)) {
11018         if (Tmp.getNode() != TheXor) {
11019           DEBUG(dbgs() << "\nReplacing.8 ";
11020                 TheXor->dump(&DAG);
11021                 dbgs() << "\nWith: ";
11022                 Tmp.getNode()->dump(&DAG);
11023                 dbgs() << '\n');
11024           WorklistRemover DeadNodes(*this);
11025           DAG.ReplaceAllUsesOfValueWith(N1, Tmp);
11026           deleteAndRecombine(TheXor);
11027           return DAG.getNode(ISD::BRCOND, SDLoc(N),
11028                              MVT::Other, Chain, Tmp, N2);
11029         }
11030 
11031         // visitXOR has changed XOR's operands or replaced the XOR completely,
11032         // bail out.
11033         return SDValue(N, 0);
11034       }
11035     }
11036 
11037     if (Op0.getOpcode() != ISD::SETCC && Op1.getOpcode() != ISD::SETCC) {
11038       bool Equal = false;
11039       if (isOneConstant(Op0) && Op0.hasOneUse() &&
11040           Op0.getOpcode() == ISD::XOR) {
11041         TheXor = Op0.getNode();
11042         Equal = true;
11043       }
11044 
11045       EVT SetCCVT = N1.getValueType();
11046       if (LegalTypes)
11047         SetCCVT = getSetCCResultType(SetCCVT);
11048       SDValue SetCC = DAG.getSetCC(SDLoc(TheXor),
11049                                    SetCCVT,
11050                                    Op0, Op1,
11051                                    Equal ? ISD::SETEQ : ISD::SETNE);
11052       // Replace the uses of XOR with SETCC
11053       WorklistRemover DeadNodes(*this);
11054       DAG.ReplaceAllUsesOfValueWith(N1, SetCC);
11055       deleteAndRecombine(N1.getNode());
11056       return DAG.getNode(ISD::BRCOND, SDLoc(N),
11057                          MVT::Other, Chain, SetCC, N2);
11058     }
11059   }
11060 
11061   return SDValue();
11062 }
11063 
11064 // Operand List for BR_CC: Chain, CondCC, CondLHS, CondRHS, DestBB.
11065 //
11066 SDValue DAGCombiner::visitBR_CC(SDNode *N) {
11067   CondCodeSDNode *CC = cast<CondCodeSDNode>(N->getOperand(1));
11068   SDValue CondLHS = N->getOperand(2), CondRHS = N->getOperand(3);
11069 
11070   // If N is a constant we could fold this into a fallthrough or unconditional
11071   // branch. However that doesn't happen very often in normal code, because
11072   // Instcombine/SimplifyCFG should have handled the available opportunities.
11073   // If we did this folding here, it would be necessary to update the
11074   // MachineBasicBlock CFG, which is awkward.
11075 
11076   // Use SimplifySetCC to simplify SETCC's.
11077   SDValue Simp = SimplifySetCC(getSetCCResultType(CondLHS.getValueType()),
11078                                CondLHS, CondRHS, CC->get(), SDLoc(N),
11079                                false);
11080   if (Simp.getNode()) AddToWorklist(Simp.getNode());
11081 
11082   // fold to a simpler setcc
11083   if (Simp.getNode() && Simp.getOpcode() == ISD::SETCC)
11084     return DAG.getNode(ISD::BR_CC, SDLoc(N), MVT::Other,
11085                        N->getOperand(0), Simp.getOperand(2),
11086                        Simp.getOperand(0), Simp.getOperand(1),
11087                        N->getOperand(4));
11088 
11089   return SDValue();
11090 }
11091 
11092 /// Return true if 'Use' is a load or a store that uses N as its base pointer
11093 /// and that N may be folded in the load / store addressing mode.
11094 static bool canFoldInAddressingMode(SDNode *N, SDNode *Use,
11095                                     SelectionDAG &DAG,
11096                                     const TargetLowering &TLI) {
11097   EVT VT;
11098   unsigned AS;
11099 
11100   if (LoadSDNode *LD  = dyn_cast<LoadSDNode>(Use)) {
11101     if (LD->isIndexed() || LD->getBasePtr().getNode() != N)
11102       return false;
11103     VT = LD->getMemoryVT();
11104     AS = LD->getAddressSpace();
11105   } else if (StoreSDNode *ST  = dyn_cast<StoreSDNode>(Use)) {
11106     if (ST->isIndexed() || ST->getBasePtr().getNode() != N)
11107       return false;
11108     VT = ST->getMemoryVT();
11109     AS = ST->getAddressSpace();
11110   } else
11111     return false;
11112 
11113   TargetLowering::AddrMode AM;
11114   if (N->getOpcode() == ISD::ADD) {
11115     ConstantSDNode *Offset = dyn_cast<ConstantSDNode>(N->getOperand(1));
11116     if (Offset)
11117       // [reg +/- imm]
11118       AM.BaseOffs = Offset->getSExtValue();
11119     else
11120       // [reg +/- reg]
11121       AM.Scale = 1;
11122   } else if (N->getOpcode() == ISD::SUB) {
11123     ConstantSDNode *Offset = dyn_cast<ConstantSDNode>(N->getOperand(1));
11124     if (Offset)
11125       // [reg +/- imm]
11126       AM.BaseOffs = -Offset->getSExtValue();
11127     else
11128       // [reg +/- reg]
11129       AM.Scale = 1;
11130   } else
11131     return false;
11132 
11133   return TLI.isLegalAddressingMode(DAG.getDataLayout(), AM,
11134                                    VT.getTypeForEVT(*DAG.getContext()), AS);
11135 }
11136 
11137 /// Try turning a load/store into a pre-indexed load/store when the base
11138 /// pointer is an add or subtract and it has other uses besides the load/store.
11139 /// After the transformation, the new indexed load/store has effectively folded
11140 /// the add/subtract in and all of its other uses are redirected to the
11141 /// new load/store.
11142 bool DAGCombiner::CombineToPreIndexedLoadStore(SDNode *N) {
11143   if (Level < AfterLegalizeDAG)
11144     return false;
11145 
11146   bool isLoad = true;
11147   SDValue Ptr;
11148   EVT VT;
11149   if (LoadSDNode *LD  = dyn_cast<LoadSDNode>(N)) {
11150     if (LD->isIndexed())
11151       return false;
11152     VT = LD->getMemoryVT();
11153     if (!TLI.isIndexedLoadLegal(ISD::PRE_INC, VT) &&
11154         !TLI.isIndexedLoadLegal(ISD::PRE_DEC, VT))
11155       return false;
11156     Ptr = LD->getBasePtr();
11157   } else if (StoreSDNode *ST  = dyn_cast<StoreSDNode>(N)) {
11158     if (ST->isIndexed())
11159       return false;
11160     VT = ST->getMemoryVT();
11161     if (!TLI.isIndexedStoreLegal(ISD::PRE_INC, VT) &&
11162         !TLI.isIndexedStoreLegal(ISD::PRE_DEC, VT))
11163       return false;
11164     Ptr = ST->getBasePtr();
11165     isLoad = false;
11166   } else {
11167     return false;
11168   }
11169 
11170   // If the pointer is not an add/sub, or if it doesn't have multiple uses, bail
11171   // out.  There is no reason to make this a preinc/predec.
11172   if ((Ptr.getOpcode() != ISD::ADD && Ptr.getOpcode() != ISD::SUB) ||
11173       Ptr.getNode()->hasOneUse())
11174     return false;
11175 
11176   // Ask the target to do addressing mode selection.
11177   SDValue BasePtr;
11178   SDValue Offset;
11179   ISD::MemIndexedMode AM = ISD::UNINDEXED;
11180   if (!TLI.getPreIndexedAddressParts(N, BasePtr, Offset, AM, DAG))
11181     return false;
11182 
11183   // Backends without true r+i pre-indexed forms may need to pass a
11184   // constant base with a variable offset so that constant coercion
11185   // will work with the patterns in canonical form.
11186   bool Swapped = false;
11187   if (isa<ConstantSDNode>(BasePtr)) {
11188     std::swap(BasePtr, Offset);
11189     Swapped = true;
11190   }
11191 
11192   // Don't create a indexed load / store with zero offset.
11193   if (isNullConstant(Offset))
11194     return false;
11195 
11196   // Try turning it into a pre-indexed load / store except when:
11197   // 1) The new base ptr is a frame index.
11198   // 2) If N is a store and the new base ptr is either the same as or is a
11199   //    predecessor of the value being stored.
11200   // 3) Another use of old base ptr is a predecessor of N. If ptr is folded
11201   //    that would create a cycle.
11202   // 4) All uses are load / store ops that use it as old base ptr.
11203 
11204   // Check #1.  Preinc'ing a frame index would require copying the stack pointer
11205   // (plus the implicit offset) to a register to preinc anyway.
11206   if (isa<FrameIndexSDNode>(BasePtr) || isa<RegisterSDNode>(BasePtr))
11207     return false;
11208 
11209   // Check #2.
11210   if (!isLoad) {
11211     SDValue Val = cast<StoreSDNode>(N)->getValue();
11212     if (Val == BasePtr || BasePtr.getNode()->isPredecessorOf(Val.getNode()))
11213       return false;
11214   }
11215 
11216   // Caches for hasPredecessorHelper.
11217   SmallPtrSet<const SDNode *, 32> Visited;
11218   SmallVector<const SDNode *, 16> Worklist;
11219   Worklist.push_back(N);
11220 
11221   // If the offset is a constant, there may be other adds of constants that
11222   // can be folded with this one. We should do this to avoid having to keep
11223   // a copy of the original base pointer.
11224   SmallVector<SDNode *, 16> OtherUses;
11225   if (isa<ConstantSDNode>(Offset))
11226     for (SDNode::use_iterator UI = BasePtr.getNode()->use_begin(),
11227                               UE = BasePtr.getNode()->use_end();
11228          UI != UE; ++UI) {
11229       SDUse &Use = UI.getUse();
11230       // Skip the use that is Ptr and uses of other results from BasePtr's
11231       // node (important for nodes that return multiple results).
11232       if (Use.getUser() == Ptr.getNode() || Use != BasePtr)
11233         continue;
11234 
11235       if (SDNode::hasPredecessorHelper(Use.getUser(), Visited, Worklist))
11236         continue;
11237 
11238       if (Use.getUser()->getOpcode() != ISD::ADD &&
11239           Use.getUser()->getOpcode() != ISD::SUB) {
11240         OtherUses.clear();
11241         break;
11242       }
11243 
11244       SDValue Op1 = Use.getUser()->getOperand((UI.getOperandNo() + 1) & 1);
11245       if (!isa<ConstantSDNode>(Op1)) {
11246         OtherUses.clear();
11247         break;
11248       }
11249 
11250       // FIXME: In some cases, we can be smarter about this.
11251       if (Op1.getValueType() != Offset.getValueType()) {
11252         OtherUses.clear();
11253         break;
11254       }
11255 
11256       OtherUses.push_back(Use.getUser());
11257     }
11258 
11259   if (Swapped)
11260     std::swap(BasePtr, Offset);
11261 
11262   // Now check for #3 and #4.
11263   bool RealUse = false;
11264 
11265   for (SDNode *Use : Ptr.getNode()->uses()) {
11266     if (Use == N)
11267       continue;
11268     if (SDNode::hasPredecessorHelper(Use, Visited, Worklist))
11269       return false;
11270 
11271     // If Ptr may be folded in addressing mode of other use, then it's
11272     // not profitable to do this transformation.
11273     if (!canFoldInAddressingMode(Ptr.getNode(), Use, DAG, TLI))
11274       RealUse = true;
11275   }
11276 
11277   if (!RealUse)
11278     return false;
11279 
11280   SDValue Result;
11281   if (isLoad)
11282     Result = DAG.getIndexedLoad(SDValue(N,0), SDLoc(N),
11283                                 BasePtr, Offset, AM);
11284   else
11285     Result = DAG.getIndexedStore(SDValue(N,0), SDLoc(N),
11286                                  BasePtr, Offset, AM);
11287   ++PreIndexedNodes;
11288   ++NodesCombined;
11289   DEBUG(dbgs() << "\nReplacing.4 ";
11290         N->dump(&DAG);
11291         dbgs() << "\nWith: ";
11292         Result.getNode()->dump(&DAG);
11293         dbgs() << '\n');
11294   WorklistRemover DeadNodes(*this);
11295   if (isLoad) {
11296     DAG.ReplaceAllUsesOfValueWith(SDValue(N, 0), Result.getValue(0));
11297     DAG.ReplaceAllUsesOfValueWith(SDValue(N, 1), Result.getValue(2));
11298   } else {
11299     DAG.ReplaceAllUsesOfValueWith(SDValue(N, 0), Result.getValue(1));
11300   }
11301 
11302   // Finally, since the node is now dead, remove it from the graph.
11303   deleteAndRecombine(N);
11304 
11305   if (Swapped)
11306     std::swap(BasePtr, Offset);
11307 
11308   // Replace other uses of BasePtr that can be updated to use Ptr
11309   for (unsigned i = 0, e = OtherUses.size(); i != e; ++i) {
11310     unsigned OffsetIdx = 1;
11311     if (OtherUses[i]->getOperand(OffsetIdx).getNode() == BasePtr.getNode())
11312       OffsetIdx = 0;
11313     assert(OtherUses[i]->getOperand(!OffsetIdx).getNode() ==
11314            BasePtr.getNode() && "Expected BasePtr operand");
11315 
11316     // We need to replace ptr0 in the following expression:
11317     //   x0 * offset0 + y0 * ptr0 = t0
11318     // knowing that
11319     //   x1 * offset1 + y1 * ptr0 = t1 (the indexed load/store)
11320     //
11321     // where x0, x1, y0 and y1 in {-1, 1} are given by the types of the
11322     // indexed load/store and the expression that needs to be re-written.
11323     //
11324     // Therefore, we have:
11325     //   t0 = (x0 * offset0 - x1 * y0 * y1 *offset1) + (y0 * y1) * t1
11326 
11327     ConstantSDNode *CN =
11328       cast<ConstantSDNode>(OtherUses[i]->getOperand(OffsetIdx));
11329     int X0, X1, Y0, Y1;
11330     const APInt &Offset0 = CN->getAPIntValue();
11331     APInt Offset1 = cast<ConstantSDNode>(Offset)->getAPIntValue();
11332 
11333     X0 = (OtherUses[i]->getOpcode() == ISD::SUB && OffsetIdx == 1) ? -1 : 1;
11334     Y0 = (OtherUses[i]->getOpcode() == ISD::SUB && OffsetIdx == 0) ? -1 : 1;
11335     X1 = (AM == ISD::PRE_DEC && !Swapped) ? -1 : 1;
11336     Y1 = (AM == ISD::PRE_DEC && Swapped) ? -1 : 1;
11337 
11338     unsigned Opcode = (Y0 * Y1 < 0) ? ISD::SUB : ISD::ADD;
11339 
11340     APInt CNV = Offset0;
11341     if (X0 < 0) CNV = -CNV;
11342     if (X1 * Y0 * Y1 < 0) CNV = CNV + Offset1;
11343     else CNV = CNV - Offset1;
11344 
11345     SDLoc DL(OtherUses[i]);
11346 
11347     // We can now generate the new expression.
11348     SDValue NewOp1 = DAG.getConstant(CNV, DL, CN->getValueType(0));
11349     SDValue NewOp2 = Result.getValue(isLoad ? 1 : 0);
11350 
11351     SDValue NewUse = DAG.getNode(Opcode,
11352                                  DL,
11353                                  OtherUses[i]->getValueType(0), NewOp1, NewOp2);
11354     DAG.ReplaceAllUsesOfValueWith(SDValue(OtherUses[i], 0), NewUse);
11355     deleteAndRecombine(OtherUses[i]);
11356   }
11357 
11358   // Replace the uses of Ptr with uses of the updated base value.
11359   DAG.ReplaceAllUsesOfValueWith(Ptr, Result.getValue(isLoad ? 1 : 0));
11360   deleteAndRecombine(Ptr.getNode());
11361 
11362   return true;
11363 }
11364 
11365 /// Try to combine a load/store with a add/sub of the base pointer node into a
11366 /// post-indexed load/store. The transformation folded the add/subtract into the
11367 /// new indexed load/store effectively and all of its uses are redirected to the
11368 /// new load/store.
11369 bool DAGCombiner::CombineToPostIndexedLoadStore(SDNode *N) {
11370   if (Level < AfterLegalizeDAG)
11371     return false;
11372 
11373   bool isLoad = true;
11374   SDValue Ptr;
11375   EVT VT;
11376   if (LoadSDNode *LD  = dyn_cast<LoadSDNode>(N)) {
11377     if (LD->isIndexed())
11378       return false;
11379     VT = LD->getMemoryVT();
11380     if (!TLI.isIndexedLoadLegal(ISD::POST_INC, VT) &&
11381         !TLI.isIndexedLoadLegal(ISD::POST_DEC, VT))
11382       return false;
11383     Ptr = LD->getBasePtr();
11384   } else if (StoreSDNode *ST  = dyn_cast<StoreSDNode>(N)) {
11385     if (ST->isIndexed())
11386       return false;
11387     VT = ST->getMemoryVT();
11388     if (!TLI.isIndexedStoreLegal(ISD::POST_INC, VT) &&
11389         !TLI.isIndexedStoreLegal(ISD::POST_DEC, VT))
11390       return false;
11391     Ptr = ST->getBasePtr();
11392     isLoad = false;
11393   } else {
11394     return false;
11395   }
11396 
11397   if (Ptr.getNode()->hasOneUse())
11398     return false;
11399 
11400   for (SDNode *Op : Ptr.getNode()->uses()) {
11401     if (Op == N ||
11402         (Op->getOpcode() != ISD::ADD && Op->getOpcode() != ISD::SUB))
11403       continue;
11404 
11405     SDValue BasePtr;
11406     SDValue Offset;
11407     ISD::MemIndexedMode AM = ISD::UNINDEXED;
11408     if (TLI.getPostIndexedAddressParts(N, Op, BasePtr, Offset, AM, DAG)) {
11409       // Don't create a indexed load / store with zero offset.
11410       if (isNullConstant(Offset))
11411         continue;
11412 
11413       // Try turning it into a post-indexed load / store except when
11414       // 1) All uses are load / store ops that use it as base ptr (and
11415       //    it may be folded as addressing mmode).
11416       // 2) Op must be independent of N, i.e. Op is neither a predecessor
11417       //    nor a successor of N. Otherwise, if Op is folded that would
11418       //    create a cycle.
11419 
11420       if (isa<FrameIndexSDNode>(BasePtr) || isa<RegisterSDNode>(BasePtr))
11421         continue;
11422 
11423       // Check for #1.
11424       bool TryNext = false;
11425       for (SDNode *Use : BasePtr.getNode()->uses()) {
11426         if (Use == Ptr.getNode())
11427           continue;
11428 
11429         // If all the uses are load / store addresses, then don't do the
11430         // transformation.
11431         if (Use->getOpcode() == ISD::ADD || Use->getOpcode() == ISD::SUB){
11432           bool RealUse = false;
11433           for (SDNode *UseUse : Use->uses()) {
11434             if (!canFoldInAddressingMode(Use, UseUse, DAG, TLI))
11435               RealUse = true;
11436           }
11437 
11438           if (!RealUse) {
11439             TryNext = true;
11440             break;
11441           }
11442         }
11443       }
11444 
11445       if (TryNext)
11446         continue;
11447 
11448       // Check for #2
11449       if (!Op->isPredecessorOf(N) && !N->isPredecessorOf(Op)) {
11450         SDValue Result = isLoad
11451           ? DAG.getIndexedLoad(SDValue(N,0), SDLoc(N),
11452                                BasePtr, Offset, AM)
11453           : DAG.getIndexedStore(SDValue(N,0), SDLoc(N),
11454                                 BasePtr, Offset, AM);
11455         ++PostIndexedNodes;
11456         ++NodesCombined;
11457         DEBUG(dbgs() << "\nReplacing.5 ";
11458               N->dump(&DAG);
11459               dbgs() << "\nWith: ";
11460               Result.getNode()->dump(&DAG);
11461               dbgs() << '\n');
11462         WorklistRemover DeadNodes(*this);
11463         if (isLoad) {
11464           DAG.ReplaceAllUsesOfValueWith(SDValue(N, 0), Result.getValue(0));
11465           DAG.ReplaceAllUsesOfValueWith(SDValue(N, 1), Result.getValue(2));
11466         } else {
11467           DAG.ReplaceAllUsesOfValueWith(SDValue(N, 0), Result.getValue(1));
11468         }
11469 
11470         // Finally, since the node is now dead, remove it from the graph.
11471         deleteAndRecombine(N);
11472 
11473         // Replace the uses of Use with uses of the updated base value.
11474         DAG.ReplaceAllUsesOfValueWith(SDValue(Op, 0),
11475                                       Result.getValue(isLoad ? 1 : 0));
11476         deleteAndRecombine(Op);
11477         return true;
11478       }
11479     }
11480   }
11481 
11482   return false;
11483 }
11484 
11485 /// \brief Return the base-pointer arithmetic from an indexed \p LD.
11486 SDValue DAGCombiner::SplitIndexingFromLoad(LoadSDNode *LD) {
11487   ISD::MemIndexedMode AM = LD->getAddressingMode();
11488   assert(AM != ISD::UNINDEXED);
11489   SDValue BP = LD->getOperand(1);
11490   SDValue Inc = LD->getOperand(2);
11491 
11492   // Some backends use TargetConstants for load offsets, but don't expect
11493   // TargetConstants in general ADD nodes. We can convert these constants into
11494   // regular Constants (if the constant is not opaque).
11495   assert((Inc.getOpcode() != ISD::TargetConstant ||
11496           !cast<ConstantSDNode>(Inc)->isOpaque()) &&
11497          "Cannot split out indexing using opaque target constants");
11498   if (Inc.getOpcode() == ISD::TargetConstant) {
11499     ConstantSDNode *ConstInc = cast<ConstantSDNode>(Inc);
11500     Inc = DAG.getConstant(*ConstInc->getConstantIntValue(), SDLoc(Inc),
11501                           ConstInc->getValueType(0));
11502   }
11503 
11504   unsigned Opc =
11505       (AM == ISD::PRE_INC || AM == ISD::POST_INC ? ISD::ADD : ISD::SUB);
11506   return DAG.getNode(Opc, SDLoc(LD), BP.getSimpleValueType(), BP, Inc);
11507 }
11508 
11509 SDValue DAGCombiner::visitLOAD(SDNode *N) {
11510   LoadSDNode *LD  = cast<LoadSDNode>(N);
11511   SDValue Chain = LD->getChain();
11512   SDValue Ptr   = LD->getBasePtr();
11513 
11514   // If load is not volatile and there are no uses of the loaded value (and
11515   // the updated indexed value in case of indexed loads), change uses of the
11516   // chain value into uses of the chain input (i.e. delete the dead load).
11517   if (!LD->isVolatile()) {
11518     if (N->getValueType(1) == MVT::Other) {
11519       // Unindexed loads.
11520       if (!N->hasAnyUseOfValue(0)) {
11521         // It's not safe to use the two value CombineTo variant here. e.g.
11522         // v1, chain2 = load chain1, loc
11523         // v2, chain3 = load chain2, loc
11524         // v3         = add v2, c
11525         // Now we replace use of chain2 with chain1.  This makes the second load
11526         // isomorphic to the one we are deleting, and thus makes this load live.
11527         DEBUG(dbgs() << "\nReplacing.6 ";
11528               N->dump(&DAG);
11529               dbgs() << "\nWith chain: ";
11530               Chain.getNode()->dump(&DAG);
11531               dbgs() << "\n");
11532         WorklistRemover DeadNodes(*this);
11533         DAG.ReplaceAllUsesOfValueWith(SDValue(N, 1), Chain);
11534         AddUsersToWorklist(Chain.getNode());
11535         if (N->use_empty())
11536           deleteAndRecombine(N);
11537 
11538         return SDValue(N, 0);   // Return N so it doesn't get rechecked!
11539       }
11540     } else {
11541       // Indexed loads.
11542       assert(N->getValueType(2) == MVT::Other && "Malformed indexed loads?");
11543 
11544       // If this load has an opaque TargetConstant offset, then we cannot split
11545       // the indexing into an add/sub directly (that TargetConstant may not be
11546       // valid for a different type of node, and we cannot convert an opaque
11547       // target constant into a regular constant).
11548       bool HasOTCInc = LD->getOperand(2).getOpcode() == ISD::TargetConstant &&
11549                        cast<ConstantSDNode>(LD->getOperand(2))->isOpaque();
11550 
11551       if (!N->hasAnyUseOfValue(0) &&
11552           ((MaySplitLoadIndex && !HasOTCInc) || !N->hasAnyUseOfValue(1))) {
11553         SDValue Undef = DAG.getUNDEF(N->getValueType(0));
11554         SDValue Index;
11555         if (N->hasAnyUseOfValue(1) && MaySplitLoadIndex && !HasOTCInc) {
11556           Index = SplitIndexingFromLoad(LD);
11557           // Try to fold the base pointer arithmetic into subsequent loads and
11558           // stores.
11559           AddUsersToWorklist(N);
11560         } else
11561           Index = DAG.getUNDEF(N->getValueType(1));
11562         DEBUG(dbgs() << "\nReplacing.7 ";
11563               N->dump(&DAG);
11564               dbgs() << "\nWith: ";
11565               Undef.getNode()->dump(&DAG);
11566               dbgs() << " and 2 other values\n");
11567         WorklistRemover DeadNodes(*this);
11568         DAG.ReplaceAllUsesOfValueWith(SDValue(N, 0), Undef);
11569         DAG.ReplaceAllUsesOfValueWith(SDValue(N, 1), Index);
11570         DAG.ReplaceAllUsesOfValueWith(SDValue(N, 2), Chain);
11571         deleteAndRecombine(N);
11572         return SDValue(N, 0);   // Return N so it doesn't get rechecked!
11573       }
11574     }
11575   }
11576 
11577   // If this load is directly stored, replace the load value with the stored
11578   // value.
11579   // TODO: Handle store large -> read small portion.
11580   // TODO: Handle TRUNCSTORE/LOADEXT
11581   if (OptLevel != CodeGenOpt::None &&
11582       ISD::isNormalLoad(N) && !LD->isVolatile()) {
11583     if (ISD::isNON_TRUNCStore(Chain.getNode())) {
11584       StoreSDNode *PrevST = cast<StoreSDNode>(Chain);
11585       if (PrevST->getBasePtr() == Ptr &&
11586           PrevST->getValue().getValueType() == N->getValueType(0))
11587         return CombineTo(N, PrevST->getOperand(1), Chain);
11588     }
11589   }
11590 
11591   // Try to infer better alignment information than the load already has.
11592   if (OptLevel != CodeGenOpt::None && LD->isUnindexed()) {
11593     if (unsigned Align = DAG.InferPtrAlignment(Ptr)) {
11594       if (Align > LD->getMemOperand()->getBaseAlignment()) {
11595         SDValue NewLoad = DAG.getExtLoad(
11596             LD->getExtensionType(), SDLoc(N), LD->getValueType(0), Chain, Ptr,
11597             LD->getPointerInfo(), LD->getMemoryVT(), Align,
11598             LD->getMemOperand()->getFlags(), LD->getAAInfo());
11599         if (NewLoad.getNode() != N)
11600           return CombineTo(N, NewLoad, SDValue(NewLoad.getNode(), 1), true);
11601       }
11602     }
11603   }
11604 
11605   if (LD->isUnindexed()) {
11606     // Walk up chain skipping non-aliasing memory nodes.
11607     SDValue BetterChain = FindBetterChain(N, Chain);
11608 
11609     // If there is a better chain.
11610     if (Chain != BetterChain) {
11611       SDValue ReplLoad;
11612 
11613       // Replace the chain to void dependency.
11614       if (LD->getExtensionType() == ISD::NON_EXTLOAD) {
11615         ReplLoad = DAG.getLoad(N->getValueType(0), SDLoc(LD),
11616                                BetterChain, Ptr, LD->getMemOperand());
11617       } else {
11618         ReplLoad = DAG.getExtLoad(LD->getExtensionType(), SDLoc(LD),
11619                                   LD->getValueType(0),
11620                                   BetterChain, Ptr, LD->getMemoryVT(),
11621                                   LD->getMemOperand());
11622       }
11623 
11624       // Create token factor to keep old chain connected.
11625       SDValue Token = DAG.getNode(ISD::TokenFactor, SDLoc(N),
11626                                   MVT::Other, Chain, ReplLoad.getValue(1));
11627 
11628       // Replace uses with load result and token factor
11629       return CombineTo(N, ReplLoad.getValue(0), Token);
11630     }
11631   }
11632 
11633   // Try transforming N to an indexed load.
11634   if (CombineToPreIndexedLoadStore(N) || CombineToPostIndexedLoadStore(N))
11635     return SDValue(N, 0);
11636 
11637   // Try to slice up N to more direct loads if the slices are mapped to
11638   // different register banks or pairing can take place.
11639   if (SliceUpLoad(N))
11640     return SDValue(N, 0);
11641 
11642   return SDValue();
11643 }
11644 
11645 namespace {
11646 
11647 /// \brief Helper structure used to slice a load in smaller loads.
11648 /// Basically a slice is obtained from the following sequence:
11649 /// Origin = load Ty1, Base
11650 /// Shift = srl Ty1 Origin, CstTy Amount
11651 /// Inst = trunc Shift to Ty2
11652 ///
11653 /// Then, it will be rewritten into:
11654 /// Slice = load SliceTy, Base + SliceOffset
11655 /// [Inst = zext Slice to Ty2], only if SliceTy <> Ty2
11656 ///
11657 /// SliceTy is deduced from the number of bits that are actually used to
11658 /// build Inst.
11659 struct LoadedSlice {
11660   /// \brief Helper structure used to compute the cost of a slice.
11661   struct Cost {
11662     /// Are we optimizing for code size.
11663     bool ForCodeSize;
11664 
11665     /// Various cost.
11666     unsigned Loads = 0;
11667     unsigned Truncates = 0;
11668     unsigned CrossRegisterBanksCopies = 0;
11669     unsigned ZExts = 0;
11670     unsigned Shift = 0;
11671 
11672     Cost(bool ForCodeSize = false) : ForCodeSize(ForCodeSize) {}
11673 
11674     /// \brief Get the cost of one isolated slice.
11675     Cost(const LoadedSlice &LS, bool ForCodeSize = false)
11676         : ForCodeSize(ForCodeSize), Loads(1) {
11677       EVT TruncType = LS.Inst->getValueType(0);
11678       EVT LoadedType = LS.getLoadedType();
11679       if (TruncType != LoadedType &&
11680           !LS.DAG->getTargetLoweringInfo().isZExtFree(LoadedType, TruncType))
11681         ZExts = 1;
11682     }
11683 
11684     /// \brief Account for slicing gain in the current cost.
11685     /// Slicing provide a few gains like removing a shift or a
11686     /// truncate. This method allows to grow the cost of the original
11687     /// load with the gain from this slice.
11688     void addSliceGain(const LoadedSlice &LS) {
11689       // Each slice saves a truncate.
11690       const TargetLowering &TLI = LS.DAG->getTargetLoweringInfo();
11691       if (!TLI.isTruncateFree(LS.Inst->getOperand(0).getValueType(),
11692                               LS.Inst->getValueType(0)))
11693         ++Truncates;
11694       // If there is a shift amount, this slice gets rid of it.
11695       if (LS.Shift)
11696         ++Shift;
11697       // If this slice can merge a cross register bank copy, account for it.
11698       if (LS.canMergeExpensiveCrossRegisterBankCopy())
11699         ++CrossRegisterBanksCopies;
11700     }
11701 
11702     Cost &operator+=(const Cost &RHS) {
11703       Loads += RHS.Loads;
11704       Truncates += RHS.Truncates;
11705       CrossRegisterBanksCopies += RHS.CrossRegisterBanksCopies;
11706       ZExts += RHS.ZExts;
11707       Shift += RHS.Shift;
11708       return *this;
11709     }
11710 
11711     bool operator==(const Cost &RHS) const {
11712       return Loads == RHS.Loads && Truncates == RHS.Truncates &&
11713              CrossRegisterBanksCopies == RHS.CrossRegisterBanksCopies &&
11714              ZExts == RHS.ZExts && Shift == RHS.Shift;
11715     }
11716 
11717     bool operator!=(const Cost &RHS) const { return !(*this == RHS); }
11718 
11719     bool operator<(const Cost &RHS) const {
11720       // Assume cross register banks copies are as expensive as loads.
11721       // FIXME: Do we want some more target hooks?
11722       unsigned ExpensiveOpsLHS = Loads + CrossRegisterBanksCopies;
11723       unsigned ExpensiveOpsRHS = RHS.Loads + RHS.CrossRegisterBanksCopies;
11724       // Unless we are optimizing for code size, consider the
11725       // expensive operation first.
11726       if (!ForCodeSize && ExpensiveOpsLHS != ExpensiveOpsRHS)
11727         return ExpensiveOpsLHS < ExpensiveOpsRHS;
11728       return (Truncates + ZExts + Shift + ExpensiveOpsLHS) <
11729              (RHS.Truncates + RHS.ZExts + RHS.Shift + ExpensiveOpsRHS);
11730     }
11731 
11732     bool operator>(const Cost &RHS) const { return RHS < *this; }
11733 
11734     bool operator<=(const Cost &RHS) const { return !(RHS < *this); }
11735 
11736     bool operator>=(const Cost &RHS) const { return !(*this < RHS); }
11737   };
11738 
11739   // The last instruction that represent the slice. This should be a
11740   // truncate instruction.
11741   SDNode *Inst;
11742 
11743   // The original load instruction.
11744   LoadSDNode *Origin;
11745 
11746   // The right shift amount in bits from the original load.
11747   unsigned Shift;
11748 
11749   // The DAG from which Origin came from.
11750   // This is used to get some contextual information about legal types, etc.
11751   SelectionDAG *DAG;
11752 
11753   LoadedSlice(SDNode *Inst = nullptr, LoadSDNode *Origin = nullptr,
11754               unsigned Shift = 0, SelectionDAG *DAG = nullptr)
11755       : Inst(Inst), Origin(Origin), Shift(Shift), DAG(DAG) {}
11756 
11757   /// \brief Get the bits used in a chunk of bits \p BitWidth large.
11758   /// \return Result is \p BitWidth and has used bits set to 1 and
11759   ///         not used bits set to 0.
11760   APInt getUsedBits() const {
11761     // Reproduce the trunc(lshr) sequence:
11762     // - Start from the truncated value.
11763     // - Zero extend to the desired bit width.
11764     // - Shift left.
11765     assert(Origin && "No original load to compare against.");
11766     unsigned BitWidth = Origin->getValueSizeInBits(0);
11767     assert(Inst && "This slice is not bound to an instruction");
11768     assert(Inst->getValueSizeInBits(0) <= BitWidth &&
11769            "Extracted slice is bigger than the whole type!");
11770     APInt UsedBits(Inst->getValueSizeInBits(0), 0);
11771     UsedBits.setAllBits();
11772     UsedBits = UsedBits.zext(BitWidth);
11773     UsedBits <<= Shift;
11774     return UsedBits;
11775   }
11776 
11777   /// \brief Get the size of the slice to be loaded in bytes.
11778   unsigned getLoadedSize() const {
11779     unsigned SliceSize = getUsedBits().countPopulation();
11780     assert(!(SliceSize & 0x7) && "Size is not a multiple of a byte.");
11781     return SliceSize / 8;
11782   }
11783 
11784   /// \brief Get the type that will be loaded for this slice.
11785   /// Note: This may not be the final type for the slice.
11786   EVT getLoadedType() const {
11787     assert(DAG && "Missing context");
11788     LLVMContext &Ctxt = *DAG->getContext();
11789     return EVT::getIntegerVT(Ctxt, getLoadedSize() * 8);
11790   }
11791 
11792   /// \brief Get the alignment of the load used for this slice.
11793   unsigned getAlignment() const {
11794     unsigned Alignment = Origin->getAlignment();
11795     unsigned Offset = getOffsetFromBase();
11796     if (Offset != 0)
11797       Alignment = MinAlign(Alignment, Alignment + Offset);
11798     return Alignment;
11799   }
11800 
11801   /// \brief Check if this slice can be rewritten with legal operations.
11802   bool isLegal() const {
11803     // An invalid slice is not legal.
11804     if (!Origin || !Inst || !DAG)
11805       return false;
11806 
11807     // Offsets are for indexed load only, we do not handle that.
11808     if (!Origin->getOffset().isUndef())
11809       return false;
11810 
11811     const TargetLowering &TLI = DAG->getTargetLoweringInfo();
11812 
11813     // Check that the type is legal.
11814     EVT SliceType = getLoadedType();
11815     if (!TLI.isTypeLegal(SliceType))
11816       return false;
11817 
11818     // Check that the load is legal for this type.
11819     if (!TLI.isOperationLegal(ISD::LOAD, SliceType))
11820       return false;
11821 
11822     // Check that the offset can be computed.
11823     // 1. Check its type.
11824     EVT PtrType = Origin->getBasePtr().getValueType();
11825     if (PtrType == MVT::Untyped || PtrType.isExtended())
11826       return false;
11827 
11828     // 2. Check that it fits in the immediate.
11829     if (!TLI.isLegalAddImmediate(getOffsetFromBase()))
11830       return false;
11831 
11832     // 3. Check that the computation is legal.
11833     if (!TLI.isOperationLegal(ISD::ADD, PtrType))
11834       return false;
11835 
11836     // Check that the zext is legal if it needs one.
11837     EVT TruncateType = Inst->getValueType(0);
11838     if (TruncateType != SliceType &&
11839         !TLI.isOperationLegal(ISD::ZERO_EXTEND, TruncateType))
11840       return false;
11841 
11842     return true;
11843   }
11844 
11845   /// \brief Get the offset in bytes of this slice in the original chunk of
11846   /// bits.
11847   /// \pre DAG != nullptr.
11848   uint64_t getOffsetFromBase() const {
11849     assert(DAG && "Missing context.");
11850     bool IsBigEndian = DAG->getDataLayout().isBigEndian();
11851     assert(!(Shift & 0x7) && "Shifts not aligned on Bytes are not supported.");
11852     uint64_t Offset = Shift / 8;
11853     unsigned TySizeInBytes = Origin->getValueSizeInBits(0) / 8;
11854     assert(!(Origin->getValueSizeInBits(0) & 0x7) &&
11855            "The size of the original loaded type is not a multiple of a"
11856            " byte.");
11857     // If Offset is bigger than TySizeInBytes, it means we are loading all
11858     // zeros. This should have been optimized before in the process.
11859     assert(TySizeInBytes > Offset &&
11860            "Invalid shift amount for given loaded size");
11861     if (IsBigEndian)
11862       Offset = TySizeInBytes - Offset - getLoadedSize();
11863     return Offset;
11864   }
11865 
11866   /// \brief Generate the sequence of instructions to load the slice
11867   /// represented by this object and redirect the uses of this slice to
11868   /// this new sequence of instructions.
11869   /// \pre this->Inst && this->Origin are valid Instructions and this
11870   /// object passed the legal check: LoadedSlice::isLegal returned true.
11871   /// \return The last instruction of the sequence used to load the slice.
11872   SDValue loadSlice() const {
11873     assert(Inst && Origin && "Unable to replace a non-existing slice.");
11874     const SDValue &OldBaseAddr = Origin->getBasePtr();
11875     SDValue BaseAddr = OldBaseAddr;
11876     // Get the offset in that chunk of bytes w.r.t. the endianness.
11877     int64_t Offset = static_cast<int64_t>(getOffsetFromBase());
11878     assert(Offset >= 0 && "Offset too big to fit in int64_t!");
11879     if (Offset) {
11880       // BaseAddr = BaseAddr + Offset.
11881       EVT ArithType = BaseAddr.getValueType();
11882       SDLoc DL(Origin);
11883       BaseAddr = DAG->getNode(ISD::ADD, DL, ArithType, BaseAddr,
11884                               DAG->getConstant(Offset, DL, ArithType));
11885     }
11886 
11887     // Create the type of the loaded slice according to its size.
11888     EVT SliceType = getLoadedType();
11889 
11890     // Create the load for the slice.
11891     SDValue LastInst =
11892         DAG->getLoad(SliceType, SDLoc(Origin), Origin->getChain(), BaseAddr,
11893                      Origin->getPointerInfo().getWithOffset(Offset),
11894                      getAlignment(), Origin->getMemOperand()->getFlags());
11895     // If the final type is not the same as the loaded type, this means that
11896     // we have to pad with zero. Create a zero extend for that.
11897     EVT FinalType = Inst->getValueType(0);
11898     if (SliceType != FinalType)
11899       LastInst =
11900           DAG->getNode(ISD::ZERO_EXTEND, SDLoc(LastInst), FinalType, LastInst);
11901     return LastInst;
11902   }
11903 
11904   /// \brief Check if this slice can be merged with an expensive cross register
11905   /// bank copy. E.g.,
11906   /// i = load i32
11907   /// f = bitcast i32 i to float
11908   bool canMergeExpensiveCrossRegisterBankCopy() const {
11909     if (!Inst || !Inst->hasOneUse())
11910       return false;
11911     SDNode *Use = *Inst->use_begin();
11912     if (Use->getOpcode() != ISD::BITCAST)
11913       return false;
11914     assert(DAG && "Missing context");
11915     const TargetLowering &TLI = DAG->getTargetLoweringInfo();
11916     EVT ResVT = Use->getValueType(0);
11917     const TargetRegisterClass *ResRC = TLI.getRegClassFor(ResVT.getSimpleVT());
11918     const TargetRegisterClass *ArgRC =
11919         TLI.getRegClassFor(Use->getOperand(0).getValueType().getSimpleVT());
11920     if (ArgRC == ResRC || !TLI.isOperationLegal(ISD::LOAD, ResVT))
11921       return false;
11922 
11923     // At this point, we know that we perform a cross-register-bank copy.
11924     // Check if it is expensive.
11925     const TargetRegisterInfo *TRI = DAG->getSubtarget().getRegisterInfo();
11926     // Assume bitcasts are cheap, unless both register classes do not
11927     // explicitly share a common sub class.
11928     if (!TRI || TRI->getCommonSubClass(ArgRC, ResRC))
11929       return false;
11930 
11931     // Check if it will be merged with the load.
11932     // 1. Check the alignment constraint.
11933     unsigned RequiredAlignment = DAG->getDataLayout().getABITypeAlignment(
11934         ResVT.getTypeForEVT(*DAG->getContext()));
11935 
11936     if (RequiredAlignment > getAlignment())
11937       return false;
11938 
11939     // 2. Check that the load is a legal operation for that type.
11940     if (!TLI.isOperationLegal(ISD::LOAD, ResVT))
11941       return false;
11942 
11943     // 3. Check that we do not have a zext in the way.
11944     if (Inst->getValueType(0) != getLoadedType())
11945       return false;
11946 
11947     return true;
11948   }
11949 };
11950 
11951 } // end anonymous namespace
11952 
11953 /// \brief Check that all bits set in \p UsedBits form a dense region, i.e.,
11954 /// \p UsedBits looks like 0..0 1..1 0..0.
11955 static bool areUsedBitsDense(const APInt &UsedBits) {
11956   // If all the bits are one, this is dense!
11957   if (UsedBits.isAllOnesValue())
11958     return true;
11959 
11960   // Get rid of the unused bits on the right.
11961   APInt NarrowedUsedBits = UsedBits.lshr(UsedBits.countTrailingZeros());
11962   // Get rid of the unused bits on the left.
11963   if (NarrowedUsedBits.countLeadingZeros())
11964     NarrowedUsedBits = NarrowedUsedBits.trunc(NarrowedUsedBits.getActiveBits());
11965   // Check that the chunk of bits is completely used.
11966   return NarrowedUsedBits.isAllOnesValue();
11967 }
11968 
11969 /// \brief Check whether or not \p First and \p Second are next to each other
11970 /// in memory. This means that there is no hole between the bits loaded
11971 /// by \p First and the bits loaded by \p Second.
11972 static bool areSlicesNextToEachOther(const LoadedSlice &First,
11973                                      const LoadedSlice &Second) {
11974   assert(First.Origin == Second.Origin && First.Origin &&
11975          "Unable to match different memory origins.");
11976   APInt UsedBits = First.getUsedBits();
11977   assert((UsedBits & Second.getUsedBits()) == 0 &&
11978          "Slices are not supposed to overlap.");
11979   UsedBits |= Second.getUsedBits();
11980   return areUsedBitsDense(UsedBits);
11981 }
11982 
11983 /// \brief Adjust the \p GlobalLSCost according to the target
11984 /// paring capabilities and the layout of the slices.
11985 /// \pre \p GlobalLSCost should account for at least as many loads as
11986 /// there is in the slices in \p LoadedSlices.
11987 static void adjustCostForPairing(SmallVectorImpl<LoadedSlice> &LoadedSlices,
11988                                  LoadedSlice::Cost &GlobalLSCost) {
11989   unsigned NumberOfSlices = LoadedSlices.size();
11990   // If there is less than 2 elements, no pairing is possible.
11991   if (NumberOfSlices < 2)
11992     return;
11993 
11994   // Sort the slices so that elements that are likely to be next to each
11995   // other in memory are next to each other in the list.
11996   std::sort(LoadedSlices.begin(), LoadedSlices.end(),
11997             [](const LoadedSlice &LHS, const LoadedSlice &RHS) {
11998     assert(LHS.Origin == RHS.Origin && "Different bases not implemented.");
11999     return LHS.getOffsetFromBase() < RHS.getOffsetFromBase();
12000   });
12001   const TargetLowering &TLI = LoadedSlices[0].DAG->getTargetLoweringInfo();
12002   // First (resp. Second) is the first (resp. Second) potentially candidate
12003   // to be placed in a paired load.
12004   const LoadedSlice *First = nullptr;
12005   const LoadedSlice *Second = nullptr;
12006   for (unsigned CurrSlice = 0; CurrSlice < NumberOfSlices; ++CurrSlice,
12007                 // Set the beginning of the pair.
12008                                                            First = Second) {
12009     Second = &LoadedSlices[CurrSlice];
12010 
12011     // If First is NULL, it means we start a new pair.
12012     // Get to the next slice.
12013     if (!First)
12014       continue;
12015 
12016     EVT LoadedType = First->getLoadedType();
12017 
12018     // If the types of the slices are different, we cannot pair them.
12019     if (LoadedType != Second->getLoadedType())
12020       continue;
12021 
12022     // Check if the target supplies paired loads for this type.
12023     unsigned RequiredAlignment = 0;
12024     if (!TLI.hasPairedLoad(LoadedType, RequiredAlignment)) {
12025       // move to the next pair, this type is hopeless.
12026       Second = nullptr;
12027       continue;
12028     }
12029     // Check if we meet the alignment requirement.
12030     if (RequiredAlignment > First->getAlignment())
12031       continue;
12032 
12033     // Check that both loads are next to each other in memory.
12034     if (!areSlicesNextToEachOther(*First, *Second))
12035       continue;
12036 
12037     assert(GlobalLSCost.Loads > 0 && "We save more loads than we created!");
12038     --GlobalLSCost.Loads;
12039     // Move to the next pair.
12040     Second = nullptr;
12041   }
12042 }
12043 
12044 /// \brief Check the profitability of all involved LoadedSlice.
12045 /// Currently, it is considered profitable if there is exactly two
12046 /// involved slices (1) which are (2) next to each other in memory, and
12047 /// whose cost (\see LoadedSlice::Cost) is smaller than the original load (3).
12048 ///
12049 /// Note: The order of the elements in \p LoadedSlices may be modified, but not
12050 /// the elements themselves.
12051 ///
12052 /// FIXME: When the cost model will be mature enough, we can relax
12053 /// constraints (1) and (2).
12054 static bool isSlicingProfitable(SmallVectorImpl<LoadedSlice> &LoadedSlices,
12055                                 const APInt &UsedBits, bool ForCodeSize) {
12056   unsigned NumberOfSlices = LoadedSlices.size();
12057   if (StressLoadSlicing)
12058     return NumberOfSlices > 1;
12059 
12060   // Check (1).
12061   if (NumberOfSlices != 2)
12062     return false;
12063 
12064   // Check (2).
12065   if (!areUsedBitsDense(UsedBits))
12066     return false;
12067 
12068   // Check (3).
12069   LoadedSlice::Cost OrigCost(ForCodeSize), GlobalSlicingCost(ForCodeSize);
12070   // The original code has one big load.
12071   OrigCost.Loads = 1;
12072   for (unsigned CurrSlice = 0; CurrSlice < NumberOfSlices; ++CurrSlice) {
12073     const LoadedSlice &LS = LoadedSlices[CurrSlice];
12074     // Accumulate the cost of all the slices.
12075     LoadedSlice::Cost SliceCost(LS, ForCodeSize);
12076     GlobalSlicingCost += SliceCost;
12077 
12078     // Account as cost in the original configuration the gain obtained
12079     // with the current slices.
12080     OrigCost.addSliceGain(LS);
12081   }
12082 
12083   // If the target supports paired load, adjust the cost accordingly.
12084   adjustCostForPairing(LoadedSlices, GlobalSlicingCost);
12085   return OrigCost > GlobalSlicingCost;
12086 }
12087 
12088 /// \brief If the given load, \p LI, is used only by trunc or trunc(lshr)
12089 /// operations, split it in the various pieces being extracted.
12090 ///
12091 /// This sort of thing is introduced by SROA.
12092 /// This slicing takes care not to insert overlapping loads.
12093 /// \pre LI is a simple load (i.e., not an atomic or volatile load).
12094 bool DAGCombiner::SliceUpLoad(SDNode *N) {
12095   if (Level < AfterLegalizeDAG)
12096     return false;
12097 
12098   LoadSDNode *LD = cast<LoadSDNode>(N);
12099   if (LD->isVolatile() || !ISD::isNormalLoad(LD) ||
12100       !LD->getValueType(0).isInteger())
12101     return false;
12102 
12103   // Keep track of already used bits to detect overlapping values.
12104   // In that case, we will just abort the transformation.
12105   APInt UsedBits(LD->getValueSizeInBits(0), 0);
12106 
12107   SmallVector<LoadedSlice, 4> LoadedSlices;
12108 
12109   // Check if this load is used as several smaller chunks of bits.
12110   // Basically, look for uses in trunc or trunc(lshr) and record a new chain
12111   // of computation for each trunc.
12112   for (SDNode::use_iterator UI = LD->use_begin(), UIEnd = LD->use_end();
12113        UI != UIEnd; ++UI) {
12114     // Skip the uses of the chain.
12115     if (UI.getUse().getResNo() != 0)
12116       continue;
12117 
12118     SDNode *User = *UI;
12119     unsigned Shift = 0;
12120 
12121     // Check if this is a trunc(lshr).
12122     if (User->getOpcode() == ISD::SRL && User->hasOneUse() &&
12123         isa<ConstantSDNode>(User->getOperand(1))) {
12124       Shift = User->getConstantOperandVal(1);
12125       User = *User->use_begin();
12126     }
12127 
12128     // At this point, User is a Truncate, iff we encountered, trunc or
12129     // trunc(lshr).
12130     if (User->getOpcode() != ISD::TRUNCATE)
12131       return false;
12132 
12133     // The width of the type must be a power of 2 and greater than 8-bits.
12134     // Otherwise the load cannot be represented in LLVM IR.
12135     // Moreover, if we shifted with a non-8-bits multiple, the slice
12136     // will be across several bytes. We do not support that.
12137     unsigned Width = User->getValueSizeInBits(0);
12138     if (Width < 8 || !isPowerOf2_32(Width) || (Shift & 0x7))
12139       return false;
12140 
12141     // Build the slice for this chain of computations.
12142     LoadedSlice LS(User, LD, Shift, &DAG);
12143     APInt CurrentUsedBits = LS.getUsedBits();
12144 
12145     // Check if this slice overlaps with another.
12146     if ((CurrentUsedBits & UsedBits) != 0)
12147       return false;
12148     // Update the bits used globally.
12149     UsedBits |= CurrentUsedBits;
12150 
12151     // Check if the new slice would be legal.
12152     if (!LS.isLegal())
12153       return false;
12154 
12155     // Record the slice.
12156     LoadedSlices.push_back(LS);
12157   }
12158 
12159   // Abort slicing if it does not seem to be profitable.
12160   if (!isSlicingProfitable(LoadedSlices, UsedBits, ForCodeSize))
12161     return false;
12162 
12163   ++SlicedLoads;
12164 
12165   // Rewrite each chain to use an independent load.
12166   // By construction, each chain can be represented by a unique load.
12167 
12168   // Prepare the argument for the new token factor for all the slices.
12169   SmallVector<SDValue, 8> ArgChains;
12170   for (SmallVectorImpl<LoadedSlice>::const_iterator
12171            LSIt = LoadedSlices.begin(),
12172            LSItEnd = LoadedSlices.end();
12173        LSIt != LSItEnd; ++LSIt) {
12174     SDValue SliceInst = LSIt->loadSlice();
12175     CombineTo(LSIt->Inst, SliceInst, true);
12176     if (SliceInst.getOpcode() != ISD::LOAD)
12177       SliceInst = SliceInst.getOperand(0);
12178     assert(SliceInst->getOpcode() == ISD::LOAD &&
12179            "It takes more than a zext to get to the loaded slice!!");
12180     ArgChains.push_back(SliceInst.getValue(1));
12181   }
12182 
12183   SDValue Chain = DAG.getNode(ISD::TokenFactor, SDLoc(LD), MVT::Other,
12184                               ArgChains);
12185   DAG.ReplaceAllUsesOfValueWith(SDValue(N, 1), Chain);
12186   AddToWorklist(Chain.getNode());
12187   return true;
12188 }
12189 
12190 /// Check to see if V is (and load (ptr), imm), where the load is having
12191 /// specific bytes cleared out.  If so, return the byte size being masked out
12192 /// and the shift amount.
12193 static std::pair<unsigned, unsigned>
12194 CheckForMaskedLoad(SDValue V, SDValue Ptr, SDValue Chain) {
12195   std::pair<unsigned, unsigned> Result(0, 0);
12196 
12197   // Check for the structure we're looking for.
12198   if (V->getOpcode() != ISD::AND ||
12199       !isa<ConstantSDNode>(V->getOperand(1)) ||
12200       !ISD::isNormalLoad(V->getOperand(0).getNode()))
12201     return Result;
12202 
12203   // Check the chain and pointer.
12204   LoadSDNode *LD = cast<LoadSDNode>(V->getOperand(0));
12205   if (LD->getBasePtr() != Ptr) return Result;  // Not from same pointer.
12206 
12207   // The store should be chained directly to the load or be an operand of a
12208   // tokenfactor.
12209   if (LD == Chain.getNode())
12210     ; // ok.
12211   else if (Chain->getOpcode() != ISD::TokenFactor)
12212     return Result; // Fail.
12213   else {
12214     bool isOk = false;
12215     for (const SDValue &ChainOp : Chain->op_values())
12216       if (ChainOp.getNode() == LD) {
12217         isOk = true;
12218         break;
12219       }
12220     if (!isOk) return Result;
12221   }
12222 
12223   // This only handles simple types.
12224   if (V.getValueType() != MVT::i16 &&
12225       V.getValueType() != MVT::i32 &&
12226       V.getValueType() != MVT::i64)
12227     return Result;
12228 
12229   // Check the constant mask.  Invert it so that the bits being masked out are
12230   // 0 and the bits being kept are 1.  Use getSExtValue so that leading bits
12231   // follow the sign bit for uniformity.
12232   uint64_t NotMask = ~cast<ConstantSDNode>(V->getOperand(1))->getSExtValue();
12233   unsigned NotMaskLZ = countLeadingZeros(NotMask);
12234   if (NotMaskLZ & 7) return Result;  // Must be multiple of a byte.
12235   unsigned NotMaskTZ = countTrailingZeros(NotMask);
12236   if (NotMaskTZ & 7) return Result;  // Must be multiple of a byte.
12237   if (NotMaskLZ == 64) return Result;  // All zero mask.
12238 
12239   // See if we have a continuous run of bits.  If so, we have 0*1+0*
12240   if (countTrailingOnes(NotMask >> NotMaskTZ) + NotMaskTZ + NotMaskLZ != 64)
12241     return Result;
12242 
12243   // Adjust NotMaskLZ down to be from the actual size of the int instead of i64.
12244   if (V.getValueType() != MVT::i64 && NotMaskLZ)
12245     NotMaskLZ -= 64-V.getValueSizeInBits();
12246 
12247   unsigned MaskedBytes = (V.getValueSizeInBits()-NotMaskLZ-NotMaskTZ)/8;
12248   switch (MaskedBytes) {
12249   case 1:
12250   case 2:
12251   case 4: break;
12252   default: return Result; // All one mask, or 5-byte mask.
12253   }
12254 
12255   // Verify that the first bit starts at a multiple of mask so that the access
12256   // is aligned the same as the access width.
12257   if (NotMaskTZ && NotMaskTZ/8 % MaskedBytes) return Result;
12258 
12259   Result.first = MaskedBytes;
12260   Result.second = NotMaskTZ/8;
12261   return Result;
12262 }
12263 
12264 /// Check to see if IVal is something that provides a value as specified by
12265 /// MaskInfo. If so, replace the specified store with a narrower store of
12266 /// truncated IVal.
12267 static SDNode *
12268 ShrinkLoadReplaceStoreWithStore(const std::pair<unsigned, unsigned> &MaskInfo,
12269                                 SDValue IVal, StoreSDNode *St,
12270                                 DAGCombiner *DC) {
12271   unsigned NumBytes = MaskInfo.first;
12272   unsigned ByteShift = MaskInfo.second;
12273   SelectionDAG &DAG = DC->getDAG();
12274 
12275   // Check to see if IVal is all zeros in the part being masked in by the 'or'
12276   // that uses this.  If not, this is not a replacement.
12277   APInt Mask = ~APInt::getBitsSet(IVal.getValueSizeInBits(),
12278                                   ByteShift*8, (ByteShift+NumBytes)*8);
12279   if (!DAG.MaskedValueIsZero(IVal, Mask)) return nullptr;
12280 
12281   // Check that it is legal on the target to do this.  It is legal if the new
12282   // VT we're shrinking to (i8/i16/i32) is legal or we're still before type
12283   // legalization.
12284   MVT VT = MVT::getIntegerVT(NumBytes*8);
12285   if (!DC->isTypeLegal(VT))
12286     return nullptr;
12287 
12288   // Okay, we can do this!  Replace the 'St' store with a store of IVal that is
12289   // shifted by ByteShift and truncated down to NumBytes.
12290   if (ByteShift) {
12291     SDLoc DL(IVal);
12292     IVal = DAG.getNode(ISD::SRL, DL, IVal.getValueType(), IVal,
12293                        DAG.getConstant(ByteShift*8, DL,
12294                                     DC->getShiftAmountTy(IVal.getValueType())));
12295   }
12296 
12297   // Figure out the offset for the store and the alignment of the access.
12298   unsigned StOffset;
12299   unsigned NewAlign = St->getAlignment();
12300 
12301   if (DAG.getDataLayout().isLittleEndian())
12302     StOffset = ByteShift;
12303   else
12304     StOffset = IVal.getValueType().getStoreSize() - ByteShift - NumBytes;
12305 
12306   SDValue Ptr = St->getBasePtr();
12307   if (StOffset) {
12308     SDLoc DL(IVal);
12309     Ptr = DAG.getNode(ISD::ADD, DL, Ptr.getValueType(),
12310                       Ptr, DAG.getConstant(StOffset, DL, Ptr.getValueType()));
12311     NewAlign = MinAlign(NewAlign, StOffset);
12312   }
12313 
12314   // Truncate down to the new size.
12315   IVal = DAG.getNode(ISD::TRUNCATE, SDLoc(IVal), VT, IVal);
12316 
12317   ++OpsNarrowed;
12318   return DAG
12319       .getStore(St->getChain(), SDLoc(St), IVal, Ptr,
12320                 St->getPointerInfo().getWithOffset(StOffset), NewAlign)
12321       .getNode();
12322 }
12323 
12324 /// Look for sequence of load / op / store where op is one of 'or', 'xor', and
12325 /// 'and' of immediates. If 'op' is only touching some of the loaded bits, try
12326 /// narrowing the load and store if it would end up being a win for performance
12327 /// or code size.
12328 SDValue DAGCombiner::ReduceLoadOpStoreWidth(SDNode *N) {
12329   StoreSDNode *ST  = cast<StoreSDNode>(N);
12330   if (ST->isVolatile())
12331     return SDValue();
12332 
12333   SDValue Chain = ST->getChain();
12334   SDValue Value = ST->getValue();
12335   SDValue Ptr   = ST->getBasePtr();
12336   EVT VT = Value.getValueType();
12337 
12338   if (ST->isTruncatingStore() || VT.isVector() || !Value.hasOneUse())
12339     return SDValue();
12340 
12341   unsigned Opc = Value.getOpcode();
12342 
12343   // If this is "store (or X, Y), P" and X is "(and (load P), cst)", where cst
12344   // is a byte mask indicating a consecutive number of bytes, check to see if
12345   // Y is known to provide just those bytes.  If so, we try to replace the
12346   // load + replace + store sequence with a single (narrower) store, which makes
12347   // the load dead.
12348   if (Opc == ISD::OR) {
12349     std::pair<unsigned, unsigned> MaskedLoad;
12350     MaskedLoad = CheckForMaskedLoad(Value.getOperand(0), Ptr, Chain);
12351     if (MaskedLoad.first)
12352       if (SDNode *NewST = ShrinkLoadReplaceStoreWithStore(MaskedLoad,
12353                                                   Value.getOperand(1), ST,this))
12354         return SDValue(NewST, 0);
12355 
12356     // Or is commutative, so try swapping X and Y.
12357     MaskedLoad = CheckForMaskedLoad(Value.getOperand(1), Ptr, Chain);
12358     if (MaskedLoad.first)
12359       if (SDNode *NewST = ShrinkLoadReplaceStoreWithStore(MaskedLoad,
12360                                                   Value.getOperand(0), ST,this))
12361         return SDValue(NewST, 0);
12362   }
12363 
12364   if ((Opc != ISD::OR && Opc != ISD::XOR && Opc != ISD::AND) ||
12365       Value.getOperand(1).getOpcode() != ISD::Constant)
12366     return SDValue();
12367 
12368   SDValue N0 = Value.getOperand(0);
12369   if (ISD::isNormalLoad(N0.getNode()) && N0.hasOneUse() &&
12370       Chain == SDValue(N0.getNode(), 1)) {
12371     LoadSDNode *LD = cast<LoadSDNode>(N0);
12372     if (LD->getBasePtr() != Ptr ||
12373         LD->getPointerInfo().getAddrSpace() !=
12374         ST->getPointerInfo().getAddrSpace())
12375       return SDValue();
12376 
12377     // Find the type to narrow it the load / op / store to.
12378     SDValue N1 = Value.getOperand(1);
12379     unsigned BitWidth = N1.getValueSizeInBits();
12380     APInt Imm = cast<ConstantSDNode>(N1)->getAPIntValue();
12381     if (Opc == ISD::AND)
12382       Imm ^= APInt::getAllOnesValue(BitWidth);
12383     if (Imm == 0 || Imm.isAllOnesValue())
12384       return SDValue();
12385     unsigned ShAmt = Imm.countTrailingZeros();
12386     unsigned MSB = BitWidth - Imm.countLeadingZeros() - 1;
12387     unsigned NewBW = NextPowerOf2(MSB - ShAmt);
12388     EVT NewVT = EVT::getIntegerVT(*DAG.getContext(), NewBW);
12389     // The narrowing should be profitable, the load/store operation should be
12390     // legal (or custom) and the store size should be equal to the NewVT width.
12391     while (NewBW < BitWidth &&
12392            (NewVT.getStoreSizeInBits() != NewBW ||
12393             !TLI.isOperationLegalOrCustom(Opc, NewVT) ||
12394             !TLI.isNarrowingProfitable(VT, NewVT))) {
12395       NewBW = NextPowerOf2(NewBW);
12396       NewVT = EVT::getIntegerVT(*DAG.getContext(), NewBW);
12397     }
12398     if (NewBW >= BitWidth)
12399       return SDValue();
12400 
12401     // If the lsb changed does not start at the type bitwidth boundary,
12402     // start at the previous one.
12403     if (ShAmt % NewBW)
12404       ShAmt = (((ShAmt + NewBW - 1) / NewBW) * NewBW) - NewBW;
12405     APInt Mask = APInt::getBitsSet(BitWidth, ShAmt,
12406                                    std::min(BitWidth, ShAmt + NewBW));
12407     if ((Imm & Mask) == Imm) {
12408       APInt NewImm = (Imm & Mask).lshr(ShAmt).trunc(NewBW);
12409       if (Opc == ISD::AND)
12410         NewImm ^= APInt::getAllOnesValue(NewBW);
12411       uint64_t PtrOff = ShAmt / 8;
12412       // For big endian targets, we need to adjust the offset to the pointer to
12413       // load the correct bytes.
12414       if (DAG.getDataLayout().isBigEndian())
12415         PtrOff = (BitWidth + 7 - NewBW) / 8 - PtrOff;
12416 
12417       unsigned NewAlign = MinAlign(LD->getAlignment(), PtrOff);
12418       Type *NewVTTy = NewVT.getTypeForEVT(*DAG.getContext());
12419       if (NewAlign < DAG.getDataLayout().getABITypeAlignment(NewVTTy))
12420         return SDValue();
12421 
12422       SDValue NewPtr = DAG.getNode(ISD::ADD, SDLoc(LD),
12423                                    Ptr.getValueType(), Ptr,
12424                                    DAG.getConstant(PtrOff, SDLoc(LD),
12425                                                    Ptr.getValueType()));
12426       SDValue NewLD =
12427           DAG.getLoad(NewVT, SDLoc(N0), LD->getChain(), NewPtr,
12428                       LD->getPointerInfo().getWithOffset(PtrOff), NewAlign,
12429                       LD->getMemOperand()->getFlags(), LD->getAAInfo());
12430       SDValue NewVal = DAG.getNode(Opc, SDLoc(Value), NewVT, NewLD,
12431                                    DAG.getConstant(NewImm, SDLoc(Value),
12432                                                    NewVT));
12433       SDValue NewST =
12434           DAG.getStore(Chain, SDLoc(N), NewVal, NewPtr,
12435                        ST->getPointerInfo().getWithOffset(PtrOff), NewAlign);
12436 
12437       AddToWorklist(NewPtr.getNode());
12438       AddToWorklist(NewLD.getNode());
12439       AddToWorklist(NewVal.getNode());
12440       WorklistRemover DeadNodes(*this);
12441       DAG.ReplaceAllUsesOfValueWith(N0.getValue(1), NewLD.getValue(1));
12442       ++OpsNarrowed;
12443       return NewST;
12444     }
12445   }
12446 
12447   return SDValue();
12448 }
12449 
12450 /// For a given floating point load / store pair, if the load value isn't used
12451 /// by any other operations, then consider transforming the pair to integer
12452 /// load / store operations if the target deems the transformation profitable.
12453 SDValue DAGCombiner::TransformFPLoadStorePair(SDNode *N) {
12454   StoreSDNode *ST  = cast<StoreSDNode>(N);
12455   SDValue Chain = ST->getChain();
12456   SDValue Value = ST->getValue();
12457   if (ISD::isNormalStore(ST) && ISD::isNormalLoad(Value.getNode()) &&
12458       Value.hasOneUse() &&
12459       Chain == SDValue(Value.getNode(), 1)) {
12460     LoadSDNode *LD = cast<LoadSDNode>(Value);
12461     EVT VT = LD->getMemoryVT();
12462     if (!VT.isFloatingPoint() ||
12463         VT != ST->getMemoryVT() ||
12464         LD->isNonTemporal() ||
12465         ST->isNonTemporal() ||
12466         LD->getPointerInfo().getAddrSpace() != 0 ||
12467         ST->getPointerInfo().getAddrSpace() != 0)
12468       return SDValue();
12469 
12470     EVT IntVT = EVT::getIntegerVT(*DAG.getContext(), VT.getSizeInBits());
12471     if (!TLI.isOperationLegal(ISD::LOAD, IntVT) ||
12472         !TLI.isOperationLegal(ISD::STORE, IntVT) ||
12473         !TLI.isDesirableToTransformToIntegerOp(ISD::LOAD, VT) ||
12474         !TLI.isDesirableToTransformToIntegerOp(ISD::STORE, VT))
12475       return SDValue();
12476 
12477     unsigned LDAlign = LD->getAlignment();
12478     unsigned STAlign = ST->getAlignment();
12479     Type *IntVTTy = IntVT.getTypeForEVT(*DAG.getContext());
12480     unsigned ABIAlign = DAG.getDataLayout().getABITypeAlignment(IntVTTy);
12481     if (LDAlign < ABIAlign || STAlign < ABIAlign)
12482       return SDValue();
12483 
12484     SDValue NewLD =
12485         DAG.getLoad(IntVT, SDLoc(Value), LD->getChain(), LD->getBasePtr(),
12486                     LD->getPointerInfo(), LDAlign);
12487 
12488     SDValue NewST =
12489         DAG.getStore(NewLD.getValue(1), SDLoc(N), NewLD, ST->getBasePtr(),
12490                      ST->getPointerInfo(), STAlign);
12491 
12492     AddToWorklist(NewLD.getNode());
12493     AddToWorklist(NewST.getNode());
12494     WorklistRemover DeadNodes(*this);
12495     DAG.ReplaceAllUsesOfValueWith(Value.getValue(1), NewLD.getValue(1));
12496     ++LdStFP2Int;
12497     return NewST;
12498   }
12499 
12500   return SDValue();
12501 }
12502 
12503 // This is a helper function for visitMUL to check the profitability
12504 // of folding (mul (add x, c1), c2) -> (add (mul x, c2), c1*c2).
12505 // MulNode is the original multiply, AddNode is (add x, c1),
12506 // and ConstNode is c2.
12507 //
12508 // If the (add x, c1) has multiple uses, we could increase
12509 // the number of adds if we make this transformation.
12510 // It would only be worth doing this if we can remove a
12511 // multiply in the process. Check for that here.
12512 // To illustrate:
12513 //     (A + c1) * c3
12514 //     (A + c2) * c3
12515 // We're checking for cases where we have common "c3 * A" expressions.
12516 bool DAGCombiner::isMulAddWithConstProfitable(SDNode *MulNode,
12517                                               SDValue &AddNode,
12518                                               SDValue &ConstNode) {
12519   APInt Val;
12520 
12521   // If the add only has one use, this would be OK to do.
12522   if (AddNode.getNode()->hasOneUse())
12523     return true;
12524 
12525   // Walk all the users of the constant with which we're multiplying.
12526   for (SDNode *Use : ConstNode->uses()) {
12527     if (Use == MulNode) // This use is the one we're on right now. Skip it.
12528       continue;
12529 
12530     if (Use->getOpcode() == ISD::MUL) { // We have another multiply use.
12531       SDNode *OtherOp;
12532       SDNode *MulVar = AddNode.getOperand(0).getNode();
12533 
12534       // OtherOp is what we're multiplying against the constant.
12535       if (Use->getOperand(0) == ConstNode)
12536         OtherOp = Use->getOperand(1).getNode();
12537       else
12538         OtherOp = Use->getOperand(0).getNode();
12539 
12540       // Check to see if multiply is with the same operand of our "add".
12541       //
12542       //     ConstNode  = CONST
12543       //     Use = ConstNode * A  <-- visiting Use. OtherOp is A.
12544       //     ...
12545       //     AddNode  = (A + c1)  <-- MulVar is A.
12546       //         = AddNode * ConstNode   <-- current visiting instruction.
12547       //
12548       // If we make this transformation, we will have a common
12549       // multiply (ConstNode * A) that we can save.
12550       if (OtherOp == MulVar)
12551         return true;
12552 
12553       // Now check to see if a future expansion will give us a common
12554       // multiply.
12555       //
12556       //     ConstNode  = CONST
12557       //     AddNode    = (A + c1)
12558       //     ...   = AddNode * ConstNode <-- current visiting instruction.
12559       //     ...
12560       //     OtherOp = (A + c2)
12561       //     Use     = OtherOp * ConstNode <-- visiting Use.
12562       //
12563       // If we make this transformation, we will have a common
12564       // multiply (CONST * A) after we also do the same transformation
12565       // to the "t2" instruction.
12566       if (OtherOp->getOpcode() == ISD::ADD &&
12567           DAG.isConstantIntBuildVectorOrConstantInt(OtherOp->getOperand(1)) &&
12568           OtherOp->getOperand(0).getNode() == MulVar)
12569         return true;
12570     }
12571   }
12572 
12573   // Didn't find a case where this would be profitable.
12574   return false;
12575 }
12576 
12577 static SDValue peekThroughBitcast(SDValue V) {
12578   while (V.getOpcode() == ISD::BITCAST)
12579     V = V.getOperand(0);
12580   return V;
12581 }
12582 
12583 SDValue DAGCombiner::getMergeStoreChains(SmallVectorImpl<MemOpLink> &StoreNodes,
12584                                          unsigned NumStores) {
12585   SmallVector<SDValue, 8> Chains;
12586   SmallPtrSet<const SDNode *, 8> Visited;
12587   SDLoc StoreDL(StoreNodes[0].MemNode);
12588 
12589   for (unsigned i = 0; i < NumStores; ++i) {
12590     Visited.insert(StoreNodes[i].MemNode);
12591   }
12592 
12593   // don't include nodes that are children
12594   for (unsigned i = 0; i < NumStores; ++i) {
12595     if (Visited.count(StoreNodes[i].MemNode->getChain().getNode()) == 0)
12596       Chains.push_back(StoreNodes[i].MemNode->getChain());
12597   }
12598 
12599   assert(Chains.size() > 0 && "Chain should have generated a chain");
12600   return DAG.getNode(ISD::TokenFactor, StoreDL, MVT::Other, Chains);
12601 }
12602 
12603 bool DAGCombiner::MergeStoresOfConstantsOrVecElts(
12604     SmallVectorImpl<MemOpLink> &StoreNodes, EVT MemVT, unsigned NumStores,
12605     bool IsConstantSrc, bool UseVector, bool UseTrunc) {
12606   // Make sure we have something to merge.
12607   if (NumStores < 2)
12608     return false;
12609 
12610   // The latest Node in the DAG.
12611   SDLoc DL(StoreNodes[0].MemNode);
12612 
12613   int64_t ElementSizeBytes = MemVT.getSizeInBits() / 8;
12614   unsigned SizeInBits = NumStores * ElementSizeBytes * 8;
12615   unsigned NumMemElts = MemVT.isVector() ? MemVT.getVectorNumElements() : 1;
12616 
12617   EVT StoreTy;
12618   if (UseVector) {
12619     unsigned Elts = NumStores * NumMemElts;
12620     // Get the type for the merged vector store.
12621     StoreTy = EVT::getVectorVT(*DAG.getContext(), MemVT.getScalarType(), Elts);
12622   } else
12623     StoreTy = EVT::getIntegerVT(*DAG.getContext(), SizeInBits);
12624 
12625   SDValue StoredVal;
12626   if (UseVector) {
12627     if (IsConstantSrc) {
12628       SmallVector<SDValue, 8> BuildVector;
12629       for (unsigned I = 0; I != NumStores; ++I) {
12630         StoreSDNode *St = cast<StoreSDNode>(StoreNodes[I].MemNode);
12631         SDValue Val = St->getValue();
12632         // If constant is of the wrong type, convert it now.
12633         if (MemVT != Val.getValueType()) {
12634           Val = peekThroughBitcast(Val);
12635           // Deal with constants of wrong size.
12636           if (ElementSizeBytes * 8 != Val.getValueSizeInBits()) {
12637             EVT IntMemVT =
12638                 EVT::getIntegerVT(*DAG.getContext(), MemVT.getSizeInBits());
12639             if (auto *CFP = dyn_cast<ConstantFPSDNode>(Val))
12640               Val = DAG.getConstant(
12641                   CFP->getValueAPF().bitcastToAPInt().zextOrTrunc(
12642                       8 * ElementSizeBytes),
12643                   SDLoc(CFP), IntMemVT);
12644             else if (auto *C = dyn_cast<ConstantSDNode>(Val))
12645               Val = DAG.getConstant(
12646                   C->getAPIntValue().zextOrTrunc(8 * ElementSizeBytes),
12647                   SDLoc(C), IntMemVT);
12648           }
12649           // Make sure correctly size type is the correct type.
12650           Val = DAG.getBitcast(MemVT, Val);
12651         }
12652         BuildVector.push_back(Val);
12653       }
12654       StoredVal = DAG.getNode(MemVT.isVector() ? ISD::CONCAT_VECTORS
12655                                                : ISD::BUILD_VECTOR,
12656                               DL, StoreTy, BuildVector);
12657     } else {
12658       SmallVector<SDValue, 8> Ops;
12659       for (unsigned i = 0; i < NumStores; ++i) {
12660         StoreSDNode *St = cast<StoreSDNode>(StoreNodes[i].MemNode);
12661         SDValue Val = peekThroughBitcast(St->getValue());
12662         // All operands of BUILD_VECTOR / CONCAT_VECTOR must be of
12663         // type MemVT. If the underlying value is not the correct
12664         // type, but it is an extraction of an appropriate vector we
12665         // can recast Val to be of the correct type. This may require
12666         // converting between EXTRACT_VECTOR_ELT and
12667         // EXTRACT_SUBVECTOR.
12668         if ((MemVT != Val.getValueType()) &&
12669             (Val.getOpcode() == ISD::EXTRACT_VECTOR_ELT ||
12670              Val.getOpcode() == ISD::EXTRACT_SUBVECTOR)) {
12671           SDValue Vec = Val.getOperand(0);
12672           EVT MemVTScalarTy = MemVT.getScalarType();
12673           // We may need to add a bitcast here to get types to line up.
12674           if (MemVTScalarTy != Vec.getValueType()) {
12675             unsigned Elts = Vec.getValueType().getSizeInBits() /
12676                             MemVTScalarTy.getSizeInBits();
12677             EVT NewVecTy =
12678                 EVT::getVectorVT(*DAG.getContext(), MemVTScalarTy, Elts);
12679             Vec = DAG.getBitcast(NewVecTy, Vec);
12680           }
12681           auto OpC = (MemVT.isVector()) ? ISD::EXTRACT_SUBVECTOR
12682                                         : ISD::EXTRACT_VECTOR_ELT;
12683           Val = DAG.getNode(OpC, SDLoc(Val), MemVT, Vec, Val.getOperand(1));
12684         }
12685         Ops.push_back(Val);
12686       }
12687 
12688       // Build the extracted vector elements back into a vector.
12689       StoredVal = DAG.getNode(MemVT.isVector() ? ISD::CONCAT_VECTORS
12690                                                : ISD::BUILD_VECTOR,
12691                               DL, StoreTy, Ops);
12692     }
12693   } else {
12694     // We should always use a vector store when merging extracted vector
12695     // elements, so this path implies a store of constants.
12696     assert(IsConstantSrc && "Merged vector elements should use vector store");
12697 
12698     APInt StoreInt(SizeInBits, 0);
12699 
12700     // Construct a single integer constant which is made of the smaller
12701     // constant inputs.
12702     bool IsLE = DAG.getDataLayout().isLittleEndian();
12703     for (unsigned i = 0; i < NumStores; ++i) {
12704       unsigned Idx = IsLE ? (NumStores - 1 - i) : i;
12705       StoreSDNode *St  = cast<StoreSDNode>(StoreNodes[Idx].MemNode);
12706 
12707       SDValue Val = St->getValue();
12708       StoreInt <<= ElementSizeBytes * 8;
12709       if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Val)) {
12710         StoreInt |= C->getAPIntValue().zextOrTrunc(SizeInBits);
12711       } else if (ConstantFPSDNode *C = dyn_cast<ConstantFPSDNode>(Val)) {
12712         StoreInt |= C->getValueAPF().bitcastToAPInt().zextOrTrunc(SizeInBits);
12713       } else {
12714         llvm_unreachable("Invalid constant element type");
12715       }
12716     }
12717 
12718     // Create the new Load and Store operations.
12719     StoredVal = DAG.getConstant(StoreInt, DL, StoreTy);
12720   }
12721 
12722   LSBaseSDNode *FirstInChain = StoreNodes[0].MemNode;
12723   SDValue NewChain = getMergeStoreChains(StoreNodes, NumStores);
12724 
12725   // make sure we use trunc store if it's necessary to be legal.
12726   SDValue NewStore;
12727   if (!UseTrunc) {
12728     NewStore = DAG.getStore(NewChain, DL, StoredVal, FirstInChain->getBasePtr(),
12729                             FirstInChain->getPointerInfo(),
12730                             FirstInChain->getAlignment());
12731   } else { // Must be realized as a trunc store
12732     EVT LegalizedStoredValueTy =
12733         TLI.getTypeToTransformTo(*DAG.getContext(), StoredVal.getValueType());
12734     unsigned LegalizedStoreSize = LegalizedStoredValueTy.getSizeInBits();
12735     ConstantSDNode *C = cast<ConstantSDNode>(StoredVal);
12736     SDValue ExtendedStoreVal =
12737         DAG.getConstant(C->getAPIntValue().zextOrTrunc(LegalizedStoreSize), DL,
12738                         LegalizedStoredValueTy);
12739     NewStore = DAG.getTruncStore(
12740         NewChain, DL, ExtendedStoreVal, FirstInChain->getBasePtr(),
12741         FirstInChain->getPointerInfo(), StoredVal.getValueType() /*TVT*/,
12742         FirstInChain->getAlignment(),
12743         FirstInChain->getMemOperand()->getFlags());
12744   }
12745 
12746   // Replace all merged stores with the new store.
12747   for (unsigned i = 0; i < NumStores; ++i)
12748     CombineTo(StoreNodes[i].MemNode, NewStore);
12749 
12750   AddToWorklist(NewChain.getNode());
12751   return true;
12752 }
12753 
12754 void DAGCombiner::getStoreMergeCandidates(
12755     StoreSDNode *St, SmallVectorImpl<MemOpLink> &StoreNodes) {
12756   // This holds the base pointer, index, and the offset in bytes from the base
12757   // pointer.
12758   BaseIndexOffset BasePtr = BaseIndexOffset::match(St->getBasePtr(), DAG);
12759   EVT MemVT = St->getMemoryVT();
12760 
12761   SDValue Val = peekThroughBitcast(St->getValue());
12762   // We must have a base and an offset.
12763   if (!BasePtr.getBase().getNode())
12764     return;
12765 
12766   // Do not handle stores to undef base pointers.
12767   if (BasePtr.getBase().isUndef())
12768     return;
12769 
12770   bool IsConstantSrc = isa<ConstantSDNode>(Val) || isa<ConstantFPSDNode>(Val);
12771   bool IsExtractVecSrc = (Val.getOpcode() == ISD::EXTRACT_VECTOR_ELT ||
12772                           Val.getOpcode() == ISD::EXTRACT_SUBVECTOR);
12773   bool IsLoadSrc = isa<LoadSDNode>(Val);
12774   BaseIndexOffset LBasePtr;
12775   // Match on loadbaseptr if relevant.
12776   EVT LoadVT;
12777   if (IsLoadSrc) {
12778     auto *Ld = cast<LoadSDNode>(Val);
12779     LBasePtr = BaseIndexOffset::match(Ld->getBasePtr(), DAG);
12780     LoadVT = Ld->getMemoryVT();
12781     // Load and store should be the same type.
12782     if (MemVT != LoadVT)
12783       return;
12784   }
12785   auto CandidateMatch = [&](StoreSDNode *Other, BaseIndexOffset &Ptr,
12786                             int64_t &Offset) -> bool {
12787     if (Other->isVolatile() || Other->isIndexed())
12788       return false;
12789     SDValue Val = peekThroughBitcast(Other->getValue());
12790     // Allow merging constants of different types as integers.
12791     bool NoTypeMatch = (MemVT.isInteger()) ? !MemVT.bitsEq(Other->getMemoryVT())
12792                                            : Other->getMemoryVT() != MemVT;
12793     if (IsLoadSrc) {
12794       if (NoTypeMatch)
12795         return false;
12796       // The Load's Base Ptr must also match
12797       if (LoadSDNode *OtherLd = dyn_cast<LoadSDNode>(Val)) {
12798         auto LPtr = BaseIndexOffset::match(OtherLd->getBasePtr(), DAG);
12799         if (LoadVT != OtherLd->getMemoryVT())
12800           return false;
12801         if (!(LBasePtr.equalBaseIndex(LPtr, DAG)))
12802           return false;
12803       } else
12804         return false;
12805     }
12806     if (IsConstantSrc) {
12807       if (NoTypeMatch)
12808         return false;
12809       if (!(isa<ConstantSDNode>(Val) || isa<ConstantFPSDNode>(Val)))
12810         return false;
12811     }
12812     if (IsExtractVecSrc) {
12813       // Do not merge truncated stores here.
12814       if (Other->isTruncatingStore())
12815         return false;
12816       if (!MemVT.bitsEq(Val.getValueType()))
12817         return false;
12818       if (Val.getOpcode() != ISD::EXTRACT_VECTOR_ELT &&
12819           Val.getOpcode() != ISD::EXTRACT_SUBVECTOR)
12820         return false;
12821     }
12822     Ptr = BaseIndexOffset::match(Other->getBasePtr(), DAG);
12823     return (BasePtr.equalBaseIndex(Ptr, DAG, Offset));
12824   };
12825 
12826   // We looking for a root node which is an ancestor to all mergable
12827   // stores. We search up through a load, to our root and then down
12828   // through all children. For instance we will find Store{1,2,3} if
12829   // St is Store1, Store2. or Store3 where the root is not a load
12830   // which always true for nonvolatile ops. TODO: Expand
12831   // the search to find all valid candidates through multiple layers of loads.
12832   //
12833   // Root
12834   // |-------|-------|
12835   // Load    Load    Store3
12836   // |       |
12837   // Store1   Store2
12838   //
12839   // FIXME: We should be able to climb and
12840   // descend TokenFactors to find candidates as well.
12841 
12842   SDNode *RootNode = (St->getChain()).getNode();
12843 
12844   if (LoadSDNode *Ldn = dyn_cast<LoadSDNode>(RootNode)) {
12845     RootNode = Ldn->getChain().getNode();
12846     for (auto I = RootNode->use_begin(), E = RootNode->use_end(); I != E; ++I)
12847       if (I.getOperandNo() == 0 && isa<LoadSDNode>(*I)) // walk down chain
12848         for (auto I2 = (*I)->use_begin(), E2 = (*I)->use_end(); I2 != E2; ++I2)
12849           if (I2.getOperandNo() == 0)
12850             if (StoreSDNode *OtherST = dyn_cast<StoreSDNode>(*I2)) {
12851               BaseIndexOffset Ptr;
12852               int64_t PtrDiff;
12853               if (CandidateMatch(OtherST, Ptr, PtrDiff))
12854                 StoreNodes.push_back(MemOpLink(OtherST, PtrDiff));
12855             }
12856   } else
12857     for (auto I = RootNode->use_begin(), E = RootNode->use_end(); I != E; ++I)
12858       if (I.getOperandNo() == 0)
12859         if (StoreSDNode *OtherST = dyn_cast<StoreSDNode>(*I)) {
12860           BaseIndexOffset Ptr;
12861           int64_t PtrDiff;
12862           if (CandidateMatch(OtherST, Ptr, PtrDiff))
12863             StoreNodes.push_back(MemOpLink(OtherST, PtrDiff));
12864         }
12865 }
12866 
12867 // We need to check that merging these stores does not cause a loop in
12868 // the DAG. Any store candidate may depend on another candidate
12869 // indirectly through its operand (we already consider dependencies
12870 // through the chain). Check in parallel by searching up from
12871 // non-chain operands of candidates.
12872 bool DAGCombiner::checkMergeStoreCandidatesForDependencies(
12873     SmallVectorImpl<MemOpLink> &StoreNodes, unsigned NumStores) {
12874   // FIXME: We should be able to truncate a full search of
12875   // predecessors by doing a BFS and keeping tabs the originating
12876   // stores from which worklist nodes come from in a similar way to
12877   // TokenFactor simplfication.
12878 
12879   SmallPtrSet<const SDNode *, 16> Visited;
12880   SmallVector<const SDNode *, 8> Worklist;
12881   unsigned int Max = 8192;
12882   // Search Ops of store candidates.
12883   for (unsigned i = 0; i < NumStores; ++i) {
12884     SDNode *n = StoreNodes[i].MemNode;
12885     // Potential loops may happen only through non-chain operands
12886     for (unsigned j = 1; j < n->getNumOperands(); ++j)
12887       Worklist.push_back(n->getOperand(j).getNode());
12888   }
12889   // Search through DAG. We can stop early if we find a store node.
12890   for (unsigned i = 0; i < NumStores; ++i) {
12891     if (SDNode::hasPredecessorHelper(StoreNodes[i].MemNode, Visited, Worklist,
12892                                      Max))
12893       return false;
12894     // Check if we ended early, failing conservatively if so.
12895     if (Visited.size() >= Max)
12896       return false;
12897   }
12898   return true;
12899 }
12900 
12901 bool DAGCombiner::MergeConsecutiveStores(StoreSDNode *St) {
12902   if (OptLevel == CodeGenOpt::None)
12903     return false;
12904 
12905   EVT MemVT = St->getMemoryVT();
12906   int64_t ElementSizeBytes = MemVT.getSizeInBits() / 8;
12907   unsigned NumMemElts = MemVT.isVector() ? MemVT.getVectorNumElements() : 1;
12908 
12909   if (MemVT.getSizeInBits() * 2 > MaximumLegalStoreInBits)
12910     return false;
12911 
12912   bool NoVectors = DAG.getMachineFunction().getFunction()->hasFnAttribute(
12913       Attribute::NoImplicitFloat);
12914 
12915   // This function cannot currently deal with non-byte-sized memory sizes.
12916   if (ElementSizeBytes * 8 != MemVT.getSizeInBits())
12917     return false;
12918 
12919   if (!MemVT.isSimple())
12920     return false;
12921 
12922   // Perform an early exit check. Do not bother looking at stored values that
12923   // are not constants, loads, or extracted vector elements.
12924   SDValue StoredVal = peekThroughBitcast(St->getValue());
12925   bool IsLoadSrc = isa<LoadSDNode>(StoredVal);
12926   bool IsConstantSrc = isa<ConstantSDNode>(StoredVal) ||
12927                        isa<ConstantFPSDNode>(StoredVal);
12928   bool IsExtractVecSrc = (StoredVal.getOpcode() == ISD::EXTRACT_VECTOR_ELT ||
12929                           StoredVal.getOpcode() == ISD::EXTRACT_SUBVECTOR);
12930 
12931   if (!IsConstantSrc && !IsLoadSrc && !IsExtractVecSrc)
12932     return false;
12933 
12934   SmallVector<MemOpLink, 8> StoreNodes;
12935   // Find potential store merge candidates by searching through chain sub-DAG
12936   getStoreMergeCandidates(St, StoreNodes);
12937 
12938   // Check if there is anything to merge.
12939   if (StoreNodes.size() < 2)
12940     return false;
12941 
12942   // Sort the memory operands according to their distance from the
12943   // base pointer.
12944   std::sort(StoreNodes.begin(), StoreNodes.end(),
12945             [](MemOpLink LHS, MemOpLink RHS) {
12946               return LHS.OffsetFromBase < RHS.OffsetFromBase;
12947             });
12948 
12949   // Store Merge attempts to merge the lowest stores. This generally
12950   // works out as if successful, as the remaining stores are checked
12951   // after the first collection of stores is merged. However, in the
12952   // case that a non-mergeable store is found first, e.g., {p[-2],
12953   // p[0], p[1], p[2], p[3]}, we would fail and miss the subsequent
12954   // mergeable cases. To prevent this, we prune such stores from the
12955   // front of StoreNodes here.
12956 
12957   bool RV = false;
12958   while (StoreNodes.size() > 1) {
12959     unsigned StartIdx = 0;
12960     while ((StartIdx + 1 < StoreNodes.size()) &&
12961            StoreNodes[StartIdx].OffsetFromBase + ElementSizeBytes !=
12962                StoreNodes[StartIdx + 1].OffsetFromBase)
12963       ++StartIdx;
12964 
12965     // Bail if we don't have enough candidates to merge.
12966     if (StartIdx + 1 >= StoreNodes.size())
12967       return RV;
12968 
12969     if (StartIdx)
12970       StoreNodes.erase(StoreNodes.begin(), StoreNodes.begin() + StartIdx);
12971 
12972     // Scan the memory operations on the chain and find the first
12973     // non-consecutive store memory address.
12974     unsigned NumConsecutiveStores = 1;
12975     int64_t StartAddress = StoreNodes[0].OffsetFromBase;
12976     // Check that the addresses are consecutive starting from the second
12977     // element in the list of stores.
12978     for (unsigned i = 1, e = StoreNodes.size(); i < e; ++i) {
12979       int64_t CurrAddress = StoreNodes[i].OffsetFromBase;
12980       if (CurrAddress - StartAddress != (ElementSizeBytes * i))
12981         break;
12982       NumConsecutiveStores = i + 1;
12983     }
12984 
12985     if (NumConsecutiveStores < 2) {
12986       StoreNodes.erase(StoreNodes.begin(),
12987                        StoreNodes.begin() + NumConsecutiveStores);
12988       continue;
12989     }
12990 
12991     // Check that we can merge these candidates without causing a cycle
12992     if (!checkMergeStoreCandidatesForDependencies(StoreNodes,
12993                                                   NumConsecutiveStores)) {
12994       StoreNodes.erase(StoreNodes.begin(),
12995                        StoreNodes.begin() + NumConsecutiveStores);
12996       continue;
12997     }
12998 
12999     // The node with the lowest store address.
13000     LLVMContext &Context = *DAG.getContext();
13001     const DataLayout &DL = DAG.getDataLayout();
13002 
13003     // Store the constants into memory as one consecutive store.
13004     if (IsConstantSrc) {
13005       LSBaseSDNode *FirstInChain = StoreNodes[0].MemNode;
13006       unsigned FirstStoreAS = FirstInChain->getAddressSpace();
13007       unsigned FirstStoreAlign = FirstInChain->getAlignment();
13008       unsigned LastLegalType = 1;
13009       unsigned LastLegalVectorType = 1;
13010       bool LastIntegerTrunc = false;
13011       bool NonZero = false;
13012       unsigned FirstZeroAfterNonZero = NumConsecutiveStores;
13013       for (unsigned i = 0; i < NumConsecutiveStores; ++i) {
13014         StoreSDNode *ST = cast<StoreSDNode>(StoreNodes[i].MemNode);
13015         SDValue StoredVal = ST->getValue();
13016         bool IsElementZero = false;
13017         if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(StoredVal))
13018           IsElementZero = C->isNullValue();
13019         else if (ConstantFPSDNode *C = dyn_cast<ConstantFPSDNode>(StoredVal))
13020           IsElementZero = C->getConstantFPValue()->isNullValue();
13021         if (IsElementZero) {
13022           if (NonZero && FirstZeroAfterNonZero == NumConsecutiveStores)
13023             FirstZeroAfterNonZero = i;
13024         }
13025         NonZero |= !IsElementZero;
13026 
13027         // Find a legal type for the constant store.
13028         unsigned SizeInBits = (i + 1) * ElementSizeBytes * 8;
13029         EVT StoreTy = EVT::getIntegerVT(Context, SizeInBits);
13030         bool IsFast = false;
13031         if (TLI.isTypeLegal(StoreTy) &&
13032             TLI.canMergeStoresTo(FirstStoreAS, StoreTy, DAG) &&
13033             TLI.allowsMemoryAccess(Context, DL, StoreTy, FirstStoreAS,
13034                                    FirstStoreAlign, &IsFast) &&
13035             IsFast) {
13036           LastIntegerTrunc = false;
13037           LastLegalType = i + 1;
13038           // Or check whether a truncstore is legal.
13039         } else if (TLI.getTypeAction(Context, StoreTy) ==
13040                    TargetLowering::TypePromoteInteger) {
13041           EVT LegalizedStoredValueTy =
13042               TLI.getTypeToTransformTo(Context, StoredVal.getValueType());
13043           if (TLI.isTruncStoreLegal(LegalizedStoredValueTy, StoreTy) &&
13044               TLI.canMergeStoresTo(FirstStoreAS, LegalizedStoredValueTy, DAG) &&
13045               TLI.allowsMemoryAccess(Context, DL, StoreTy, FirstStoreAS,
13046                                      FirstStoreAlign, &IsFast) &&
13047               IsFast) {
13048             LastIntegerTrunc = true;
13049             LastLegalType = i + 1;
13050           }
13051         }
13052 
13053         // We only use vectors if the constant is known to be zero or the target
13054         // allows it and the function is not marked with the noimplicitfloat
13055         // attribute.
13056         if ((!NonZero ||
13057              TLI.storeOfVectorConstantIsCheap(MemVT, i + 1, FirstStoreAS)) &&
13058             !NoVectors) {
13059           // Find a legal type for the vector store.
13060           unsigned Elts = (i + 1) * NumMemElts;
13061           EVT Ty = EVT::getVectorVT(Context, MemVT.getScalarType(), Elts);
13062           if (TLI.isTypeLegal(Ty) &&
13063               TLI.canMergeStoresTo(FirstStoreAS, Ty, DAG) &&
13064               TLI.allowsMemoryAccess(Context, DL, Ty, FirstStoreAS,
13065                                      FirstStoreAlign, &IsFast) &&
13066               IsFast)
13067             LastLegalVectorType = i + 1;
13068         }
13069       }
13070 
13071       bool UseVector = (LastLegalVectorType > LastLegalType) && !NoVectors;
13072       unsigned NumElem = (UseVector) ? LastLegalVectorType : LastLegalType;
13073 
13074       // Check if we found a legal integer type that creates a meaningful merge.
13075       if (NumElem < 2) {
13076         // We know that candidate stores are in order and of correct
13077         // shape. While there is no mergeable sequence from the
13078         // beginning one may start later in the sequence. The only
13079         // reason a merge of size N could have failed where another of
13080         // the same size would not have, is if the alignment has
13081         // improved or we've dropped a non-zero value. Drop as many
13082         // candidates as we can here.
13083         unsigned NumSkip = 1;
13084         while (
13085             (NumSkip < NumConsecutiveStores) &&
13086             (NumSkip < FirstZeroAfterNonZero) &&
13087             (StoreNodes[NumSkip].MemNode->getAlignment() <= FirstStoreAlign)) {
13088           NumSkip++;
13089         }
13090         StoreNodes.erase(StoreNodes.begin(), StoreNodes.begin() + NumSkip);
13091         continue;
13092       }
13093 
13094       bool Merged = MergeStoresOfConstantsOrVecElts(
13095           StoreNodes, MemVT, NumElem, true, UseVector, LastIntegerTrunc);
13096       RV |= Merged;
13097 
13098       // Remove merged stores for next iteration.
13099       StoreNodes.erase(StoreNodes.begin(), StoreNodes.begin() + NumElem);
13100       continue;
13101     }
13102 
13103     // When extracting multiple vector elements, try to store them
13104     // in one vector store rather than a sequence of scalar stores.
13105     if (IsExtractVecSrc) {
13106       LSBaseSDNode *FirstInChain = StoreNodes[0].MemNode;
13107       unsigned FirstStoreAS = FirstInChain->getAddressSpace();
13108       unsigned FirstStoreAlign = FirstInChain->getAlignment();
13109       unsigned NumStoresToMerge = 1;
13110       for (unsigned i = 0; i < NumConsecutiveStores; ++i) {
13111         StoreSDNode *St = cast<StoreSDNode>(StoreNodes[i].MemNode);
13112         SDValue StVal = peekThroughBitcast(St->getValue());
13113         // This restriction could be loosened.
13114         // Bail out if any stored values are not elements extracted from a
13115         // vector. It should be possible to handle mixed sources, but load
13116         // sources need more careful handling (see the block of code below that
13117         // handles consecutive loads).
13118         if (StVal.getOpcode() != ISD::EXTRACT_VECTOR_ELT &&
13119             StVal.getOpcode() != ISD::EXTRACT_SUBVECTOR)
13120           return RV;
13121 
13122         // Find a legal type for the vector store.
13123         unsigned Elts = (i + 1) * NumMemElts;
13124         EVT Ty =
13125             EVT::getVectorVT(*DAG.getContext(), MemVT.getScalarType(), Elts);
13126         bool IsFast;
13127         if (TLI.isTypeLegal(Ty) &&
13128             TLI.canMergeStoresTo(FirstStoreAS, Ty, DAG) &&
13129             TLI.allowsMemoryAccess(Context, DL, Ty, FirstStoreAS,
13130                                    FirstStoreAlign, &IsFast) &&
13131             IsFast)
13132           NumStoresToMerge = i + 1;
13133       }
13134 
13135       // Check if we found a legal integer type that creates a meaningful merge.
13136       if (NumStoresToMerge < 2) {
13137         // We know that candidate stores are in order and of correct
13138         // shape. While there is no mergeable sequence from the
13139         // beginning one may start later in the sequence. The only
13140         // reason a merge of size N could have failed where another of
13141         // the same size would not have, is if the alignment has
13142         // improved. Drop as many candidates as we can here.
13143         unsigned NumSkip = 1;
13144         while ((NumSkip < NumConsecutiveStores) &&
13145                (StoreNodes[NumSkip].MemNode->getAlignment() <= FirstStoreAlign))
13146           NumSkip++;
13147 
13148         StoreNodes.erase(StoreNodes.begin(), StoreNodes.begin() + NumSkip);
13149         continue;
13150       }
13151 
13152       bool Merged = MergeStoresOfConstantsOrVecElts(
13153           StoreNodes, MemVT, NumStoresToMerge, false, true, false);
13154       if (!Merged) {
13155         StoreNodes.erase(StoreNodes.begin(),
13156                          StoreNodes.begin() + NumStoresToMerge);
13157         continue;
13158       }
13159       // Remove merged stores for next iteration.
13160       StoreNodes.erase(StoreNodes.begin(),
13161                        StoreNodes.begin() + NumStoresToMerge);
13162       RV = true;
13163       continue;
13164     }
13165 
13166     // Below we handle the case of multiple consecutive stores that
13167     // come from multiple consecutive loads. We merge them into a single
13168     // wide load and a single wide store.
13169 
13170     // Look for load nodes which are used by the stored values.
13171     SmallVector<MemOpLink, 8> LoadNodes;
13172 
13173     // Find acceptable loads. Loads need to have the same chain (token factor),
13174     // must not be zext, volatile, indexed, and they must be consecutive.
13175     BaseIndexOffset LdBasePtr;
13176     for (unsigned i = 0; i < NumConsecutiveStores; ++i) {
13177       StoreSDNode *St = cast<StoreSDNode>(StoreNodes[i].MemNode);
13178       SDValue Val = peekThroughBitcast(St->getValue());
13179       LoadSDNode *Ld = dyn_cast<LoadSDNode>(Val);
13180       if (!Ld)
13181         break;
13182 
13183       // Loads must only have one use.
13184       if (!Ld->hasNUsesOfValue(1, 0))
13185         break;
13186 
13187       // The memory operands must not be volatile.
13188       if (Ld->isVolatile() || Ld->isIndexed())
13189         break;
13190 
13191       // The stored memory type must be the same.
13192       if (Ld->getMemoryVT() != MemVT)
13193         break;
13194 
13195       BaseIndexOffset LdPtr = BaseIndexOffset::match(Ld->getBasePtr(), DAG);
13196       // If this is not the first ptr that we check.
13197       int64_t LdOffset = 0;
13198       if (LdBasePtr.getBase().getNode()) {
13199         // The base ptr must be the same.
13200         if (!LdBasePtr.equalBaseIndex(LdPtr, DAG, LdOffset))
13201           break;
13202       } else {
13203         // Check that all other base pointers are the same as this one.
13204         LdBasePtr = LdPtr;
13205       }
13206 
13207       // We found a potential memory operand to merge.
13208       LoadNodes.push_back(MemOpLink(Ld, LdOffset));
13209     }
13210 
13211     if (LoadNodes.size() < 2) {
13212       StoreNodes.erase(StoreNodes.begin(), StoreNodes.begin() + 1);
13213       continue;
13214     }
13215 
13216     // If we have load/store pair instructions and we only have two values,
13217     // don't bother merging.
13218     unsigned RequiredAlignment;
13219     if (LoadNodes.size() == 2 && TLI.hasPairedLoad(MemVT, RequiredAlignment) &&
13220         StoreNodes[0].MemNode->getAlignment() >= RequiredAlignment) {
13221       StoreNodes.erase(StoreNodes.begin(), StoreNodes.begin() + 2);
13222       continue;
13223     }
13224     LSBaseSDNode *FirstInChain = StoreNodes[0].MemNode;
13225     unsigned FirstStoreAS = FirstInChain->getAddressSpace();
13226     unsigned FirstStoreAlign = FirstInChain->getAlignment();
13227     LoadSDNode *FirstLoad = cast<LoadSDNode>(LoadNodes[0].MemNode);
13228     unsigned FirstLoadAS = FirstLoad->getAddressSpace();
13229     unsigned FirstLoadAlign = FirstLoad->getAlignment();
13230 
13231     // Scan the memory operations on the chain and find the first
13232     // non-consecutive load memory address. These variables hold the index in
13233     // the store node array.
13234     unsigned LastConsecutiveLoad = 1;
13235     // This variable refers to the size and not index in the array.
13236     unsigned LastLegalVectorType = 1;
13237     unsigned LastLegalIntegerType = 1;
13238     bool isDereferenceable = true;
13239     bool DoIntegerTruncate = false;
13240     StartAddress = LoadNodes[0].OffsetFromBase;
13241     SDValue FirstChain = FirstLoad->getChain();
13242     for (unsigned i = 1; i < LoadNodes.size(); ++i) {
13243       // All loads must share the same chain.
13244       if (LoadNodes[i].MemNode->getChain() != FirstChain)
13245         break;
13246 
13247       int64_t CurrAddress = LoadNodes[i].OffsetFromBase;
13248       if (CurrAddress - StartAddress != (ElementSizeBytes * i))
13249         break;
13250       LastConsecutiveLoad = i;
13251 
13252       if (isDereferenceable && !LoadNodes[i].MemNode->isDereferenceable())
13253         isDereferenceable = false;
13254 
13255       // Find a legal type for the vector store.
13256       unsigned Elts = (i + 1) * NumMemElts;
13257       EVT StoreTy = EVT::getVectorVT(Context, MemVT.getScalarType(), Elts);
13258 
13259       bool IsFastSt, IsFastLd;
13260       if (TLI.isTypeLegal(StoreTy) &&
13261           TLI.canMergeStoresTo(FirstStoreAS, StoreTy, DAG) &&
13262           TLI.allowsMemoryAccess(Context, DL, StoreTy, FirstStoreAS,
13263                                  FirstStoreAlign, &IsFastSt) &&
13264           IsFastSt &&
13265           TLI.allowsMemoryAccess(Context, DL, StoreTy, FirstLoadAS,
13266                                  FirstLoadAlign, &IsFastLd) &&
13267           IsFastLd) {
13268         LastLegalVectorType = i + 1;
13269       }
13270 
13271       // Find a legal type for the integer store.
13272       unsigned SizeInBits = (i + 1) * ElementSizeBytes * 8;
13273       StoreTy = EVT::getIntegerVT(Context, SizeInBits);
13274       if (TLI.isTypeLegal(StoreTy) &&
13275           TLI.canMergeStoresTo(FirstStoreAS, StoreTy, DAG) &&
13276           TLI.allowsMemoryAccess(Context, DL, StoreTy, FirstStoreAS,
13277                                  FirstStoreAlign, &IsFastSt) &&
13278           IsFastSt &&
13279           TLI.allowsMemoryAccess(Context, DL, StoreTy, FirstLoadAS,
13280                                  FirstLoadAlign, &IsFastLd) &&
13281           IsFastLd) {
13282         LastLegalIntegerType = i + 1;
13283         DoIntegerTruncate = false;
13284         // Or check whether a truncstore and extload is legal.
13285       } else if (TLI.getTypeAction(Context, StoreTy) ==
13286                  TargetLowering::TypePromoteInteger) {
13287         EVT LegalizedStoredValueTy = TLI.getTypeToTransformTo(Context, StoreTy);
13288         if (TLI.isTruncStoreLegal(LegalizedStoredValueTy, StoreTy) &&
13289             TLI.canMergeStoresTo(FirstStoreAS, LegalizedStoredValueTy, DAG) &&
13290             TLI.isLoadExtLegal(ISD::ZEXTLOAD, LegalizedStoredValueTy,
13291                                StoreTy) &&
13292             TLI.isLoadExtLegal(ISD::SEXTLOAD, LegalizedStoredValueTy,
13293                                StoreTy) &&
13294             TLI.isLoadExtLegal(ISD::EXTLOAD, LegalizedStoredValueTy, StoreTy) &&
13295             TLI.allowsMemoryAccess(Context, DL, StoreTy, FirstStoreAS,
13296                                    FirstStoreAlign, &IsFastSt) &&
13297             IsFastSt &&
13298             TLI.allowsMemoryAccess(Context, DL, StoreTy, FirstLoadAS,
13299                                    FirstLoadAlign, &IsFastLd) &&
13300             IsFastLd) {
13301           LastLegalIntegerType = i + 1;
13302           DoIntegerTruncate = true;
13303         }
13304       }
13305     }
13306 
13307     // Only use vector types if the vector type is larger than the integer type.
13308     // If they are the same, use integers.
13309     bool UseVectorTy = LastLegalVectorType > LastLegalIntegerType && !NoVectors;
13310     unsigned LastLegalType =
13311         std::max(LastLegalVectorType, LastLegalIntegerType);
13312 
13313     // We add +1 here because the LastXXX variables refer to location while
13314     // the NumElem refers to array/index size.
13315     unsigned NumElem = std::min(NumConsecutiveStores, LastConsecutiveLoad + 1);
13316     NumElem = std::min(LastLegalType, NumElem);
13317 
13318     if (NumElem < 2) {
13319       // We know that candidate stores are in order and of correct
13320       // shape. While there is no mergeable sequence from the
13321       // beginning one may start later in the sequence. The only
13322       // reason a merge of size N could have failed where another of
13323       // the same size would not have is if the alignment or either
13324       // the load or store has improved. Drop as many candidates as we
13325       // can here.
13326       unsigned NumSkip = 1;
13327       while ((NumSkip < LoadNodes.size()) &&
13328              (LoadNodes[NumSkip].MemNode->getAlignment() <= FirstLoadAlign) &&
13329              (StoreNodes[NumSkip].MemNode->getAlignment() <= FirstStoreAlign))
13330         NumSkip++;
13331       StoreNodes.erase(StoreNodes.begin(), StoreNodes.begin() + NumSkip);
13332       continue;
13333     }
13334 
13335     // Find if it is better to use vectors or integers to load and store
13336     // to memory.
13337     EVT JointMemOpVT;
13338     if (UseVectorTy) {
13339       // Find a legal type for the vector store.
13340       unsigned Elts = NumElem * NumMemElts;
13341       JointMemOpVT = EVT::getVectorVT(Context, MemVT.getScalarType(), Elts);
13342     } else {
13343       unsigned SizeInBits = NumElem * ElementSizeBytes * 8;
13344       JointMemOpVT = EVT::getIntegerVT(Context, SizeInBits);
13345     }
13346 
13347     SDLoc LoadDL(LoadNodes[0].MemNode);
13348     SDLoc StoreDL(StoreNodes[0].MemNode);
13349 
13350     // The merged loads are required to have the same incoming chain, so
13351     // using the first's chain is acceptable.
13352 
13353     SDValue NewStoreChain = getMergeStoreChains(StoreNodes, NumElem);
13354     AddToWorklist(NewStoreChain.getNode());
13355 
13356     MachineMemOperand::Flags MMOFlags = isDereferenceable ?
13357                                           MachineMemOperand::MODereferenceable:
13358                                           MachineMemOperand::MONone;
13359 
13360     SDValue NewLoad, NewStore;
13361     if (UseVectorTy || !DoIntegerTruncate) {
13362       NewLoad = DAG.getLoad(JointMemOpVT, LoadDL, FirstLoad->getChain(),
13363                             FirstLoad->getBasePtr(),
13364                             FirstLoad->getPointerInfo(), FirstLoadAlign,
13365                             MMOFlags);
13366       NewStore = DAG.getStore(NewStoreChain, StoreDL, NewLoad,
13367                               FirstInChain->getBasePtr(),
13368                               FirstInChain->getPointerInfo(), FirstStoreAlign);
13369     } else { // This must be the truncstore/extload case
13370       EVT ExtendedTy =
13371           TLI.getTypeToTransformTo(*DAG.getContext(), JointMemOpVT);
13372       NewLoad =
13373           DAG.getExtLoad(ISD::EXTLOAD, LoadDL, ExtendedTy, FirstLoad->getChain(),
13374                          FirstLoad->getBasePtr(), FirstLoad->getPointerInfo(),
13375                          JointMemOpVT, FirstLoadAlign, MMOFlags);
13376       NewStore = DAG.getTruncStore(NewStoreChain, StoreDL, NewLoad,
13377                                    FirstInChain->getBasePtr(),
13378                                    FirstInChain->getPointerInfo(), JointMemOpVT,
13379                                    FirstInChain->getAlignment(),
13380                                    FirstInChain->getMemOperand()->getFlags());
13381     }
13382 
13383     // Transfer chain users from old loads to the new load.
13384     for (unsigned i = 0; i < NumElem; ++i) {
13385       LoadSDNode *Ld = cast<LoadSDNode>(LoadNodes[i].MemNode);
13386       DAG.ReplaceAllUsesOfValueWith(SDValue(Ld, 1),
13387                                     SDValue(NewLoad.getNode(), 1));
13388     }
13389 
13390     // Replace the all stores with the new store. Recursively remove
13391     // corresponding value if its no longer used.
13392     for (unsigned i = 0; i < NumElem; ++i) {
13393       SDValue Val = StoreNodes[i].MemNode->getOperand(1);
13394       CombineTo(StoreNodes[i].MemNode, NewStore);
13395       if (Val.getNode()->use_empty())
13396         recursivelyDeleteUnusedNodes(Val.getNode());
13397     }
13398 
13399     RV = true;
13400     StoreNodes.erase(StoreNodes.begin(), StoreNodes.begin() + NumElem);
13401   }
13402   return RV;
13403 }
13404 
13405 SDValue DAGCombiner::replaceStoreChain(StoreSDNode *ST, SDValue BetterChain) {
13406   SDLoc SL(ST);
13407   SDValue ReplStore;
13408 
13409   // Replace the chain to avoid dependency.
13410   if (ST->isTruncatingStore()) {
13411     ReplStore = DAG.getTruncStore(BetterChain, SL, ST->getValue(),
13412                                   ST->getBasePtr(), ST->getMemoryVT(),
13413                                   ST->getMemOperand());
13414   } else {
13415     ReplStore = DAG.getStore(BetterChain, SL, ST->getValue(), ST->getBasePtr(),
13416                              ST->getMemOperand());
13417   }
13418 
13419   // Create token to keep both nodes around.
13420   SDValue Token = DAG.getNode(ISD::TokenFactor, SL,
13421                               MVT::Other, ST->getChain(), ReplStore);
13422 
13423   // Make sure the new and old chains are cleaned up.
13424   AddToWorklist(Token.getNode());
13425 
13426   // Don't add users to work list.
13427   return CombineTo(ST, Token, false);
13428 }
13429 
13430 SDValue DAGCombiner::replaceStoreOfFPConstant(StoreSDNode *ST) {
13431   SDValue Value = ST->getValue();
13432   if (Value.getOpcode() == ISD::TargetConstantFP)
13433     return SDValue();
13434 
13435   SDLoc DL(ST);
13436 
13437   SDValue Chain = ST->getChain();
13438   SDValue Ptr = ST->getBasePtr();
13439 
13440   const ConstantFPSDNode *CFP = cast<ConstantFPSDNode>(Value);
13441 
13442   // NOTE: If the original store is volatile, this transform must not increase
13443   // the number of stores.  For example, on x86-32 an f64 can be stored in one
13444   // processor operation but an i64 (which is not legal) requires two.  So the
13445   // transform should not be done in this case.
13446 
13447   SDValue Tmp;
13448   switch (CFP->getSimpleValueType(0).SimpleTy) {
13449   default:
13450     llvm_unreachable("Unknown FP type");
13451   case MVT::f16:    // We don't do this for these yet.
13452   case MVT::f80:
13453   case MVT::f128:
13454   case MVT::ppcf128:
13455     return SDValue();
13456   case MVT::f32:
13457     if ((isTypeLegal(MVT::i32) && !LegalOperations && !ST->isVolatile()) ||
13458         TLI.isOperationLegalOrCustom(ISD::STORE, MVT::i32)) {
13459       ;
13460       Tmp = DAG.getConstant((uint32_t)CFP->getValueAPF().
13461                             bitcastToAPInt().getZExtValue(), SDLoc(CFP),
13462                             MVT::i32);
13463       return DAG.getStore(Chain, DL, Tmp, Ptr, ST->getMemOperand());
13464     }
13465 
13466     return SDValue();
13467   case MVT::f64:
13468     if ((TLI.isTypeLegal(MVT::i64) && !LegalOperations &&
13469          !ST->isVolatile()) ||
13470         TLI.isOperationLegalOrCustom(ISD::STORE, MVT::i64)) {
13471       ;
13472       Tmp = DAG.getConstant(CFP->getValueAPF().bitcastToAPInt().
13473                             getZExtValue(), SDLoc(CFP), MVT::i64);
13474       return DAG.getStore(Chain, DL, Tmp,
13475                           Ptr, ST->getMemOperand());
13476     }
13477 
13478     if (!ST->isVolatile() &&
13479         TLI.isOperationLegalOrCustom(ISD::STORE, MVT::i32)) {
13480       // Many FP stores are not made apparent until after legalize, e.g. for
13481       // argument passing.  Since this is so common, custom legalize the
13482       // 64-bit integer store into two 32-bit stores.
13483       uint64_t Val = CFP->getValueAPF().bitcastToAPInt().getZExtValue();
13484       SDValue Lo = DAG.getConstant(Val & 0xFFFFFFFF, SDLoc(CFP), MVT::i32);
13485       SDValue Hi = DAG.getConstant(Val >> 32, SDLoc(CFP), MVT::i32);
13486       if (DAG.getDataLayout().isBigEndian())
13487         std::swap(Lo, Hi);
13488 
13489       unsigned Alignment = ST->getAlignment();
13490       MachineMemOperand::Flags MMOFlags = ST->getMemOperand()->getFlags();
13491       AAMDNodes AAInfo = ST->getAAInfo();
13492 
13493       SDValue St0 = DAG.getStore(Chain, DL, Lo, Ptr, ST->getPointerInfo(),
13494                                  ST->getAlignment(), MMOFlags, AAInfo);
13495       Ptr = DAG.getNode(ISD::ADD, DL, Ptr.getValueType(), Ptr,
13496                         DAG.getConstant(4, DL, Ptr.getValueType()));
13497       Alignment = MinAlign(Alignment, 4U);
13498       SDValue St1 = DAG.getStore(Chain, DL, Hi, Ptr,
13499                                  ST->getPointerInfo().getWithOffset(4),
13500                                  Alignment, MMOFlags, AAInfo);
13501       return DAG.getNode(ISD::TokenFactor, DL, MVT::Other,
13502                          St0, St1);
13503     }
13504 
13505     return SDValue();
13506   }
13507 }
13508 
13509 SDValue DAGCombiner::visitSTORE(SDNode *N) {
13510   StoreSDNode *ST  = cast<StoreSDNode>(N);
13511   SDValue Chain = ST->getChain();
13512   SDValue Value = ST->getValue();
13513   SDValue Ptr   = ST->getBasePtr();
13514 
13515   // If this is a store of a bit convert, store the input value if the
13516   // resultant store does not need a higher alignment than the original.
13517   if (Value.getOpcode() == ISD::BITCAST && !ST->isTruncatingStore() &&
13518       ST->isUnindexed()) {
13519     EVT SVT = Value.getOperand(0).getValueType();
13520     if (((!LegalOperations && !ST->isVolatile()) ||
13521          TLI.isOperationLegalOrCustom(ISD::STORE, SVT)) &&
13522         TLI.isStoreBitCastBeneficial(Value.getValueType(), SVT)) {
13523       unsigned OrigAlign = ST->getAlignment();
13524       bool Fast = false;
13525       if (TLI.allowsMemoryAccess(*DAG.getContext(), DAG.getDataLayout(), SVT,
13526                                  ST->getAddressSpace(), OrigAlign, &Fast) &&
13527           Fast) {
13528         return DAG.getStore(Chain, SDLoc(N), Value.getOperand(0), Ptr,
13529                             ST->getPointerInfo(), OrigAlign,
13530                             ST->getMemOperand()->getFlags(), ST->getAAInfo());
13531       }
13532     }
13533   }
13534 
13535   // Turn 'store undef, Ptr' -> nothing.
13536   if (Value.isUndef() && ST->isUnindexed())
13537     return Chain;
13538 
13539   // Try to infer better alignment information than the store already has.
13540   if (OptLevel != CodeGenOpt::None && ST->isUnindexed()) {
13541     if (unsigned Align = DAG.InferPtrAlignment(Ptr)) {
13542       if (Align > ST->getAlignment()) {
13543         SDValue NewStore =
13544             DAG.getTruncStore(Chain, SDLoc(N), Value, Ptr, ST->getPointerInfo(),
13545                               ST->getMemoryVT(), Align,
13546                               ST->getMemOperand()->getFlags(), ST->getAAInfo());
13547         if (NewStore.getNode() != N)
13548           return CombineTo(ST, NewStore, true);
13549       }
13550     }
13551   }
13552 
13553   // Try transforming a pair floating point load / store ops to integer
13554   // load / store ops.
13555   if (SDValue NewST = TransformFPLoadStorePair(N))
13556     return NewST;
13557 
13558   if (ST->isUnindexed()) {
13559     // Walk up chain skipping non-aliasing memory nodes, on this store and any
13560     // adjacent stores.
13561     if (findBetterNeighborChains(ST)) {
13562       // replaceStoreChain uses CombineTo, which handled all of the worklist
13563       // manipulation. Return the original node to not do anything else.
13564       return SDValue(ST, 0);
13565     }
13566     Chain = ST->getChain();
13567   }
13568 
13569   // FIXME: is there such a thing as a truncating indexed store?
13570   if (ST->isTruncatingStore() && ST->isUnindexed() &&
13571       Value.getValueType().isInteger()) {
13572     // See if we can simplify the input to this truncstore with knowledge that
13573     // only the low bits are being used.  For example:
13574     // "truncstore (or (shl x, 8), y), i8"  -> "truncstore y, i8"
13575     SDValue Shorter = DAG.GetDemandedBits(
13576         Value, APInt::getLowBitsSet(Value.getScalarValueSizeInBits(),
13577                                     ST->getMemoryVT().getScalarSizeInBits()));
13578     AddToWorklist(Value.getNode());
13579     if (Shorter.getNode())
13580       return DAG.getTruncStore(Chain, SDLoc(N), Shorter,
13581                                Ptr, ST->getMemoryVT(), ST->getMemOperand());
13582 
13583     // Otherwise, see if we can simplify the operation with
13584     // SimplifyDemandedBits, which only works if the value has a single use.
13585     if (SimplifyDemandedBits(
13586             Value,
13587             APInt::getLowBitsSet(Value.getScalarValueSizeInBits(),
13588                                  ST->getMemoryVT().getScalarSizeInBits()))) {
13589       // Re-visit the store if anything changed and the store hasn't been merged
13590       // with another node (N is deleted) SimplifyDemandedBits will add Value's
13591       // node back to the worklist if necessary, but we also need to re-visit
13592       // the Store node itself.
13593       if (N->getOpcode() != ISD::DELETED_NODE)
13594         AddToWorklist(N);
13595       return SDValue(N, 0);
13596     }
13597   }
13598 
13599   // If this is a load followed by a store to the same location, then the store
13600   // is dead/noop.
13601   if (LoadSDNode *Ld = dyn_cast<LoadSDNode>(Value)) {
13602     if (Ld->getBasePtr() == Ptr && ST->getMemoryVT() == Ld->getMemoryVT() &&
13603         ST->isUnindexed() && !ST->isVolatile() &&
13604         // There can't be any side effects between the load and store, such as
13605         // a call or store.
13606         Chain.reachesChainWithoutSideEffects(SDValue(Ld, 1))) {
13607       // The store is dead, remove it.
13608       return Chain;
13609     }
13610   }
13611 
13612   if (StoreSDNode *ST1 = dyn_cast<StoreSDNode>(Chain)) {
13613     if (ST->isUnindexed() && !ST->isVolatile() && ST1->isUnindexed() &&
13614         !ST1->isVolatile() && ST1->getBasePtr() == Ptr &&
13615         ST->getMemoryVT() == ST1->getMemoryVT()) {
13616       // If this is a store followed by a store with the same value to the same
13617       // location, then the store is dead/noop.
13618       if (ST1->getValue() == Value) {
13619         // The store is dead, remove it.
13620         return Chain;
13621       }
13622 
13623       // If this is a store who's preceeding store to the same location
13624       // and no one other node is chained to that store we can effectively
13625       // drop the store. Do not remove stores to undef as they may be used as
13626       // data sinks.
13627       if (OptLevel != CodeGenOpt::None && ST1->hasOneUse() &&
13628           !ST1->getBasePtr().isUndef()) {
13629         // ST1 is fully overwritten and can be elided. Combine with it's chain
13630         // value.
13631         CombineTo(ST1, ST1->getChain());
13632         return SDValue();
13633       }
13634     }
13635   }
13636 
13637   // If this is an FP_ROUND or TRUNC followed by a store, fold this into a
13638   // truncating store.  We can do this even if this is already a truncstore.
13639   if ((Value.getOpcode() == ISD::FP_ROUND || Value.getOpcode() == ISD::TRUNCATE)
13640       && Value.getNode()->hasOneUse() && ST->isUnindexed() &&
13641       TLI.isTruncStoreLegal(Value.getOperand(0).getValueType(),
13642                             ST->getMemoryVT())) {
13643     return DAG.getTruncStore(Chain, SDLoc(N), Value.getOperand(0),
13644                              Ptr, ST->getMemoryVT(), ST->getMemOperand());
13645   }
13646 
13647   // Always perform this optimization before types are legal. If the target
13648   // prefers, also try this after legalization to catch stores that were created
13649   // by intrinsics or other nodes.
13650   if (!LegalTypes || (TLI.mergeStoresAfterLegalization())) {
13651     while (true) {
13652       // There can be multiple store sequences on the same chain.
13653       // Keep trying to merge store sequences until we are unable to do so
13654       // or until we merge the last store on the chain.
13655       bool Changed = MergeConsecutiveStores(ST);
13656       if (!Changed) break;
13657       // Return N as merge only uses CombineTo and no worklist clean
13658       // up is necessary.
13659       if (N->getOpcode() == ISD::DELETED_NODE || !isa<StoreSDNode>(N))
13660         return SDValue(N, 0);
13661     }
13662   }
13663 
13664   // Try transforming N to an indexed store.
13665   if (CombineToPreIndexedLoadStore(N) || CombineToPostIndexedLoadStore(N))
13666     return SDValue(N, 0);
13667 
13668   // Turn 'store float 1.0, Ptr' -> 'store int 0x12345678, Ptr'
13669   //
13670   // Make sure to do this only after attempting to merge stores in order to
13671   //  avoid changing the types of some subset of stores due to visit order,
13672   //  preventing their merging.
13673   if (isa<ConstantFPSDNode>(ST->getValue())) {
13674     if (SDValue NewSt = replaceStoreOfFPConstant(ST))
13675       return NewSt;
13676   }
13677 
13678   if (SDValue NewSt = splitMergedValStore(ST))
13679     return NewSt;
13680 
13681   return ReduceLoadOpStoreWidth(N);
13682 }
13683 
13684 /// For the instruction sequence of store below, F and I values
13685 /// are bundled together as an i64 value before being stored into memory.
13686 /// Sometimes it is more efficent to generate separate stores for F and I,
13687 /// which can remove the bitwise instructions or sink them to colder places.
13688 ///
13689 ///   (store (or (zext (bitcast F to i32) to i64),
13690 ///              (shl (zext I to i64), 32)), addr)  -->
13691 ///   (store F, addr) and (store I, addr+4)
13692 ///
13693 /// Similarly, splitting for other merged store can also be beneficial, like:
13694 /// For pair of {i32, i32}, i64 store --> two i32 stores.
13695 /// For pair of {i32, i16}, i64 store --> two i32 stores.
13696 /// For pair of {i16, i16}, i32 store --> two i16 stores.
13697 /// For pair of {i16, i8},  i32 store --> two i16 stores.
13698 /// For pair of {i8, i8},   i16 store --> two i8 stores.
13699 ///
13700 /// We allow each target to determine specifically which kind of splitting is
13701 /// supported.
13702 ///
13703 /// The store patterns are commonly seen from the simple code snippet below
13704 /// if only std::make_pair(...) is sroa transformed before inlined into hoo.
13705 ///   void goo(const std::pair<int, float> &);
13706 ///   hoo() {
13707 ///     ...
13708 ///     goo(std::make_pair(tmp, ftmp));
13709 ///     ...
13710 ///   }
13711 ///
13712 SDValue DAGCombiner::splitMergedValStore(StoreSDNode *ST) {
13713   if (OptLevel == CodeGenOpt::None)
13714     return SDValue();
13715 
13716   SDValue Val = ST->getValue();
13717   SDLoc DL(ST);
13718 
13719   // Match OR operand.
13720   if (!Val.getValueType().isScalarInteger() || Val.getOpcode() != ISD::OR)
13721     return SDValue();
13722 
13723   // Match SHL operand and get Lower and Higher parts of Val.
13724   SDValue Op1 = Val.getOperand(0);
13725   SDValue Op2 = Val.getOperand(1);
13726   SDValue Lo, Hi;
13727   if (Op1.getOpcode() != ISD::SHL) {
13728     std::swap(Op1, Op2);
13729     if (Op1.getOpcode() != ISD::SHL)
13730       return SDValue();
13731   }
13732   Lo = Op2;
13733   Hi = Op1.getOperand(0);
13734   if (!Op1.hasOneUse())
13735     return SDValue();
13736 
13737   // Match shift amount to HalfValBitSize.
13738   unsigned HalfValBitSize = Val.getValueSizeInBits() / 2;
13739   ConstantSDNode *ShAmt = dyn_cast<ConstantSDNode>(Op1.getOperand(1));
13740   if (!ShAmt || ShAmt->getAPIntValue() != HalfValBitSize)
13741     return SDValue();
13742 
13743   // Lo and Hi are zero-extended from int with size less equal than 32
13744   // to i64.
13745   if (Lo.getOpcode() != ISD::ZERO_EXTEND || !Lo.hasOneUse() ||
13746       !Lo.getOperand(0).getValueType().isScalarInteger() ||
13747       Lo.getOperand(0).getValueSizeInBits() > HalfValBitSize ||
13748       Hi.getOpcode() != ISD::ZERO_EXTEND || !Hi.hasOneUse() ||
13749       !Hi.getOperand(0).getValueType().isScalarInteger() ||
13750       Hi.getOperand(0).getValueSizeInBits() > HalfValBitSize)
13751     return SDValue();
13752 
13753   // Use the EVT of low and high parts before bitcast as the input
13754   // of target query.
13755   EVT LowTy = (Lo.getOperand(0).getOpcode() == ISD::BITCAST)
13756                   ? Lo.getOperand(0).getValueType()
13757                   : Lo.getValueType();
13758   EVT HighTy = (Hi.getOperand(0).getOpcode() == ISD::BITCAST)
13759                    ? Hi.getOperand(0).getValueType()
13760                    : Hi.getValueType();
13761   if (!TLI.isMultiStoresCheaperThanBitsMerge(LowTy, HighTy))
13762     return SDValue();
13763 
13764   // Start to split store.
13765   unsigned Alignment = ST->getAlignment();
13766   MachineMemOperand::Flags MMOFlags = ST->getMemOperand()->getFlags();
13767   AAMDNodes AAInfo = ST->getAAInfo();
13768 
13769   // Change the sizes of Lo and Hi's value types to HalfValBitSize.
13770   EVT VT = EVT::getIntegerVT(*DAG.getContext(), HalfValBitSize);
13771   Lo = DAG.getNode(ISD::ZERO_EXTEND, DL, VT, Lo.getOperand(0));
13772   Hi = DAG.getNode(ISD::ZERO_EXTEND, DL, VT, Hi.getOperand(0));
13773 
13774   SDValue Chain = ST->getChain();
13775   SDValue Ptr = ST->getBasePtr();
13776   // Lower value store.
13777   SDValue St0 = DAG.getStore(Chain, DL, Lo, Ptr, ST->getPointerInfo(),
13778                              ST->getAlignment(), MMOFlags, AAInfo);
13779   Ptr =
13780       DAG.getNode(ISD::ADD, DL, Ptr.getValueType(), Ptr,
13781                   DAG.getConstant(HalfValBitSize / 8, DL, Ptr.getValueType()));
13782   // Higher value store.
13783   SDValue St1 =
13784       DAG.getStore(St0, DL, Hi, Ptr,
13785                    ST->getPointerInfo().getWithOffset(HalfValBitSize / 8),
13786                    Alignment / 2, MMOFlags, AAInfo);
13787   return St1;
13788 }
13789 
13790 /// Convert a disguised subvector insertion into a shuffle:
13791 /// insert_vector_elt V, (bitcast X from vector type), IdxC -->
13792 /// bitcast(shuffle (bitcast V), (extended X), Mask)
13793 /// Note: We do not use an insert_subvector node because that requires a legal
13794 /// subvector type.
13795 SDValue DAGCombiner::combineInsertEltToShuffle(SDNode *N, unsigned InsIndex) {
13796   SDValue InsertVal = N->getOperand(1);
13797   if (InsertVal.getOpcode() != ISD::BITCAST || !InsertVal.hasOneUse() ||
13798       !InsertVal.getOperand(0).getValueType().isVector())
13799     return SDValue();
13800 
13801   SDValue SubVec = InsertVal.getOperand(0);
13802   SDValue DestVec = N->getOperand(0);
13803   EVT SubVecVT = SubVec.getValueType();
13804   EVT VT = DestVec.getValueType();
13805   unsigned NumSrcElts = SubVecVT.getVectorNumElements();
13806   unsigned ExtendRatio = VT.getSizeInBits() / SubVecVT.getSizeInBits();
13807   unsigned NumMaskVals = ExtendRatio * NumSrcElts;
13808 
13809   // Step 1: Create a shuffle mask that implements this insert operation. The
13810   // vector that we are inserting into will be operand 0 of the shuffle, so
13811   // those elements are just 'i'. The inserted subvector is in the first
13812   // positions of operand 1 of the shuffle. Example:
13813   // insert v4i32 V, (v2i16 X), 2 --> shuffle v8i16 V', X', {0,1,2,3,8,9,6,7}
13814   SmallVector<int, 16> Mask(NumMaskVals);
13815   for (unsigned i = 0; i != NumMaskVals; ++i) {
13816     if (i / NumSrcElts == InsIndex)
13817       Mask[i] = (i % NumSrcElts) + NumMaskVals;
13818     else
13819       Mask[i] = i;
13820   }
13821 
13822   // Bail out if the target can not handle the shuffle we want to create.
13823   EVT SubVecEltVT = SubVecVT.getVectorElementType();
13824   EVT ShufVT = EVT::getVectorVT(*DAG.getContext(), SubVecEltVT, NumMaskVals);
13825   if (!TLI.isShuffleMaskLegal(Mask, ShufVT))
13826     return SDValue();
13827 
13828   // Step 2: Create a wide vector from the inserted source vector by appending
13829   // undefined elements. This is the same size as our destination vector.
13830   SDLoc DL(N);
13831   SmallVector<SDValue, 8> ConcatOps(ExtendRatio, DAG.getUNDEF(SubVecVT));
13832   ConcatOps[0] = SubVec;
13833   SDValue PaddedSubV = DAG.getNode(ISD::CONCAT_VECTORS, DL, ShufVT, ConcatOps);
13834 
13835   // Step 3: Shuffle in the padded subvector.
13836   SDValue DestVecBC = DAG.getBitcast(ShufVT, DestVec);
13837   SDValue Shuf = DAG.getVectorShuffle(ShufVT, DL, DestVecBC, PaddedSubV, Mask);
13838   AddToWorklist(PaddedSubV.getNode());
13839   AddToWorklist(DestVecBC.getNode());
13840   AddToWorklist(Shuf.getNode());
13841   return DAG.getBitcast(VT, Shuf);
13842 }
13843 
13844 SDValue DAGCombiner::visitINSERT_VECTOR_ELT(SDNode *N) {
13845   SDValue InVec = N->getOperand(0);
13846   SDValue InVal = N->getOperand(1);
13847   SDValue EltNo = N->getOperand(2);
13848   SDLoc DL(N);
13849 
13850   // If the inserted element is an UNDEF, just use the input vector.
13851   if (InVal.isUndef())
13852     return InVec;
13853 
13854   EVT VT = InVec.getValueType();
13855 
13856   // Remove redundant insertions:
13857   // (insert_vector_elt x (extract_vector_elt x idx) idx) -> x
13858   if (InVal.getOpcode() == ISD::EXTRACT_VECTOR_ELT &&
13859       InVec == InVal.getOperand(0) && EltNo == InVal.getOperand(1))
13860     return InVec;
13861 
13862   // We must know which element is being inserted for folds below here.
13863   auto *IndexC = dyn_cast<ConstantSDNode>(EltNo);
13864   if (!IndexC)
13865     return SDValue();
13866   unsigned Elt = IndexC->getZExtValue();
13867 
13868   if (SDValue Shuf = combineInsertEltToShuffle(N, Elt))
13869     return Shuf;
13870 
13871   // Canonicalize insert_vector_elt dag nodes.
13872   // Example:
13873   // (insert_vector_elt (insert_vector_elt A, Idx0), Idx1)
13874   // -> (insert_vector_elt (insert_vector_elt A, Idx1), Idx0)
13875   //
13876   // Do this only if the child insert_vector node has one use; also
13877   // do this only if indices are both constants and Idx1 < Idx0.
13878   if (InVec.getOpcode() == ISD::INSERT_VECTOR_ELT && InVec.hasOneUse()
13879       && isa<ConstantSDNode>(InVec.getOperand(2))) {
13880     unsigned OtherElt = InVec.getConstantOperandVal(2);
13881     if (Elt < OtherElt) {
13882       // Swap nodes.
13883       SDValue NewOp = DAG.getNode(ISD::INSERT_VECTOR_ELT, DL, VT,
13884                                   InVec.getOperand(0), InVal, EltNo);
13885       AddToWorklist(NewOp.getNode());
13886       return DAG.getNode(ISD::INSERT_VECTOR_ELT, SDLoc(InVec.getNode()),
13887                          VT, NewOp, InVec.getOperand(1), InVec.getOperand(2));
13888     }
13889   }
13890 
13891   // If we can't generate a legal BUILD_VECTOR, exit
13892   if (LegalOperations && !TLI.isOperationLegal(ISD::BUILD_VECTOR, VT))
13893     return SDValue();
13894 
13895   // Check that the operand is a BUILD_VECTOR (or UNDEF, which can essentially
13896   // be converted to a BUILD_VECTOR).  Fill in the Ops vector with the
13897   // vector elements.
13898   SmallVector<SDValue, 8> Ops;
13899   // Do not combine these two vectors if the output vector will not replace
13900   // the input vector.
13901   if (InVec.getOpcode() == ISD::BUILD_VECTOR && InVec.hasOneUse()) {
13902     Ops.append(InVec.getNode()->op_begin(),
13903                InVec.getNode()->op_end());
13904   } else if (InVec.isUndef()) {
13905     unsigned NElts = VT.getVectorNumElements();
13906     Ops.append(NElts, DAG.getUNDEF(InVal.getValueType()));
13907   } else {
13908     return SDValue();
13909   }
13910 
13911   // Insert the element
13912   if (Elt < Ops.size()) {
13913     // All the operands of BUILD_VECTOR must have the same type;
13914     // we enforce that here.
13915     EVT OpVT = Ops[0].getValueType();
13916     Ops[Elt] = OpVT.isInteger() ? DAG.getAnyExtOrTrunc(InVal, DL, OpVT) : InVal;
13917   }
13918 
13919   // Return the new vector
13920   return DAG.getBuildVector(VT, DL, Ops);
13921 }
13922 
13923 SDValue DAGCombiner::ReplaceExtractVectorEltOfLoadWithNarrowedLoad(
13924     SDNode *EVE, EVT InVecVT, SDValue EltNo, LoadSDNode *OriginalLoad) {
13925   assert(!OriginalLoad->isVolatile());
13926 
13927   EVT ResultVT = EVE->getValueType(0);
13928   EVT VecEltVT = InVecVT.getVectorElementType();
13929   unsigned Align = OriginalLoad->getAlignment();
13930   unsigned NewAlign = DAG.getDataLayout().getABITypeAlignment(
13931       VecEltVT.getTypeForEVT(*DAG.getContext()));
13932 
13933   if (NewAlign > Align || !TLI.isOperationLegalOrCustom(ISD::LOAD, VecEltVT))
13934     return SDValue();
13935 
13936   ISD::LoadExtType ExtTy = ResultVT.bitsGT(VecEltVT) ?
13937     ISD::NON_EXTLOAD : ISD::EXTLOAD;
13938   if (!TLI.shouldReduceLoadWidth(OriginalLoad, ExtTy, VecEltVT))
13939     return SDValue();
13940 
13941   Align = NewAlign;
13942 
13943   SDValue NewPtr = OriginalLoad->getBasePtr();
13944   SDValue Offset;
13945   EVT PtrType = NewPtr.getValueType();
13946   MachinePointerInfo MPI;
13947   SDLoc DL(EVE);
13948   if (auto *ConstEltNo = dyn_cast<ConstantSDNode>(EltNo)) {
13949     int Elt = ConstEltNo->getZExtValue();
13950     unsigned PtrOff = VecEltVT.getSizeInBits() * Elt / 8;
13951     Offset = DAG.getConstant(PtrOff, DL, PtrType);
13952     MPI = OriginalLoad->getPointerInfo().getWithOffset(PtrOff);
13953   } else {
13954     Offset = DAG.getZExtOrTrunc(EltNo, DL, PtrType);
13955     Offset = DAG.getNode(
13956         ISD::MUL, DL, PtrType, Offset,
13957         DAG.getConstant(VecEltVT.getStoreSize(), DL, PtrType));
13958     MPI = OriginalLoad->getPointerInfo();
13959   }
13960   NewPtr = DAG.getNode(ISD::ADD, DL, PtrType, NewPtr, Offset);
13961 
13962   // The replacement we need to do here is a little tricky: we need to
13963   // replace an extractelement of a load with a load.
13964   // Use ReplaceAllUsesOfValuesWith to do the replacement.
13965   // Note that this replacement assumes that the extractvalue is the only
13966   // use of the load; that's okay because we don't want to perform this
13967   // transformation in other cases anyway.
13968   SDValue Load;
13969   SDValue Chain;
13970   if (ResultVT.bitsGT(VecEltVT)) {
13971     // If the result type of vextract is wider than the load, then issue an
13972     // extending load instead.
13973     ISD::LoadExtType ExtType = TLI.isLoadExtLegal(ISD::ZEXTLOAD, ResultVT,
13974                                                   VecEltVT)
13975                                    ? ISD::ZEXTLOAD
13976                                    : ISD::EXTLOAD;
13977     Load = DAG.getExtLoad(ExtType, SDLoc(EVE), ResultVT,
13978                           OriginalLoad->getChain(), NewPtr, MPI, VecEltVT,
13979                           Align, OriginalLoad->getMemOperand()->getFlags(),
13980                           OriginalLoad->getAAInfo());
13981     Chain = Load.getValue(1);
13982   } else {
13983     Load = DAG.getLoad(VecEltVT, SDLoc(EVE), OriginalLoad->getChain(), NewPtr,
13984                        MPI, Align, OriginalLoad->getMemOperand()->getFlags(),
13985                        OriginalLoad->getAAInfo());
13986     Chain = Load.getValue(1);
13987     if (ResultVT.bitsLT(VecEltVT))
13988       Load = DAG.getNode(ISD::TRUNCATE, SDLoc(EVE), ResultVT, Load);
13989     else
13990       Load = DAG.getBitcast(ResultVT, Load);
13991   }
13992   WorklistRemover DeadNodes(*this);
13993   SDValue From[] = { SDValue(EVE, 0), SDValue(OriginalLoad, 1) };
13994   SDValue To[] = { Load, Chain };
13995   DAG.ReplaceAllUsesOfValuesWith(From, To, 2);
13996   // Since we're explicitly calling ReplaceAllUses, add the new node to the
13997   // worklist explicitly as well.
13998   AddToWorklist(Load.getNode());
13999   AddUsersToWorklist(Load.getNode()); // Add users too
14000   // Make sure to revisit this node to clean it up; it will usually be dead.
14001   AddToWorklist(EVE);
14002   ++OpsNarrowed;
14003   return SDValue(EVE, 0);
14004 }
14005 
14006 SDValue DAGCombiner::visitEXTRACT_VECTOR_ELT(SDNode *N) {
14007   // (vextract (scalar_to_vector val, 0) -> val
14008   SDValue InVec = N->getOperand(0);
14009   EVT VT = InVec.getValueType();
14010   EVT NVT = N->getValueType(0);
14011 
14012   if (InVec.isUndef())
14013     return DAG.getUNDEF(NVT);
14014 
14015   if (InVec.getOpcode() == ISD::SCALAR_TO_VECTOR) {
14016     // Check if the result type doesn't match the inserted element type. A
14017     // SCALAR_TO_VECTOR may truncate the inserted element and the
14018     // EXTRACT_VECTOR_ELT may widen the extracted vector.
14019     SDValue InOp = InVec.getOperand(0);
14020     if (InOp.getValueType() != NVT) {
14021       assert(InOp.getValueType().isInteger() && NVT.isInteger());
14022       return DAG.getSExtOrTrunc(InOp, SDLoc(InVec), NVT);
14023     }
14024     return InOp;
14025   }
14026 
14027   SDValue EltNo = N->getOperand(1);
14028   ConstantSDNode *ConstEltNo = dyn_cast<ConstantSDNode>(EltNo);
14029 
14030   // extract_vector_elt (build_vector x, y), 1 -> y
14031   if (ConstEltNo &&
14032       InVec.getOpcode() == ISD::BUILD_VECTOR &&
14033       TLI.isTypeLegal(VT) &&
14034       (InVec.hasOneUse() ||
14035        TLI.aggressivelyPreferBuildVectorSources(VT))) {
14036     SDValue Elt = InVec.getOperand(ConstEltNo->getZExtValue());
14037     EVT InEltVT = Elt.getValueType();
14038 
14039     // Sometimes build_vector's scalar input types do not match result type.
14040     if (NVT == InEltVT)
14041       return Elt;
14042 
14043     // TODO: It may be useful to truncate if free if the build_vector implicitly
14044     // converts.
14045   }
14046 
14047   // extract_vector_elt (v2i32 (bitcast i64:x)), EltTrunc -> i32 (trunc i64:x)
14048   bool isLE = DAG.getDataLayout().isLittleEndian();
14049   unsigned EltTrunc = isLE ? 0 : VT.getVectorNumElements() - 1;
14050   if (ConstEltNo && InVec.getOpcode() == ISD::BITCAST && InVec.hasOneUse() &&
14051       ConstEltNo->getZExtValue() == EltTrunc && VT.isInteger()) {
14052     SDValue BCSrc = InVec.getOperand(0);
14053     if (BCSrc.getValueType().isScalarInteger())
14054       return DAG.getNode(ISD::TRUNCATE, SDLoc(N), NVT, BCSrc);
14055   }
14056 
14057   // extract_vector_elt (insert_vector_elt vec, val, idx), idx) -> val
14058   //
14059   // This only really matters if the index is non-constant since other combines
14060   // on the constant elements already work.
14061   if (InVec.getOpcode() == ISD::INSERT_VECTOR_ELT &&
14062       EltNo == InVec.getOperand(2)) {
14063     SDValue Elt = InVec.getOperand(1);
14064     return VT.isInteger() ? DAG.getAnyExtOrTrunc(Elt, SDLoc(N), NVT) : Elt;
14065   }
14066 
14067   // Transform: (EXTRACT_VECTOR_ELT( VECTOR_SHUFFLE )) -> EXTRACT_VECTOR_ELT.
14068   // We only perform this optimization before the op legalization phase because
14069   // we may introduce new vector instructions which are not backed by TD
14070   // patterns. For example on AVX, extracting elements from a wide vector
14071   // without using extract_subvector. However, if we can find an underlying
14072   // scalar value, then we can always use that.
14073   if (ConstEltNo && InVec.getOpcode() == ISD::VECTOR_SHUFFLE) {
14074     int NumElem = VT.getVectorNumElements();
14075     ShuffleVectorSDNode *SVOp = cast<ShuffleVectorSDNode>(InVec);
14076     // Find the new index to extract from.
14077     int OrigElt = SVOp->getMaskElt(ConstEltNo->getZExtValue());
14078 
14079     // Extracting an undef index is undef.
14080     if (OrigElt == -1)
14081       return DAG.getUNDEF(NVT);
14082 
14083     // Select the right vector half to extract from.
14084     SDValue SVInVec;
14085     if (OrigElt < NumElem) {
14086       SVInVec = InVec->getOperand(0);
14087     } else {
14088       SVInVec = InVec->getOperand(1);
14089       OrigElt -= NumElem;
14090     }
14091 
14092     if (SVInVec.getOpcode() == ISD::BUILD_VECTOR) {
14093       SDValue InOp = SVInVec.getOperand(OrigElt);
14094       if (InOp.getValueType() != NVT) {
14095         assert(InOp.getValueType().isInteger() && NVT.isInteger());
14096         InOp = DAG.getSExtOrTrunc(InOp, SDLoc(SVInVec), NVT);
14097       }
14098 
14099       return InOp;
14100     }
14101 
14102     // FIXME: We should handle recursing on other vector shuffles and
14103     // scalar_to_vector here as well.
14104 
14105     if (!LegalOperations ||
14106         // FIXME: Should really be just isOperationLegalOrCustom.
14107         TLI.isOperationLegal(ISD::EXTRACT_VECTOR_ELT, VT) ||
14108         TLI.isOperationExpand(ISD::VECTOR_SHUFFLE, VT)) {
14109       EVT IndexTy = TLI.getVectorIdxTy(DAG.getDataLayout());
14110       return DAG.getNode(ISD::EXTRACT_VECTOR_ELT, SDLoc(N), NVT, SVInVec,
14111                          DAG.getConstant(OrigElt, SDLoc(SVOp), IndexTy));
14112     }
14113   }
14114 
14115   bool BCNumEltsChanged = false;
14116   EVT ExtVT = VT.getVectorElementType();
14117   EVT LVT = ExtVT;
14118 
14119   // If the result of load has to be truncated, then it's not necessarily
14120   // profitable.
14121   if (NVT.bitsLT(LVT) && !TLI.isTruncateFree(LVT, NVT))
14122     return SDValue();
14123 
14124   if (InVec.getOpcode() == ISD::BITCAST) {
14125     // Don't duplicate a load with other uses.
14126     if (!InVec.hasOneUse())
14127       return SDValue();
14128 
14129     EVT BCVT = InVec.getOperand(0).getValueType();
14130     if (!BCVT.isVector() || ExtVT.bitsGT(BCVT.getVectorElementType()))
14131       return SDValue();
14132     if (VT.getVectorNumElements() != BCVT.getVectorNumElements())
14133       BCNumEltsChanged = true;
14134     InVec = InVec.getOperand(0);
14135     ExtVT = BCVT.getVectorElementType();
14136   }
14137 
14138   // (vextract (vN[if]M load $addr), i) -> ([if]M load $addr + i * size)
14139   if (!LegalOperations && !ConstEltNo && InVec.hasOneUse() &&
14140       ISD::isNormalLoad(InVec.getNode()) &&
14141       !N->getOperand(1)->hasPredecessor(InVec.getNode())) {
14142     SDValue Index = N->getOperand(1);
14143     if (LoadSDNode *OrigLoad = dyn_cast<LoadSDNode>(InVec)) {
14144       if (!OrigLoad->isVolatile()) {
14145         return ReplaceExtractVectorEltOfLoadWithNarrowedLoad(N, VT, Index,
14146                                                              OrigLoad);
14147       }
14148     }
14149   }
14150 
14151   // Perform only after legalization to ensure build_vector / vector_shuffle
14152   // optimizations have already been done.
14153   if (!LegalOperations) return SDValue();
14154 
14155   // (vextract (v4f32 load $addr), c) -> (f32 load $addr+c*size)
14156   // (vextract (v4f32 s2v (f32 load $addr)), c) -> (f32 load $addr+c*size)
14157   // (vextract (v4f32 shuffle (load $addr), <1,u,u,u>), 0) -> (f32 load $addr)
14158 
14159   if (ConstEltNo) {
14160     int Elt = cast<ConstantSDNode>(EltNo)->getZExtValue();
14161 
14162     LoadSDNode *LN0 = nullptr;
14163     const ShuffleVectorSDNode *SVN = nullptr;
14164     if (ISD::isNormalLoad(InVec.getNode())) {
14165       LN0 = cast<LoadSDNode>(InVec);
14166     } else if (InVec.getOpcode() == ISD::SCALAR_TO_VECTOR &&
14167                InVec.getOperand(0).getValueType() == ExtVT &&
14168                ISD::isNormalLoad(InVec.getOperand(0).getNode())) {
14169       // Don't duplicate a load with other uses.
14170       if (!InVec.hasOneUse())
14171         return SDValue();
14172 
14173       LN0 = cast<LoadSDNode>(InVec.getOperand(0));
14174     } else if ((SVN = dyn_cast<ShuffleVectorSDNode>(InVec))) {
14175       // (vextract (vector_shuffle (load $addr), v2, <1, u, u, u>), 1)
14176       // =>
14177       // (load $addr+1*size)
14178 
14179       // Don't duplicate a load with other uses.
14180       if (!InVec.hasOneUse())
14181         return SDValue();
14182 
14183       // If the bit convert changed the number of elements, it is unsafe
14184       // to examine the mask.
14185       if (BCNumEltsChanged)
14186         return SDValue();
14187 
14188       // Select the input vector, guarding against out of range extract vector.
14189       unsigned NumElems = VT.getVectorNumElements();
14190       int Idx = (Elt > (int)NumElems) ? -1 : SVN->getMaskElt(Elt);
14191       InVec = (Idx < (int)NumElems) ? InVec.getOperand(0) : InVec.getOperand(1);
14192 
14193       if (InVec.getOpcode() == ISD::BITCAST) {
14194         // Don't duplicate a load with other uses.
14195         if (!InVec.hasOneUse())
14196           return SDValue();
14197 
14198         InVec = InVec.getOperand(0);
14199       }
14200       if (ISD::isNormalLoad(InVec.getNode())) {
14201         LN0 = cast<LoadSDNode>(InVec);
14202         Elt = (Idx < (int)NumElems) ? Idx : Idx - (int)NumElems;
14203         EltNo = DAG.getConstant(Elt, SDLoc(EltNo), EltNo.getValueType());
14204       }
14205     }
14206 
14207     // Make sure we found a non-volatile load and the extractelement is
14208     // the only use.
14209     if (!LN0 || !LN0->hasNUsesOfValue(1,0) || LN0->isVolatile())
14210       return SDValue();
14211 
14212     // If Idx was -1 above, Elt is going to be -1, so just return undef.
14213     if (Elt == -1)
14214       return DAG.getUNDEF(LVT);
14215 
14216     return ReplaceExtractVectorEltOfLoadWithNarrowedLoad(N, VT, EltNo, LN0);
14217   }
14218 
14219   return SDValue();
14220 }
14221 
14222 // Simplify (build_vec (ext )) to (bitcast (build_vec ))
14223 SDValue DAGCombiner::reduceBuildVecExtToExtBuildVec(SDNode *N) {
14224   // We perform this optimization post type-legalization because
14225   // the type-legalizer often scalarizes integer-promoted vectors.
14226   // Performing this optimization before may create bit-casts which
14227   // will be type-legalized to complex code sequences.
14228   // We perform this optimization only before the operation legalizer because we
14229   // may introduce illegal operations.
14230   if (Level != AfterLegalizeVectorOps && Level != AfterLegalizeTypes)
14231     return SDValue();
14232 
14233   unsigned NumInScalars = N->getNumOperands();
14234   SDLoc DL(N);
14235   EVT VT = N->getValueType(0);
14236 
14237   // Check to see if this is a BUILD_VECTOR of a bunch of values
14238   // which come from any_extend or zero_extend nodes. If so, we can create
14239   // a new BUILD_VECTOR using bit-casts which may enable other BUILD_VECTOR
14240   // optimizations. We do not handle sign-extend because we can't fill the sign
14241   // using shuffles.
14242   EVT SourceType = MVT::Other;
14243   bool AllAnyExt = true;
14244 
14245   for (unsigned i = 0; i != NumInScalars; ++i) {
14246     SDValue In = N->getOperand(i);
14247     // Ignore undef inputs.
14248     if (In.isUndef()) continue;
14249 
14250     bool AnyExt  = In.getOpcode() == ISD::ANY_EXTEND;
14251     bool ZeroExt = In.getOpcode() == ISD::ZERO_EXTEND;
14252 
14253     // Abort if the element is not an extension.
14254     if (!ZeroExt && !AnyExt) {
14255       SourceType = MVT::Other;
14256       break;
14257     }
14258 
14259     // The input is a ZeroExt or AnyExt. Check the original type.
14260     EVT InTy = In.getOperand(0).getValueType();
14261 
14262     // Check that all of the widened source types are the same.
14263     if (SourceType == MVT::Other)
14264       // First time.
14265       SourceType = InTy;
14266     else if (InTy != SourceType) {
14267       // Multiple income types. Abort.
14268       SourceType = MVT::Other;
14269       break;
14270     }
14271 
14272     // Check if all of the extends are ANY_EXTENDs.
14273     AllAnyExt &= AnyExt;
14274   }
14275 
14276   // In order to have valid types, all of the inputs must be extended from the
14277   // same source type and all of the inputs must be any or zero extend.
14278   // Scalar sizes must be a power of two.
14279   EVT OutScalarTy = VT.getScalarType();
14280   bool ValidTypes = SourceType != MVT::Other &&
14281                  isPowerOf2_32(OutScalarTy.getSizeInBits()) &&
14282                  isPowerOf2_32(SourceType.getSizeInBits());
14283 
14284   // Create a new simpler BUILD_VECTOR sequence which other optimizations can
14285   // turn into a single shuffle instruction.
14286   if (!ValidTypes)
14287     return SDValue();
14288 
14289   bool isLE = DAG.getDataLayout().isLittleEndian();
14290   unsigned ElemRatio = OutScalarTy.getSizeInBits()/SourceType.getSizeInBits();
14291   assert(ElemRatio > 1 && "Invalid element size ratio");
14292   SDValue Filler = AllAnyExt ? DAG.getUNDEF(SourceType):
14293                                DAG.getConstant(0, DL, SourceType);
14294 
14295   unsigned NewBVElems = ElemRatio * VT.getVectorNumElements();
14296   SmallVector<SDValue, 8> Ops(NewBVElems, Filler);
14297 
14298   // Populate the new build_vector
14299   for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i) {
14300     SDValue Cast = N->getOperand(i);
14301     assert((Cast.getOpcode() == ISD::ANY_EXTEND ||
14302             Cast.getOpcode() == ISD::ZERO_EXTEND ||
14303             Cast.isUndef()) && "Invalid cast opcode");
14304     SDValue In;
14305     if (Cast.isUndef())
14306       In = DAG.getUNDEF(SourceType);
14307     else
14308       In = Cast->getOperand(0);
14309     unsigned Index = isLE ? (i * ElemRatio) :
14310                             (i * ElemRatio + (ElemRatio - 1));
14311 
14312     assert(Index < Ops.size() && "Invalid index");
14313     Ops[Index] = In;
14314   }
14315 
14316   // The type of the new BUILD_VECTOR node.
14317   EVT VecVT = EVT::getVectorVT(*DAG.getContext(), SourceType, NewBVElems);
14318   assert(VecVT.getSizeInBits() == VT.getSizeInBits() &&
14319          "Invalid vector size");
14320   // Check if the new vector type is legal.
14321   if (!isTypeLegal(VecVT)) return SDValue();
14322 
14323   // Make the new BUILD_VECTOR.
14324   SDValue BV = DAG.getBuildVector(VecVT, DL, Ops);
14325 
14326   // The new BUILD_VECTOR node has the potential to be further optimized.
14327   AddToWorklist(BV.getNode());
14328   // Bitcast to the desired type.
14329   return DAG.getBitcast(VT, BV);
14330 }
14331 
14332 SDValue DAGCombiner::reduceBuildVecConvertToConvertBuildVec(SDNode *N) {
14333   EVT VT = N->getValueType(0);
14334 
14335   unsigned NumInScalars = N->getNumOperands();
14336   SDLoc DL(N);
14337 
14338   EVT SrcVT = MVT::Other;
14339   unsigned Opcode = ISD::DELETED_NODE;
14340   unsigned NumDefs = 0;
14341 
14342   for (unsigned i = 0; i != NumInScalars; ++i) {
14343     SDValue In = N->getOperand(i);
14344     unsigned Opc = In.getOpcode();
14345 
14346     if (Opc == ISD::UNDEF)
14347       continue;
14348 
14349     // If all scalar values are floats and converted from integers.
14350     if (Opcode == ISD::DELETED_NODE &&
14351         (Opc == ISD::UINT_TO_FP || Opc == ISD::SINT_TO_FP)) {
14352       Opcode = Opc;
14353     }
14354 
14355     if (Opc != Opcode)
14356       return SDValue();
14357 
14358     EVT InVT = In.getOperand(0).getValueType();
14359 
14360     // If all scalar values are typed differently, bail out. It's chosen to
14361     // simplify BUILD_VECTOR of integer types.
14362     if (SrcVT == MVT::Other)
14363       SrcVT = InVT;
14364     if (SrcVT != InVT)
14365       return SDValue();
14366     NumDefs++;
14367   }
14368 
14369   // If the vector has just one element defined, it's not worth to fold it into
14370   // a vectorized one.
14371   if (NumDefs < 2)
14372     return SDValue();
14373 
14374   assert((Opcode == ISD::UINT_TO_FP || Opcode == ISD::SINT_TO_FP)
14375          && "Should only handle conversion from integer to float.");
14376   assert(SrcVT != MVT::Other && "Cannot determine source type!");
14377 
14378   EVT NVT = EVT::getVectorVT(*DAG.getContext(), SrcVT, NumInScalars);
14379 
14380   if (!TLI.isOperationLegalOrCustom(Opcode, NVT))
14381     return SDValue();
14382 
14383   // Just because the floating-point vector type is legal does not necessarily
14384   // mean that the corresponding integer vector type is.
14385   if (!isTypeLegal(NVT))
14386     return SDValue();
14387 
14388   SmallVector<SDValue, 8> Opnds;
14389   for (unsigned i = 0; i != NumInScalars; ++i) {
14390     SDValue In = N->getOperand(i);
14391 
14392     if (In.isUndef())
14393       Opnds.push_back(DAG.getUNDEF(SrcVT));
14394     else
14395       Opnds.push_back(In.getOperand(0));
14396   }
14397   SDValue BV = DAG.getBuildVector(NVT, DL, Opnds);
14398   AddToWorklist(BV.getNode());
14399 
14400   return DAG.getNode(Opcode, DL, VT, BV);
14401 }
14402 
14403 SDValue DAGCombiner::createBuildVecShuffle(const SDLoc &DL, SDNode *N,
14404                                            ArrayRef<int> VectorMask,
14405                                            SDValue VecIn1, SDValue VecIn2,
14406                                            unsigned LeftIdx) {
14407   MVT IdxTy = TLI.getVectorIdxTy(DAG.getDataLayout());
14408   SDValue ZeroIdx = DAG.getConstant(0, DL, IdxTy);
14409 
14410   EVT VT = N->getValueType(0);
14411   EVT InVT1 = VecIn1.getValueType();
14412   EVT InVT2 = VecIn2.getNode() ? VecIn2.getValueType() : InVT1;
14413 
14414   unsigned Vec2Offset = 0;
14415   unsigned NumElems = VT.getVectorNumElements();
14416   unsigned ShuffleNumElems = NumElems;
14417 
14418   // In case both the input vectors are extracted from same base
14419   // vector we do not need extra addend (Vec2Offset) while
14420   // computing shuffle mask.
14421   if (!VecIn2 || !(VecIn1.getOpcode() == ISD::EXTRACT_SUBVECTOR) ||
14422       !(VecIn2.getOpcode() == ISD::EXTRACT_SUBVECTOR) ||
14423       !(VecIn1.getOperand(0) == VecIn2.getOperand(0)))
14424     Vec2Offset = InVT1.getVectorNumElements();
14425 
14426   // We can't generate a shuffle node with mismatched input and output types.
14427   // Try to make the types match the type of the output.
14428   if (InVT1 != VT || InVT2 != VT) {
14429     if ((VT.getSizeInBits() % InVT1.getSizeInBits() == 0) && InVT1 == InVT2) {
14430       // If the output vector length is a multiple of both input lengths,
14431       // we can concatenate them and pad the rest with undefs.
14432       unsigned NumConcats = VT.getSizeInBits() / InVT1.getSizeInBits();
14433       assert(NumConcats >= 2 && "Concat needs at least two inputs!");
14434       SmallVector<SDValue, 2> ConcatOps(NumConcats, DAG.getUNDEF(InVT1));
14435       ConcatOps[0] = VecIn1;
14436       ConcatOps[1] = VecIn2 ? VecIn2 : DAG.getUNDEF(InVT1);
14437       VecIn1 = DAG.getNode(ISD::CONCAT_VECTORS, DL, VT, ConcatOps);
14438       VecIn2 = SDValue();
14439     } else if (InVT1.getSizeInBits() == VT.getSizeInBits() * 2) {
14440       if (!TLI.isExtractSubvectorCheap(VT, InVT1, NumElems))
14441         return SDValue();
14442 
14443       if (!VecIn2.getNode()) {
14444         // If we only have one input vector, and it's twice the size of the
14445         // output, split it in two.
14446         VecIn2 = DAG.getNode(ISD::EXTRACT_SUBVECTOR, DL, VT, VecIn1,
14447                              DAG.getConstant(NumElems, DL, IdxTy));
14448         VecIn1 = DAG.getNode(ISD::EXTRACT_SUBVECTOR, DL, VT, VecIn1, ZeroIdx);
14449         // Since we now have shorter input vectors, adjust the offset of the
14450         // second vector's start.
14451         Vec2Offset = NumElems;
14452       } else if (InVT2.getSizeInBits() <= InVT1.getSizeInBits()) {
14453         // VecIn1 is wider than the output, and we have another, possibly
14454         // smaller input. Pad the smaller input with undefs, shuffle at the
14455         // input vector width, and extract the output.
14456         // The shuffle type is different than VT, so check legality again.
14457         if (LegalOperations &&
14458             !TLI.isOperationLegal(ISD::VECTOR_SHUFFLE, InVT1))
14459           return SDValue();
14460 
14461         // Legalizing INSERT_SUBVECTOR is tricky - you basically have to
14462         // lower it back into a BUILD_VECTOR. So if the inserted type is
14463         // illegal, don't even try.
14464         if (InVT1 != InVT2) {
14465           if (!TLI.isTypeLegal(InVT2))
14466             return SDValue();
14467           VecIn2 = DAG.getNode(ISD::INSERT_SUBVECTOR, DL, InVT1,
14468                                DAG.getUNDEF(InVT1), VecIn2, ZeroIdx);
14469         }
14470         ShuffleNumElems = NumElems * 2;
14471       } else {
14472         // Both VecIn1 and VecIn2 are wider than the output, and VecIn2 is wider
14473         // than VecIn1. We can't handle this for now - this case will disappear
14474         // when we start sorting the vectors by type.
14475         return SDValue();
14476       }
14477     } else if (InVT2.getSizeInBits() * 2 == VT.getSizeInBits() &&
14478                InVT1.getSizeInBits() == VT.getSizeInBits()) {
14479       SmallVector<SDValue, 2> ConcatOps(2, DAG.getUNDEF(InVT2));
14480       ConcatOps[0] = VecIn2;
14481       VecIn2 = DAG.getNode(ISD::CONCAT_VECTORS, DL, VT, ConcatOps);
14482     } else {
14483       // TODO: Support cases where the length mismatch isn't exactly by a
14484       // factor of 2.
14485       // TODO: Move this check upwards, so that if we have bad type
14486       // mismatches, we don't create any DAG nodes.
14487       return SDValue();
14488     }
14489   }
14490 
14491   // Initialize mask to undef.
14492   SmallVector<int, 8> Mask(ShuffleNumElems, -1);
14493 
14494   // Only need to run up to the number of elements actually used, not the
14495   // total number of elements in the shuffle - if we are shuffling a wider
14496   // vector, the high lanes should be set to undef.
14497   for (unsigned i = 0; i != NumElems; ++i) {
14498     if (VectorMask[i] <= 0)
14499       continue;
14500 
14501     unsigned ExtIndex = N->getOperand(i).getConstantOperandVal(1);
14502     if (VectorMask[i] == (int)LeftIdx) {
14503       Mask[i] = ExtIndex;
14504     } else if (VectorMask[i] == (int)LeftIdx + 1) {
14505       Mask[i] = Vec2Offset + ExtIndex;
14506     }
14507   }
14508 
14509   // The type the input vectors may have changed above.
14510   InVT1 = VecIn1.getValueType();
14511 
14512   // If we already have a VecIn2, it should have the same type as VecIn1.
14513   // If we don't, get an undef/zero vector of the appropriate type.
14514   VecIn2 = VecIn2.getNode() ? VecIn2 : DAG.getUNDEF(InVT1);
14515   assert(InVT1 == VecIn2.getValueType() && "Unexpected second input type.");
14516 
14517   SDValue Shuffle = DAG.getVectorShuffle(InVT1, DL, VecIn1, VecIn2, Mask);
14518   if (ShuffleNumElems > NumElems)
14519     Shuffle = DAG.getNode(ISD::EXTRACT_SUBVECTOR, DL, VT, Shuffle, ZeroIdx);
14520 
14521   return Shuffle;
14522 }
14523 
14524 // Check to see if this is a BUILD_VECTOR of a bunch of EXTRACT_VECTOR_ELT
14525 // operations. If the types of the vectors we're extracting from allow it,
14526 // turn this into a vector_shuffle node.
14527 SDValue DAGCombiner::reduceBuildVecToShuffle(SDNode *N) {
14528   SDLoc DL(N);
14529   EVT VT = N->getValueType(0);
14530 
14531   // Only type-legal BUILD_VECTOR nodes are converted to shuffle nodes.
14532   if (!isTypeLegal(VT))
14533     return SDValue();
14534 
14535   // May only combine to shuffle after legalize if shuffle is legal.
14536   if (LegalOperations && !TLI.isOperationLegal(ISD::VECTOR_SHUFFLE, VT))
14537     return SDValue();
14538 
14539   bool UsesZeroVector = false;
14540   unsigned NumElems = N->getNumOperands();
14541 
14542   // Record, for each element of the newly built vector, which input vector
14543   // that element comes from. -1 stands for undef, 0 for the zero vector,
14544   // and positive values for the input vectors.
14545   // VectorMask maps each element to its vector number, and VecIn maps vector
14546   // numbers to their initial SDValues.
14547 
14548   SmallVector<int, 8> VectorMask(NumElems, -1);
14549   SmallVector<SDValue, 8> VecIn;
14550   VecIn.push_back(SDValue());
14551 
14552   for (unsigned i = 0; i != NumElems; ++i) {
14553     SDValue Op = N->getOperand(i);
14554 
14555     if (Op.isUndef())
14556       continue;
14557 
14558     // See if we can use a blend with a zero vector.
14559     // TODO: Should we generalize this to a blend with an arbitrary constant
14560     // vector?
14561     if (isNullConstant(Op) || isNullFPConstant(Op)) {
14562       UsesZeroVector = true;
14563       VectorMask[i] = 0;
14564       continue;
14565     }
14566 
14567     // Not an undef or zero. If the input is something other than an
14568     // EXTRACT_VECTOR_ELT with a constant index, bail out.
14569     if (Op.getOpcode() != ISD::EXTRACT_VECTOR_ELT ||
14570         !isa<ConstantSDNode>(Op.getOperand(1)))
14571       return SDValue();
14572     SDValue ExtractedFromVec = Op.getOperand(0);
14573 
14574     // All inputs must have the same element type as the output.
14575     if (VT.getVectorElementType() !=
14576         ExtractedFromVec.getValueType().getVectorElementType())
14577       return SDValue();
14578 
14579     // Have we seen this input vector before?
14580     // The vectors are expected to be tiny (usually 1 or 2 elements), so using
14581     // a map back from SDValues to numbers isn't worth it.
14582     unsigned Idx = std::distance(
14583         VecIn.begin(), std::find(VecIn.begin(), VecIn.end(), ExtractedFromVec));
14584     if (Idx == VecIn.size())
14585       VecIn.push_back(ExtractedFromVec);
14586 
14587     VectorMask[i] = Idx;
14588   }
14589 
14590   // If we didn't find at least one input vector, bail out.
14591   if (VecIn.size() < 2)
14592     return SDValue();
14593 
14594   // If all the Operands of BUILD_VECTOR extract from same
14595   // vector, then split the vector efficiently based on the maximum
14596   // vector access index and adjust the VectorMask and
14597   // VecIn accordingly.
14598   if (VecIn.size() == 2) {
14599     unsigned MaxIndex = 0;
14600     unsigned NearestPow2 = 0;
14601     SDValue Vec = VecIn.back();
14602     EVT InVT = Vec.getValueType();
14603     MVT IdxTy = TLI.getVectorIdxTy(DAG.getDataLayout());
14604     SmallVector<unsigned, 8> IndexVec(NumElems, 0);
14605 
14606     for (unsigned i = 0; i < NumElems; i++) {
14607       if (VectorMask[i] <= 0)
14608         continue;
14609       unsigned Index = N->getOperand(i).getConstantOperandVal(1);
14610       IndexVec[i] = Index;
14611       MaxIndex = std::max(MaxIndex, Index);
14612     }
14613 
14614     NearestPow2 = PowerOf2Ceil(MaxIndex);
14615     if (InVT.isSimple() && NearestPow2 > 2 && MaxIndex < NearestPow2 &&
14616         NumElems * 2 < NearestPow2) {
14617       unsigned SplitSize = NearestPow2 / 2;
14618       EVT SplitVT = EVT::getVectorVT(*DAG.getContext(),
14619                                      InVT.getVectorElementType(), SplitSize);
14620       if (TLI.isTypeLegal(SplitVT)) {
14621         SDValue VecIn2 = DAG.getNode(ISD::EXTRACT_SUBVECTOR, DL, SplitVT, Vec,
14622                                      DAG.getConstant(SplitSize, DL, IdxTy));
14623         SDValue VecIn1 = DAG.getNode(ISD::EXTRACT_SUBVECTOR, DL, SplitVT, Vec,
14624                                      DAG.getConstant(0, DL, IdxTy));
14625         VecIn.pop_back();
14626         VecIn.push_back(VecIn1);
14627         VecIn.push_back(VecIn2);
14628 
14629         for (unsigned i = 0; i < NumElems; i++) {
14630           if (VectorMask[i] <= 0)
14631             continue;
14632           VectorMask[i] = (IndexVec[i] < SplitSize) ? 1 : 2;
14633         }
14634       }
14635     }
14636   }
14637 
14638   // TODO: We want to sort the vectors by descending length, so that adjacent
14639   // pairs have similar length, and the longer vector is always first in the
14640   // pair.
14641 
14642   // TODO: Should this fire if some of the input vectors has illegal type (like
14643   // it does now), or should we let legalization run its course first?
14644 
14645   // Shuffle phase:
14646   // Take pairs of vectors, and shuffle them so that the result has elements
14647   // from these vectors in the correct places.
14648   // For example, given:
14649   // t10: i32 = extract_vector_elt t1, Constant:i64<0>
14650   // t11: i32 = extract_vector_elt t2, Constant:i64<0>
14651   // t12: i32 = extract_vector_elt t3, Constant:i64<0>
14652   // t13: i32 = extract_vector_elt t1, Constant:i64<1>
14653   // t14: v4i32 = BUILD_VECTOR t10, t11, t12, t13
14654   // We will generate:
14655   // t20: v4i32 = vector_shuffle<0,4,u,1> t1, t2
14656   // t21: v4i32 = vector_shuffle<u,u,0,u> t3, undef
14657   SmallVector<SDValue, 4> Shuffles;
14658   for (unsigned In = 0, Len = (VecIn.size() / 2); In < Len; ++In) {
14659     unsigned LeftIdx = 2 * In + 1;
14660     SDValue VecLeft = VecIn[LeftIdx];
14661     SDValue VecRight =
14662         (LeftIdx + 1) < VecIn.size() ? VecIn[LeftIdx + 1] : SDValue();
14663 
14664     if (SDValue Shuffle = createBuildVecShuffle(DL, N, VectorMask, VecLeft,
14665                                                 VecRight, LeftIdx))
14666       Shuffles.push_back(Shuffle);
14667     else
14668       return SDValue();
14669   }
14670 
14671   // If we need the zero vector as an "ingredient" in the blend tree, add it
14672   // to the list of shuffles.
14673   if (UsesZeroVector)
14674     Shuffles.push_back(VT.isInteger() ? DAG.getConstant(0, DL, VT)
14675                                       : DAG.getConstantFP(0.0, DL, VT));
14676 
14677   // If we only have one shuffle, we're done.
14678   if (Shuffles.size() == 1)
14679     return Shuffles[0];
14680 
14681   // Update the vector mask to point to the post-shuffle vectors.
14682   for (int &Vec : VectorMask)
14683     if (Vec == 0)
14684       Vec = Shuffles.size() - 1;
14685     else
14686       Vec = (Vec - 1) / 2;
14687 
14688   // More than one shuffle. Generate a binary tree of blends, e.g. if from
14689   // the previous step we got the set of shuffles t10, t11, t12, t13, we will
14690   // generate:
14691   // t10: v8i32 = vector_shuffle<0,8,u,u,u,u,u,u> t1, t2
14692   // t11: v8i32 = vector_shuffle<u,u,0,8,u,u,u,u> t3, t4
14693   // t12: v8i32 = vector_shuffle<u,u,u,u,0,8,u,u> t5, t6
14694   // t13: v8i32 = vector_shuffle<u,u,u,u,u,u,0,8> t7, t8
14695   // t20: v8i32 = vector_shuffle<0,1,10,11,u,u,u,u> t10, t11
14696   // t21: v8i32 = vector_shuffle<u,u,u,u,4,5,14,15> t12, t13
14697   // t30: v8i32 = vector_shuffle<0,1,2,3,12,13,14,15> t20, t21
14698 
14699   // Make sure the initial size of the shuffle list is even.
14700   if (Shuffles.size() % 2)
14701     Shuffles.push_back(DAG.getUNDEF(VT));
14702 
14703   for (unsigned CurSize = Shuffles.size(); CurSize > 1; CurSize /= 2) {
14704     if (CurSize % 2) {
14705       Shuffles[CurSize] = DAG.getUNDEF(VT);
14706       CurSize++;
14707     }
14708     for (unsigned In = 0, Len = CurSize / 2; In < Len; ++In) {
14709       int Left = 2 * In;
14710       int Right = 2 * In + 1;
14711       SmallVector<int, 8> Mask(NumElems, -1);
14712       for (unsigned i = 0; i != NumElems; ++i) {
14713         if (VectorMask[i] == Left) {
14714           Mask[i] = i;
14715           VectorMask[i] = In;
14716         } else if (VectorMask[i] == Right) {
14717           Mask[i] = i + NumElems;
14718           VectorMask[i] = In;
14719         }
14720       }
14721 
14722       Shuffles[In] =
14723           DAG.getVectorShuffle(VT, DL, Shuffles[Left], Shuffles[Right], Mask);
14724     }
14725   }
14726   return Shuffles[0];
14727 }
14728 
14729 SDValue DAGCombiner::visitBUILD_VECTOR(SDNode *N) {
14730   EVT VT = N->getValueType(0);
14731 
14732   // A vector built entirely of undefs is undef.
14733   if (ISD::allOperandsUndef(N))
14734     return DAG.getUNDEF(VT);
14735 
14736   // Check if we can express BUILD VECTOR via subvector extract.
14737   if (!LegalTypes && (N->getNumOperands() > 1)) {
14738     SDValue Op0 = N->getOperand(0);
14739     auto checkElem = [&](SDValue Op) -> uint64_t {
14740       if ((Op.getOpcode() == ISD::EXTRACT_VECTOR_ELT) &&
14741           (Op0.getOperand(0) == Op.getOperand(0)))
14742         if (auto CNode = dyn_cast<ConstantSDNode>(Op.getOperand(1)))
14743           return CNode->getZExtValue();
14744       return -1;
14745     };
14746 
14747     int Offset = checkElem(Op0);
14748     for (unsigned i = 0; i < N->getNumOperands(); ++i) {
14749       if (Offset + i != checkElem(N->getOperand(i))) {
14750         Offset = -1;
14751         break;
14752       }
14753     }
14754 
14755     if ((Offset == 0) &&
14756         (Op0.getOperand(0).getValueType() == N->getValueType(0)))
14757       return Op0.getOperand(0);
14758     if ((Offset != -1) &&
14759         ((Offset % N->getValueType(0).getVectorNumElements()) ==
14760          0)) // IDX must be multiple of output size.
14761       return DAG.getNode(ISD::EXTRACT_SUBVECTOR, SDLoc(N), N->getValueType(0),
14762                          Op0.getOperand(0), Op0.getOperand(1));
14763   }
14764 
14765   if (SDValue V = reduceBuildVecExtToExtBuildVec(N))
14766     return V;
14767 
14768   if (SDValue V = reduceBuildVecConvertToConvertBuildVec(N))
14769     return V;
14770 
14771   if (SDValue V = reduceBuildVecToShuffle(N))
14772     return V;
14773 
14774   return SDValue();
14775 }
14776 
14777 static SDValue combineConcatVectorOfScalars(SDNode *N, SelectionDAG &DAG) {
14778   const TargetLowering &TLI = DAG.getTargetLoweringInfo();
14779   EVT OpVT = N->getOperand(0).getValueType();
14780 
14781   // If the operands are legal vectors, leave them alone.
14782   if (TLI.isTypeLegal(OpVT))
14783     return SDValue();
14784 
14785   SDLoc DL(N);
14786   EVT VT = N->getValueType(0);
14787   SmallVector<SDValue, 8> Ops;
14788 
14789   EVT SVT = EVT::getIntegerVT(*DAG.getContext(), OpVT.getSizeInBits());
14790   SDValue ScalarUndef = DAG.getNode(ISD::UNDEF, DL, SVT);
14791 
14792   // Keep track of what we encounter.
14793   bool AnyInteger = false;
14794   bool AnyFP = false;
14795   for (const SDValue &Op : N->ops()) {
14796     if (ISD::BITCAST == Op.getOpcode() &&
14797         !Op.getOperand(0).getValueType().isVector())
14798       Ops.push_back(Op.getOperand(0));
14799     else if (ISD::UNDEF == Op.getOpcode())
14800       Ops.push_back(ScalarUndef);
14801     else
14802       return SDValue();
14803 
14804     // Note whether we encounter an integer or floating point scalar.
14805     // If it's neither, bail out, it could be something weird like x86mmx.
14806     EVT LastOpVT = Ops.back().getValueType();
14807     if (LastOpVT.isFloatingPoint())
14808       AnyFP = true;
14809     else if (LastOpVT.isInteger())
14810       AnyInteger = true;
14811     else
14812       return SDValue();
14813   }
14814 
14815   // If any of the operands is a floating point scalar bitcast to a vector,
14816   // use floating point types throughout, and bitcast everything.
14817   // Replace UNDEFs by another scalar UNDEF node, of the final desired type.
14818   if (AnyFP) {
14819     SVT = EVT::getFloatingPointVT(OpVT.getSizeInBits());
14820     ScalarUndef = DAG.getNode(ISD::UNDEF, DL, SVT);
14821     if (AnyInteger) {
14822       for (SDValue &Op : Ops) {
14823         if (Op.getValueType() == SVT)
14824           continue;
14825         if (Op.isUndef())
14826           Op = ScalarUndef;
14827         else
14828           Op = DAG.getBitcast(SVT, Op);
14829       }
14830     }
14831   }
14832 
14833   EVT VecVT = EVT::getVectorVT(*DAG.getContext(), SVT,
14834                                VT.getSizeInBits() / SVT.getSizeInBits());
14835   return DAG.getBitcast(VT, DAG.getBuildVector(VecVT, DL, Ops));
14836 }
14837 
14838 // Check to see if this is a CONCAT_VECTORS of a bunch of EXTRACT_SUBVECTOR
14839 // operations. If so, and if the EXTRACT_SUBVECTOR vector inputs come from at
14840 // most two distinct vectors the same size as the result, attempt to turn this
14841 // into a legal shuffle.
14842 static SDValue combineConcatVectorOfExtracts(SDNode *N, SelectionDAG &DAG) {
14843   EVT VT = N->getValueType(0);
14844   EVT OpVT = N->getOperand(0).getValueType();
14845   int NumElts = VT.getVectorNumElements();
14846   int NumOpElts = OpVT.getVectorNumElements();
14847 
14848   SDValue SV0 = DAG.getUNDEF(VT), SV1 = DAG.getUNDEF(VT);
14849   SmallVector<int, 8> Mask;
14850 
14851   for (SDValue Op : N->ops()) {
14852     // Peek through any bitcast.
14853     Op = peekThroughBitcast(Op);
14854 
14855     // UNDEF nodes convert to UNDEF shuffle mask values.
14856     if (Op.isUndef()) {
14857       Mask.append((unsigned)NumOpElts, -1);
14858       continue;
14859     }
14860 
14861     if (Op.getOpcode() != ISD::EXTRACT_SUBVECTOR)
14862       return SDValue();
14863 
14864     // What vector are we extracting the subvector from and at what index?
14865     SDValue ExtVec = Op.getOperand(0);
14866 
14867     // We want the EVT of the original extraction to correctly scale the
14868     // extraction index.
14869     EVT ExtVT = ExtVec.getValueType();
14870 
14871     // Peek through any bitcast.
14872     ExtVec = peekThroughBitcast(ExtVec);
14873 
14874     // UNDEF nodes convert to UNDEF shuffle mask values.
14875     if (ExtVec.isUndef()) {
14876       Mask.append((unsigned)NumOpElts, -1);
14877       continue;
14878     }
14879 
14880     if (!isa<ConstantSDNode>(Op.getOperand(1)))
14881       return SDValue();
14882     int ExtIdx = Op.getConstantOperandVal(1);
14883 
14884     // Ensure that we are extracting a subvector from a vector the same
14885     // size as the result.
14886     if (ExtVT.getSizeInBits() != VT.getSizeInBits())
14887       return SDValue();
14888 
14889     // Scale the subvector index to account for any bitcast.
14890     int NumExtElts = ExtVT.getVectorNumElements();
14891     if (0 == (NumExtElts % NumElts))
14892       ExtIdx /= (NumExtElts / NumElts);
14893     else if (0 == (NumElts % NumExtElts))
14894       ExtIdx *= (NumElts / NumExtElts);
14895     else
14896       return SDValue();
14897 
14898     // At most we can reference 2 inputs in the final shuffle.
14899     if (SV0.isUndef() || SV0 == ExtVec) {
14900       SV0 = ExtVec;
14901       for (int i = 0; i != NumOpElts; ++i)
14902         Mask.push_back(i + ExtIdx);
14903     } else if (SV1.isUndef() || SV1 == ExtVec) {
14904       SV1 = ExtVec;
14905       for (int i = 0; i != NumOpElts; ++i)
14906         Mask.push_back(i + ExtIdx + NumElts);
14907     } else {
14908       return SDValue();
14909     }
14910   }
14911 
14912   if (!DAG.getTargetLoweringInfo().isShuffleMaskLegal(Mask, VT))
14913     return SDValue();
14914 
14915   return DAG.getVectorShuffle(VT, SDLoc(N), DAG.getBitcast(VT, SV0),
14916                               DAG.getBitcast(VT, SV1), Mask);
14917 }
14918 
14919 SDValue DAGCombiner::visitCONCAT_VECTORS(SDNode *N) {
14920   // If we only have one input vector, we don't need to do any concatenation.
14921   if (N->getNumOperands() == 1)
14922     return N->getOperand(0);
14923 
14924   // Check if all of the operands are undefs.
14925   EVT VT = N->getValueType(0);
14926   if (ISD::allOperandsUndef(N))
14927     return DAG.getUNDEF(VT);
14928 
14929   // Optimize concat_vectors where all but the first of the vectors are undef.
14930   if (std::all_of(std::next(N->op_begin()), N->op_end(), [](const SDValue &Op) {
14931         return Op.isUndef();
14932       })) {
14933     SDValue In = N->getOperand(0);
14934     assert(In.getValueType().isVector() && "Must concat vectors");
14935 
14936     // Transform: concat_vectors(scalar, undef) -> scalar_to_vector(sclr).
14937     if (In->getOpcode() == ISD::BITCAST &&
14938         !In->getOperand(0)->getValueType(0).isVector()) {
14939       SDValue Scalar = In->getOperand(0);
14940 
14941       // If the bitcast type isn't legal, it might be a trunc of a legal type;
14942       // look through the trunc so we can still do the transform:
14943       //   concat_vectors(trunc(scalar), undef) -> scalar_to_vector(scalar)
14944       if (Scalar->getOpcode() == ISD::TRUNCATE &&
14945           !TLI.isTypeLegal(Scalar.getValueType()) &&
14946           TLI.isTypeLegal(Scalar->getOperand(0).getValueType()))
14947         Scalar = Scalar->getOperand(0);
14948 
14949       EVT SclTy = Scalar->getValueType(0);
14950 
14951       if (!SclTy.isFloatingPoint() && !SclTy.isInteger())
14952         return SDValue();
14953 
14954       unsigned VNTNumElms = VT.getSizeInBits() / SclTy.getSizeInBits();
14955       if (VNTNumElms < 2)
14956         return SDValue();
14957 
14958       EVT NVT = EVT::getVectorVT(*DAG.getContext(), SclTy, VNTNumElms);
14959       if (!TLI.isTypeLegal(NVT) || !TLI.isTypeLegal(Scalar.getValueType()))
14960         return SDValue();
14961 
14962       SDValue Res = DAG.getNode(ISD::SCALAR_TO_VECTOR, SDLoc(N), NVT, Scalar);
14963       return DAG.getBitcast(VT, Res);
14964     }
14965   }
14966 
14967   // Fold any combination of BUILD_VECTOR or UNDEF nodes into one BUILD_VECTOR.
14968   // We have already tested above for an UNDEF only concatenation.
14969   // fold (concat_vectors (BUILD_VECTOR A, B, ...), (BUILD_VECTOR C, D, ...))
14970   // -> (BUILD_VECTOR A, B, ..., C, D, ...)
14971   auto IsBuildVectorOrUndef = [](const SDValue &Op) {
14972     return ISD::UNDEF == Op.getOpcode() || ISD::BUILD_VECTOR == Op.getOpcode();
14973   };
14974   if (llvm::all_of(N->ops(), IsBuildVectorOrUndef)) {
14975     SmallVector<SDValue, 8> Opnds;
14976     EVT SVT = VT.getScalarType();
14977 
14978     EVT MinVT = SVT;
14979     if (!SVT.isFloatingPoint()) {
14980       // If BUILD_VECTOR are from built from integer, they may have different
14981       // operand types. Get the smallest type and truncate all operands to it.
14982       bool FoundMinVT = false;
14983       for (const SDValue &Op : N->ops())
14984         if (ISD::BUILD_VECTOR == Op.getOpcode()) {
14985           EVT OpSVT = Op.getOperand(0)->getValueType(0);
14986           MinVT = (!FoundMinVT || OpSVT.bitsLE(MinVT)) ? OpSVT : MinVT;
14987           FoundMinVT = true;
14988         }
14989       assert(FoundMinVT && "Concat vector type mismatch");
14990     }
14991 
14992     for (const SDValue &Op : N->ops()) {
14993       EVT OpVT = Op.getValueType();
14994       unsigned NumElts = OpVT.getVectorNumElements();
14995 
14996       if (ISD::UNDEF == Op.getOpcode())
14997         Opnds.append(NumElts, DAG.getUNDEF(MinVT));
14998 
14999       if (ISD::BUILD_VECTOR == Op.getOpcode()) {
15000         if (SVT.isFloatingPoint()) {
15001           assert(SVT == OpVT.getScalarType() && "Concat vector type mismatch");
15002           Opnds.append(Op->op_begin(), Op->op_begin() + NumElts);
15003         } else {
15004           for (unsigned i = 0; i != NumElts; ++i)
15005             Opnds.push_back(
15006                 DAG.getNode(ISD::TRUNCATE, SDLoc(N), MinVT, Op.getOperand(i)));
15007         }
15008       }
15009     }
15010 
15011     assert(VT.getVectorNumElements() == Opnds.size() &&
15012            "Concat vector type mismatch");
15013     return DAG.getBuildVector(VT, SDLoc(N), Opnds);
15014   }
15015 
15016   // Fold CONCAT_VECTORS of only bitcast scalars (or undef) to BUILD_VECTOR.
15017   if (SDValue V = combineConcatVectorOfScalars(N, DAG))
15018     return V;
15019 
15020   // Fold CONCAT_VECTORS of EXTRACT_SUBVECTOR (or undef) to VECTOR_SHUFFLE.
15021   if (Level < AfterLegalizeVectorOps && TLI.isTypeLegal(VT))
15022     if (SDValue V = combineConcatVectorOfExtracts(N, DAG))
15023       return V;
15024 
15025   // Type legalization of vectors and DAG canonicalization of SHUFFLE_VECTOR
15026   // nodes often generate nop CONCAT_VECTOR nodes.
15027   // Scan the CONCAT_VECTOR operands and look for a CONCAT operations that
15028   // place the incoming vectors at the exact same location.
15029   SDValue SingleSource = SDValue();
15030   unsigned PartNumElem = N->getOperand(0).getValueType().getVectorNumElements();
15031 
15032   for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i) {
15033     SDValue Op = N->getOperand(i);
15034 
15035     if (Op.isUndef())
15036       continue;
15037 
15038     // Check if this is the identity extract:
15039     if (Op.getOpcode() != ISD::EXTRACT_SUBVECTOR)
15040       return SDValue();
15041 
15042     // Find the single incoming vector for the extract_subvector.
15043     if (SingleSource.getNode()) {
15044       if (Op.getOperand(0) != SingleSource)
15045         return SDValue();
15046     } else {
15047       SingleSource = Op.getOperand(0);
15048 
15049       // Check the source type is the same as the type of the result.
15050       // If not, this concat may extend the vector, so we can not
15051       // optimize it away.
15052       if (SingleSource.getValueType() != N->getValueType(0))
15053         return SDValue();
15054     }
15055 
15056     unsigned IdentityIndex = i * PartNumElem;
15057     ConstantSDNode *CS = dyn_cast<ConstantSDNode>(Op.getOperand(1));
15058     // The extract index must be constant.
15059     if (!CS)
15060       return SDValue();
15061 
15062     // Check that we are reading from the identity index.
15063     if (CS->getZExtValue() != IdentityIndex)
15064       return SDValue();
15065   }
15066 
15067   if (SingleSource.getNode())
15068     return SingleSource;
15069 
15070   return SDValue();
15071 }
15072 
15073 /// If we are extracting a subvector produced by a wide binary operator with at
15074 /// at least one operand that was the result of a vector concatenation, then try
15075 /// to use the narrow vector operands directly to avoid the concatenation and
15076 /// extraction.
15077 static SDValue narrowExtractedVectorBinOp(SDNode *Extract, SelectionDAG &DAG) {
15078   // TODO: Refactor with the caller (visitEXTRACT_SUBVECTOR), so we can share
15079   // some of these bailouts with other transforms.
15080 
15081   // The extract index must be a constant, so we can map it to a concat operand.
15082   auto *ExtractIndex = dyn_cast<ConstantSDNode>(Extract->getOperand(1));
15083   if (!ExtractIndex)
15084     return SDValue();
15085 
15086   // Only handle the case where we are doubling and then halving. A larger ratio
15087   // may require more than two narrow binops to replace the wide binop.
15088   EVT VT = Extract->getValueType(0);
15089   unsigned NumElems = VT.getVectorNumElements();
15090   assert((ExtractIndex->getZExtValue() % NumElems) == 0 &&
15091          "Extract index is not a multiple of the vector length.");
15092   if (Extract->getOperand(0).getValueSizeInBits() != VT.getSizeInBits() * 2)
15093     return SDValue();
15094 
15095   // We are looking for an optionally bitcasted wide vector binary operator
15096   // feeding an extract subvector.
15097   SDValue BinOp = peekThroughBitcast(Extract->getOperand(0));
15098 
15099   // TODO: The motivating case for this transform is an x86 AVX1 target. That
15100   // target has temptingly almost legal versions of bitwise logic ops in 256-bit
15101   // flavors, but no other 256-bit integer support. This could be extended to
15102   // handle any binop, but that may require fixing/adding other folds to avoid
15103   // codegen regressions.
15104   unsigned BOpcode = BinOp.getOpcode();
15105   if (BOpcode != ISD::AND && BOpcode != ISD::OR && BOpcode != ISD::XOR)
15106     return SDValue();
15107 
15108   // The binop must be a vector type, so we can chop it in half.
15109   EVT WideBVT = BinOp.getValueType();
15110   if (!WideBVT.isVector())
15111     return SDValue();
15112 
15113   // Bail out if the target does not support a narrower version of the binop.
15114   EVT NarrowBVT = EVT::getVectorVT(*DAG.getContext(), WideBVT.getScalarType(),
15115                                    WideBVT.getVectorNumElements() / 2);
15116   const TargetLowering &TLI = DAG.getTargetLoweringInfo();
15117   if (!TLI.isOperationLegalOrCustomOrPromote(BOpcode, NarrowBVT))
15118     return SDValue();
15119 
15120   // Peek through bitcasts of the binary operator operands if needed.
15121   SDValue LHS = peekThroughBitcast(BinOp.getOperand(0));
15122   SDValue RHS = peekThroughBitcast(BinOp.getOperand(1));
15123 
15124   // We need at least one concatenation operation of a binop operand to make
15125   // this transform worthwhile. The concat must double the input vector sizes.
15126   // TODO: Should we also handle INSERT_SUBVECTOR patterns?
15127   bool ConcatL =
15128       LHS.getOpcode() == ISD::CONCAT_VECTORS && LHS.getNumOperands() == 2;
15129   bool ConcatR =
15130       RHS.getOpcode() == ISD::CONCAT_VECTORS && RHS.getNumOperands() == 2;
15131   if (!ConcatL && !ConcatR)
15132     return SDValue();
15133 
15134   // If one of the binop operands was not the result of a concat, we must
15135   // extract a half-sized operand for our new narrow binop. We can't just reuse
15136   // the original extract index operand because we may have bitcasted.
15137   unsigned ConcatOpNum = ExtractIndex->getZExtValue() / NumElems;
15138   unsigned ExtBOIdx = ConcatOpNum * NarrowBVT.getVectorNumElements();
15139   EVT ExtBOIdxVT = Extract->getOperand(1).getValueType();
15140   SDLoc DL(Extract);
15141 
15142   // extract (binop (concat X1, X2), (concat Y1, Y2)), N --> binop XN, YN
15143   // extract (binop (concat X1, X2), Y), N --> binop XN, (extract Y, N)
15144   // extract (binop X, (concat Y1, Y2)), N --> binop (extract X, N), YN
15145   SDValue X = ConcatL ? DAG.getBitcast(NarrowBVT, LHS.getOperand(ConcatOpNum))
15146                       : DAG.getNode(ISD::EXTRACT_SUBVECTOR, DL, NarrowBVT,
15147                                     BinOp.getOperand(0),
15148                                     DAG.getConstant(ExtBOIdx, DL, ExtBOIdxVT));
15149 
15150   SDValue Y = ConcatR ? DAG.getBitcast(NarrowBVT, RHS.getOperand(ConcatOpNum))
15151                       : DAG.getNode(ISD::EXTRACT_SUBVECTOR, DL, NarrowBVT,
15152                                     BinOp.getOperand(1),
15153                                     DAG.getConstant(ExtBOIdx, DL, ExtBOIdxVT));
15154 
15155   SDValue NarrowBinOp = DAG.getNode(BOpcode, DL, NarrowBVT, X, Y);
15156   return DAG.getBitcast(VT, NarrowBinOp);
15157 }
15158 
15159 /// If we are extracting a subvector from a wide vector load, convert to a
15160 /// narrow load to eliminate the extraction:
15161 /// (extract_subvector (load wide vector)) --> (load narrow vector)
15162 static SDValue narrowExtractedVectorLoad(SDNode *Extract, SelectionDAG &DAG) {
15163   // TODO: Add support for big-endian. The offset calculation must be adjusted.
15164   if (DAG.getDataLayout().isBigEndian())
15165     return SDValue();
15166 
15167   // TODO: The one-use check is overly conservative. Check the cost of the
15168   // extract instead or remove that condition entirely.
15169   auto *Ld = dyn_cast<LoadSDNode>(Extract->getOperand(0));
15170   auto *ExtIdx = dyn_cast<ConstantSDNode>(Extract->getOperand(1));
15171   if (!Ld || !Ld->hasOneUse() || Ld->getExtensionType() || Ld->isVolatile() ||
15172       !ExtIdx)
15173     return SDValue();
15174 
15175   // The narrow load will be offset from the base address of the old load if
15176   // we are extracting from something besides index 0 (little-endian).
15177   EVT VT = Extract->getValueType(0);
15178   SDLoc DL(Extract);
15179   SDValue BaseAddr = Ld->getOperand(1);
15180   unsigned Offset = ExtIdx->getZExtValue() * VT.getScalarType().getStoreSize();
15181 
15182   // TODO: Use "BaseIndexOffset" to make this more effective.
15183   SDValue NewAddr = DAG.getMemBasePlusOffset(BaseAddr, Offset, DL);
15184   MachineFunction &MF = DAG.getMachineFunction();
15185   MachineMemOperand *MMO = MF.getMachineMemOperand(Ld->getMemOperand(), Offset,
15186                                                    VT.getStoreSize());
15187   SDValue NewLd = DAG.getLoad(VT, DL, Ld->getChain(), NewAddr, MMO);
15188   DAG.makeEquivalentMemoryOrdering(Ld, NewLd);
15189   return NewLd;
15190 }
15191 
15192 SDValue DAGCombiner::visitEXTRACT_SUBVECTOR(SDNode* N) {
15193   EVT NVT = N->getValueType(0);
15194   SDValue V = N->getOperand(0);
15195 
15196   // Extract from UNDEF is UNDEF.
15197   if (V.isUndef())
15198     return DAG.getUNDEF(NVT);
15199 
15200   if (TLI.isOperationLegalOrCustomOrPromote(ISD::LOAD, NVT))
15201     if (SDValue NarrowLoad = narrowExtractedVectorLoad(N, DAG))
15202       return NarrowLoad;
15203 
15204   // Combine:
15205   //    (extract_subvec (concat V1, V2, ...), i)
15206   // Into:
15207   //    Vi if possible
15208   // Only operand 0 is checked as 'concat' assumes all inputs of the same
15209   // type.
15210   if (V->getOpcode() == ISD::CONCAT_VECTORS &&
15211       isa<ConstantSDNode>(N->getOperand(1)) &&
15212       V->getOperand(0).getValueType() == NVT) {
15213     unsigned Idx = N->getConstantOperandVal(1);
15214     unsigned NumElems = NVT.getVectorNumElements();
15215     assert((Idx % NumElems) == 0 &&
15216            "IDX in concat is not a multiple of the result vector length.");
15217     return V->getOperand(Idx / NumElems);
15218   }
15219 
15220   // Skip bitcasting
15221   V = peekThroughBitcast(V);
15222 
15223   // If the input is a build vector. Try to make a smaller build vector.
15224   if (V->getOpcode() == ISD::BUILD_VECTOR) {
15225     if (auto *Idx = dyn_cast<ConstantSDNode>(N->getOperand(1))) {
15226       EVT InVT = V->getValueType(0);
15227       unsigned ExtractSize = NVT.getSizeInBits();
15228       unsigned EltSize = InVT.getScalarSizeInBits();
15229       // Only do this if we won't split any elements.
15230       if (ExtractSize % EltSize == 0) {
15231         unsigned NumElems = ExtractSize / EltSize;
15232         EVT ExtractVT = EVT::getVectorVT(*DAG.getContext(),
15233                                          InVT.getVectorElementType(), NumElems);
15234         if ((!LegalOperations ||
15235              TLI.isOperationLegal(ISD::BUILD_VECTOR, ExtractVT)) &&
15236             (!LegalTypes || TLI.isTypeLegal(ExtractVT))) {
15237           unsigned IdxVal = (Idx->getZExtValue() * NVT.getScalarSizeInBits()) /
15238                             EltSize;
15239 
15240           // Extract the pieces from the original build_vector.
15241           SDValue BuildVec = DAG.getBuildVector(ExtractVT, SDLoc(N),
15242                                             makeArrayRef(V->op_begin() + IdxVal,
15243                                                          NumElems));
15244           return DAG.getBitcast(NVT, BuildVec);
15245         }
15246       }
15247     }
15248   }
15249 
15250   if (V->getOpcode() == ISD::INSERT_SUBVECTOR) {
15251     // Handle only simple case where vector being inserted and vector
15252     // being extracted are of same size.
15253     EVT SmallVT = V->getOperand(1).getValueType();
15254     if (!NVT.bitsEq(SmallVT))
15255       return SDValue();
15256 
15257     // Only handle cases where both indexes are constants.
15258     ConstantSDNode *ExtIdx = dyn_cast<ConstantSDNode>(N->getOperand(1));
15259     ConstantSDNode *InsIdx = dyn_cast<ConstantSDNode>(V->getOperand(2));
15260 
15261     if (InsIdx && ExtIdx) {
15262       // Combine:
15263       //    (extract_subvec (insert_subvec V1, V2, InsIdx), ExtIdx)
15264       // Into:
15265       //    indices are equal or bit offsets are equal => V1
15266       //    otherwise => (extract_subvec V1, ExtIdx)
15267       if (InsIdx->getZExtValue() * SmallVT.getScalarSizeInBits() ==
15268           ExtIdx->getZExtValue() * NVT.getScalarSizeInBits())
15269         return DAG.getBitcast(NVT, V->getOperand(1));
15270       return DAG.getNode(
15271           ISD::EXTRACT_SUBVECTOR, SDLoc(N), NVT,
15272           DAG.getBitcast(N->getOperand(0).getValueType(), V->getOperand(0)),
15273           N->getOperand(1));
15274     }
15275   }
15276 
15277   if (SDValue NarrowBOp = narrowExtractedVectorBinOp(N, DAG))
15278     return NarrowBOp;
15279 
15280   return SDValue();
15281 }
15282 
15283 static SDValue simplifyShuffleOperandRecursively(SmallBitVector &UsedElements,
15284                                                  SDValue V, SelectionDAG &DAG) {
15285   SDLoc DL(V);
15286   EVT VT = V.getValueType();
15287 
15288   switch (V.getOpcode()) {
15289   default:
15290     return V;
15291 
15292   case ISD::CONCAT_VECTORS: {
15293     EVT OpVT = V->getOperand(0).getValueType();
15294     int OpSize = OpVT.getVectorNumElements();
15295     SmallBitVector OpUsedElements(OpSize, false);
15296     bool FoundSimplification = false;
15297     SmallVector<SDValue, 4> NewOps;
15298     NewOps.reserve(V->getNumOperands());
15299     for (int i = 0, NumOps = V->getNumOperands(); i < NumOps; ++i) {
15300       SDValue Op = V->getOperand(i);
15301       bool OpUsed = false;
15302       for (int j = 0; j < OpSize; ++j)
15303         if (UsedElements[i * OpSize + j]) {
15304           OpUsedElements[j] = true;
15305           OpUsed = true;
15306         }
15307       NewOps.push_back(
15308           OpUsed ? simplifyShuffleOperandRecursively(OpUsedElements, Op, DAG)
15309                  : DAG.getUNDEF(OpVT));
15310       FoundSimplification |= Op == NewOps.back();
15311       OpUsedElements.reset();
15312     }
15313     if (FoundSimplification)
15314       V = DAG.getNode(ISD::CONCAT_VECTORS, DL, VT, NewOps);
15315     return V;
15316   }
15317 
15318   case ISD::INSERT_SUBVECTOR: {
15319     SDValue BaseV = V->getOperand(0);
15320     SDValue SubV = V->getOperand(1);
15321     auto *IdxN = dyn_cast<ConstantSDNode>(V->getOperand(2));
15322     if (!IdxN)
15323       return V;
15324 
15325     int SubSize = SubV.getValueType().getVectorNumElements();
15326     int Idx = IdxN->getZExtValue();
15327     bool SubVectorUsed = false;
15328     SmallBitVector SubUsedElements(SubSize, false);
15329     for (int i = 0; i < SubSize; ++i)
15330       if (UsedElements[i + Idx]) {
15331         SubVectorUsed = true;
15332         SubUsedElements[i] = true;
15333         UsedElements[i + Idx] = false;
15334       }
15335 
15336     // Now recurse on both the base and sub vectors.
15337     SDValue SimplifiedSubV =
15338         SubVectorUsed
15339             ? simplifyShuffleOperandRecursively(SubUsedElements, SubV, DAG)
15340             : DAG.getUNDEF(SubV.getValueType());
15341     SDValue SimplifiedBaseV = simplifyShuffleOperandRecursively(UsedElements, BaseV, DAG);
15342     if (SimplifiedSubV != SubV || SimplifiedBaseV != BaseV)
15343       V = DAG.getNode(ISD::INSERT_SUBVECTOR, DL, VT,
15344                       SimplifiedBaseV, SimplifiedSubV, V->getOperand(2));
15345     return V;
15346   }
15347   }
15348 }
15349 
15350 static SDValue simplifyShuffleOperands(ShuffleVectorSDNode *SVN, SDValue N0,
15351                                        SDValue N1, SelectionDAG &DAG) {
15352   EVT VT = SVN->getValueType(0);
15353   int NumElts = VT.getVectorNumElements();
15354   SmallBitVector N0UsedElements(NumElts, false), N1UsedElements(NumElts, false);
15355   for (int M : SVN->getMask())
15356     if (M >= 0 && M < NumElts)
15357       N0UsedElements[M] = true;
15358     else if (M >= NumElts)
15359       N1UsedElements[M - NumElts] = true;
15360 
15361   SDValue S0 = simplifyShuffleOperandRecursively(N0UsedElements, N0, DAG);
15362   SDValue S1 = simplifyShuffleOperandRecursively(N1UsedElements, N1, DAG);
15363   if (S0 == N0 && S1 == N1)
15364     return SDValue();
15365 
15366   return DAG.getVectorShuffle(VT, SDLoc(SVN), S0, S1, SVN->getMask());
15367 }
15368 
15369 static SDValue simplifyShuffleMask(ShuffleVectorSDNode *SVN, SDValue N0,
15370                                    SDValue N1, SelectionDAG &DAG) {
15371   auto isUndefElt = [](SDValue V, int Idx) {
15372     // TODO - handle more cases as required.
15373     if (V.getOpcode() == ISD::BUILD_VECTOR)
15374       return V.getOperand(Idx).isUndef();
15375     if (V.getOpcode() == ISD::SCALAR_TO_VECTOR)
15376       return (Idx != 0) || V.getOperand(0).isUndef();
15377     return false;
15378   };
15379 
15380   EVT VT = SVN->getValueType(0);
15381   unsigned NumElts = VT.getVectorNumElements();
15382 
15383   bool Changed = false;
15384   SmallVector<int, 8> NewMask;
15385   for (unsigned i = 0; i != NumElts; ++i) {
15386     int Idx = SVN->getMaskElt(i);
15387     if ((0 <= Idx && Idx < (int)NumElts && isUndefElt(N0, Idx)) ||
15388         ((int)NumElts < Idx && isUndefElt(N1, Idx - NumElts))) {
15389       Changed = true;
15390       Idx = -1;
15391     }
15392     NewMask.push_back(Idx);
15393   }
15394   if (Changed)
15395     return DAG.getVectorShuffle(VT, SDLoc(SVN), N0, N1, NewMask);
15396 
15397   return SDValue();
15398 }
15399 
15400 // Tries to turn a shuffle of two CONCAT_VECTORS into a single concat,
15401 // or turn a shuffle of a single concat into simpler shuffle then concat.
15402 static SDValue partitionShuffleOfConcats(SDNode *N, SelectionDAG &DAG) {
15403   EVT VT = N->getValueType(0);
15404   unsigned NumElts = VT.getVectorNumElements();
15405 
15406   SDValue N0 = N->getOperand(0);
15407   SDValue N1 = N->getOperand(1);
15408   ShuffleVectorSDNode *SVN = cast<ShuffleVectorSDNode>(N);
15409 
15410   SmallVector<SDValue, 4> Ops;
15411   EVT ConcatVT = N0.getOperand(0).getValueType();
15412   unsigned NumElemsPerConcat = ConcatVT.getVectorNumElements();
15413   unsigned NumConcats = NumElts / NumElemsPerConcat;
15414 
15415   // Special case: shuffle(concat(A,B)) can be more efficiently represented
15416   // as concat(shuffle(A,B),UNDEF) if the shuffle doesn't set any of the high
15417   // half vector elements.
15418   if (NumElemsPerConcat * 2 == NumElts && N1.isUndef() &&
15419       std::all_of(SVN->getMask().begin() + NumElemsPerConcat,
15420                   SVN->getMask().end(), [](int i) { return i == -1; })) {
15421     N0 = DAG.getVectorShuffle(ConcatVT, SDLoc(N), N0.getOperand(0), N0.getOperand(1),
15422                               makeArrayRef(SVN->getMask().begin(), NumElemsPerConcat));
15423     N1 = DAG.getUNDEF(ConcatVT);
15424     return DAG.getNode(ISD::CONCAT_VECTORS, SDLoc(N), VT, N0, N1);
15425   }
15426 
15427   // Look at every vector that's inserted. We're looking for exact
15428   // subvector-sized copies from a concatenated vector
15429   for (unsigned I = 0; I != NumConcats; ++I) {
15430     // Make sure we're dealing with a copy.
15431     unsigned Begin = I * NumElemsPerConcat;
15432     bool AllUndef = true, NoUndef = true;
15433     for (unsigned J = Begin; J != Begin + NumElemsPerConcat; ++J) {
15434       if (SVN->getMaskElt(J) >= 0)
15435         AllUndef = false;
15436       else
15437         NoUndef = false;
15438     }
15439 
15440     if (NoUndef) {
15441       if (SVN->getMaskElt(Begin) % NumElemsPerConcat != 0)
15442         return SDValue();
15443 
15444       for (unsigned J = 1; J != NumElemsPerConcat; ++J)
15445         if (SVN->getMaskElt(Begin + J - 1) + 1 != SVN->getMaskElt(Begin + J))
15446           return SDValue();
15447 
15448       unsigned FirstElt = SVN->getMaskElt(Begin) / NumElemsPerConcat;
15449       if (FirstElt < N0.getNumOperands())
15450         Ops.push_back(N0.getOperand(FirstElt));
15451       else
15452         Ops.push_back(N1.getOperand(FirstElt - N0.getNumOperands()));
15453 
15454     } else if (AllUndef) {
15455       Ops.push_back(DAG.getUNDEF(N0.getOperand(0).getValueType()));
15456     } else { // Mixed with general masks and undefs, can't do optimization.
15457       return SDValue();
15458     }
15459   }
15460 
15461   return DAG.getNode(ISD::CONCAT_VECTORS, SDLoc(N), VT, Ops);
15462 }
15463 
15464 // Attempt to combine a shuffle of 2 inputs of 'scalar sources' -
15465 // BUILD_VECTOR or SCALAR_TO_VECTOR into a single BUILD_VECTOR.
15466 //
15467 // SHUFFLE(BUILD_VECTOR(), BUILD_VECTOR()) -> BUILD_VECTOR() is always
15468 // a simplification in some sense, but it isn't appropriate in general: some
15469 // BUILD_VECTORs are substantially cheaper than others. The general case
15470 // of a BUILD_VECTOR requires inserting each element individually (or
15471 // performing the equivalent in a temporary stack variable). A BUILD_VECTOR of
15472 // all constants is a single constant pool load.  A BUILD_VECTOR where each
15473 // element is identical is a splat.  A BUILD_VECTOR where most of the operands
15474 // are undef lowers to a small number of element insertions.
15475 //
15476 // To deal with this, we currently use a bunch of mostly arbitrary heuristics.
15477 // We don't fold shuffles where one side is a non-zero constant, and we don't
15478 // fold shuffles if the resulting (non-splat) BUILD_VECTOR would have duplicate
15479 // non-constant operands. This seems to work out reasonably well in practice.
15480 static SDValue combineShuffleOfScalars(ShuffleVectorSDNode *SVN,
15481                                        SelectionDAG &DAG,
15482                                        const TargetLowering &TLI) {
15483   EVT VT = SVN->getValueType(0);
15484   unsigned NumElts = VT.getVectorNumElements();
15485   SDValue N0 = SVN->getOperand(0);
15486   SDValue N1 = SVN->getOperand(1);
15487 
15488   if (!N0->hasOneUse() || !N1->hasOneUse())
15489     return SDValue();
15490 
15491   // If only one of N1,N2 is constant, bail out if it is not ALL_ZEROS as
15492   // discussed above.
15493   if (!N1.isUndef()) {
15494     bool N0AnyConst = isAnyConstantBuildVector(N0.getNode());
15495     bool N1AnyConst = isAnyConstantBuildVector(N1.getNode());
15496     if (N0AnyConst && !N1AnyConst && !ISD::isBuildVectorAllZeros(N0.getNode()))
15497       return SDValue();
15498     if (!N0AnyConst && N1AnyConst && !ISD::isBuildVectorAllZeros(N1.getNode()))
15499       return SDValue();
15500   }
15501 
15502   // If both inputs are splats of the same value then we can safely merge this
15503   // to a single BUILD_VECTOR with undef elements based on the shuffle mask.
15504   bool IsSplat = false;
15505   auto *BV0 = dyn_cast<BuildVectorSDNode>(N0);
15506   auto *BV1 = dyn_cast<BuildVectorSDNode>(N1);
15507   if (BV0 && BV1)
15508     if (SDValue Splat0 = BV0->getSplatValue())
15509       IsSplat = (Splat0 == BV1->getSplatValue());
15510 
15511   SmallVector<SDValue, 8> Ops;
15512   SmallSet<SDValue, 16> DuplicateOps;
15513   for (int M : SVN->getMask()) {
15514     SDValue Op = DAG.getUNDEF(VT.getScalarType());
15515     if (M >= 0) {
15516       int Idx = M < (int)NumElts ? M : M - NumElts;
15517       SDValue &S = (M < (int)NumElts ? N0 : N1);
15518       if (S.getOpcode() == ISD::BUILD_VECTOR) {
15519         Op = S.getOperand(Idx);
15520       } else if (S.getOpcode() == ISD::SCALAR_TO_VECTOR) {
15521         assert(Idx == 0 && "Unexpected SCALAR_TO_VECTOR operand index.");
15522         Op = S.getOperand(0);
15523       } else {
15524         // Operand can't be combined - bail out.
15525         return SDValue();
15526       }
15527     }
15528 
15529     // Don't duplicate a non-constant BUILD_VECTOR operand unless we're
15530     // generating a splat; semantically, this is fine, but it's likely to
15531     // generate low-quality code if the target can't reconstruct an appropriate
15532     // shuffle.
15533     if (!Op.isUndef() && !isa<ConstantSDNode>(Op) && !isa<ConstantFPSDNode>(Op))
15534       if (!IsSplat && !DuplicateOps.insert(Op).second)
15535         return SDValue();
15536 
15537     Ops.push_back(Op);
15538   }
15539 
15540   // BUILD_VECTOR requires all inputs to be of the same type, find the
15541   // maximum type and extend them all.
15542   EVT SVT = VT.getScalarType();
15543   if (SVT.isInteger())
15544     for (SDValue &Op : Ops)
15545       SVT = (SVT.bitsLT(Op.getValueType()) ? Op.getValueType() : SVT);
15546   if (SVT != VT.getScalarType())
15547     for (SDValue &Op : Ops)
15548       Op = TLI.isZExtFree(Op.getValueType(), SVT)
15549                ? DAG.getZExtOrTrunc(Op, SDLoc(SVN), SVT)
15550                : DAG.getSExtOrTrunc(Op, SDLoc(SVN), SVT);
15551   return DAG.getBuildVector(VT, SDLoc(SVN), Ops);
15552 }
15553 
15554 // Match shuffles that can be converted to any_vector_extend_in_reg.
15555 // This is often generated during legalization.
15556 // e.g. v4i32 <0,u,1,u> -> (v2i64 any_vector_extend_in_reg(v4i32 src))
15557 // TODO Add support for ZERO_EXTEND_VECTOR_INREG when we have a test case.
15558 static SDValue combineShuffleToVectorExtend(ShuffleVectorSDNode *SVN,
15559                                             SelectionDAG &DAG,
15560                                             const TargetLowering &TLI,
15561                                             bool LegalOperations,
15562                                             bool LegalTypes) {
15563   EVT VT = SVN->getValueType(0);
15564   bool IsBigEndian = DAG.getDataLayout().isBigEndian();
15565 
15566   // TODO Add support for big-endian when we have a test case.
15567   if (!VT.isInteger() || IsBigEndian)
15568     return SDValue();
15569 
15570   unsigned NumElts = VT.getVectorNumElements();
15571   unsigned EltSizeInBits = VT.getScalarSizeInBits();
15572   ArrayRef<int> Mask = SVN->getMask();
15573   SDValue N0 = SVN->getOperand(0);
15574 
15575   // shuffle<0,-1,1,-1> == (v2i64 anyextend_vector_inreg(v4i32))
15576   auto isAnyExtend = [&Mask, &NumElts](unsigned Scale) {
15577     for (unsigned i = 0; i != NumElts; ++i) {
15578       if (Mask[i] < 0)
15579         continue;
15580       if ((i % Scale) == 0 && Mask[i] == (int)(i / Scale))
15581         continue;
15582       return false;
15583     }
15584     return true;
15585   };
15586 
15587   // Attempt to match a '*_extend_vector_inreg' shuffle, we just search for
15588   // power-of-2 extensions as they are the most likely.
15589   for (unsigned Scale = 2; Scale < NumElts; Scale *= 2) {
15590     // Check for non power of 2 vector sizes
15591     if (NumElts % Scale != 0)
15592       continue;
15593     if (!isAnyExtend(Scale))
15594       continue;
15595 
15596     EVT OutSVT = EVT::getIntegerVT(*DAG.getContext(), EltSizeInBits * Scale);
15597     EVT OutVT = EVT::getVectorVT(*DAG.getContext(), OutSVT, NumElts / Scale);
15598     if (!LegalTypes || TLI.isTypeLegal(OutVT))
15599       if (!LegalOperations ||
15600           TLI.isOperationLegalOrCustom(ISD::ANY_EXTEND_VECTOR_INREG, OutVT))
15601         return DAG.getBitcast(VT,
15602                             DAG.getAnyExtendVectorInReg(N0, SDLoc(SVN), OutVT));
15603   }
15604 
15605   return SDValue();
15606 }
15607 
15608 // Detect 'truncate_vector_inreg' style shuffles that pack the lower parts of
15609 // each source element of a large type into the lowest elements of a smaller
15610 // destination type. This is often generated during legalization.
15611 // If the source node itself was a '*_extend_vector_inreg' node then we should
15612 // then be able to remove it.
15613 static SDValue combineTruncationShuffle(ShuffleVectorSDNode *SVN,
15614                                         SelectionDAG &DAG) {
15615   EVT VT = SVN->getValueType(0);
15616   bool IsBigEndian = DAG.getDataLayout().isBigEndian();
15617 
15618   // TODO Add support for big-endian when we have a test case.
15619   if (!VT.isInteger() || IsBigEndian)
15620     return SDValue();
15621 
15622   SDValue N0 = peekThroughBitcast(SVN->getOperand(0));
15623 
15624   unsigned Opcode = N0.getOpcode();
15625   if (Opcode != ISD::ANY_EXTEND_VECTOR_INREG &&
15626       Opcode != ISD::SIGN_EXTEND_VECTOR_INREG &&
15627       Opcode != ISD::ZERO_EXTEND_VECTOR_INREG)
15628     return SDValue();
15629 
15630   SDValue N00 = N0.getOperand(0);
15631   ArrayRef<int> Mask = SVN->getMask();
15632   unsigned NumElts = VT.getVectorNumElements();
15633   unsigned EltSizeInBits = VT.getScalarSizeInBits();
15634   unsigned ExtSrcSizeInBits = N00.getScalarValueSizeInBits();
15635   unsigned ExtDstSizeInBits = N0.getScalarValueSizeInBits();
15636 
15637   if (ExtDstSizeInBits % ExtSrcSizeInBits != 0)
15638     return SDValue();
15639   unsigned ExtScale = ExtDstSizeInBits / ExtSrcSizeInBits;
15640 
15641   // (v4i32 truncate_vector_inreg(v2i64)) == shuffle<0,2-1,-1>
15642   // (v8i16 truncate_vector_inreg(v4i32)) == shuffle<0,2,4,6,-1,-1,-1,-1>
15643   // (v8i16 truncate_vector_inreg(v2i64)) == shuffle<0,4,-1,-1,-1,-1,-1,-1>
15644   auto isTruncate = [&Mask, &NumElts](unsigned Scale) {
15645     for (unsigned i = 0; i != NumElts; ++i) {
15646       if (Mask[i] < 0)
15647         continue;
15648       if ((i * Scale) < NumElts && Mask[i] == (int)(i * Scale))
15649         continue;
15650       return false;
15651     }
15652     return true;
15653   };
15654 
15655   // At the moment we just handle the case where we've truncated back to the
15656   // same size as before the extension.
15657   // TODO: handle more extension/truncation cases as cases arise.
15658   if (EltSizeInBits != ExtSrcSizeInBits)
15659     return SDValue();
15660 
15661   // We can remove *extend_vector_inreg only if the truncation happens at
15662   // the same scale as the extension.
15663   if (isTruncate(ExtScale))
15664     return DAG.getBitcast(VT, N00);
15665 
15666   return SDValue();
15667 }
15668 
15669 // Combine shuffles of splat-shuffles of the form:
15670 // shuffle (shuffle V, undef, splat-mask), undef, M
15671 // If splat-mask contains undef elements, we need to be careful about
15672 // introducing undef's in the folded mask which are not the result of composing
15673 // the masks of the shuffles.
15674 static SDValue combineShuffleOfSplat(ArrayRef<int> UserMask,
15675                                      ShuffleVectorSDNode *Splat,
15676                                      SelectionDAG &DAG) {
15677   ArrayRef<int> SplatMask = Splat->getMask();
15678   assert(UserMask.size() == SplatMask.size() && "Mask length mismatch");
15679 
15680   // Prefer simplifying to the splat-shuffle, if possible. This is legal if
15681   // every undef mask element in the splat-shuffle has a corresponding undef
15682   // element in the user-shuffle's mask or if the composition of mask elements
15683   // would result in undef.
15684   // Examples for (shuffle (shuffle v, undef, SplatMask), undef, UserMask):
15685   // * UserMask=[0,2,u,u], SplatMask=[2,u,2,u] -> [2,2,u,u]
15686   //   In this case it is not legal to simplify to the splat-shuffle because we
15687   //   may be exposing the users of the shuffle an undef element at index 1
15688   //   which was not there before the combine.
15689   // * UserMask=[0,u,2,u], SplatMask=[2,u,2,u] -> [2,u,2,u]
15690   //   In this case the composition of masks yields SplatMask, so it's ok to
15691   //   simplify to the splat-shuffle.
15692   // * UserMask=[3,u,2,u], SplatMask=[2,u,2,u] -> [u,u,2,u]
15693   //   In this case the composed mask includes all undef elements of SplatMask
15694   //   and in addition sets element zero to undef. It is safe to simplify to
15695   //   the splat-shuffle.
15696   auto CanSimplifyToExistingSplat = [](ArrayRef<int> UserMask,
15697                                        ArrayRef<int> SplatMask) {
15698     for (unsigned i = 0, e = UserMask.size(); i != e; ++i)
15699       if (UserMask[i] != -1 && SplatMask[i] == -1 &&
15700           SplatMask[UserMask[i]] != -1)
15701         return false;
15702     return true;
15703   };
15704   if (CanSimplifyToExistingSplat(UserMask, SplatMask))
15705     return SDValue(Splat, 0);
15706 
15707   // Create a new shuffle with a mask that is composed of the two shuffles'
15708   // masks.
15709   SmallVector<int, 32> NewMask;
15710   for (int Idx : UserMask)
15711     NewMask.push_back(Idx == -1 ? -1 : SplatMask[Idx]);
15712 
15713   return DAG.getVectorShuffle(Splat->getValueType(0), SDLoc(Splat),
15714                               Splat->getOperand(0), Splat->getOperand(1),
15715                               NewMask);
15716 }
15717 
15718 SDValue DAGCombiner::visitVECTOR_SHUFFLE(SDNode *N) {
15719   EVT VT = N->getValueType(0);
15720   unsigned NumElts = VT.getVectorNumElements();
15721 
15722   SDValue N0 = N->getOperand(0);
15723   SDValue N1 = N->getOperand(1);
15724 
15725   assert(N0.getValueType() == VT && "Vector shuffle must be normalized in DAG");
15726 
15727   // Canonicalize shuffle undef, undef -> undef
15728   if (N0.isUndef() && N1.isUndef())
15729     return DAG.getUNDEF(VT);
15730 
15731   ShuffleVectorSDNode *SVN = cast<ShuffleVectorSDNode>(N);
15732 
15733   // Canonicalize shuffle v, v -> v, undef
15734   if (N0 == N1) {
15735     SmallVector<int, 8> NewMask;
15736     for (unsigned i = 0; i != NumElts; ++i) {
15737       int Idx = SVN->getMaskElt(i);
15738       if (Idx >= (int)NumElts) Idx -= NumElts;
15739       NewMask.push_back(Idx);
15740     }
15741     return DAG.getVectorShuffle(VT, SDLoc(N), N0, DAG.getUNDEF(VT), NewMask);
15742   }
15743 
15744   // Canonicalize shuffle undef, v -> v, undef.  Commute the shuffle mask.
15745   if (N0.isUndef())
15746     return DAG.getCommutedVectorShuffle(*SVN);
15747 
15748   // Remove references to rhs if it is undef
15749   if (N1.isUndef()) {
15750     bool Changed = false;
15751     SmallVector<int, 8> NewMask;
15752     for (unsigned i = 0; i != NumElts; ++i) {
15753       int Idx = SVN->getMaskElt(i);
15754       if (Idx >= (int)NumElts) {
15755         Idx = -1;
15756         Changed = true;
15757       }
15758       NewMask.push_back(Idx);
15759     }
15760     if (Changed)
15761       return DAG.getVectorShuffle(VT, SDLoc(N), N0, N1, NewMask);
15762   }
15763 
15764   // Simplify shuffle mask if a referenced element is UNDEF.
15765   if (SDValue V = simplifyShuffleMask(SVN, N0, N1, DAG))
15766     return V;
15767 
15768   // A shuffle of a single vector that is a splat can always be folded.
15769   if (auto *N0Shuf = dyn_cast<ShuffleVectorSDNode>(N0))
15770     if (N1->isUndef() && N0Shuf->isSplat())
15771       return combineShuffleOfSplat(SVN->getMask(), N0Shuf, DAG);
15772 
15773   // If it is a splat, check if the argument vector is another splat or a
15774   // build_vector.
15775   if (SVN->isSplat() && SVN->getSplatIndex() < (int)NumElts) {
15776     SDNode *V = N0.getNode();
15777 
15778     // If this is a bit convert that changes the element type of the vector but
15779     // not the number of vector elements, look through it.  Be careful not to
15780     // look though conversions that change things like v4f32 to v2f64.
15781     if (V->getOpcode() == ISD::BITCAST) {
15782       SDValue ConvInput = V->getOperand(0);
15783       if (ConvInput.getValueType().isVector() &&
15784           ConvInput.getValueType().getVectorNumElements() == NumElts)
15785         V = ConvInput.getNode();
15786     }
15787 
15788     if (V->getOpcode() == ISD::BUILD_VECTOR) {
15789       assert(V->getNumOperands() == NumElts &&
15790              "BUILD_VECTOR has wrong number of operands");
15791       SDValue Base;
15792       bool AllSame = true;
15793       for (unsigned i = 0; i != NumElts; ++i) {
15794         if (!V->getOperand(i).isUndef()) {
15795           Base = V->getOperand(i);
15796           break;
15797         }
15798       }
15799       // Splat of <u, u, u, u>, return <u, u, u, u>
15800       if (!Base.getNode())
15801         return N0;
15802       for (unsigned i = 0; i != NumElts; ++i) {
15803         if (V->getOperand(i) != Base) {
15804           AllSame = false;
15805           break;
15806         }
15807       }
15808       // Splat of <x, x, x, x>, return <x, x, x, x>
15809       if (AllSame)
15810         return N0;
15811 
15812       // Canonicalize any other splat as a build_vector.
15813       const SDValue &Splatted = V->getOperand(SVN->getSplatIndex());
15814       SmallVector<SDValue, 8> Ops(NumElts, Splatted);
15815       SDValue NewBV = DAG.getBuildVector(V->getValueType(0), SDLoc(N), Ops);
15816 
15817       // We may have jumped through bitcasts, so the type of the
15818       // BUILD_VECTOR may not match the type of the shuffle.
15819       if (V->getValueType(0) != VT)
15820         NewBV = DAG.getBitcast(VT, NewBV);
15821       return NewBV;
15822     }
15823   }
15824 
15825   // There are various patterns used to build up a vector from smaller vectors,
15826   // subvectors, or elements. Scan chains of these and replace unused insertions
15827   // or components with undef.
15828   if (SDValue S = simplifyShuffleOperands(SVN, N0, N1, DAG))
15829     return S;
15830 
15831   // Match shuffles that can be converted to any_vector_extend_in_reg.
15832   if (SDValue V = combineShuffleToVectorExtend(SVN, DAG, TLI, LegalOperations, LegalTypes))
15833     return V;
15834 
15835   // Combine "truncate_vector_in_reg" style shuffles.
15836   if (SDValue V = combineTruncationShuffle(SVN, DAG))
15837     return V;
15838 
15839   if (N0.getOpcode() == ISD::CONCAT_VECTORS &&
15840       Level < AfterLegalizeVectorOps &&
15841       (N1.isUndef() ||
15842       (N1.getOpcode() == ISD::CONCAT_VECTORS &&
15843        N0.getOperand(0).getValueType() == N1.getOperand(0).getValueType()))) {
15844     if (SDValue V = partitionShuffleOfConcats(N, DAG))
15845       return V;
15846   }
15847 
15848   // Attempt to combine a shuffle of 2 inputs of 'scalar sources' -
15849   // BUILD_VECTOR or SCALAR_TO_VECTOR into a single BUILD_VECTOR.
15850   if (Level < AfterLegalizeVectorOps && TLI.isTypeLegal(VT))
15851     if (SDValue Res = combineShuffleOfScalars(SVN, DAG, TLI))
15852       return Res;
15853 
15854   // If this shuffle only has a single input that is a bitcasted shuffle,
15855   // attempt to merge the 2 shuffles and suitably bitcast the inputs/output
15856   // back to their original types.
15857   if (N0.getOpcode() == ISD::BITCAST && N0.hasOneUse() &&
15858       N1.isUndef() && Level < AfterLegalizeVectorOps &&
15859       TLI.isTypeLegal(VT)) {
15860 
15861     // Peek through the bitcast only if there is one user.
15862     SDValue BC0 = N0;
15863     while (BC0.getOpcode() == ISD::BITCAST) {
15864       if (!BC0.hasOneUse())
15865         break;
15866       BC0 = BC0.getOperand(0);
15867     }
15868 
15869     auto ScaleShuffleMask = [](ArrayRef<int> Mask, int Scale) {
15870       if (Scale == 1)
15871         return SmallVector<int, 8>(Mask.begin(), Mask.end());
15872 
15873       SmallVector<int, 8> NewMask;
15874       for (int M : Mask)
15875         for (int s = 0; s != Scale; ++s)
15876           NewMask.push_back(M < 0 ? -1 : Scale * M + s);
15877       return NewMask;
15878     };
15879 
15880     if (BC0.getOpcode() == ISD::VECTOR_SHUFFLE && BC0.hasOneUse()) {
15881       EVT SVT = VT.getScalarType();
15882       EVT InnerVT = BC0->getValueType(0);
15883       EVT InnerSVT = InnerVT.getScalarType();
15884 
15885       // Determine which shuffle works with the smaller scalar type.
15886       EVT ScaleVT = SVT.bitsLT(InnerSVT) ? VT : InnerVT;
15887       EVT ScaleSVT = ScaleVT.getScalarType();
15888 
15889       if (TLI.isTypeLegal(ScaleVT) &&
15890           0 == (InnerSVT.getSizeInBits() % ScaleSVT.getSizeInBits()) &&
15891           0 == (SVT.getSizeInBits() % ScaleSVT.getSizeInBits())) {
15892         int InnerScale = InnerSVT.getSizeInBits() / ScaleSVT.getSizeInBits();
15893         int OuterScale = SVT.getSizeInBits() / ScaleSVT.getSizeInBits();
15894 
15895         // Scale the shuffle masks to the smaller scalar type.
15896         ShuffleVectorSDNode *InnerSVN = cast<ShuffleVectorSDNode>(BC0);
15897         SmallVector<int, 8> InnerMask =
15898             ScaleShuffleMask(InnerSVN->getMask(), InnerScale);
15899         SmallVector<int, 8> OuterMask =
15900             ScaleShuffleMask(SVN->getMask(), OuterScale);
15901 
15902         // Merge the shuffle masks.
15903         SmallVector<int, 8> NewMask;
15904         for (int M : OuterMask)
15905           NewMask.push_back(M < 0 ? -1 : InnerMask[M]);
15906 
15907         // Test for shuffle mask legality over both commutations.
15908         SDValue SV0 = BC0->getOperand(0);
15909         SDValue SV1 = BC0->getOperand(1);
15910         bool LegalMask = TLI.isShuffleMaskLegal(NewMask, ScaleVT);
15911         if (!LegalMask) {
15912           std::swap(SV0, SV1);
15913           ShuffleVectorSDNode::commuteMask(NewMask);
15914           LegalMask = TLI.isShuffleMaskLegal(NewMask, ScaleVT);
15915         }
15916 
15917         if (LegalMask) {
15918           SV0 = DAG.getBitcast(ScaleVT, SV0);
15919           SV1 = DAG.getBitcast(ScaleVT, SV1);
15920           return DAG.getBitcast(
15921               VT, DAG.getVectorShuffle(ScaleVT, SDLoc(N), SV0, SV1, NewMask));
15922         }
15923       }
15924     }
15925   }
15926 
15927   // Canonicalize shuffles according to rules:
15928   //  shuffle(A, shuffle(A, B)) -> shuffle(shuffle(A,B), A)
15929   //  shuffle(B, shuffle(A, B)) -> shuffle(shuffle(A,B), B)
15930   //  shuffle(B, shuffle(A, Undef)) -> shuffle(shuffle(A, Undef), B)
15931   if (N1.getOpcode() == ISD::VECTOR_SHUFFLE &&
15932       N0.getOpcode() != ISD::VECTOR_SHUFFLE && Level < AfterLegalizeDAG &&
15933       TLI.isTypeLegal(VT)) {
15934     // The incoming shuffle must be of the same type as the result of the
15935     // current shuffle.
15936     assert(N1->getOperand(0).getValueType() == VT &&
15937            "Shuffle types don't match");
15938 
15939     SDValue SV0 = N1->getOperand(0);
15940     SDValue SV1 = N1->getOperand(1);
15941     bool HasSameOp0 = N0 == SV0;
15942     bool IsSV1Undef = SV1.isUndef();
15943     if (HasSameOp0 || IsSV1Undef || N0 == SV1)
15944       // Commute the operands of this shuffle so that next rule
15945       // will trigger.
15946       return DAG.getCommutedVectorShuffle(*SVN);
15947   }
15948 
15949   // Try to fold according to rules:
15950   //   shuffle(shuffle(A, B, M0), C, M1) -> shuffle(A, B, M2)
15951   //   shuffle(shuffle(A, B, M0), C, M1) -> shuffle(A, C, M2)
15952   //   shuffle(shuffle(A, B, M0), C, M1) -> shuffle(B, C, M2)
15953   // Don't try to fold shuffles with illegal type.
15954   // Only fold if this shuffle is the only user of the other shuffle.
15955   if (N0.getOpcode() == ISD::VECTOR_SHUFFLE && N->isOnlyUserOf(N0.getNode()) &&
15956       Level < AfterLegalizeDAG && TLI.isTypeLegal(VT)) {
15957     ShuffleVectorSDNode *OtherSV = cast<ShuffleVectorSDNode>(N0);
15958 
15959     // Don't try to fold splats; they're likely to simplify somehow, or they
15960     // might be free.
15961     if (OtherSV->isSplat())
15962       return SDValue();
15963 
15964     // The incoming shuffle must be of the same type as the result of the
15965     // current shuffle.
15966     assert(OtherSV->getOperand(0).getValueType() == VT &&
15967            "Shuffle types don't match");
15968 
15969     SDValue SV0, SV1;
15970     SmallVector<int, 4> Mask;
15971     // Compute the combined shuffle mask for a shuffle with SV0 as the first
15972     // operand, and SV1 as the second operand.
15973     for (unsigned i = 0; i != NumElts; ++i) {
15974       int Idx = SVN->getMaskElt(i);
15975       if (Idx < 0) {
15976         // Propagate Undef.
15977         Mask.push_back(Idx);
15978         continue;
15979       }
15980 
15981       SDValue CurrentVec;
15982       if (Idx < (int)NumElts) {
15983         // This shuffle index refers to the inner shuffle N0. Lookup the inner
15984         // shuffle mask to identify which vector is actually referenced.
15985         Idx = OtherSV->getMaskElt(Idx);
15986         if (Idx < 0) {
15987           // Propagate Undef.
15988           Mask.push_back(Idx);
15989           continue;
15990         }
15991 
15992         CurrentVec = (Idx < (int) NumElts) ? OtherSV->getOperand(0)
15993                                            : OtherSV->getOperand(1);
15994       } else {
15995         // This shuffle index references an element within N1.
15996         CurrentVec = N1;
15997       }
15998 
15999       // Simple case where 'CurrentVec' is UNDEF.
16000       if (CurrentVec.isUndef()) {
16001         Mask.push_back(-1);
16002         continue;
16003       }
16004 
16005       // Canonicalize the shuffle index. We don't know yet if CurrentVec
16006       // will be the first or second operand of the combined shuffle.
16007       Idx = Idx % NumElts;
16008       if (!SV0.getNode() || SV0 == CurrentVec) {
16009         // Ok. CurrentVec is the left hand side.
16010         // Update the mask accordingly.
16011         SV0 = CurrentVec;
16012         Mask.push_back(Idx);
16013         continue;
16014       }
16015 
16016       // Bail out if we cannot convert the shuffle pair into a single shuffle.
16017       if (SV1.getNode() && SV1 != CurrentVec)
16018         return SDValue();
16019 
16020       // Ok. CurrentVec is the right hand side.
16021       // Update the mask accordingly.
16022       SV1 = CurrentVec;
16023       Mask.push_back(Idx + NumElts);
16024     }
16025 
16026     // Check if all indices in Mask are Undef. In case, propagate Undef.
16027     bool isUndefMask = true;
16028     for (unsigned i = 0; i != NumElts && isUndefMask; ++i)
16029       isUndefMask &= Mask[i] < 0;
16030 
16031     if (isUndefMask)
16032       return DAG.getUNDEF(VT);
16033 
16034     if (!SV0.getNode())
16035       SV0 = DAG.getUNDEF(VT);
16036     if (!SV1.getNode())
16037       SV1 = DAG.getUNDEF(VT);
16038 
16039     // Avoid introducing shuffles with illegal mask.
16040     if (!TLI.isShuffleMaskLegal(Mask, VT)) {
16041       ShuffleVectorSDNode::commuteMask(Mask);
16042 
16043       if (!TLI.isShuffleMaskLegal(Mask, VT))
16044         return SDValue();
16045 
16046       //   shuffle(shuffle(A, B, M0), C, M1) -> shuffle(B, A, M2)
16047       //   shuffle(shuffle(A, B, M0), C, M1) -> shuffle(C, A, M2)
16048       //   shuffle(shuffle(A, B, M0), C, M1) -> shuffle(C, B, M2)
16049       std::swap(SV0, SV1);
16050     }
16051 
16052     //   shuffle(shuffle(A, B, M0), C, M1) -> shuffle(A, B, M2)
16053     //   shuffle(shuffle(A, B, M0), C, M1) -> shuffle(A, C, M2)
16054     //   shuffle(shuffle(A, B, M0), C, M1) -> shuffle(B, C, M2)
16055     return DAG.getVectorShuffle(VT, SDLoc(N), SV0, SV1, Mask);
16056   }
16057 
16058   return SDValue();
16059 }
16060 
16061 SDValue DAGCombiner::visitSCALAR_TO_VECTOR(SDNode *N) {
16062   SDValue InVal = N->getOperand(0);
16063   EVT VT = N->getValueType(0);
16064 
16065   // Replace a SCALAR_TO_VECTOR(EXTRACT_VECTOR_ELT(V,C0)) pattern
16066   // with a VECTOR_SHUFFLE and possible truncate.
16067   if (InVal.getOpcode() == ISD::EXTRACT_VECTOR_ELT) {
16068     SDValue InVec = InVal->getOperand(0);
16069     SDValue EltNo = InVal->getOperand(1);
16070     auto InVecT = InVec.getValueType();
16071     if (ConstantSDNode *C0 = dyn_cast<ConstantSDNode>(EltNo)) {
16072       SmallVector<int, 8> NewMask(InVecT.getVectorNumElements(), -1);
16073       int Elt = C0->getZExtValue();
16074       NewMask[0] = Elt;
16075       SDValue Val;
16076       // If we have an implict truncate do truncate here as long as it's legal.
16077       // if it's not legal, this should
16078       if (VT.getScalarType() != InVal.getValueType() &&
16079           InVal.getValueType().isScalarInteger() &&
16080           isTypeLegal(VT.getScalarType())) {
16081         Val =
16082             DAG.getNode(ISD::TRUNCATE, SDLoc(InVal), VT.getScalarType(), InVal);
16083         return DAG.getNode(ISD::SCALAR_TO_VECTOR, SDLoc(N), VT, Val);
16084       }
16085       if (VT.getScalarType() == InVecT.getScalarType() &&
16086           VT.getVectorNumElements() <= InVecT.getVectorNumElements() &&
16087           TLI.isShuffleMaskLegal(NewMask, VT)) {
16088         Val = DAG.getVectorShuffle(InVecT, SDLoc(N), InVec,
16089                                    DAG.getUNDEF(InVecT), NewMask);
16090         // If the initial vector is the correct size this shuffle is a
16091         // valid result.
16092         if (VT == InVecT)
16093           return Val;
16094         // If not we must truncate the vector.
16095         if (VT.getVectorNumElements() != InVecT.getVectorNumElements()) {
16096           MVT IdxTy = TLI.getVectorIdxTy(DAG.getDataLayout());
16097           SDValue ZeroIdx = DAG.getConstant(0, SDLoc(N), IdxTy);
16098           EVT SubVT =
16099               EVT::getVectorVT(*DAG.getContext(), InVecT.getVectorElementType(),
16100                                VT.getVectorNumElements());
16101           Val = DAG.getNode(ISD::EXTRACT_SUBVECTOR, SDLoc(N), SubVT, Val,
16102                             ZeroIdx);
16103           return Val;
16104         }
16105       }
16106     }
16107   }
16108 
16109   return SDValue();
16110 }
16111 
16112 SDValue DAGCombiner::visitINSERT_SUBVECTOR(SDNode *N) {
16113   EVT VT = N->getValueType(0);
16114   SDValue N0 = N->getOperand(0);
16115   SDValue N1 = N->getOperand(1);
16116   SDValue N2 = N->getOperand(2);
16117 
16118   // If inserting an UNDEF, just return the original vector.
16119   if (N1.isUndef())
16120     return N0;
16121 
16122   // For nested INSERT_SUBVECTORs, attempt to combine inner node first to allow
16123   // us to pull BITCASTs from input to output.
16124   if (N0.hasOneUse() && N0->getOpcode() == ISD::INSERT_SUBVECTOR)
16125     if (SDValue NN0 = visitINSERT_SUBVECTOR(N0.getNode()))
16126       return DAG.getNode(ISD::INSERT_SUBVECTOR, SDLoc(N), VT, NN0, N1, N2);
16127 
16128   // If this is an insert of an extracted vector into an undef vector, we can
16129   // just use the input to the extract.
16130   if (N0.isUndef() && N1.getOpcode() == ISD::EXTRACT_SUBVECTOR &&
16131       N1.getOperand(1) == N2 && N1.getOperand(0).getValueType() == VT)
16132     return N1.getOperand(0);
16133 
16134   // If we are inserting a bitcast value into an undef, with the same
16135   // number of elements, just use the bitcast input of the extract.
16136   // i.e. INSERT_SUBVECTOR UNDEF (BITCAST N1) N2 ->
16137   //        BITCAST (INSERT_SUBVECTOR UNDEF N1 N2)
16138   if (N0.isUndef() && N1.getOpcode() == ISD::BITCAST &&
16139       N1.getOperand(0).getOpcode() == ISD::EXTRACT_SUBVECTOR &&
16140       N1.getOperand(0).getOperand(1) == N2 &&
16141       N1.getOperand(0).getOperand(0).getValueType().getVectorNumElements() ==
16142           VT.getVectorNumElements()) {
16143     return DAG.getBitcast(VT, N1.getOperand(0).getOperand(0));
16144   }
16145 
16146   // If both N1 and N2 are bitcast values on which insert_subvector
16147   // would makes sense, pull the bitcast through.
16148   // i.e. INSERT_SUBVECTOR (BITCAST N0) (BITCAST N1) N2 ->
16149   //        BITCAST (INSERT_SUBVECTOR N0 N1 N2)
16150   if (N0.getOpcode() == ISD::BITCAST && N1.getOpcode() == ISD::BITCAST) {
16151     SDValue CN0 = N0.getOperand(0);
16152     SDValue CN1 = N1.getOperand(0);
16153     if (CN0.getValueType().getVectorElementType() ==
16154             CN1.getValueType().getVectorElementType() &&
16155         CN0.getValueType().getVectorNumElements() ==
16156             VT.getVectorNumElements()) {
16157       SDValue NewINSERT = DAG.getNode(ISD::INSERT_SUBVECTOR, SDLoc(N),
16158                                       CN0.getValueType(), CN0, CN1, N2);
16159       return DAG.getBitcast(VT, NewINSERT);
16160     }
16161   }
16162 
16163   // Combine INSERT_SUBVECTORs where we are inserting to the same index.
16164   // INSERT_SUBVECTOR( INSERT_SUBVECTOR( Vec, SubOld, Idx ), SubNew, Idx )
16165   // --> INSERT_SUBVECTOR( Vec, SubNew, Idx )
16166   if (N0.getOpcode() == ISD::INSERT_SUBVECTOR &&
16167       N0.getOperand(1).getValueType() == N1.getValueType() &&
16168       N0.getOperand(2) == N2)
16169     return DAG.getNode(ISD::INSERT_SUBVECTOR, SDLoc(N), VT, N0.getOperand(0),
16170                        N1, N2);
16171 
16172   if (!isa<ConstantSDNode>(N2))
16173     return SDValue();
16174 
16175   unsigned InsIdx = cast<ConstantSDNode>(N2)->getZExtValue();
16176 
16177   // Canonicalize insert_subvector dag nodes.
16178   // Example:
16179   // (insert_subvector (insert_subvector A, Idx0), Idx1)
16180   // -> (insert_subvector (insert_subvector A, Idx1), Idx0)
16181   if (N0.getOpcode() == ISD::INSERT_SUBVECTOR && N0.hasOneUse() &&
16182       N1.getValueType() == N0.getOperand(1).getValueType() &&
16183       isa<ConstantSDNode>(N0.getOperand(2))) {
16184     unsigned OtherIdx = N0.getConstantOperandVal(2);
16185     if (InsIdx < OtherIdx) {
16186       // Swap nodes.
16187       SDValue NewOp = DAG.getNode(ISD::INSERT_SUBVECTOR, SDLoc(N), VT,
16188                                   N0.getOperand(0), N1, N2);
16189       AddToWorklist(NewOp.getNode());
16190       return DAG.getNode(ISD::INSERT_SUBVECTOR, SDLoc(N0.getNode()),
16191                          VT, NewOp, N0.getOperand(1), N0.getOperand(2));
16192     }
16193   }
16194 
16195   // If the input vector is a concatenation, and the insert replaces
16196   // one of the pieces, we can optimize into a single concat_vectors.
16197   if (N0.getOpcode() == ISD::CONCAT_VECTORS && N0.hasOneUse() &&
16198       N0.getOperand(0).getValueType() == N1.getValueType()) {
16199     unsigned Factor = N1.getValueType().getVectorNumElements();
16200 
16201     SmallVector<SDValue, 8> Ops(N0->op_begin(), N0->op_end());
16202     Ops[cast<ConstantSDNode>(N2)->getZExtValue() / Factor] = N1;
16203 
16204     return DAG.getNode(ISD::CONCAT_VECTORS, SDLoc(N), VT, Ops);
16205   }
16206 
16207   return SDValue();
16208 }
16209 
16210 SDValue DAGCombiner::visitFP_TO_FP16(SDNode *N) {
16211   SDValue N0 = N->getOperand(0);
16212 
16213   // fold (fp_to_fp16 (fp16_to_fp op)) -> op
16214   if (N0->getOpcode() == ISD::FP16_TO_FP)
16215     return N0->getOperand(0);
16216 
16217   return SDValue();
16218 }
16219 
16220 SDValue DAGCombiner::visitFP16_TO_FP(SDNode *N) {
16221   SDValue N0 = N->getOperand(0);
16222 
16223   // fold fp16_to_fp(op & 0xffff) -> fp16_to_fp(op)
16224   if (N0->getOpcode() == ISD::AND) {
16225     ConstantSDNode *AndConst = getAsNonOpaqueConstant(N0.getOperand(1));
16226     if (AndConst && AndConst->getAPIntValue() == 0xffff) {
16227       return DAG.getNode(ISD::FP16_TO_FP, SDLoc(N), N->getValueType(0),
16228                          N0.getOperand(0));
16229     }
16230   }
16231 
16232   return SDValue();
16233 }
16234 
16235 /// Returns a vector_shuffle if it able to transform an AND to a vector_shuffle
16236 /// with the destination vector and a zero vector.
16237 /// e.g. AND V, <0xffffffff, 0, 0xffffffff, 0>. ==>
16238 ///      vector_shuffle V, Zero, <0, 4, 2, 4>
16239 SDValue DAGCombiner::XformToShuffleWithZero(SDNode *N) {
16240   EVT VT = N->getValueType(0);
16241   SDValue LHS = N->getOperand(0);
16242   SDValue RHS = peekThroughBitcast(N->getOperand(1));
16243   SDLoc DL(N);
16244 
16245   // Make sure we're not running after operation legalization where it
16246   // may have custom lowered the vector shuffles.
16247   if (LegalOperations)
16248     return SDValue();
16249 
16250   if (N->getOpcode() != ISD::AND)
16251     return SDValue();
16252 
16253   if (RHS.getOpcode() != ISD::BUILD_VECTOR)
16254     return SDValue();
16255 
16256   EVT RVT = RHS.getValueType();
16257   unsigned NumElts = RHS.getNumOperands();
16258 
16259   // Attempt to create a valid clear mask, splitting the mask into
16260   // sub elements and checking to see if each is
16261   // all zeros or all ones - suitable for shuffle masking.
16262   auto BuildClearMask = [&](int Split) {
16263     int NumSubElts = NumElts * Split;
16264     int NumSubBits = RVT.getScalarSizeInBits() / Split;
16265 
16266     SmallVector<int, 8> Indices;
16267     for (int i = 0; i != NumSubElts; ++i) {
16268       int EltIdx = i / Split;
16269       int SubIdx = i % Split;
16270       SDValue Elt = RHS.getOperand(EltIdx);
16271       if (Elt.isUndef()) {
16272         Indices.push_back(-1);
16273         continue;
16274       }
16275 
16276       APInt Bits;
16277       if (isa<ConstantSDNode>(Elt))
16278         Bits = cast<ConstantSDNode>(Elt)->getAPIntValue();
16279       else if (isa<ConstantFPSDNode>(Elt))
16280         Bits = cast<ConstantFPSDNode>(Elt)->getValueAPF().bitcastToAPInt();
16281       else
16282         return SDValue();
16283 
16284       // Extract the sub element from the constant bit mask.
16285       if (DAG.getDataLayout().isBigEndian()) {
16286         Bits.lshrInPlace((Split - SubIdx - 1) * NumSubBits);
16287       } else {
16288         Bits.lshrInPlace(SubIdx * NumSubBits);
16289       }
16290 
16291       if (Split > 1)
16292         Bits = Bits.trunc(NumSubBits);
16293 
16294       if (Bits.isAllOnesValue())
16295         Indices.push_back(i);
16296       else if (Bits == 0)
16297         Indices.push_back(i + NumSubElts);
16298       else
16299         return SDValue();
16300     }
16301 
16302     // Let's see if the target supports this vector_shuffle.
16303     EVT ClearSVT = EVT::getIntegerVT(*DAG.getContext(), NumSubBits);
16304     EVT ClearVT = EVT::getVectorVT(*DAG.getContext(), ClearSVT, NumSubElts);
16305     if (!TLI.isVectorClearMaskLegal(Indices, ClearVT))
16306       return SDValue();
16307 
16308     SDValue Zero = DAG.getConstant(0, DL, ClearVT);
16309     return DAG.getBitcast(VT, DAG.getVectorShuffle(ClearVT, DL,
16310                                                    DAG.getBitcast(ClearVT, LHS),
16311                                                    Zero, Indices));
16312   };
16313 
16314   // Determine maximum split level (byte level masking).
16315   int MaxSplit = 1;
16316   if (RVT.getScalarSizeInBits() % 8 == 0)
16317     MaxSplit = RVT.getScalarSizeInBits() / 8;
16318 
16319   for (int Split = 1; Split <= MaxSplit; ++Split)
16320     if (RVT.getScalarSizeInBits() % Split == 0)
16321       if (SDValue S = BuildClearMask(Split))
16322         return S;
16323 
16324   return SDValue();
16325 }
16326 
16327 /// Visit a binary vector operation, like ADD.
16328 SDValue DAGCombiner::SimplifyVBinOp(SDNode *N) {
16329   assert(N->getValueType(0).isVector() &&
16330          "SimplifyVBinOp only works on vectors!");
16331 
16332   SDValue LHS = N->getOperand(0);
16333   SDValue RHS = N->getOperand(1);
16334   SDValue Ops[] = {LHS, RHS};
16335 
16336   // See if we can constant fold the vector operation.
16337   if (SDValue Fold = DAG.FoldConstantVectorArithmetic(
16338           N->getOpcode(), SDLoc(LHS), LHS.getValueType(), Ops, N->getFlags()))
16339     return Fold;
16340 
16341   // Try to convert a constant mask AND into a shuffle clear mask.
16342   if (SDValue Shuffle = XformToShuffleWithZero(N))
16343     return Shuffle;
16344 
16345   // Type legalization might introduce new shuffles in the DAG.
16346   // Fold (VBinOp (shuffle (A, Undef, Mask)), (shuffle (B, Undef, Mask)))
16347   //   -> (shuffle (VBinOp (A, B)), Undef, Mask).
16348   if (LegalTypes && isa<ShuffleVectorSDNode>(LHS) &&
16349       isa<ShuffleVectorSDNode>(RHS) && LHS.hasOneUse() && RHS.hasOneUse() &&
16350       LHS.getOperand(1).isUndef() &&
16351       RHS.getOperand(1).isUndef()) {
16352     ShuffleVectorSDNode *SVN0 = cast<ShuffleVectorSDNode>(LHS);
16353     ShuffleVectorSDNode *SVN1 = cast<ShuffleVectorSDNode>(RHS);
16354 
16355     if (SVN0->getMask().equals(SVN1->getMask())) {
16356       EVT VT = N->getValueType(0);
16357       SDValue UndefVector = LHS.getOperand(1);
16358       SDValue NewBinOp = DAG.getNode(N->getOpcode(), SDLoc(N), VT,
16359                                      LHS.getOperand(0), RHS.getOperand(0),
16360                                      N->getFlags());
16361       AddUsersToWorklist(N);
16362       return DAG.getVectorShuffle(VT, SDLoc(N), NewBinOp, UndefVector,
16363                                   SVN0->getMask());
16364     }
16365   }
16366 
16367   return SDValue();
16368 }
16369 
16370 SDValue DAGCombiner::SimplifySelect(const SDLoc &DL, SDValue N0, SDValue N1,
16371                                     SDValue N2) {
16372   assert(N0.getOpcode() ==ISD::SETCC && "First argument must be a SetCC node!");
16373 
16374   SDValue SCC = SimplifySelectCC(DL, N0.getOperand(0), N0.getOperand(1), N1, N2,
16375                                  cast<CondCodeSDNode>(N0.getOperand(2))->get());
16376 
16377   // If we got a simplified select_cc node back from SimplifySelectCC, then
16378   // break it down into a new SETCC node, and a new SELECT node, and then return
16379   // the SELECT node, since we were called with a SELECT node.
16380   if (SCC.getNode()) {
16381     // Check to see if we got a select_cc back (to turn into setcc/select).
16382     // Otherwise, just return whatever node we got back, like fabs.
16383     if (SCC.getOpcode() == ISD::SELECT_CC) {
16384       SDValue SETCC = DAG.getNode(ISD::SETCC, SDLoc(N0),
16385                                   N0.getValueType(),
16386                                   SCC.getOperand(0), SCC.getOperand(1),
16387                                   SCC.getOperand(4));
16388       AddToWorklist(SETCC.getNode());
16389       return DAG.getSelect(SDLoc(SCC), SCC.getValueType(), SETCC,
16390                            SCC.getOperand(2), SCC.getOperand(3));
16391     }
16392 
16393     return SCC;
16394   }
16395   return SDValue();
16396 }
16397 
16398 /// Given a SELECT or a SELECT_CC node, where LHS and RHS are the two values
16399 /// being selected between, see if we can simplify the select.  Callers of this
16400 /// should assume that TheSelect is deleted if this returns true.  As such, they
16401 /// should return the appropriate thing (e.g. the node) back to the top-level of
16402 /// the DAG combiner loop to avoid it being looked at.
16403 bool DAGCombiner::SimplifySelectOps(SDNode *TheSelect, SDValue LHS,
16404                                     SDValue RHS) {
16405   // fold (select (setcc x, [+-]0.0, *lt), NaN, (fsqrt x))
16406   // The select + setcc is redundant, because fsqrt returns NaN for X < 0.
16407   if (const ConstantFPSDNode *NaN = isConstOrConstSplatFP(LHS)) {
16408     if (NaN->isNaN() && RHS.getOpcode() == ISD::FSQRT) {
16409       // We have: (select (setcc ?, ?, ?), NaN, (fsqrt ?))
16410       SDValue Sqrt = RHS;
16411       ISD::CondCode CC;
16412       SDValue CmpLHS;
16413       const ConstantFPSDNode *Zero = nullptr;
16414 
16415       if (TheSelect->getOpcode() == ISD::SELECT_CC) {
16416         CC = dyn_cast<CondCodeSDNode>(TheSelect->getOperand(4))->get();
16417         CmpLHS = TheSelect->getOperand(0);
16418         Zero = isConstOrConstSplatFP(TheSelect->getOperand(1));
16419       } else {
16420         // SELECT or VSELECT
16421         SDValue Cmp = TheSelect->getOperand(0);
16422         if (Cmp.getOpcode() == ISD::SETCC) {
16423           CC = dyn_cast<CondCodeSDNode>(Cmp.getOperand(2))->get();
16424           CmpLHS = Cmp.getOperand(0);
16425           Zero = isConstOrConstSplatFP(Cmp.getOperand(1));
16426         }
16427       }
16428       if (Zero && Zero->isZero() &&
16429           Sqrt.getOperand(0) == CmpLHS && (CC == ISD::SETOLT ||
16430           CC == ISD::SETULT || CC == ISD::SETLT)) {
16431         // We have: (select (setcc x, [+-]0.0, *lt), NaN, (fsqrt x))
16432         CombineTo(TheSelect, Sqrt);
16433         return true;
16434       }
16435     }
16436   }
16437   // Cannot simplify select with vector condition
16438   if (TheSelect->getOperand(0).getValueType().isVector()) return false;
16439 
16440   // If this is a select from two identical things, try to pull the operation
16441   // through the select.
16442   if (LHS.getOpcode() != RHS.getOpcode() ||
16443       !LHS.hasOneUse() || !RHS.hasOneUse())
16444     return false;
16445 
16446   // If this is a load and the token chain is identical, replace the select
16447   // of two loads with a load through a select of the address to load from.
16448   // This triggers in things like "select bool X, 10.0, 123.0" after the FP
16449   // constants have been dropped into the constant pool.
16450   if (LHS.getOpcode() == ISD::LOAD) {
16451     LoadSDNode *LLD = cast<LoadSDNode>(LHS);
16452     LoadSDNode *RLD = cast<LoadSDNode>(RHS);
16453 
16454     // Token chains must be identical.
16455     if (LHS.getOperand(0) != RHS.getOperand(0) ||
16456         // Do not let this transformation reduce the number of volatile loads.
16457         LLD->isVolatile() || RLD->isVolatile() ||
16458         // FIXME: If either is a pre/post inc/dec load,
16459         // we'd need to split out the address adjustment.
16460         LLD->isIndexed() || RLD->isIndexed() ||
16461         // If this is an EXTLOAD, the VT's must match.
16462         LLD->getMemoryVT() != RLD->getMemoryVT() ||
16463         // If this is an EXTLOAD, the kind of extension must match.
16464         (LLD->getExtensionType() != RLD->getExtensionType() &&
16465          // The only exception is if one of the extensions is anyext.
16466          LLD->getExtensionType() != ISD::EXTLOAD &&
16467          RLD->getExtensionType() != ISD::EXTLOAD) ||
16468         // FIXME: this discards src value information.  This is
16469         // over-conservative. It would be beneficial to be able to remember
16470         // both potential memory locations.  Since we are discarding
16471         // src value info, don't do the transformation if the memory
16472         // locations are not in the default address space.
16473         LLD->getPointerInfo().getAddrSpace() != 0 ||
16474         RLD->getPointerInfo().getAddrSpace() != 0 ||
16475         !TLI.isOperationLegalOrCustom(TheSelect->getOpcode(),
16476                                       LLD->getBasePtr().getValueType()))
16477       return false;
16478 
16479     // Check that the select condition doesn't reach either load.  If so,
16480     // folding this will induce a cycle into the DAG.  If not, this is safe to
16481     // xform, so create a select of the addresses.
16482     SDValue Addr;
16483     if (TheSelect->getOpcode() == ISD::SELECT) {
16484       SDNode *CondNode = TheSelect->getOperand(0).getNode();
16485       if ((LLD->hasAnyUseOfValue(1) && LLD->isPredecessorOf(CondNode)) ||
16486           (RLD->hasAnyUseOfValue(1) && RLD->isPredecessorOf(CondNode)))
16487         return false;
16488       // The loads must not depend on one another.
16489       if (LLD->isPredecessorOf(RLD) ||
16490           RLD->isPredecessorOf(LLD))
16491         return false;
16492       Addr = DAG.getSelect(SDLoc(TheSelect),
16493                            LLD->getBasePtr().getValueType(),
16494                            TheSelect->getOperand(0), LLD->getBasePtr(),
16495                            RLD->getBasePtr());
16496     } else {  // Otherwise SELECT_CC
16497       SDNode *CondLHS = TheSelect->getOperand(0).getNode();
16498       SDNode *CondRHS = TheSelect->getOperand(1).getNode();
16499 
16500       if ((LLD->hasAnyUseOfValue(1) &&
16501            (LLD->isPredecessorOf(CondLHS) || LLD->isPredecessorOf(CondRHS))) ||
16502           (RLD->hasAnyUseOfValue(1) &&
16503            (RLD->isPredecessorOf(CondLHS) || RLD->isPredecessorOf(CondRHS))))
16504         return false;
16505 
16506       Addr = DAG.getNode(ISD::SELECT_CC, SDLoc(TheSelect),
16507                          LLD->getBasePtr().getValueType(),
16508                          TheSelect->getOperand(0),
16509                          TheSelect->getOperand(1),
16510                          LLD->getBasePtr(), RLD->getBasePtr(),
16511                          TheSelect->getOperand(4));
16512     }
16513 
16514     SDValue Load;
16515     // It is safe to replace the two loads if they have different alignments,
16516     // but the new load must be the minimum (most restrictive) alignment of the
16517     // inputs.
16518     unsigned Alignment = std::min(LLD->getAlignment(), RLD->getAlignment());
16519     MachineMemOperand::Flags MMOFlags = LLD->getMemOperand()->getFlags();
16520     if (!RLD->isInvariant())
16521       MMOFlags &= ~MachineMemOperand::MOInvariant;
16522     if (!RLD->isDereferenceable())
16523       MMOFlags &= ~MachineMemOperand::MODereferenceable;
16524     if (LLD->getExtensionType() == ISD::NON_EXTLOAD) {
16525       // FIXME: Discards pointer and AA info.
16526       Load = DAG.getLoad(TheSelect->getValueType(0), SDLoc(TheSelect),
16527                          LLD->getChain(), Addr, MachinePointerInfo(), Alignment,
16528                          MMOFlags);
16529     } else {
16530       // FIXME: Discards pointer and AA info.
16531       Load = DAG.getExtLoad(
16532           LLD->getExtensionType() == ISD::EXTLOAD ? RLD->getExtensionType()
16533                                                   : LLD->getExtensionType(),
16534           SDLoc(TheSelect), TheSelect->getValueType(0), LLD->getChain(), Addr,
16535           MachinePointerInfo(), LLD->getMemoryVT(), Alignment, MMOFlags);
16536     }
16537 
16538     // Users of the select now use the result of the load.
16539     CombineTo(TheSelect, Load);
16540 
16541     // Users of the old loads now use the new load's chain.  We know the
16542     // old-load value is dead now.
16543     CombineTo(LHS.getNode(), Load.getValue(0), Load.getValue(1));
16544     CombineTo(RHS.getNode(), Load.getValue(0), Load.getValue(1));
16545     return true;
16546   }
16547 
16548   return false;
16549 }
16550 
16551 /// Try to fold an expression of the form (N0 cond N1) ? N2 : N3 to a shift and
16552 /// bitwise 'and'.
16553 SDValue DAGCombiner::foldSelectCCToShiftAnd(const SDLoc &DL, SDValue N0,
16554                                             SDValue N1, SDValue N2, SDValue N3,
16555                                             ISD::CondCode CC) {
16556   // If this is a select where the false operand is zero and the compare is a
16557   // check of the sign bit, see if we can perform the "gzip trick":
16558   // select_cc setlt X, 0, A, 0 -> and (sra X, size(X)-1), A
16559   // select_cc setgt X, 0, A, 0 -> and (not (sra X, size(X)-1)), A
16560   EVT XType = N0.getValueType();
16561   EVT AType = N2.getValueType();
16562   if (!isNullConstant(N3) || !XType.bitsGE(AType))
16563     return SDValue();
16564 
16565   // If the comparison is testing for a positive value, we have to invert
16566   // the sign bit mask, so only do that transform if the target has a bitwise
16567   // 'and not' instruction (the invert is free).
16568   if (CC == ISD::SETGT && TLI.hasAndNot(N2)) {
16569     // (X > -1) ? A : 0
16570     // (X >  0) ? X : 0 <-- This is canonical signed max.
16571     if (!(isAllOnesConstant(N1) || (isNullConstant(N1) && N0 == N2)))
16572       return SDValue();
16573   } else if (CC == ISD::SETLT) {
16574     // (X <  0) ? A : 0
16575     // (X <  1) ? X : 0 <-- This is un-canonicalized signed min.
16576     if (!(isNullConstant(N1) || (isOneConstant(N1) && N0 == N2)))
16577       return SDValue();
16578   } else {
16579     return SDValue();
16580   }
16581 
16582   // and (sra X, size(X)-1), A -> "and (srl X, C2), A" iff A is a single-bit
16583   // constant.
16584   EVT ShiftAmtTy = getShiftAmountTy(N0.getValueType());
16585   auto *N2C = dyn_cast<ConstantSDNode>(N2.getNode());
16586   if (N2C && ((N2C->getAPIntValue() & (N2C->getAPIntValue() - 1)) == 0)) {
16587     unsigned ShCt = XType.getSizeInBits() - N2C->getAPIntValue().logBase2() - 1;
16588     SDValue ShiftAmt = DAG.getConstant(ShCt, DL, ShiftAmtTy);
16589     SDValue Shift = DAG.getNode(ISD::SRL, DL, XType, N0, ShiftAmt);
16590     AddToWorklist(Shift.getNode());
16591 
16592     if (XType.bitsGT(AType)) {
16593       Shift = DAG.getNode(ISD::TRUNCATE, DL, AType, Shift);
16594       AddToWorklist(Shift.getNode());
16595     }
16596 
16597     if (CC == ISD::SETGT)
16598       Shift = DAG.getNOT(DL, Shift, AType);
16599 
16600     return DAG.getNode(ISD::AND, DL, AType, Shift, N2);
16601   }
16602 
16603   SDValue ShiftAmt = DAG.getConstant(XType.getSizeInBits() - 1, DL, ShiftAmtTy);
16604   SDValue Shift = DAG.getNode(ISD::SRA, DL, XType, N0, ShiftAmt);
16605   AddToWorklist(Shift.getNode());
16606 
16607   if (XType.bitsGT(AType)) {
16608     Shift = DAG.getNode(ISD::TRUNCATE, DL, AType, Shift);
16609     AddToWorklist(Shift.getNode());
16610   }
16611 
16612   if (CC == ISD::SETGT)
16613     Shift = DAG.getNOT(DL, Shift, AType);
16614 
16615   return DAG.getNode(ISD::AND, DL, AType, Shift, N2);
16616 }
16617 
16618 /// Simplify an expression of the form (N0 cond N1) ? N2 : N3
16619 /// where 'cond' is the comparison specified by CC.
16620 SDValue DAGCombiner::SimplifySelectCC(const SDLoc &DL, SDValue N0, SDValue N1,
16621                                       SDValue N2, SDValue N3, ISD::CondCode CC,
16622                                       bool NotExtCompare) {
16623   // (x ? y : y) -> y.
16624   if (N2 == N3) return N2;
16625 
16626   EVT VT = N2.getValueType();
16627   ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1.getNode());
16628   ConstantSDNode *N2C = dyn_cast<ConstantSDNode>(N2.getNode());
16629 
16630   // Determine if the condition we're dealing with is constant
16631   SDValue SCC = SimplifySetCC(getSetCCResultType(N0.getValueType()),
16632                               N0, N1, CC, DL, false);
16633   if (SCC.getNode()) AddToWorklist(SCC.getNode());
16634 
16635   if (ConstantSDNode *SCCC = dyn_cast_or_null<ConstantSDNode>(SCC.getNode())) {
16636     // fold select_cc true, x, y -> x
16637     // fold select_cc false, x, y -> y
16638     return !SCCC->isNullValue() ? N2 : N3;
16639   }
16640 
16641   // Check to see if we can simplify the select into an fabs node
16642   if (ConstantFPSDNode *CFP = dyn_cast<ConstantFPSDNode>(N1)) {
16643     // Allow either -0.0 or 0.0
16644     if (CFP->isZero()) {
16645       // select (setg[te] X, +/-0.0), X, fneg(X) -> fabs
16646       if ((CC == ISD::SETGE || CC == ISD::SETGT) &&
16647           N0 == N2 && N3.getOpcode() == ISD::FNEG &&
16648           N2 == N3.getOperand(0))
16649         return DAG.getNode(ISD::FABS, DL, VT, N0);
16650 
16651       // select (setl[te] X, +/-0.0), fneg(X), X -> fabs
16652       if ((CC == ISD::SETLT || CC == ISD::SETLE) &&
16653           N0 == N3 && N2.getOpcode() == ISD::FNEG &&
16654           N2.getOperand(0) == N3)
16655         return DAG.getNode(ISD::FABS, DL, VT, N3);
16656     }
16657   }
16658 
16659   // Turn "(a cond b) ? 1.0f : 2.0f" into "load (tmp + ((a cond b) ? 0 : 4)"
16660   // where "tmp" is a constant pool entry containing an array with 1.0 and 2.0
16661   // in it.  This is a win when the constant is not otherwise available because
16662   // it replaces two constant pool loads with one.  We only do this if the FP
16663   // type is known to be legal, because if it isn't, then we are before legalize
16664   // types an we want the other legalization to happen first (e.g. to avoid
16665   // messing with soft float) and if the ConstantFP is not legal, because if
16666   // it is legal, we may not need to store the FP constant in a constant pool.
16667   if (ConstantFPSDNode *TV = dyn_cast<ConstantFPSDNode>(N2))
16668     if (ConstantFPSDNode *FV = dyn_cast<ConstantFPSDNode>(N3)) {
16669       if (TLI.isTypeLegal(N2.getValueType()) &&
16670           (TLI.getOperationAction(ISD::ConstantFP, N2.getValueType()) !=
16671                TargetLowering::Legal &&
16672            !TLI.isFPImmLegal(TV->getValueAPF(), TV->getValueType(0)) &&
16673            !TLI.isFPImmLegal(FV->getValueAPF(), FV->getValueType(0))) &&
16674           // If both constants have multiple uses, then we won't need to do an
16675           // extra load, they are likely around in registers for other users.
16676           (TV->hasOneUse() || FV->hasOneUse())) {
16677         Constant *Elts[] = {
16678           const_cast<ConstantFP*>(FV->getConstantFPValue()),
16679           const_cast<ConstantFP*>(TV->getConstantFPValue())
16680         };
16681         Type *FPTy = Elts[0]->getType();
16682         const DataLayout &TD = DAG.getDataLayout();
16683 
16684         // Create a ConstantArray of the two constants.
16685         Constant *CA = ConstantArray::get(ArrayType::get(FPTy, 2), Elts);
16686         SDValue CPIdx =
16687             DAG.getConstantPool(CA, TLI.getPointerTy(DAG.getDataLayout()),
16688                                 TD.getPrefTypeAlignment(FPTy));
16689         unsigned Alignment = cast<ConstantPoolSDNode>(CPIdx)->getAlignment();
16690 
16691         // Get the offsets to the 0 and 1 element of the array so that we can
16692         // select between them.
16693         SDValue Zero = DAG.getIntPtrConstant(0, DL);
16694         unsigned EltSize = (unsigned)TD.getTypeAllocSize(Elts[0]->getType());
16695         SDValue One = DAG.getIntPtrConstant(EltSize, SDLoc(FV));
16696 
16697         SDValue Cond = DAG.getSetCC(DL,
16698                                     getSetCCResultType(N0.getValueType()),
16699                                     N0, N1, CC);
16700         AddToWorklist(Cond.getNode());
16701         SDValue CstOffset = DAG.getSelect(DL, Zero.getValueType(),
16702                                           Cond, One, Zero);
16703         AddToWorklist(CstOffset.getNode());
16704         CPIdx = DAG.getNode(ISD::ADD, DL, CPIdx.getValueType(), CPIdx,
16705                             CstOffset);
16706         AddToWorklist(CPIdx.getNode());
16707         return DAG.getLoad(
16708             TV->getValueType(0), DL, DAG.getEntryNode(), CPIdx,
16709             MachinePointerInfo::getConstantPool(DAG.getMachineFunction()),
16710             Alignment);
16711       }
16712     }
16713 
16714   if (SDValue V = foldSelectCCToShiftAnd(DL, N0, N1, N2, N3, CC))
16715     return V;
16716 
16717   // fold (select_cc seteq (and x, y), 0, 0, A) -> (and (shr (shl x)) A)
16718   // where y is has a single bit set.
16719   // A plaintext description would be, we can turn the SELECT_CC into an AND
16720   // when the condition can be materialized as an all-ones register.  Any
16721   // single bit-test can be materialized as an all-ones register with
16722   // shift-left and shift-right-arith.
16723   if (CC == ISD::SETEQ && N0->getOpcode() == ISD::AND &&
16724       N0->getValueType(0) == VT && isNullConstant(N1) && isNullConstant(N2)) {
16725     SDValue AndLHS = N0->getOperand(0);
16726     ConstantSDNode *ConstAndRHS = dyn_cast<ConstantSDNode>(N0->getOperand(1));
16727     if (ConstAndRHS && ConstAndRHS->getAPIntValue().countPopulation() == 1) {
16728       // Shift the tested bit over the sign bit.
16729       const APInt &AndMask = ConstAndRHS->getAPIntValue();
16730       SDValue ShlAmt =
16731         DAG.getConstant(AndMask.countLeadingZeros(), SDLoc(AndLHS),
16732                         getShiftAmountTy(AndLHS.getValueType()));
16733       SDValue Shl = DAG.getNode(ISD::SHL, SDLoc(N0), VT, AndLHS, ShlAmt);
16734 
16735       // Now arithmetic right shift it all the way over, so the result is either
16736       // all-ones, or zero.
16737       SDValue ShrAmt =
16738         DAG.getConstant(AndMask.getBitWidth() - 1, SDLoc(Shl),
16739                         getShiftAmountTy(Shl.getValueType()));
16740       SDValue Shr = DAG.getNode(ISD::SRA, SDLoc(N0), VT, Shl, ShrAmt);
16741 
16742       return DAG.getNode(ISD::AND, DL, VT, Shr, N3);
16743     }
16744   }
16745 
16746   // fold select C, 16, 0 -> shl C, 4
16747   if (N2C && isNullConstant(N3) && N2C->getAPIntValue().isPowerOf2() &&
16748       TLI.getBooleanContents(N0.getValueType()) ==
16749           TargetLowering::ZeroOrOneBooleanContent) {
16750 
16751     // If the caller doesn't want us to simplify this into a zext of a compare,
16752     // don't do it.
16753     if (NotExtCompare && N2C->isOne())
16754       return SDValue();
16755 
16756     // Get a SetCC of the condition
16757     // NOTE: Don't create a SETCC if it's not legal on this target.
16758     if (!LegalOperations ||
16759         TLI.isOperationLegal(ISD::SETCC, N0.getValueType())) {
16760       SDValue Temp, SCC;
16761       // cast from setcc result type to select result type
16762       if (LegalTypes) {
16763         SCC  = DAG.getSetCC(DL, getSetCCResultType(N0.getValueType()),
16764                             N0, N1, CC);
16765         if (N2.getValueType().bitsLT(SCC.getValueType()))
16766           Temp = DAG.getZeroExtendInReg(SCC, SDLoc(N2),
16767                                         N2.getValueType());
16768         else
16769           Temp = DAG.getNode(ISD::ZERO_EXTEND, SDLoc(N2),
16770                              N2.getValueType(), SCC);
16771       } else {
16772         SCC  = DAG.getSetCC(SDLoc(N0), MVT::i1, N0, N1, CC);
16773         Temp = DAG.getNode(ISD::ZERO_EXTEND, SDLoc(N2),
16774                            N2.getValueType(), SCC);
16775       }
16776 
16777       AddToWorklist(SCC.getNode());
16778       AddToWorklist(Temp.getNode());
16779 
16780       if (N2C->isOne())
16781         return Temp;
16782 
16783       // shl setcc result by log2 n2c
16784       return DAG.getNode(
16785           ISD::SHL, DL, N2.getValueType(), Temp,
16786           DAG.getConstant(N2C->getAPIntValue().logBase2(), SDLoc(Temp),
16787                           getShiftAmountTy(Temp.getValueType())));
16788     }
16789   }
16790 
16791   // Check to see if this is an integer abs.
16792   // select_cc setg[te] X,  0,  X, -X ->
16793   // select_cc setgt    X, -1,  X, -X ->
16794   // select_cc setl[te] X,  0, -X,  X ->
16795   // select_cc setlt    X,  1, -X,  X ->
16796   // Y = sra (X, size(X)-1); xor (add (X, Y), Y)
16797   if (N1C) {
16798     ConstantSDNode *SubC = nullptr;
16799     if (((N1C->isNullValue() && (CC == ISD::SETGT || CC == ISD::SETGE)) ||
16800          (N1C->isAllOnesValue() && CC == ISD::SETGT)) &&
16801         N0 == N2 && N3.getOpcode() == ISD::SUB && N0 == N3.getOperand(1))
16802       SubC = dyn_cast<ConstantSDNode>(N3.getOperand(0));
16803     else if (((N1C->isNullValue() && (CC == ISD::SETLT || CC == ISD::SETLE)) ||
16804               (N1C->isOne() && CC == ISD::SETLT)) &&
16805              N0 == N3 && N2.getOpcode() == ISD::SUB && N0 == N2.getOperand(1))
16806       SubC = dyn_cast<ConstantSDNode>(N2.getOperand(0));
16807 
16808     EVT XType = N0.getValueType();
16809     if (SubC && SubC->isNullValue() && XType.isInteger()) {
16810       SDLoc DL(N0);
16811       SDValue Shift = DAG.getNode(ISD::SRA, DL, XType,
16812                                   N0,
16813                                   DAG.getConstant(XType.getSizeInBits() - 1, DL,
16814                                          getShiftAmountTy(N0.getValueType())));
16815       SDValue Add = DAG.getNode(ISD::ADD, DL,
16816                                 XType, N0, Shift);
16817       AddToWorklist(Shift.getNode());
16818       AddToWorklist(Add.getNode());
16819       return DAG.getNode(ISD::XOR, DL, XType, Add, Shift);
16820     }
16821   }
16822 
16823   // select_cc seteq X, 0, sizeof(X), ctlz(X) -> ctlz(X)
16824   // select_cc seteq X, 0, sizeof(X), ctlz_zero_undef(X) -> ctlz(X)
16825   // select_cc seteq X, 0, sizeof(X), cttz(X) -> cttz(X)
16826   // select_cc seteq X, 0, sizeof(X), cttz_zero_undef(X) -> cttz(X)
16827   // select_cc setne X, 0, ctlz(X), sizeof(X) -> ctlz(X)
16828   // select_cc setne X, 0, ctlz_zero_undef(X), sizeof(X) -> ctlz(X)
16829   // select_cc setne X, 0, cttz(X), sizeof(X) -> cttz(X)
16830   // select_cc setne X, 0, cttz_zero_undef(X), sizeof(X) -> cttz(X)
16831   if (N1C && N1C->isNullValue() && (CC == ISD::SETEQ || CC == ISD::SETNE)) {
16832     SDValue ValueOnZero = N2;
16833     SDValue Count = N3;
16834     // If the condition is NE instead of E, swap the operands.
16835     if (CC == ISD::SETNE)
16836       std::swap(ValueOnZero, Count);
16837     // Check if the value on zero is a constant equal to the bits in the type.
16838     if (auto *ValueOnZeroC = dyn_cast<ConstantSDNode>(ValueOnZero)) {
16839       if (ValueOnZeroC->getAPIntValue() == VT.getSizeInBits()) {
16840         // If the other operand is cttz/cttz_zero_undef of N0, and cttz is
16841         // legal, combine to just cttz.
16842         if ((Count.getOpcode() == ISD::CTTZ ||
16843              Count.getOpcode() == ISD::CTTZ_ZERO_UNDEF) &&
16844             N0 == Count.getOperand(0) &&
16845             (!LegalOperations || TLI.isOperationLegal(ISD::CTTZ, VT)))
16846           return DAG.getNode(ISD::CTTZ, DL, VT, N0);
16847         // If the other operand is ctlz/ctlz_zero_undef of N0, and ctlz is
16848         // legal, combine to just ctlz.
16849         if ((Count.getOpcode() == ISD::CTLZ ||
16850              Count.getOpcode() == ISD::CTLZ_ZERO_UNDEF) &&
16851             N0 == Count.getOperand(0) &&
16852             (!LegalOperations || TLI.isOperationLegal(ISD::CTLZ, VT)))
16853           return DAG.getNode(ISD::CTLZ, DL, VT, N0);
16854       }
16855     }
16856   }
16857 
16858   return SDValue();
16859 }
16860 
16861 /// This is a stub for TargetLowering::SimplifySetCC.
16862 SDValue DAGCombiner::SimplifySetCC(EVT VT, SDValue N0, SDValue N1,
16863                                    ISD::CondCode Cond, const SDLoc &DL,
16864                                    bool foldBooleans) {
16865   TargetLowering::DAGCombinerInfo
16866     DagCombineInfo(DAG, Level, false, this);
16867   return TLI.SimplifySetCC(VT, N0, N1, Cond, foldBooleans, DagCombineInfo, DL);
16868 }
16869 
16870 /// Given an ISD::SDIV node expressing a divide by constant, return
16871 /// a DAG expression to select that will generate the same value by multiplying
16872 /// by a magic number.
16873 /// Ref: "Hacker's Delight" or "The PowerPC Compiler Writer's Guide".
16874 SDValue DAGCombiner::BuildSDIV(SDNode *N) {
16875   // when optimising for minimum size, we don't want to expand a div to a mul
16876   // and a shift.
16877   if (DAG.getMachineFunction().getFunction()->optForMinSize())
16878     return SDValue();
16879 
16880   ConstantSDNode *C = isConstOrConstSplat(N->getOperand(1));
16881   if (!C)
16882     return SDValue();
16883 
16884   // Avoid division by zero.
16885   if (C->isNullValue())
16886     return SDValue();
16887 
16888   std::vector<SDNode *> Built;
16889   SDValue S =
16890       TLI.BuildSDIV(N, C->getAPIntValue(), DAG, LegalOperations, &Built);
16891 
16892   for (SDNode *N : Built)
16893     AddToWorklist(N);
16894   return S;
16895 }
16896 
16897 /// Given an ISD::SDIV node expressing a divide by constant power of 2, return a
16898 /// DAG expression that will generate the same value by right shifting.
16899 SDValue DAGCombiner::BuildSDIVPow2(SDNode *N) {
16900   ConstantSDNode *C = isConstOrConstSplat(N->getOperand(1));
16901   if (!C)
16902     return SDValue();
16903 
16904   // Avoid division by zero.
16905   if (C->isNullValue())
16906     return SDValue();
16907 
16908   std::vector<SDNode *> Built;
16909   SDValue S = TLI.BuildSDIVPow2(N, C->getAPIntValue(), DAG, &Built);
16910 
16911   for (SDNode *N : Built)
16912     AddToWorklist(N);
16913   return S;
16914 }
16915 
16916 /// Given an ISD::UDIV node expressing a divide by constant, return a DAG
16917 /// expression that will generate the same value by multiplying by a magic
16918 /// number.
16919 /// Ref: "Hacker's Delight" or "The PowerPC Compiler Writer's Guide".
16920 SDValue DAGCombiner::BuildUDIV(SDNode *N) {
16921   // when optimising for minimum size, we don't want to expand a div to a mul
16922   // and a shift.
16923   if (DAG.getMachineFunction().getFunction()->optForMinSize())
16924     return SDValue();
16925 
16926   ConstantSDNode *C = isConstOrConstSplat(N->getOperand(1));
16927   if (!C)
16928     return SDValue();
16929 
16930   // Avoid division by zero.
16931   if (C->isNullValue())
16932     return SDValue();
16933 
16934   std::vector<SDNode *> Built;
16935   SDValue S =
16936       TLI.BuildUDIV(N, C->getAPIntValue(), DAG, LegalOperations, &Built);
16937 
16938   for (SDNode *N : Built)
16939     AddToWorklist(N);
16940   return S;
16941 }
16942 
16943 /// Determines the LogBase2 value for a non-null input value using the
16944 /// transform: LogBase2(V) = (EltBits - 1) - ctlz(V).
16945 SDValue DAGCombiner::BuildLogBase2(SDValue V, const SDLoc &DL) {
16946   EVT VT = V.getValueType();
16947   unsigned EltBits = VT.getScalarSizeInBits();
16948   SDValue Ctlz = DAG.getNode(ISD::CTLZ, DL, VT, V);
16949   SDValue Base = DAG.getConstant(EltBits - 1, DL, VT);
16950   SDValue LogBase2 = DAG.getNode(ISD::SUB, DL, VT, Base, Ctlz);
16951   return LogBase2;
16952 }
16953 
16954 /// Newton iteration for a function: F(X) is X_{i+1} = X_i - F(X_i)/F'(X_i)
16955 /// For the reciprocal, we need to find the zero of the function:
16956 ///   F(X) = A X - 1 [which has a zero at X = 1/A]
16957 ///     =>
16958 ///   X_{i+1} = X_i (2 - A X_i) = X_i + X_i (1 - A X_i) [this second form
16959 ///     does not require additional intermediate precision]
16960 SDValue DAGCombiner::BuildReciprocalEstimate(SDValue Op, SDNodeFlags Flags) {
16961   if (Level >= AfterLegalizeDAG)
16962     return SDValue();
16963 
16964   // TODO: Handle half and/or extended types?
16965   EVT VT = Op.getValueType();
16966   if (VT.getScalarType() != MVT::f32 && VT.getScalarType() != MVT::f64)
16967     return SDValue();
16968 
16969   // If estimates are explicitly disabled for this function, we're done.
16970   MachineFunction &MF = DAG.getMachineFunction();
16971   int Enabled = TLI.getRecipEstimateDivEnabled(VT, MF);
16972   if (Enabled == TLI.ReciprocalEstimate::Disabled)
16973     return SDValue();
16974 
16975   // Estimates may be explicitly enabled for this type with a custom number of
16976   // refinement steps.
16977   int Iterations = TLI.getDivRefinementSteps(VT, MF);
16978   if (SDValue Est = TLI.getRecipEstimate(Op, DAG, Enabled, Iterations)) {
16979     AddToWorklist(Est.getNode());
16980 
16981     if (Iterations) {
16982       EVT VT = Op.getValueType();
16983       SDLoc DL(Op);
16984       SDValue FPOne = DAG.getConstantFP(1.0, DL, VT);
16985 
16986       // Newton iterations: Est = Est + Est (1 - Arg * Est)
16987       for (int i = 0; i < Iterations; ++i) {
16988         SDValue NewEst = DAG.getNode(ISD::FMUL, DL, VT, Op, Est, Flags);
16989         AddToWorklist(NewEst.getNode());
16990 
16991         NewEst = DAG.getNode(ISD::FSUB, DL, VT, FPOne, NewEst, Flags);
16992         AddToWorklist(NewEst.getNode());
16993 
16994         NewEst = DAG.getNode(ISD::FMUL, DL, VT, Est, NewEst, Flags);
16995         AddToWorklist(NewEst.getNode());
16996 
16997         Est = DAG.getNode(ISD::FADD, DL, VT, Est, NewEst, Flags);
16998         AddToWorklist(Est.getNode());
16999       }
17000     }
17001     return Est;
17002   }
17003 
17004   return SDValue();
17005 }
17006 
17007 /// Newton iteration for a function: F(X) is X_{i+1} = X_i - F(X_i)/F'(X_i)
17008 /// For the reciprocal sqrt, we need to find the zero of the function:
17009 ///   F(X) = 1/X^2 - A [which has a zero at X = 1/sqrt(A)]
17010 ///     =>
17011 ///   X_{i+1} = X_i (1.5 - A X_i^2 / 2)
17012 /// As a result, we precompute A/2 prior to the iteration loop.
17013 SDValue DAGCombiner::buildSqrtNROneConst(SDValue Arg, SDValue Est,
17014                                          unsigned Iterations,
17015                                          SDNodeFlags Flags, bool Reciprocal) {
17016   EVT VT = Arg.getValueType();
17017   SDLoc DL(Arg);
17018   SDValue ThreeHalves = DAG.getConstantFP(1.5, DL, VT);
17019 
17020   // We now need 0.5 * Arg which we can write as (1.5 * Arg - Arg) so that
17021   // this entire sequence requires only one FP constant.
17022   SDValue HalfArg = DAG.getNode(ISD::FMUL, DL, VT, ThreeHalves, Arg, Flags);
17023   AddToWorklist(HalfArg.getNode());
17024 
17025   HalfArg = DAG.getNode(ISD::FSUB, DL, VT, HalfArg, Arg, Flags);
17026   AddToWorklist(HalfArg.getNode());
17027 
17028   // Newton iterations: Est = Est * (1.5 - HalfArg * Est * Est)
17029   for (unsigned i = 0; i < Iterations; ++i) {
17030     SDValue NewEst = DAG.getNode(ISD::FMUL, DL, VT, Est, Est, Flags);
17031     AddToWorklist(NewEst.getNode());
17032 
17033     NewEst = DAG.getNode(ISD::FMUL, DL, VT, HalfArg, NewEst, Flags);
17034     AddToWorklist(NewEst.getNode());
17035 
17036     NewEst = DAG.getNode(ISD::FSUB, DL, VT, ThreeHalves, NewEst, Flags);
17037     AddToWorklist(NewEst.getNode());
17038 
17039     Est = DAG.getNode(ISD::FMUL, DL, VT, Est, NewEst, Flags);
17040     AddToWorklist(Est.getNode());
17041   }
17042 
17043   // If non-reciprocal square root is requested, multiply the result by Arg.
17044   if (!Reciprocal) {
17045     Est = DAG.getNode(ISD::FMUL, DL, VT, Est, Arg, Flags);
17046     AddToWorklist(Est.getNode());
17047   }
17048 
17049   return Est;
17050 }
17051 
17052 /// Newton iteration for a function: F(X) is X_{i+1} = X_i - F(X_i)/F'(X_i)
17053 /// For the reciprocal sqrt, we need to find the zero of the function:
17054 ///   F(X) = 1/X^2 - A [which has a zero at X = 1/sqrt(A)]
17055 ///     =>
17056 ///   X_{i+1} = (-0.5 * X_i) * (A * X_i * X_i + (-3.0))
17057 SDValue DAGCombiner::buildSqrtNRTwoConst(SDValue Arg, SDValue Est,
17058                                          unsigned Iterations,
17059                                          SDNodeFlags Flags, bool Reciprocal) {
17060   EVT VT = Arg.getValueType();
17061   SDLoc DL(Arg);
17062   SDValue MinusThree = DAG.getConstantFP(-3.0, DL, VT);
17063   SDValue MinusHalf = DAG.getConstantFP(-0.5, DL, VT);
17064 
17065   // This routine must enter the loop below to work correctly
17066   // when (Reciprocal == false).
17067   assert(Iterations > 0);
17068 
17069   // Newton iterations for reciprocal square root:
17070   // E = (E * -0.5) * ((A * E) * E + -3.0)
17071   for (unsigned i = 0; i < Iterations; ++i) {
17072     SDValue AE = DAG.getNode(ISD::FMUL, DL, VT, Arg, Est, Flags);
17073     AddToWorklist(AE.getNode());
17074 
17075     SDValue AEE = DAG.getNode(ISD::FMUL, DL, VT, AE, Est, Flags);
17076     AddToWorklist(AEE.getNode());
17077 
17078     SDValue RHS = DAG.getNode(ISD::FADD, DL, VT, AEE, MinusThree, Flags);
17079     AddToWorklist(RHS.getNode());
17080 
17081     // When calculating a square root at the last iteration build:
17082     // S = ((A * E) * -0.5) * ((A * E) * E + -3.0)
17083     // (notice a common subexpression)
17084     SDValue LHS;
17085     if (Reciprocal || (i + 1) < Iterations) {
17086       // RSQRT: LHS = (E * -0.5)
17087       LHS = DAG.getNode(ISD::FMUL, DL, VT, Est, MinusHalf, Flags);
17088     } else {
17089       // SQRT: LHS = (A * E) * -0.5
17090       LHS = DAG.getNode(ISD::FMUL, DL, VT, AE, MinusHalf, Flags);
17091     }
17092     AddToWorklist(LHS.getNode());
17093 
17094     Est = DAG.getNode(ISD::FMUL, DL, VT, LHS, RHS, Flags);
17095     AddToWorklist(Est.getNode());
17096   }
17097 
17098   return Est;
17099 }
17100 
17101 /// Build code to calculate either rsqrt(Op) or sqrt(Op). In the latter case
17102 /// Op*rsqrt(Op) is actually computed, so additional postprocessing is needed if
17103 /// Op can be zero.
17104 SDValue DAGCombiner::buildSqrtEstimateImpl(SDValue Op, SDNodeFlags Flags,
17105                                            bool Reciprocal) {
17106   if (Level >= AfterLegalizeDAG)
17107     return SDValue();
17108 
17109   // TODO: Handle half and/or extended types?
17110   EVT VT = Op.getValueType();
17111   if (VT.getScalarType() != MVT::f32 && VT.getScalarType() != MVT::f64)
17112     return SDValue();
17113 
17114   // If estimates are explicitly disabled for this function, we're done.
17115   MachineFunction &MF = DAG.getMachineFunction();
17116   int Enabled = TLI.getRecipEstimateSqrtEnabled(VT, MF);
17117   if (Enabled == TLI.ReciprocalEstimate::Disabled)
17118     return SDValue();
17119 
17120   // Estimates may be explicitly enabled for this type with a custom number of
17121   // refinement steps.
17122   int Iterations = TLI.getSqrtRefinementSteps(VT, MF);
17123 
17124   bool UseOneConstNR = false;
17125   if (SDValue Est =
17126       TLI.getSqrtEstimate(Op, DAG, Enabled, Iterations, UseOneConstNR,
17127                           Reciprocal)) {
17128     AddToWorklist(Est.getNode());
17129 
17130     if (Iterations) {
17131       Est = UseOneConstNR
17132             ? buildSqrtNROneConst(Op, Est, Iterations, Flags, Reciprocal)
17133             : buildSqrtNRTwoConst(Op, Est, Iterations, Flags, Reciprocal);
17134 
17135       if (!Reciprocal) {
17136         // Unfortunately, Est is now NaN if the input was exactly 0.0.
17137         // Select out this case and force the answer to 0.0.
17138         EVT VT = Op.getValueType();
17139         SDLoc DL(Op);
17140 
17141         SDValue FPZero = DAG.getConstantFP(0.0, DL, VT);
17142         EVT CCVT = getSetCCResultType(VT);
17143         SDValue ZeroCmp = DAG.getSetCC(DL, CCVT, Op, FPZero, ISD::SETEQ);
17144         AddToWorklist(ZeroCmp.getNode());
17145 
17146         Est = DAG.getNode(VT.isVector() ? ISD::VSELECT : ISD::SELECT, DL, VT,
17147                           ZeroCmp, FPZero, Est);
17148         AddToWorklist(Est.getNode());
17149       }
17150     }
17151     return Est;
17152   }
17153 
17154   return SDValue();
17155 }
17156 
17157 SDValue DAGCombiner::buildRsqrtEstimate(SDValue Op, SDNodeFlags Flags) {
17158   return buildSqrtEstimateImpl(Op, Flags, true);
17159 }
17160 
17161 SDValue DAGCombiner::buildSqrtEstimate(SDValue Op, SDNodeFlags Flags) {
17162   return buildSqrtEstimateImpl(Op, Flags, false);
17163 }
17164 
17165 /// Return true if base is a frame index, which is known not to alias with
17166 /// anything but itself.  Provides base object and offset as results.
17167 static bool findBaseOffset(SDValue Ptr, SDValue &Base, int64_t &Offset,
17168                            const GlobalValue *&GV, const void *&CV) {
17169   // Assume it is a primitive operation.
17170   Base = Ptr; Offset = 0; GV = nullptr; CV = nullptr;
17171 
17172   // If it's an adding a simple constant then integrate the offset.
17173   if (Base.getOpcode() == ISD::ADD) {
17174     if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Base.getOperand(1))) {
17175       Base = Base.getOperand(0);
17176       Offset += C->getSExtValue();
17177     }
17178   }
17179 
17180   // Return the underlying GlobalValue, and update the Offset.  Return false
17181   // for GlobalAddressSDNode since the same GlobalAddress may be represented
17182   // by multiple nodes with different offsets.
17183   if (GlobalAddressSDNode *G = dyn_cast<GlobalAddressSDNode>(Base)) {
17184     GV = G->getGlobal();
17185     Offset += G->getOffset();
17186     return false;
17187   }
17188 
17189   // Return the underlying Constant value, and update the Offset.  Return false
17190   // for ConstantSDNodes since the same constant pool entry may be represented
17191   // by multiple nodes with different offsets.
17192   if (ConstantPoolSDNode *C = dyn_cast<ConstantPoolSDNode>(Base)) {
17193     CV = C->isMachineConstantPoolEntry() ? (const void *)C->getMachineCPVal()
17194                                          : (const void *)C->getConstVal();
17195     Offset += C->getOffset();
17196     return false;
17197   }
17198   // If it's any of the following then it can't alias with anything but itself.
17199   return isa<FrameIndexSDNode>(Base);
17200 }
17201 
17202 /// Return true if there is any possibility that the two addresses overlap.
17203 bool DAGCombiner::isAlias(LSBaseSDNode *Op0, LSBaseSDNode *Op1) const {
17204   // If they are the same then they must be aliases.
17205   if (Op0->getBasePtr() == Op1->getBasePtr()) return true;
17206 
17207   // If they are both volatile then they cannot be reordered.
17208   if (Op0->isVolatile() && Op1->isVolatile()) return true;
17209 
17210   // If one operation reads from invariant memory, and the other may store, they
17211   // cannot alias. These should really be checking the equivalent of mayWrite,
17212   // but it only matters for memory nodes other than load /store.
17213   if (Op0->isInvariant() && Op1->writeMem())
17214     return false;
17215 
17216   if (Op1->isInvariant() && Op0->writeMem())
17217     return false;
17218 
17219   unsigned NumBytes0 = Op0->getMemoryVT().getSizeInBits() >> 3;
17220   unsigned NumBytes1 = Op1->getMemoryVT().getSizeInBits() >> 3;
17221 
17222   // Check for BaseIndexOffset matching.
17223   BaseIndexOffset BasePtr0 = BaseIndexOffset::match(Op0->getBasePtr(), DAG);
17224   BaseIndexOffset BasePtr1 = BaseIndexOffset::match(Op1->getBasePtr(), DAG);
17225   int64_t PtrDiff;
17226   if (BasePtr0.equalBaseIndex(BasePtr1, DAG, PtrDiff))
17227     return !((NumBytes0 <= PtrDiff) || (PtrDiff + NumBytes1 <= 0));
17228 
17229   // If both BasePtr0 and BasePtr1 are FrameIndexes, we will not be
17230   // able to calculate their relative offset if at least one arises
17231   // from an alloca. However, these allocas cannot overlap and we
17232   // can infer there is no alias.
17233   if (auto *A = dyn_cast<FrameIndexSDNode>(BasePtr0.getBase()))
17234     if (auto *B = dyn_cast<FrameIndexSDNode>(BasePtr1.getBase())) {
17235       MachineFrameInfo &MFI = DAG.getMachineFunction().getFrameInfo();
17236       // If the base are the same frame index but the we couldn't find a
17237       // constant offset, (indices are different) be conservative.
17238       if (A != B && (!MFI.isFixedObjectIndex(A->getIndex()) ||
17239                      !MFI.isFixedObjectIndex(B->getIndex())))
17240         return false;
17241     }
17242 
17243   // FIXME: findBaseOffset and ConstantValue/GlobalValue/FrameIndex analysis
17244   // modified to use BaseIndexOffset.
17245 
17246   // Gather base node and offset information.
17247   SDValue Base0, Base1;
17248   int64_t Offset0, Offset1;
17249   const GlobalValue *GV0, *GV1;
17250   const void *CV0, *CV1;
17251   bool IsFrameIndex0 = findBaseOffset(Op0->getBasePtr(),
17252                                       Base0, Offset0, GV0, CV0);
17253   bool IsFrameIndex1 = findBaseOffset(Op1->getBasePtr(),
17254                                       Base1, Offset1, GV1, CV1);
17255 
17256   // If they have the same base address, then check to see if they overlap.
17257   if (Base0 == Base1 || (GV0 && (GV0 == GV1)) || (CV0 && (CV0 == CV1)))
17258     return !((Offset0 + NumBytes0) <= Offset1 ||
17259              (Offset1 + NumBytes1) <= Offset0);
17260 
17261   // It is possible for different frame indices to alias each other, mostly
17262   // when tail call optimization reuses return address slots for arguments.
17263   // To catch this case, look up the actual index of frame indices to compute
17264   // the real alias relationship.
17265   if (IsFrameIndex0 && IsFrameIndex1) {
17266     MachineFrameInfo &MFI = DAG.getMachineFunction().getFrameInfo();
17267     Offset0 += MFI.getObjectOffset(cast<FrameIndexSDNode>(Base0)->getIndex());
17268     Offset1 += MFI.getObjectOffset(cast<FrameIndexSDNode>(Base1)->getIndex());
17269     return !((Offset0 + NumBytes0) <= Offset1 ||
17270              (Offset1 + NumBytes1) <= Offset0);
17271   }
17272 
17273   // Otherwise, if we know what the bases are, and they aren't identical, then
17274   // we know they cannot alias.
17275   if ((IsFrameIndex0 || CV0 || GV0) && (IsFrameIndex1 || CV1 || GV1))
17276     return false;
17277 
17278   // If we know required SrcValue1 and SrcValue2 have relatively large alignment
17279   // compared to the size and offset of the access, we may be able to prove they
17280   // do not alias. This check is conservative for now to catch cases created by
17281   // splitting vector types.
17282   int64_t SrcValOffset0 = Op0->getSrcValueOffset();
17283   int64_t SrcValOffset1 = Op1->getSrcValueOffset();
17284   unsigned OrigAlignment0 = Op0->getOriginalAlignment();
17285   unsigned OrigAlignment1 = Op1->getOriginalAlignment();
17286   if (OrigAlignment0 == OrigAlignment1 && SrcValOffset0 != SrcValOffset1 &&
17287       NumBytes0 == NumBytes1 && OrigAlignment0 > NumBytes0) {
17288     int64_t OffAlign0 = SrcValOffset0 % OrigAlignment0;
17289     int64_t OffAlign1 = SrcValOffset1 % OrigAlignment1;
17290 
17291     // There is no overlap between these relatively aligned accesses of similar
17292     // size. Return no alias.
17293     if ((OffAlign0 + NumBytes0) <= OffAlign1 ||
17294         (OffAlign1 + NumBytes1) <= OffAlign0)
17295       return false;
17296   }
17297 
17298   bool UseAA = CombinerGlobalAA.getNumOccurrences() > 0
17299                    ? CombinerGlobalAA
17300                    : DAG.getSubtarget().useAA();
17301 #ifndef NDEBUG
17302   if (CombinerAAOnlyFunc.getNumOccurrences() &&
17303       CombinerAAOnlyFunc != DAG.getMachineFunction().getName())
17304     UseAA = false;
17305 #endif
17306 
17307   if (UseAA && AA &&
17308       Op0->getMemOperand()->getValue() && Op1->getMemOperand()->getValue()) {
17309     // Use alias analysis information.
17310     int64_t MinOffset = std::min(SrcValOffset0, SrcValOffset1);
17311     int64_t Overlap0 = NumBytes0 + SrcValOffset0 - MinOffset;
17312     int64_t Overlap1 = NumBytes1 + SrcValOffset1 - MinOffset;
17313     AliasResult AAResult =
17314         AA->alias(MemoryLocation(Op0->getMemOperand()->getValue(), Overlap0,
17315                                  UseTBAA ? Op0->getAAInfo() : AAMDNodes()),
17316                   MemoryLocation(Op1->getMemOperand()->getValue(), Overlap1,
17317                                  UseTBAA ? Op1->getAAInfo() : AAMDNodes()) );
17318     if (AAResult == NoAlias)
17319       return false;
17320   }
17321 
17322   // Otherwise we have to assume they alias.
17323   return true;
17324 }
17325 
17326 /// Walk up chain skipping non-aliasing memory nodes,
17327 /// looking for aliasing nodes and adding them to the Aliases vector.
17328 void DAGCombiner::GatherAllAliases(SDNode *N, SDValue OriginalChain,
17329                                    SmallVectorImpl<SDValue> &Aliases) {
17330   SmallVector<SDValue, 8> Chains;     // List of chains to visit.
17331   SmallPtrSet<SDNode *, 16> Visited;  // Visited node set.
17332 
17333   // Get alias information for node.
17334   bool IsLoad = isa<LoadSDNode>(N) && !cast<LSBaseSDNode>(N)->isVolatile();
17335 
17336   // Starting off.
17337   Chains.push_back(OriginalChain);
17338   unsigned Depth = 0;
17339 
17340   // Look at each chain and determine if it is an alias.  If so, add it to the
17341   // aliases list.  If not, then continue up the chain looking for the next
17342   // candidate.
17343   while (!Chains.empty()) {
17344     SDValue Chain = Chains.pop_back_val();
17345 
17346     // For TokenFactor nodes, look at each operand and only continue up the
17347     // chain until we reach the depth limit.
17348     //
17349     // FIXME: The depth check could be made to return the last non-aliasing
17350     // chain we found before we hit a tokenfactor rather than the original
17351     // chain.
17352     if (Depth > TLI.getGatherAllAliasesMaxDepth()) {
17353       Aliases.clear();
17354       Aliases.push_back(OriginalChain);
17355       return;
17356     }
17357 
17358     // Don't bother if we've been before.
17359     if (!Visited.insert(Chain.getNode()).second)
17360       continue;
17361 
17362     switch (Chain.getOpcode()) {
17363     case ISD::EntryToken:
17364       // Entry token is ideal chain operand, but handled in FindBetterChain.
17365       break;
17366 
17367     case ISD::LOAD:
17368     case ISD::STORE: {
17369       // Get alias information for Chain.
17370       bool IsOpLoad = isa<LoadSDNode>(Chain.getNode()) &&
17371           !cast<LSBaseSDNode>(Chain.getNode())->isVolatile();
17372 
17373       // If chain is alias then stop here.
17374       if (!(IsLoad && IsOpLoad) &&
17375           isAlias(cast<LSBaseSDNode>(N), cast<LSBaseSDNode>(Chain.getNode()))) {
17376         Aliases.push_back(Chain);
17377       } else {
17378         // Look further up the chain.
17379         Chains.push_back(Chain.getOperand(0));
17380         ++Depth;
17381       }
17382       break;
17383     }
17384 
17385     case ISD::TokenFactor:
17386       // We have to check each of the operands of the token factor for "small"
17387       // token factors, so we queue them up.  Adding the operands to the queue
17388       // (stack) in reverse order maintains the original order and increases the
17389       // likelihood that getNode will find a matching token factor (CSE.)
17390       if (Chain.getNumOperands() > 16) {
17391         Aliases.push_back(Chain);
17392         break;
17393       }
17394       for (unsigned n = Chain.getNumOperands(); n;)
17395         Chains.push_back(Chain.getOperand(--n));
17396       ++Depth;
17397       break;
17398 
17399     case ISD::CopyFromReg:
17400       // Forward past CopyFromReg.
17401       Chains.push_back(Chain.getOperand(0));
17402       ++Depth;
17403       break;
17404 
17405     default:
17406       // For all other instructions we will just have to take what we can get.
17407       Aliases.push_back(Chain);
17408       break;
17409     }
17410   }
17411 }
17412 
17413 /// Walk up chain skipping non-aliasing memory nodes, looking for a better chain
17414 /// (aliasing node.)
17415 SDValue DAGCombiner::FindBetterChain(SDNode *N, SDValue OldChain) {
17416   SmallVector<SDValue, 8> Aliases;  // Ops for replacing token factor.
17417 
17418   // Accumulate all the aliases to this node.
17419   GatherAllAliases(N, OldChain, Aliases);
17420 
17421   // If no operands then chain to entry token.
17422   if (Aliases.size() == 0)
17423     return DAG.getEntryNode();
17424 
17425   // If a single operand then chain to it.  We don't need to revisit it.
17426   if (Aliases.size() == 1)
17427     return Aliases[0];
17428 
17429   // Construct a custom tailored token factor.
17430   return DAG.getNode(ISD::TokenFactor, SDLoc(N), MVT::Other, Aliases);
17431 }
17432 
17433 // This function tries to collect a bunch of potentially interesting
17434 // nodes to improve the chains of, all at once. This might seem
17435 // redundant, as this function gets called when visiting every store
17436 // node, so why not let the work be done on each store as it's visited?
17437 //
17438 // I believe this is mainly important because MergeConsecutiveStores
17439 // is unable to deal with merging stores of different sizes, so unless
17440 // we improve the chains of all the potential candidates up-front
17441 // before running MergeConsecutiveStores, it might only see some of
17442 // the nodes that will eventually be candidates, and then not be able
17443 // to go from a partially-merged state to the desired final
17444 // fully-merged state.
17445 bool DAGCombiner::findBetterNeighborChains(StoreSDNode *St) {
17446   // This holds the base pointer, index, and the offset in bytes from the base
17447   // pointer.
17448   BaseIndexOffset BasePtr = BaseIndexOffset::match(St->getBasePtr(), DAG);
17449 
17450   // We must have a base and an offset.
17451   if (!BasePtr.getBase().getNode())
17452     return false;
17453 
17454   // Do not handle stores to undef base pointers.
17455   if (BasePtr.getBase().isUndef())
17456     return false;
17457 
17458   SmallVector<StoreSDNode *, 8> ChainedStores;
17459   ChainedStores.push_back(St);
17460 
17461   // Walk up the chain and look for nodes with offsets from the same
17462   // base pointer. Stop when reaching an instruction with a different kind
17463   // or instruction which has a different base pointer.
17464   StoreSDNode *Index = St;
17465   while (Index) {
17466     // If the chain has more than one use, then we can't reorder the mem ops.
17467     if (Index != St && !SDValue(Index, 0)->hasOneUse())
17468       break;
17469 
17470     if (Index->isVolatile() || Index->isIndexed())
17471       break;
17472 
17473     // Find the base pointer and offset for this memory node.
17474     BaseIndexOffset Ptr = BaseIndexOffset::match(Index->getBasePtr(), DAG);
17475 
17476     // Check that the base pointer is the same as the original one.
17477     if (!BasePtr.equalBaseIndex(Ptr, DAG))
17478       break;
17479 
17480     // Walk up the chain to find the next store node, ignoring any
17481     // intermediate loads. Any other kind of node will halt the loop.
17482     SDNode *NextInChain = Index->getChain().getNode();
17483     while (true) {
17484       if (StoreSDNode *STn = dyn_cast<StoreSDNode>(NextInChain)) {
17485         // We found a store node. Use it for the next iteration.
17486         if (STn->isVolatile() || STn->isIndexed()) {
17487           Index = nullptr;
17488           break;
17489         }
17490         ChainedStores.push_back(STn);
17491         Index = STn;
17492         break;
17493       } else if (LoadSDNode *Ldn = dyn_cast<LoadSDNode>(NextInChain)) {
17494         NextInChain = Ldn->getChain().getNode();
17495         continue;
17496       } else {
17497         Index = nullptr;
17498         break;
17499       }
17500     } // end while
17501   }
17502 
17503   // At this point, ChainedStores lists all of the Store nodes
17504   // reachable by iterating up through chain nodes matching the above
17505   // conditions.  For each such store identified, try to find an
17506   // earlier chain to attach the store to which won't violate the
17507   // required ordering.
17508   bool MadeChangeToSt = false;
17509   SmallVector<std::pair<StoreSDNode *, SDValue>, 8> BetterChains;
17510 
17511   for (StoreSDNode *ChainedStore : ChainedStores) {
17512     SDValue Chain = ChainedStore->getChain();
17513     SDValue BetterChain = FindBetterChain(ChainedStore, Chain);
17514 
17515     if (Chain != BetterChain) {
17516       if (ChainedStore == St)
17517         MadeChangeToSt = true;
17518       BetterChains.push_back(std::make_pair(ChainedStore, BetterChain));
17519     }
17520   }
17521 
17522   // Do all replacements after finding the replacements to make to avoid making
17523   // the chains more complicated by introducing new TokenFactors.
17524   for (auto Replacement : BetterChains)
17525     replaceStoreChain(Replacement.first, Replacement.second);
17526 
17527   return MadeChangeToSt;
17528 }
17529 
17530 /// This is the entry point for the file.
17531 void SelectionDAG::Combine(CombineLevel Level, AliasAnalysis *AA,
17532                            CodeGenOpt::Level OptLevel) {
17533   /// This is the main entry point to this class.
17534   DAGCombiner(*this, AA, OptLevel).Run(Level);
17535 }
17536