1//===-- TargetLowering.cpp - Implement the TargetLowering class -----------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This implements the TargetLowering class.
11//
12//===----------------------------------------------------------------------===//
13
14#include "llvm/Target/TargetLowering.h"
15#include "llvm/ADT/BitVector.h"
16#include "llvm/ADT/STLExtras.h"
17#include "llvm/CodeGen/Analysis.h"
18#include "llvm/CodeGen/MachineFrameInfo.h"
19#include "llvm/CodeGen/MachineFunction.h"
20#include "llvm/CodeGen/MachineJumpTableInfo.h"
21#include "llvm/CodeGen/SelectionDAG.h"
22#include "llvm/IR/DataLayout.h"
23#include "llvm/IR/DerivedTypes.h"
24#include "llvm/IR/GlobalVariable.h"
25#include "llvm/IR/LLVMContext.h"
26#include "llvm/MC/MCAsmInfo.h"
27#include "llvm/MC/MCExpr.h"
28#include "llvm/Support/CommandLine.h"
29#include "llvm/Support/ErrorHandling.h"
30#include "llvm/Support/MathExtras.h"
31#include "llvm/Target/TargetLoweringObjectFile.h"
32#include "llvm/Target/TargetMachine.h"
33#include "llvm/Target/TargetRegisterInfo.h"
34#include "llvm/Target/TargetSubtargetInfo.h"
35#include <cctype>
36using namespace llvm;
37
38/// NOTE: The TargetMachine owns TLOF.
39TargetLowering::TargetLowering(const TargetMachine &tm)
40  : TargetLoweringBase(tm) {}
41
42const char *TargetLowering::getTargetNodeName(unsigned Opcode) const {
43  return nullptr;
44}
45
46/// Check whether a given call node is in tail position within its function. If
47/// so, it sets Chain to the input chain of the tail call.
48bool TargetLowering::isInTailCallPosition(SelectionDAG &DAG, SDNode *Node,
49                                          SDValue &Chain) const {
50  const Function *F = DAG.getMachineFunction().getFunction();
51
52  // Conservatively require the attributes of the call to match those of
53  // the return. Ignore noalias because it doesn't affect the call sequence.
54  AttributeSet CallerAttrs = F->getAttributes();
55  if (AttrBuilder(CallerAttrs, AttributeSet::ReturnIndex)
56      .removeAttribute(Attribute::NoAlias).hasAttributes())
57    return false;
58
59  // It's not safe to eliminate the sign / zero extension of the return value.
60  if (CallerAttrs.hasAttribute(AttributeSet::ReturnIndex, Attribute::ZExt) ||
61      CallerAttrs.hasAttribute(AttributeSet::ReturnIndex, Attribute::SExt))
62    return false;
63
64  // Check if the only use is a function return node.
65  return isUsedByReturnOnly(Node, Chain);
66}
67
68/// \brief Set CallLoweringInfo attribute flags based on a call instruction
69/// and called function attributes.
70void TargetLowering::ArgListEntry::setAttributes(ImmutableCallSite *CS,
71                                                 unsigned AttrIdx) {
72  isSExt     = CS->paramHasAttr(AttrIdx, Attribute::SExt);
73  isZExt     = CS->paramHasAttr(AttrIdx, Attribute::ZExt);
74  isInReg    = CS->paramHasAttr(AttrIdx, Attribute::InReg);
75  isSRet     = CS->paramHasAttr(AttrIdx, Attribute::StructRet);
76  isNest     = CS->paramHasAttr(AttrIdx, Attribute::Nest);
77  isByVal    = CS->paramHasAttr(AttrIdx, Attribute::ByVal);
78  isInAlloca = CS->paramHasAttr(AttrIdx, Attribute::InAlloca);
79  isReturned = CS->paramHasAttr(AttrIdx, Attribute::Returned);
80  Alignment  = CS->getParamAlignment(AttrIdx);
81}
82
83/// Generate a libcall taking the given operands as arguments and returning a
84/// result of type RetVT.
85std::pair<SDValue, SDValue>
86TargetLowering::makeLibCall(SelectionDAG &DAG,
87                            RTLIB::Libcall LC, EVT RetVT,
88                            ArrayRef<SDValue> Ops,
89                            bool isSigned, SDLoc dl,
90                            bool doesNotReturn,
91                            bool isReturnValueUsed) const {
92  TargetLowering::ArgListTy Args;
93  Args.reserve(Ops.size());
94
95  TargetLowering::ArgListEntry Entry;
96  for (SDValue Op : Ops) {
97    Entry.Node = Op;
98    Entry.Ty = Entry.Node.getValueType().getTypeForEVT(*DAG.getContext());
99    Entry.isSExt = shouldSignExtendTypeInLibCall(Op.getValueType(), isSigned);
100    Entry.isZExt = !shouldSignExtendTypeInLibCall(Op.getValueType(), isSigned);
101    Args.push_back(Entry);
102  }
103
104  markInRegArguments(DAG, Args);
105
106  if (LC == RTLIB::UNKNOWN_LIBCALL)
107    report_fatal_error("Unsupported library call operation!");
108  SDValue Callee = DAG.getExternalSymbol(getLibcallName(LC),
109                                         getPointerTy(DAG.getDataLayout()));
110
111  Type *RetTy = RetVT.getTypeForEVT(*DAG.getContext());
112  TargetLowering::CallLoweringInfo CLI(DAG);
113  bool signExtend = shouldSignExtendTypeInLibCall(RetVT, isSigned);
114  CLI.setDebugLoc(dl).setChain(DAG.getEntryNode())
115    .setCallee(getLibcallCallingConv(LC), RetTy, Callee, std::move(Args), 0)
116    .setNoReturn(doesNotReturn).setDiscardResult(!isReturnValueUsed)
117    .setSExtResult(signExtend).setZExtResult(!signExtend);
118  return LowerCallTo(CLI);
119}
120
121/// SoftenSetCCOperands - Soften the operands of a comparison.  This code is
122/// shared among BR_CC, SELECT_CC, and SETCC handlers.
123void TargetLowering::softenSetCCOperands(SelectionDAG &DAG, EVT VT,
124                                         SDValue &NewLHS, SDValue &NewRHS,
125                                         ISD::CondCode &CCCode,
126                                         SDLoc dl) const {
127  assert((VT == MVT::f32 || VT == MVT::f64 || VT == MVT::f128)
128         && "Unsupported setcc type!");
129
130  // Expand into one or more soft-fp libcall(s).
131  RTLIB::Libcall LC1 = RTLIB::UNKNOWN_LIBCALL, LC2 = RTLIB::UNKNOWN_LIBCALL;
132  bool ShouldInvertCC = false;
133  switch (CCCode) {
134  case ISD::SETEQ:
135  case ISD::SETOEQ:
136    LC1 = (VT == MVT::f32) ? RTLIB::OEQ_F32 :
137          (VT == MVT::f64) ? RTLIB::OEQ_F64 : RTLIB::OEQ_F128;
138    break;
139  case ISD::SETNE:
140  case ISD::SETUNE:
141    LC1 = (VT == MVT::f32) ? RTLIB::UNE_F32 :
142          (VT == MVT::f64) ? RTLIB::UNE_F64 : RTLIB::UNE_F128;
143    break;
144  case ISD::SETGE:
145  case ISD::SETOGE:
146    LC1 = (VT == MVT::f32) ? RTLIB::OGE_F32 :
147          (VT == MVT::f64) ? RTLIB::OGE_F64 : RTLIB::OGE_F128;
148    break;
149  case ISD::SETLT:
150  case ISD::SETOLT:
151    LC1 = (VT == MVT::f32) ? RTLIB::OLT_F32 :
152          (VT == MVT::f64) ? RTLIB::OLT_F64 : RTLIB::OLT_F128;
153    break;
154  case ISD::SETLE:
155  case ISD::SETOLE:
156    LC1 = (VT == MVT::f32) ? RTLIB::OLE_F32 :
157          (VT == MVT::f64) ? RTLIB::OLE_F64 : RTLIB::OLE_F128;
158    break;
159  case ISD::SETGT:
160  case ISD::SETOGT:
161    LC1 = (VT == MVT::f32) ? RTLIB::OGT_F32 :
162          (VT == MVT::f64) ? RTLIB::OGT_F64 : RTLIB::OGT_F128;
163    break;
164  case ISD::SETUO:
165    LC1 = (VT == MVT::f32) ? RTLIB::UO_F32 :
166          (VT == MVT::f64) ? RTLIB::UO_F64 : RTLIB::UO_F128;
167    break;
168  case ISD::SETO:
169    LC1 = (VT == MVT::f32) ? RTLIB::O_F32 :
170          (VT == MVT::f64) ? RTLIB::O_F64 : RTLIB::O_F128;
171    break;
172  case ISD::SETONE:
173    // SETONE = SETOLT | SETOGT
174    LC1 = (VT == MVT::f32) ? RTLIB::OLT_F32 :
175          (VT == MVT::f64) ? RTLIB::OLT_F64 : RTLIB::OLT_F128;
176    LC2 = (VT == MVT::f32) ? RTLIB::OGT_F32 :
177          (VT == MVT::f64) ? RTLIB::OGT_F64 : RTLIB::OGT_F128;
178    break;
179  case ISD::SETUEQ:
180    LC1 = (VT == MVT::f32) ? RTLIB::UO_F32 :
181          (VT == MVT::f64) ? RTLIB::UO_F64 : RTLIB::UO_F128;
182    LC2 = (VT == MVT::f32) ? RTLIB::OEQ_F32 :
183          (VT == MVT::f64) ? RTLIB::OEQ_F64 : RTLIB::OEQ_F128;
184    break;
185  default:
186    // Invert CC for unordered comparisons
187    ShouldInvertCC = true;
188    switch (CCCode) {
189    case ISD::SETULT:
190      LC1 = (VT == MVT::f32) ? RTLIB::OGE_F32 :
191            (VT == MVT::f64) ? RTLIB::OGE_F64 : RTLIB::OGE_F128;
192      break;
193    case ISD::SETULE:
194      LC1 = (VT == MVT::f32) ? RTLIB::OGT_F32 :
195            (VT == MVT::f64) ? RTLIB::OGT_F64 : RTLIB::OGT_F128;
196      break;
197    case ISD::SETUGT:
198      LC1 = (VT == MVT::f32) ? RTLIB::OLE_F32 :
199            (VT == MVT::f64) ? RTLIB::OLE_F64 : RTLIB::OLE_F128;
200      break;
201    case ISD::SETUGE:
202      LC1 = (VT == MVT::f32) ? RTLIB::OLT_F32 :
203            (VT == MVT::f64) ? RTLIB::OLT_F64 : RTLIB::OLT_F128;
204      break;
205    default: llvm_unreachable("Do not know how to soften this setcc!");
206    }
207  }
208
209  // Use the target specific return value for comparions lib calls.
210  EVT RetVT = getCmpLibcallReturnType();
211  SDValue Ops[2] = {NewLHS, NewRHS};
212  NewLHS = makeLibCall(DAG, LC1, RetVT, Ops, false /*sign irrelevant*/,
213                       dl).first;
214  NewRHS = DAG.getConstant(0, dl, RetVT);
215
216  CCCode = getCmpLibcallCC(LC1);
217  if (ShouldInvertCC)
218    CCCode = getSetCCInverse(CCCode, /*isInteger=*/true);
219
220  if (LC2 != RTLIB::UNKNOWN_LIBCALL) {
221    SDValue Tmp = DAG.getNode(
222        ISD::SETCC, dl,
223        getSetCCResultType(DAG.getDataLayout(), *DAG.getContext(), RetVT),
224        NewLHS, NewRHS, DAG.getCondCode(CCCode));
225    NewLHS = makeLibCall(DAG, LC2, RetVT, Ops, false/*sign irrelevant*/,
226                         dl).first;
227    NewLHS = DAG.getNode(
228        ISD::SETCC, dl,
229        getSetCCResultType(DAG.getDataLayout(), *DAG.getContext(), RetVT),
230        NewLHS, NewRHS, DAG.getCondCode(getCmpLibcallCC(LC2)));
231    NewLHS = DAG.getNode(ISD::OR, dl, Tmp.getValueType(), Tmp, NewLHS);
232    NewRHS = SDValue();
233  }
234}
235
236/// getJumpTableEncoding - Return the entry encoding for a jump table in the
237/// current function.  The returned value is a member of the
238/// MachineJumpTableInfo::JTEntryKind enum.
239unsigned TargetLowering::getJumpTableEncoding() const {
240  // In non-pic modes, just use the address of a block.
241  if (getTargetMachine().getRelocationModel() != Reloc::PIC_)
242    return MachineJumpTableInfo::EK_BlockAddress;
243
244  // In PIC mode, if the target supports a GPRel32 directive, use it.
245  if (getTargetMachine().getMCAsmInfo()->getGPRel32Directive() != nullptr)
246    return MachineJumpTableInfo::EK_GPRel32BlockAddress;
247
248  // Otherwise, use a label difference.
249  return MachineJumpTableInfo::EK_LabelDifference32;
250}
251
252SDValue TargetLowering::getPICJumpTableRelocBase(SDValue Table,
253                                                 SelectionDAG &DAG) const {
254  // If our PIC model is GP relative, use the global offset table as the base.
255  unsigned JTEncoding = getJumpTableEncoding();
256
257  if ((JTEncoding == MachineJumpTableInfo::EK_GPRel64BlockAddress) ||
258      (JTEncoding == MachineJumpTableInfo::EK_GPRel32BlockAddress))
259    return DAG.getGLOBAL_OFFSET_TABLE(getPointerTy(DAG.getDataLayout()));
260
261  return Table;
262}
263
264/// getPICJumpTableRelocBaseExpr - This returns the relocation base for the
265/// given PIC jumptable, the same as getPICJumpTableRelocBase, but as an
266/// MCExpr.
267const MCExpr *
268TargetLowering::getPICJumpTableRelocBaseExpr(const MachineFunction *MF,
269                                             unsigned JTI,MCContext &Ctx) const{
270  // The normal PIC reloc base is the label at the start of the jump table.
271  return MCSymbolRefExpr::create(MF->getJTISymbol(JTI, Ctx), Ctx);
272}
273
274bool
275TargetLowering::isOffsetFoldingLegal(const GlobalAddressSDNode *GA) const {
276  // Assume that everything is safe in static mode.
277  if (getTargetMachine().getRelocationModel() == Reloc::Static)
278    return true;
279
280  // In dynamic-no-pic mode, assume that known defined values are safe.
281  if (getTargetMachine().getRelocationModel() == Reloc::DynamicNoPIC &&
282      GA && GA->getGlobal()->isStrongDefinitionForLinker())
283    return true;
284
285  // Otherwise assume nothing is safe.
286  return false;
287}
288
289//===----------------------------------------------------------------------===//
290//  Optimization Methods
291//===----------------------------------------------------------------------===//
292
293/// ShrinkDemandedConstant - Check to see if the specified operand of the
294/// specified instruction is a constant integer.  If so, check to see if there
295/// are any bits set in the constant that are not demanded.  If so, shrink the
296/// constant and return true.
297bool TargetLowering::TargetLoweringOpt::ShrinkDemandedConstant(SDValue Op,
298                                                        const APInt &Demanded) {
299  SDLoc dl(Op);
300
301  // FIXME: ISD::SELECT, ISD::SELECT_CC
302  switch (Op.getOpcode()) {
303  default: break;
304  case ISD::XOR:
305  case ISD::AND:
306  case ISD::OR: {
307    ConstantSDNode *C = dyn_cast<ConstantSDNode>(Op.getOperand(1));
308    if (!C) return false;
309
310    if (Op.getOpcode() == ISD::XOR &&
311        (C->getAPIntValue() | (~Demanded)).isAllOnesValue())
312      return false;
313
314    // if we can expand it to have all bits set, do it
315    if (C->getAPIntValue().intersects(~Demanded)) {
316      EVT VT = Op.getValueType();
317      SDValue New = DAG.getNode(Op.getOpcode(), dl, VT, Op.getOperand(0),
318                                DAG.getConstant(Demanded &
319                                                C->getAPIntValue(),
320                                                dl, VT));
321      return CombineTo(Op, New);
322    }
323
324    break;
325  }
326  }
327
328  return false;
329}
330
331/// ShrinkDemandedOp - Convert x+y to (VT)((SmallVT)x+(SmallVT)y) if the
332/// casts are free.  This uses isZExtFree and ZERO_EXTEND for the widening
333/// cast, but it could be generalized for targets with other types of
334/// implicit widening casts.
335bool
336TargetLowering::TargetLoweringOpt::ShrinkDemandedOp(SDValue Op,
337                                                    unsigned BitWidth,
338                                                    const APInt &Demanded,
339                                                    SDLoc dl) {
340  assert(Op.getNumOperands() == 2 &&
341         "ShrinkDemandedOp only supports binary operators!");
342  assert(Op.getNode()->getNumValues() == 1 &&
343         "ShrinkDemandedOp only supports nodes with one result!");
344
345  // Early return, as this function cannot handle vector types.
346  if (Op.getValueType().isVector())
347    return false;
348
349  // Don't do this if the node has another user, which may require the
350  // full value.
351  if (!Op.getNode()->hasOneUse())
352    return false;
353
354  // Search for the smallest integer type with free casts to and from
355  // Op's type. For expedience, just check power-of-2 integer types.
356  const TargetLowering &TLI = DAG.getTargetLoweringInfo();
357  unsigned DemandedSize = BitWidth - Demanded.countLeadingZeros();
358  unsigned SmallVTBits = DemandedSize;
359  if (!isPowerOf2_32(SmallVTBits))
360    SmallVTBits = NextPowerOf2(SmallVTBits);
361  for (; SmallVTBits < BitWidth; SmallVTBits = NextPowerOf2(SmallVTBits)) {
362    EVT SmallVT = EVT::getIntegerVT(*DAG.getContext(), SmallVTBits);
363    if (TLI.isTruncateFree(Op.getValueType(), SmallVT) &&
364        TLI.isZExtFree(SmallVT, Op.getValueType())) {
365      // We found a type with free casts.
366      SDValue X = DAG.getNode(Op.getOpcode(), dl, SmallVT,
367                              DAG.getNode(ISD::TRUNCATE, dl, SmallVT,
368                                          Op.getNode()->getOperand(0)),
369                              DAG.getNode(ISD::TRUNCATE, dl, SmallVT,
370                                          Op.getNode()->getOperand(1)));
371      bool NeedZext = DemandedSize > SmallVTBits;
372      SDValue Z = DAG.getNode(NeedZext ? ISD::ZERO_EXTEND : ISD::ANY_EXTEND,
373                              dl, Op.getValueType(), X);
374      return CombineTo(Op, Z);
375    }
376  }
377  return false;
378}
379
380/// SimplifyDemandedBits - Look at Op.  At this point, we know that only the
381/// DemandedMask bits of the result of Op are ever used downstream.  If we can
382/// use this information to simplify Op, create a new simplified DAG node and
383/// return true, returning the original and new nodes in Old and New. Otherwise,
384/// analyze the expression and return a mask of KnownOne and KnownZero bits for
385/// the expression (used to simplify the caller).  The KnownZero/One bits may
386/// only be accurate for those bits in the DemandedMask.
387bool TargetLowering::SimplifyDemandedBits(SDValue Op,
388                                          const APInt &DemandedMask,
389                                          APInt &KnownZero,
390                                          APInt &KnownOne,
391                                          TargetLoweringOpt &TLO,
392                                          unsigned Depth) const {
393  unsigned BitWidth = DemandedMask.getBitWidth();
394  assert(Op.getValueType().getScalarType().getSizeInBits() == BitWidth &&
395         "Mask size mismatches value type size!");
396  APInt NewMask = DemandedMask;
397  SDLoc dl(Op);
398  auto &DL = TLO.DAG.getDataLayout();
399
400  // Don't know anything.
401  KnownZero = KnownOne = APInt(BitWidth, 0);
402
403  // Other users may use these bits.
404  if (!Op.getNode()->hasOneUse()) {
405    if (Depth != 0) {
406      // If not at the root, Just compute the KnownZero/KnownOne bits to
407      // simplify things downstream.
408      TLO.DAG.computeKnownBits(Op, KnownZero, KnownOne, Depth);
409      return false;
410    }
411    // If this is the root being simplified, allow it to have multiple uses,
412    // just set the NewMask to all bits.
413    NewMask = APInt::getAllOnesValue(BitWidth);
414  } else if (DemandedMask == 0) {
415    // Not demanding any bits from Op.
416    if (Op.getOpcode() != ISD::UNDEF)
417      return TLO.CombineTo(Op, TLO.DAG.getUNDEF(Op.getValueType()));
418    return false;
419  } else if (Depth == 6) {        // Limit search depth.
420    return false;
421  }
422
423  APInt KnownZero2, KnownOne2, KnownZeroOut, KnownOneOut;
424  switch (Op.getOpcode()) {
425  case ISD::Constant:
426    // We know all of the bits for a constant!
427    KnownOne = cast<ConstantSDNode>(Op)->getAPIntValue();
428    KnownZero = ~KnownOne;
429    return false;   // Don't fall through, will infinitely loop.
430  case ISD::AND:
431    // If the RHS is a constant, check to see if the LHS would be zero without
432    // using the bits from the RHS.  Below, we use knowledge about the RHS to
433    // simplify the LHS, here we're using information from the LHS to simplify
434    // the RHS.
435    if (ConstantSDNode *RHSC = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
436      APInt LHSZero, LHSOne;
437      // Do not increment Depth here; that can cause an infinite loop.
438      TLO.DAG.computeKnownBits(Op.getOperand(0), LHSZero, LHSOne, Depth);
439      // If the LHS already has zeros where RHSC does, this and is dead.
440      if ((LHSZero & NewMask) == (~RHSC->getAPIntValue() & NewMask))
441        return TLO.CombineTo(Op, Op.getOperand(0));
442      // If any of the set bits in the RHS are known zero on the LHS, shrink
443      // the constant.
444      if (TLO.ShrinkDemandedConstant(Op, ~LHSZero & NewMask))
445        return true;
446    }
447
448    if (SimplifyDemandedBits(Op.getOperand(1), NewMask, KnownZero,
449                             KnownOne, TLO, Depth+1))
450      return true;
451    assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
452    if (SimplifyDemandedBits(Op.getOperand(0), ~KnownZero & NewMask,
453                             KnownZero2, KnownOne2, TLO, Depth+1))
454      return true;
455    assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?");
456
457    // If all of the demanded bits are known one on one side, return the other.
458    // These bits cannot contribute to the result of the 'and'.
459    if ((NewMask & ~KnownZero2 & KnownOne) == (~KnownZero2 & NewMask))
460      return TLO.CombineTo(Op, Op.getOperand(0));
461    if ((NewMask & ~KnownZero & KnownOne2) == (~KnownZero & NewMask))
462      return TLO.CombineTo(Op, Op.getOperand(1));
463    // If all of the demanded bits in the inputs are known zeros, return zero.
464    if ((NewMask & (KnownZero|KnownZero2)) == NewMask)
465      return TLO.CombineTo(Op, TLO.DAG.getConstant(0, dl, Op.getValueType()));
466    // If the RHS is a constant, see if we can simplify it.
467    if (TLO.ShrinkDemandedConstant(Op, ~KnownZero2 & NewMask))
468      return true;
469    // If the operation can be done in a smaller type, do so.
470    if (TLO.ShrinkDemandedOp(Op, BitWidth, NewMask, dl))
471      return true;
472
473    // Output known-1 bits are only known if set in both the LHS & RHS.
474    KnownOne &= KnownOne2;
475    // Output known-0 are known to be clear if zero in either the LHS | RHS.
476    KnownZero |= KnownZero2;
477    break;
478  case ISD::OR:
479    if (SimplifyDemandedBits(Op.getOperand(1), NewMask, KnownZero,
480                             KnownOne, TLO, Depth+1))
481      return true;
482    assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
483    if (SimplifyDemandedBits(Op.getOperand(0), ~KnownOne & NewMask,
484                             KnownZero2, KnownOne2, TLO, Depth+1))
485      return true;
486    assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?");
487
488    // If all of the demanded bits are known zero on one side, return the other.
489    // These bits cannot contribute to the result of the 'or'.
490    if ((NewMask & ~KnownOne2 & KnownZero) == (~KnownOne2 & NewMask))
491      return TLO.CombineTo(Op, Op.getOperand(0));
492    if ((NewMask & ~KnownOne & KnownZero2) == (~KnownOne & NewMask))
493      return TLO.CombineTo(Op, Op.getOperand(1));
494    // If all of the potentially set bits on one side are known to be set on
495    // the other side, just use the 'other' side.
496    if ((NewMask & ~KnownZero & KnownOne2) == (~KnownZero & NewMask))
497      return TLO.CombineTo(Op, Op.getOperand(0));
498    if ((NewMask & ~KnownZero2 & KnownOne) == (~KnownZero2 & NewMask))
499      return TLO.CombineTo(Op, Op.getOperand(1));
500    // If the RHS is a constant, see if we can simplify it.
501    if (TLO.ShrinkDemandedConstant(Op, NewMask))
502      return true;
503    // If the operation can be done in a smaller type, do so.
504    if (TLO.ShrinkDemandedOp(Op, BitWidth, NewMask, dl))
505      return true;
506
507    // Output known-0 bits are only known if clear in both the LHS & RHS.
508    KnownZero &= KnownZero2;
509    // Output known-1 are known to be set if set in either the LHS | RHS.
510    KnownOne |= KnownOne2;
511    break;
512  case ISD::XOR:
513    if (SimplifyDemandedBits(Op.getOperand(1), NewMask, KnownZero,
514                             KnownOne, TLO, Depth+1))
515      return true;
516    assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
517    if (SimplifyDemandedBits(Op.getOperand(0), NewMask, KnownZero2,
518                             KnownOne2, TLO, Depth+1))
519      return true;
520    assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?");
521
522    // If all of the demanded bits are known zero on one side, return the other.
523    // These bits cannot contribute to the result of the 'xor'.
524    if ((KnownZero & NewMask) == NewMask)
525      return TLO.CombineTo(Op, Op.getOperand(0));
526    if ((KnownZero2 & NewMask) == NewMask)
527      return TLO.CombineTo(Op, Op.getOperand(1));
528    // If the operation can be done in a smaller type, do so.
529    if (TLO.ShrinkDemandedOp(Op, BitWidth, NewMask, dl))
530      return true;
531
532    // If all of the unknown bits are known to be zero on one side or the other
533    // (but not both) turn this into an *inclusive* or.
534    //    e.g. (A & C1)^(B & C2) -> (A & C1)|(B & C2) iff C1&C2 == 0
535    if ((NewMask & ~KnownZero & ~KnownZero2) == 0)
536      return TLO.CombineTo(Op, TLO.DAG.getNode(ISD::OR, dl, Op.getValueType(),
537                                               Op.getOperand(0),
538                                               Op.getOperand(1)));
539
540    // Output known-0 bits are known if clear or set in both the LHS & RHS.
541    KnownZeroOut = (KnownZero & KnownZero2) | (KnownOne & KnownOne2);
542    // Output known-1 are known to be set if set in only one of the LHS, RHS.
543    KnownOneOut = (KnownZero & KnownOne2) | (KnownOne & KnownZero2);
544
545    // If all of the demanded bits on one side are known, and all of the set
546    // bits on that side are also known to be set on the other side, turn this
547    // into an AND, as we know the bits will be cleared.
548    //    e.g. (X | C1) ^ C2 --> (X | C1) & ~C2 iff (C1&C2) == C2
549    // NB: it is okay if more bits are known than are requested
550    if ((NewMask & (KnownZero|KnownOne)) == NewMask) { // all known on one side
551      if (KnownOne == KnownOne2) { // set bits are the same on both sides
552        EVT VT = Op.getValueType();
553        SDValue ANDC = TLO.DAG.getConstant(~KnownOne & NewMask, dl, VT);
554        return TLO.CombineTo(Op, TLO.DAG.getNode(ISD::AND, dl, VT,
555                                                 Op.getOperand(0), ANDC));
556      }
557    }
558
559    // If the RHS is a constant, see if we can simplify it.
560    // for XOR, we prefer to force bits to 1 if they will make a -1.
561    // if we can't force bits, try to shrink constant
562    if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
563      APInt Expanded = C->getAPIntValue() | (~NewMask);
564      // if we can expand it to have all bits set, do it
565      if (Expanded.isAllOnesValue()) {
566        if (Expanded != C->getAPIntValue()) {
567          EVT VT = Op.getValueType();
568          SDValue New = TLO.DAG.getNode(Op.getOpcode(), dl,VT, Op.getOperand(0),
569                                        TLO.DAG.getConstant(Expanded, dl, VT));
570          return TLO.CombineTo(Op, New);
571        }
572        // if it already has all the bits set, nothing to change
573        // but don't shrink either!
574      } else if (TLO.ShrinkDemandedConstant(Op, NewMask)) {
575        return true;
576      }
577    }
578
579    KnownZero = KnownZeroOut;
580    KnownOne  = KnownOneOut;
581    break;
582  case ISD::SELECT:
583    if (SimplifyDemandedBits(Op.getOperand(2), NewMask, KnownZero,
584                             KnownOne, TLO, Depth+1))
585      return true;
586    if (SimplifyDemandedBits(Op.getOperand(1), NewMask, KnownZero2,
587                             KnownOne2, TLO, Depth+1))
588      return true;
589    assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
590    assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?");
591
592    // If the operands are constants, see if we can simplify them.
593    if (TLO.ShrinkDemandedConstant(Op, NewMask))
594      return true;
595
596    // Only known if known in both the LHS and RHS.
597    KnownOne &= KnownOne2;
598    KnownZero &= KnownZero2;
599    break;
600  case ISD::SELECT_CC:
601    if (SimplifyDemandedBits(Op.getOperand(3), NewMask, KnownZero,
602                             KnownOne, TLO, Depth+1))
603      return true;
604    if (SimplifyDemandedBits(Op.getOperand(2), NewMask, KnownZero2,
605                             KnownOne2, TLO, Depth+1))
606      return true;
607    assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
608    assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?");
609
610    // If the operands are constants, see if we can simplify them.
611    if (TLO.ShrinkDemandedConstant(Op, NewMask))
612      return true;
613
614    // Only known if known in both the LHS and RHS.
615    KnownOne &= KnownOne2;
616    KnownZero &= KnownZero2;
617    break;
618  case ISD::SHL:
619    if (ConstantSDNode *SA = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
620      unsigned ShAmt = SA->getZExtValue();
621      SDValue InOp = Op.getOperand(0);
622
623      // If the shift count is an invalid immediate, don't do anything.
624      if (ShAmt >= BitWidth)
625        break;
626
627      // If this is ((X >>u C1) << ShAmt), see if we can simplify this into a
628      // single shift.  We can do this if the bottom bits (which are shifted
629      // out) are never demanded.
630      if (InOp.getOpcode() == ISD::SRL &&
631          isa<ConstantSDNode>(InOp.getOperand(1))) {
632        if (ShAmt && (NewMask & APInt::getLowBitsSet(BitWidth, ShAmt)) == 0) {
633          unsigned C1= cast<ConstantSDNode>(InOp.getOperand(1))->getZExtValue();
634          unsigned Opc = ISD::SHL;
635          int Diff = ShAmt-C1;
636          if (Diff < 0) {
637            Diff = -Diff;
638            Opc = ISD::SRL;
639          }
640
641          SDValue NewSA =
642            TLO.DAG.getConstant(Diff, dl, Op.getOperand(1).getValueType());
643          EVT VT = Op.getValueType();
644          return TLO.CombineTo(Op, TLO.DAG.getNode(Opc, dl, VT,
645                                                   InOp.getOperand(0), NewSA));
646        }
647      }
648
649      if (SimplifyDemandedBits(InOp, NewMask.lshr(ShAmt),
650                               KnownZero, KnownOne, TLO, Depth+1))
651        return true;
652
653      // Convert (shl (anyext x, c)) to (anyext (shl x, c)) if the high bits
654      // are not demanded. This will likely allow the anyext to be folded away.
655      if (InOp.getNode()->getOpcode() == ISD::ANY_EXTEND) {
656        SDValue InnerOp = InOp.getNode()->getOperand(0);
657        EVT InnerVT = InnerOp.getValueType();
658        unsigned InnerBits = InnerVT.getSizeInBits();
659        if (ShAmt < InnerBits && NewMask.lshr(InnerBits) == 0 &&
660            isTypeDesirableForOp(ISD::SHL, InnerVT)) {
661          EVT ShTy = getShiftAmountTy(InnerVT, DL);
662          if (!APInt(BitWidth, ShAmt).isIntN(ShTy.getSizeInBits()))
663            ShTy = InnerVT;
664          SDValue NarrowShl =
665            TLO.DAG.getNode(ISD::SHL, dl, InnerVT, InnerOp,
666                            TLO.DAG.getConstant(ShAmt, dl, ShTy));
667          return
668            TLO.CombineTo(Op,
669                          TLO.DAG.getNode(ISD::ANY_EXTEND, dl, Op.getValueType(),
670                                          NarrowShl));
671        }
672        // Repeat the SHL optimization above in cases where an extension
673        // intervenes: (shl (anyext (shr x, c1)), c2) to
674        // (shl (anyext x), c2-c1).  This requires that the bottom c1 bits
675        // aren't demanded (as above) and that the shifted upper c1 bits of
676        // x aren't demanded.
677        if (InOp.hasOneUse() &&
678            InnerOp.getOpcode() == ISD::SRL &&
679            InnerOp.hasOneUse() &&
680            isa<ConstantSDNode>(InnerOp.getOperand(1))) {
681          uint64_t InnerShAmt = cast<ConstantSDNode>(InnerOp.getOperand(1))
682            ->getZExtValue();
683          if (InnerShAmt < ShAmt &&
684              InnerShAmt < InnerBits &&
685              NewMask.lshr(InnerBits - InnerShAmt + ShAmt) == 0 &&
686              NewMask.trunc(ShAmt) == 0) {
687            SDValue NewSA =
688              TLO.DAG.getConstant(ShAmt - InnerShAmt, dl,
689                                  Op.getOperand(1).getValueType());
690            EVT VT = Op.getValueType();
691            SDValue NewExt = TLO.DAG.getNode(ISD::ANY_EXTEND, dl, VT,
692                                             InnerOp.getOperand(0));
693            return TLO.CombineTo(Op, TLO.DAG.getNode(ISD::SHL, dl, VT,
694                                                     NewExt, NewSA));
695          }
696        }
697      }
698
699      KnownZero <<= SA->getZExtValue();
700      KnownOne  <<= SA->getZExtValue();
701      // low bits known zero.
702      KnownZero |= APInt::getLowBitsSet(BitWidth, SA->getZExtValue());
703    }
704    break;
705  case ISD::SRL:
706    if (ConstantSDNode *SA = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
707      EVT VT = Op.getValueType();
708      unsigned ShAmt = SA->getZExtValue();
709      unsigned VTSize = VT.getSizeInBits();
710      SDValue InOp = Op.getOperand(0);
711
712      // If the shift count is an invalid immediate, don't do anything.
713      if (ShAmt >= BitWidth)
714        break;
715
716      APInt InDemandedMask = (NewMask << ShAmt);
717
718      // If the shift is exact, then it does demand the low bits (and knows that
719      // they are zero).
720      if (cast<BinaryWithFlagsSDNode>(Op)->Flags.hasExact())
721        InDemandedMask |= APInt::getLowBitsSet(BitWidth, ShAmt);
722
723      // If this is ((X << C1) >>u ShAmt), see if we can simplify this into a
724      // single shift.  We can do this if the top bits (which are shifted out)
725      // are never demanded.
726      if (InOp.getOpcode() == ISD::SHL &&
727          isa<ConstantSDNode>(InOp.getOperand(1))) {
728        if (ShAmt && (NewMask & APInt::getHighBitsSet(VTSize, ShAmt)) == 0) {
729          unsigned C1= cast<ConstantSDNode>(InOp.getOperand(1))->getZExtValue();
730          unsigned Opc = ISD::SRL;
731          int Diff = ShAmt-C1;
732          if (Diff < 0) {
733            Diff = -Diff;
734            Opc = ISD::SHL;
735          }
736
737          SDValue NewSA =
738            TLO.DAG.getConstant(Diff, dl, Op.getOperand(1).getValueType());
739          return TLO.CombineTo(Op, TLO.DAG.getNode(Opc, dl, VT,
740                                                   InOp.getOperand(0), NewSA));
741        }
742      }
743
744      // Compute the new bits that are at the top now.
745      if (SimplifyDemandedBits(InOp, InDemandedMask,
746                               KnownZero, KnownOne, TLO, Depth+1))
747        return true;
748      assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
749      KnownZero = KnownZero.lshr(ShAmt);
750      KnownOne  = KnownOne.lshr(ShAmt);
751
752      APInt HighBits = APInt::getHighBitsSet(BitWidth, ShAmt);
753      KnownZero |= HighBits;  // High bits known zero.
754    }
755    break;
756  case ISD::SRA:
757    // If this is an arithmetic shift right and only the low-bit is set, we can
758    // always convert this into a logical shr, even if the shift amount is
759    // variable.  The low bit of the shift cannot be an input sign bit unless
760    // the shift amount is >= the size of the datatype, which is undefined.
761    if (NewMask == 1)
762      return TLO.CombineTo(Op,
763                           TLO.DAG.getNode(ISD::SRL, dl, Op.getValueType(),
764                                           Op.getOperand(0), Op.getOperand(1)));
765
766    if (ConstantSDNode *SA = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
767      EVT VT = Op.getValueType();
768      unsigned ShAmt = SA->getZExtValue();
769
770      // If the shift count is an invalid immediate, don't do anything.
771      if (ShAmt >= BitWidth)
772        break;
773
774      APInt InDemandedMask = (NewMask << ShAmt);
775
776      // If the shift is exact, then it does demand the low bits (and knows that
777      // they are zero).
778      if (cast<BinaryWithFlagsSDNode>(Op)->Flags.hasExact())
779        InDemandedMask |= APInt::getLowBitsSet(BitWidth, ShAmt);
780
781      // If any of the demanded bits are produced by the sign extension, we also
782      // demand the input sign bit.
783      APInt HighBits = APInt::getHighBitsSet(BitWidth, ShAmt);
784      if (HighBits.intersects(NewMask))
785        InDemandedMask |= APInt::getSignBit(VT.getScalarType().getSizeInBits());
786
787      if (SimplifyDemandedBits(Op.getOperand(0), InDemandedMask,
788                               KnownZero, KnownOne, TLO, Depth+1))
789        return true;
790      assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
791      KnownZero = KnownZero.lshr(ShAmt);
792      KnownOne  = KnownOne.lshr(ShAmt);
793
794      // Handle the sign bit, adjusted to where it is now in the mask.
795      APInt SignBit = APInt::getSignBit(BitWidth).lshr(ShAmt);
796
797      // If the input sign bit is known to be zero, or if none of the top bits
798      // are demanded, turn this into an unsigned shift right.
799      if (KnownZero.intersects(SignBit) || (HighBits & ~NewMask) == HighBits) {
800        SDNodeFlags Flags;
801        Flags.setExact(cast<BinaryWithFlagsSDNode>(Op)->Flags.hasExact());
802        return TLO.CombineTo(Op,
803                             TLO.DAG.getNode(ISD::SRL, dl, VT, Op.getOperand(0),
804                                             Op.getOperand(1), &Flags));
805      }
806
807      int Log2 = NewMask.exactLogBase2();
808      if (Log2 >= 0) {
809        // The bit must come from the sign.
810        SDValue NewSA =
811          TLO.DAG.getConstant(BitWidth - 1 - Log2, dl,
812                              Op.getOperand(1).getValueType());
813        return TLO.CombineTo(Op, TLO.DAG.getNode(ISD::SRL, dl, VT,
814                                                 Op.getOperand(0), NewSA));
815      }
816
817      if (KnownOne.intersects(SignBit))
818        // New bits are known one.
819        KnownOne |= HighBits;
820    }
821    break;
822  case ISD::SIGN_EXTEND_INREG: {
823    EVT ExVT = cast<VTSDNode>(Op.getOperand(1))->getVT();
824
825    APInt MsbMask = APInt::getHighBitsSet(BitWidth, 1);
826    // If we only care about the highest bit, don't bother shifting right.
827    if (MsbMask == NewMask) {
828      unsigned ShAmt = ExVT.getScalarType().getSizeInBits();
829      SDValue InOp = Op.getOperand(0);
830      unsigned VTBits = Op->getValueType(0).getScalarType().getSizeInBits();
831      bool AlreadySignExtended =
832        TLO.DAG.ComputeNumSignBits(InOp) >= VTBits-ShAmt+1;
833      // However if the input is already sign extended we expect the sign
834      // extension to be dropped altogether later and do not simplify.
835      if (!AlreadySignExtended) {
836        // Compute the correct shift amount type, which must be getShiftAmountTy
837        // for scalar types after legalization.
838        EVT ShiftAmtTy = Op.getValueType();
839        if (TLO.LegalTypes() && !ShiftAmtTy.isVector())
840          ShiftAmtTy = getShiftAmountTy(ShiftAmtTy, DL);
841
842        SDValue ShiftAmt = TLO.DAG.getConstant(BitWidth - ShAmt, dl,
843                                               ShiftAmtTy);
844        return TLO.CombineTo(Op, TLO.DAG.getNode(ISD::SHL, dl,
845                                                 Op.getValueType(), InOp,
846                                                 ShiftAmt));
847      }
848    }
849
850    // Sign extension.  Compute the demanded bits in the result that are not
851    // present in the input.
852    APInt NewBits =
853      APInt::getHighBitsSet(BitWidth,
854                            BitWidth - ExVT.getScalarType().getSizeInBits());
855
856    // If none of the extended bits are demanded, eliminate the sextinreg.
857    if ((NewBits & NewMask) == 0)
858      return TLO.CombineTo(Op, Op.getOperand(0));
859
860    APInt InSignBit =
861      APInt::getSignBit(ExVT.getScalarType().getSizeInBits()).zext(BitWidth);
862    APInt InputDemandedBits =
863      APInt::getLowBitsSet(BitWidth,
864                           ExVT.getScalarType().getSizeInBits()) &
865      NewMask;
866
867    // Since the sign extended bits are demanded, we know that the sign
868    // bit is demanded.
869    InputDemandedBits |= InSignBit;
870
871    if (SimplifyDemandedBits(Op.getOperand(0), InputDemandedBits,
872                             KnownZero, KnownOne, TLO, Depth+1))
873      return true;
874    assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
875
876    // If the sign bit of the input is known set or clear, then we know the
877    // top bits of the result.
878
879    // If the input sign bit is known zero, convert this into a zero extension.
880    if (KnownZero.intersects(InSignBit))
881      return TLO.CombineTo(Op,
882                          TLO.DAG.getZeroExtendInReg(Op.getOperand(0),dl,ExVT));
883
884    if (KnownOne.intersects(InSignBit)) {    // Input sign bit known set
885      KnownOne |= NewBits;
886      KnownZero &= ~NewBits;
887    } else {                       // Input sign bit unknown
888      KnownZero &= ~NewBits;
889      KnownOne &= ~NewBits;
890    }
891    break;
892  }
893  case ISD::BUILD_PAIR: {
894    EVT HalfVT = Op.getOperand(0).getValueType();
895    unsigned HalfBitWidth = HalfVT.getScalarSizeInBits();
896
897    APInt MaskLo = NewMask.getLoBits(HalfBitWidth).trunc(HalfBitWidth);
898    APInt MaskHi = NewMask.getHiBits(HalfBitWidth).trunc(HalfBitWidth);
899
900    APInt KnownZeroLo, KnownOneLo;
901    APInt KnownZeroHi, KnownOneHi;
902
903    if (SimplifyDemandedBits(Op.getOperand(0), MaskLo, KnownZeroLo,
904                             KnownOneLo, TLO, Depth + 1))
905      return true;
906
907    if (SimplifyDemandedBits(Op.getOperand(1), MaskHi, KnownZeroHi,
908                             KnownOneHi, TLO, Depth + 1))
909      return true;
910
911    KnownZero = KnownZeroLo.zext(BitWidth) |
912                KnownZeroHi.zext(BitWidth).shl(HalfBitWidth);
913
914    KnownOne = KnownOneLo.zext(BitWidth) |
915               KnownOneHi.zext(BitWidth).shl(HalfBitWidth);
916    break;
917  }
918  case ISD::ZERO_EXTEND: {
919    unsigned OperandBitWidth =
920      Op.getOperand(0).getValueType().getScalarType().getSizeInBits();
921    APInt InMask = NewMask.trunc(OperandBitWidth);
922
923    // If none of the top bits are demanded, convert this into an any_extend.
924    APInt NewBits =
925      APInt::getHighBitsSet(BitWidth, BitWidth - OperandBitWidth) & NewMask;
926    if (!NewBits.intersects(NewMask))
927      return TLO.CombineTo(Op, TLO.DAG.getNode(ISD::ANY_EXTEND, dl,
928                                               Op.getValueType(),
929                                               Op.getOperand(0)));
930
931    if (SimplifyDemandedBits(Op.getOperand(0), InMask,
932                             KnownZero, KnownOne, TLO, Depth+1))
933      return true;
934    assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
935    KnownZero = KnownZero.zext(BitWidth);
936    KnownOne = KnownOne.zext(BitWidth);
937    KnownZero |= NewBits;
938    break;
939  }
940  case ISD::SIGN_EXTEND: {
941    EVT InVT = Op.getOperand(0).getValueType();
942    unsigned InBits = InVT.getScalarType().getSizeInBits();
943    APInt InMask    = APInt::getLowBitsSet(BitWidth, InBits);
944    APInt InSignBit = APInt::getBitsSet(BitWidth, InBits - 1, InBits);
945    APInt NewBits   = ~InMask & NewMask;
946
947    // If none of the top bits are demanded, convert this into an any_extend.
948    if (NewBits == 0)
949      return TLO.CombineTo(Op,TLO.DAG.getNode(ISD::ANY_EXTEND, dl,
950                                              Op.getValueType(),
951                                              Op.getOperand(0)));
952
953    // Since some of the sign extended bits are demanded, we know that the sign
954    // bit is demanded.
955    APInt InDemandedBits = InMask & NewMask;
956    InDemandedBits |= InSignBit;
957    InDemandedBits = InDemandedBits.trunc(InBits);
958
959    if (SimplifyDemandedBits(Op.getOperand(0), InDemandedBits, KnownZero,
960                             KnownOne, TLO, Depth+1))
961      return true;
962    KnownZero = KnownZero.zext(BitWidth);
963    KnownOne = KnownOne.zext(BitWidth);
964
965    // If the sign bit is known zero, convert this to a zero extend.
966    if (KnownZero.intersects(InSignBit))
967      return TLO.CombineTo(Op, TLO.DAG.getNode(ISD::ZERO_EXTEND, dl,
968                                               Op.getValueType(),
969                                               Op.getOperand(0)));
970
971    // If the sign bit is known one, the top bits match.
972    if (KnownOne.intersects(InSignBit)) {
973      KnownOne |= NewBits;
974      assert((KnownZero & NewBits) == 0);
975    } else {   // Otherwise, top bits aren't known.
976      assert((KnownOne & NewBits) == 0);
977      assert((KnownZero & NewBits) == 0);
978    }
979    break;
980  }
981  case ISD::ANY_EXTEND: {
982    unsigned OperandBitWidth =
983      Op.getOperand(0).getValueType().getScalarType().getSizeInBits();
984    APInt InMask = NewMask.trunc(OperandBitWidth);
985    if (SimplifyDemandedBits(Op.getOperand(0), InMask,
986                             KnownZero, KnownOne, TLO, Depth+1))
987      return true;
988    assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
989    KnownZero = KnownZero.zext(BitWidth);
990    KnownOne = KnownOne.zext(BitWidth);
991    break;
992  }
993  case ISD::TRUNCATE: {
994    // Simplify the input, using demanded bit information, and compute the known
995    // zero/one bits live out.
996    unsigned OperandBitWidth =
997      Op.getOperand(0).getValueType().getScalarType().getSizeInBits();
998    APInt TruncMask = NewMask.zext(OperandBitWidth);
999    if (SimplifyDemandedBits(Op.getOperand(0), TruncMask,
1000                             KnownZero, KnownOne, TLO, Depth+1))
1001      return true;
1002    KnownZero = KnownZero.trunc(BitWidth);
1003    KnownOne = KnownOne.trunc(BitWidth);
1004
1005    // If the input is only used by this truncate, see if we can shrink it based
1006    // on the known demanded bits.
1007    if (Op.getOperand(0).getNode()->hasOneUse()) {
1008      SDValue In = Op.getOperand(0);
1009      switch (In.getOpcode()) {
1010      default: break;
1011      case ISD::SRL:
1012        // Shrink SRL by a constant if none of the high bits shifted in are
1013        // demanded.
1014        if (TLO.LegalTypes() &&
1015            !isTypeDesirableForOp(ISD::SRL, Op.getValueType()))
1016          // Do not turn (vt1 truncate (vt2 srl)) into (vt1 srl) if vt1 is
1017          // undesirable.
1018          break;
1019        ConstantSDNode *ShAmt = dyn_cast<ConstantSDNode>(In.getOperand(1));
1020        if (!ShAmt)
1021          break;
1022        SDValue Shift = In.getOperand(1);
1023        if (TLO.LegalTypes()) {
1024          uint64_t ShVal = ShAmt->getZExtValue();
1025          Shift = TLO.DAG.getConstant(ShVal, dl,
1026                                      getShiftAmountTy(Op.getValueType(), DL));
1027        }
1028
1029        APInt HighBits = APInt::getHighBitsSet(OperandBitWidth,
1030                                               OperandBitWidth - BitWidth);
1031        HighBits = HighBits.lshr(ShAmt->getZExtValue()).trunc(BitWidth);
1032
1033        if (ShAmt->getZExtValue() < BitWidth && !(HighBits & NewMask)) {
1034          // None of the shifted in bits are needed.  Add a truncate of the
1035          // shift input, then shift it.
1036          SDValue NewTrunc = TLO.DAG.getNode(ISD::TRUNCATE, dl,
1037                                             Op.getValueType(),
1038                                             In.getOperand(0));
1039          return TLO.CombineTo(Op, TLO.DAG.getNode(ISD::SRL, dl,
1040                                                   Op.getValueType(),
1041                                                   NewTrunc,
1042                                                   Shift));
1043        }
1044        break;
1045      }
1046    }
1047
1048    assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
1049    break;
1050  }
1051  case ISD::AssertZext: {
1052    // AssertZext demands all of the high bits, plus any of the low bits
1053    // demanded by its users.
1054    EVT VT = cast<VTSDNode>(Op.getOperand(1))->getVT();
1055    APInt InMask = APInt::getLowBitsSet(BitWidth,
1056                                        VT.getSizeInBits());
1057    if (SimplifyDemandedBits(Op.getOperand(0), ~InMask | NewMask,
1058                             KnownZero, KnownOne, TLO, Depth+1))
1059      return true;
1060    assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
1061
1062    KnownZero |= ~InMask & NewMask;
1063    break;
1064  }
1065  case ISD::BITCAST:
1066    // If this is an FP->Int bitcast and if the sign bit is the only
1067    // thing demanded, turn this into a FGETSIGN.
1068    if (!TLO.LegalOperations() &&
1069        !Op.getValueType().isVector() &&
1070        !Op.getOperand(0).getValueType().isVector() &&
1071        NewMask == APInt::getSignBit(Op.getValueType().getSizeInBits()) &&
1072        Op.getOperand(0).getValueType().isFloatingPoint()) {
1073      bool OpVTLegal = isOperationLegalOrCustom(ISD::FGETSIGN, Op.getValueType());
1074      bool i32Legal  = isOperationLegalOrCustom(ISD::FGETSIGN, MVT::i32);
1075      if ((OpVTLegal || i32Legal) && Op.getValueType().isSimple() &&
1076           Op.getOperand(0).getValueType() != MVT::f128) {
1077        // Cannot eliminate/lower SHL for f128 yet.
1078        EVT Ty = OpVTLegal ? Op.getValueType() : MVT::i32;
1079        // Make a FGETSIGN + SHL to move the sign bit into the appropriate
1080        // place.  We expect the SHL to be eliminated by other optimizations.
1081        SDValue Sign = TLO.DAG.getNode(ISD::FGETSIGN, dl, Ty, Op.getOperand(0));
1082        unsigned OpVTSizeInBits = Op.getValueType().getSizeInBits();
1083        if (!OpVTLegal && OpVTSizeInBits > 32)
1084          Sign = TLO.DAG.getNode(ISD::ZERO_EXTEND, dl, Op.getValueType(), Sign);
1085        unsigned ShVal = Op.getValueType().getSizeInBits()-1;
1086        SDValue ShAmt = TLO.DAG.getConstant(ShVal, dl, Op.getValueType());
1087        return TLO.CombineTo(Op, TLO.DAG.getNode(ISD::SHL, dl,
1088                                                 Op.getValueType(),
1089                                                 Sign, ShAmt));
1090      }
1091    }
1092    break;
1093  case ISD::ADD:
1094  case ISD::MUL:
1095  case ISD::SUB: {
1096    // Add, Sub, and Mul don't demand any bits in positions beyond that
1097    // of the highest bit demanded of them.
1098    APInt LoMask = APInt::getLowBitsSet(BitWidth,
1099                                        BitWidth - NewMask.countLeadingZeros());
1100    if (SimplifyDemandedBits(Op.getOperand(0), LoMask, KnownZero2,
1101                             KnownOne2, TLO, Depth+1))
1102      return true;
1103    if (SimplifyDemandedBits(Op.getOperand(1), LoMask, KnownZero2,
1104                             KnownOne2, TLO, Depth+1))
1105      return true;
1106    // See if the operation should be performed at a smaller bit width.
1107    if (TLO.ShrinkDemandedOp(Op, BitWidth, NewMask, dl))
1108      return true;
1109  }
1110  // FALL THROUGH
1111  default:
1112    // Just use computeKnownBits to compute output bits.
1113    TLO.DAG.computeKnownBits(Op, KnownZero, KnownOne, Depth);
1114    break;
1115  }
1116
1117  // If we know the value of all of the demanded bits, return this as a
1118  // constant.
1119  if ((NewMask & (KnownZero|KnownOne)) == NewMask) {
1120    // Avoid folding to a constant if any OpaqueConstant is involved.
1121    const SDNode *N = Op.getNode();
1122    for (SDNodeIterator I = SDNodeIterator::begin(N),
1123         E = SDNodeIterator::end(N); I != E; ++I) {
1124      SDNode *Op = *I;
1125      if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Op))
1126        if (C->isOpaque())
1127          return false;
1128    }
1129    return TLO.CombineTo(Op,
1130                         TLO.DAG.getConstant(KnownOne, dl, Op.getValueType()));
1131  }
1132
1133  return false;
1134}
1135
1136/// computeKnownBitsForTargetNode - Determine which of the bits specified
1137/// in Mask are known to be either zero or one and return them in the
1138/// KnownZero/KnownOne bitsets.
1139void TargetLowering::computeKnownBitsForTargetNode(const SDValue Op,
1140                                                   APInt &KnownZero,
1141                                                   APInt &KnownOne,
1142                                                   const SelectionDAG &DAG,
1143                                                   unsigned Depth) const {
1144  assert((Op.getOpcode() >= ISD::BUILTIN_OP_END ||
1145          Op.getOpcode() == ISD::INTRINSIC_WO_CHAIN ||
1146          Op.getOpcode() == ISD::INTRINSIC_W_CHAIN ||
1147          Op.getOpcode() == ISD::INTRINSIC_VOID) &&
1148         "Should use MaskedValueIsZero if you don't know whether Op"
1149         " is a target node!");
1150  KnownZero = KnownOne = APInt(KnownOne.getBitWidth(), 0);
1151}
1152
1153/// ComputeNumSignBitsForTargetNode - This method can be implemented by
1154/// targets that want to expose additional information about sign bits to the
1155/// DAG Combiner.
1156unsigned TargetLowering::ComputeNumSignBitsForTargetNode(SDValue Op,
1157                                                         const SelectionDAG &,
1158                                                         unsigned Depth) const {
1159  assert((Op.getOpcode() >= ISD::BUILTIN_OP_END ||
1160          Op.getOpcode() == ISD::INTRINSIC_WO_CHAIN ||
1161          Op.getOpcode() == ISD::INTRINSIC_W_CHAIN ||
1162          Op.getOpcode() == ISD::INTRINSIC_VOID) &&
1163         "Should use ComputeNumSignBits if you don't know whether Op"
1164         " is a target node!");
1165  return 1;
1166}
1167
1168/// ValueHasExactlyOneBitSet - Test if the given value is known to have exactly
1169/// one bit set. This differs from computeKnownBits in that it doesn't need to
1170/// determine which bit is set.
1171///
1172static bool ValueHasExactlyOneBitSet(SDValue Val, const SelectionDAG &DAG) {
1173  // A left-shift of a constant one will have exactly one bit set, because
1174  // shifting the bit off the end is undefined.
1175  if (Val.getOpcode() == ISD::SHL)
1176    if (ConstantSDNode *C =
1177         dyn_cast<ConstantSDNode>(Val.getNode()->getOperand(0)))
1178      if (C->getAPIntValue() == 1)
1179        return true;
1180
1181  // Similarly, a right-shift of a constant sign-bit will have exactly
1182  // one bit set.
1183  if (Val.getOpcode() == ISD::SRL)
1184    if (ConstantSDNode *C =
1185         dyn_cast<ConstantSDNode>(Val.getNode()->getOperand(0)))
1186      if (C->getAPIntValue().isSignBit())
1187        return true;
1188
1189  // More could be done here, though the above checks are enough
1190  // to handle some common cases.
1191
1192  // Fall back to computeKnownBits to catch other known cases.
1193  EVT OpVT = Val.getValueType();
1194  unsigned BitWidth = OpVT.getScalarType().getSizeInBits();
1195  APInt KnownZero, KnownOne;
1196  DAG.computeKnownBits(Val, KnownZero, KnownOne);
1197  return (KnownZero.countPopulation() == BitWidth - 1) &&
1198         (KnownOne.countPopulation() == 1);
1199}
1200
1201bool TargetLowering::isConstTrueVal(const SDNode *N) const {
1202  if (!N)
1203    return false;
1204
1205  const ConstantSDNode *CN = dyn_cast<ConstantSDNode>(N);
1206  if (!CN) {
1207    const BuildVectorSDNode *BV = dyn_cast<BuildVectorSDNode>(N);
1208    if (!BV)
1209      return false;
1210
1211    BitVector UndefElements;
1212    CN = BV->getConstantSplatNode(&UndefElements);
1213    // Only interested in constant splats, and we don't try to handle undef
1214    // elements in identifying boolean constants.
1215    if (!CN || UndefElements.none())
1216      return false;
1217  }
1218
1219  switch (getBooleanContents(N->getValueType(0))) {
1220  case UndefinedBooleanContent:
1221    return CN->getAPIntValue()[0];
1222  case ZeroOrOneBooleanContent:
1223    return CN->isOne();
1224  case ZeroOrNegativeOneBooleanContent:
1225    return CN->isAllOnesValue();
1226  }
1227
1228  llvm_unreachable("Invalid boolean contents");
1229}
1230
1231bool TargetLowering::isConstFalseVal(const SDNode *N) const {
1232  if (!N)
1233    return false;
1234
1235  const ConstantSDNode *CN = dyn_cast<ConstantSDNode>(N);
1236  if (!CN) {
1237    const BuildVectorSDNode *BV = dyn_cast<BuildVectorSDNode>(N);
1238    if (!BV)
1239      return false;
1240
1241    BitVector UndefElements;
1242    CN = BV->getConstantSplatNode(&UndefElements);
1243    // Only interested in constant splats, and we don't try to handle undef
1244    // elements in identifying boolean constants.
1245    if (!CN || UndefElements.none())
1246      return false;
1247  }
1248
1249  if (getBooleanContents(N->getValueType(0)) == UndefinedBooleanContent)
1250    return !CN->getAPIntValue()[0];
1251
1252  return CN->isNullValue();
1253}
1254
1255/// SimplifySetCC - Try to simplify a setcc built with the specified operands
1256/// and cc. If it is unable to simplify it, return a null SDValue.
1257SDValue
1258TargetLowering::SimplifySetCC(EVT VT, SDValue N0, SDValue N1,
1259                              ISD::CondCode Cond, bool foldBooleans,
1260                              DAGCombinerInfo &DCI, SDLoc dl) const {
1261  SelectionDAG &DAG = DCI.DAG;
1262
1263  // These setcc operations always fold.
1264  switch (Cond) {
1265  default: break;
1266  case ISD::SETFALSE:
1267  case ISD::SETFALSE2: return DAG.getConstant(0, dl, VT);
1268  case ISD::SETTRUE:
1269  case ISD::SETTRUE2: {
1270    TargetLowering::BooleanContent Cnt =
1271        getBooleanContents(N0->getValueType(0));
1272    return DAG.getConstant(
1273        Cnt == TargetLowering::ZeroOrNegativeOneBooleanContent ? -1ULL : 1, dl,
1274        VT);
1275  }
1276  }
1277
1278  // Ensure that the constant occurs on the RHS, and fold constant
1279  // comparisons.
1280  ISD::CondCode SwappedCC = ISD::getSetCCSwappedOperands(Cond);
1281  if (isa<ConstantSDNode>(N0.getNode()) &&
1282      (DCI.isBeforeLegalizeOps() ||
1283       isCondCodeLegal(SwappedCC, N0.getSimpleValueType())))
1284    return DAG.getSetCC(dl, VT, N1, N0, SwappedCC);
1285
1286  if (ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1.getNode())) {
1287    const APInt &C1 = N1C->getAPIntValue();
1288
1289    // If the LHS is '(srl (ctlz x), 5)', the RHS is 0/1, and this is an
1290    // equality comparison, then we're just comparing whether X itself is
1291    // zero.
1292    if (N0.getOpcode() == ISD::SRL && (C1 == 0 || C1 == 1) &&
1293        N0.getOperand(0).getOpcode() == ISD::CTLZ &&
1294        N0.getOperand(1).getOpcode() == ISD::Constant) {
1295      const APInt &ShAmt
1296        = cast<ConstantSDNode>(N0.getOperand(1))->getAPIntValue();
1297      if ((Cond == ISD::SETEQ || Cond == ISD::SETNE) &&
1298          ShAmt == Log2_32(N0.getValueType().getSizeInBits())) {
1299        if ((C1 == 0) == (Cond == ISD::SETEQ)) {
1300          // (srl (ctlz x), 5) == 0  -> X != 0
1301          // (srl (ctlz x), 5) != 1  -> X != 0
1302          Cond = ISD::SETNE;
1303        } else {
1304          // (srl (ctlz x), 5) != 0  -> X == 0
1305          // (srl (ctlz x), 5) == 1  -> X == 0
1306          Cond = ISD::SETEQ;
1307        }
1308        SDValue Zero = DAG.getConstant(0, dl, N0.getValueType());
1309        return DAG.getSetCC(dl, VT, N0.getOperand(0).getOperand(0),
1310                            Zero, Cond);
1311      }
1312    }
1313
1314    SDValue CTPOP = N0;
1315    // Look through truncs that don't change the value of a ctpop.
1316    if (N0.hasOneUse() && N0.getOpcode() == ISD::TRUNCATE)
1317      CTPOP = N0.getOperand(0);
1318
1319    if (CTPOP.hasOneUse() && CTPOP.getOpcode() == ISD::CTPOP &&
1320        (N0 == CTPOP || N0.getValueType().getSizeInBits() >
1321                        Log2_32_Ceil(CTPOP.getValueType().getSizeInBits()))) {
1322      EVT CTVT = CTPOP.getValueType();
1323      SDValue CTOp = CTPOP.getOperand(0);
1324
1325      // (ctpop x) u< 2 -> (x & x-1) == 0
1326      // (ctpop x) u> 1 -> (x & x-1) != 0
1327      if ((Cond == ISD::SETULT && C1 == 2) || (Cond == ISD::SETUGT && C1 == 1)){
1328        SDValue Sub = DAG.getNode(ISD::SUB, dl, CTVT, CTOp,
1329                                  DAG.getConstant(1, dl, CTVT));
1330        SDValue And = DAG.getNode(ISD::AND, dl, CTVT, CTOp, Sub);
1331        ISD::CondCode CC = Cond == ISD::SETULT ? ISD::SETEQ : ISD::SETNE;
1332        return DAG.getSetCC(dl, VT, And, DAG.getConstant(0, dl, CTVT), CC);
1333      }
1334
1335      // TODO: (ctpop x) == 1 -> x && (x & x-1) == 0 iff ctpop is illegal.
1336    }
1337
1338    // (zext x) == C --> x == (trunc C)
1339    // (sext x) == C --> x == (trunc C)
1340    if ((Cond == ISD::SETEQ || Cond == ISD::SETNE) &&
1341        DCI.isBeforeLegalize() && N0->hasOneUse()) {
1342      unsigned MinBits = N0.getValueSizeInBits();
1343      SDValue PreExt;
1344      bool Signed = false;
1345      if (N0->getOpcode() == ISD::ZERO_EXTEND) {
1346        // ZExt
1347        MinBits = N0->getOperand(0).getValueSizeInBits();
1348        PreExt = N0->getOperand(0);
1349      } else if (N0->getOpcode() == ISD::AND) {
1350        // DAGCombine turns costly ZExts into ANDs
1351        if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(N0->getOperand(1)))
1352          if ((C->getAPIntValue()+1).isPowerOf2()) {
1353            MinBits = C->getAPIntValue().countTrailingOnes();
1354            PreExt = N0->getOperand(0);
1355          }
1356      } else if (N0->getOpcode() == ISD::SIGN_EXTEND) {
1357        // SExt
1358        MinBits = N0->getOperand(0).getValueSizeInBits();
1359        PreExt = N0->getOperand(0);
1360        Signed = true;
1361      } else if (LoadSDNode *LN0 = dyn_cast<LoadSDNode>(N0)) {
1362        // ZEXTLOAD / SEXTLOAD
1363        if (LN0->getExtensionType() == ISD::ZEXTLOAD) {
1364          MinBits = LN0->getMemoryVT().getSizeInBits();
1365          PreExt = N0;
1366        } else if (LN0->getExtensionType() == ISD::SEXTLOAD) {
1367          Signed = true;
1368          MinBits = LN0->getMemoryVT().getSizeInBits();
1369          PreExt = N0;
1370        }
1371      }
1372
1373      // Figure out how many bits we need to preserve this constant.
1374      unsigned ReqdBits = Signed ?
1375        C1.getBitWidth() - C1.getNumSignBits() + 1 :
1376        C1.getActiveBits();
1377
1378      // Make sure we're not losing bits from the constant.
1379      if (MinBits > 0 &&
1380          MinBits < C1.getBitWidth() &&
1381          MinBits >= ReqdBits) {
1382        EVT MinVT = EVT::getIntegerVT(*DAG.getContext(), MinBits);
1383        if (isTypeDesirableForOp(ISD::SETCC, MinVT)) {
1384          // Will get folded away.
1385          SDValue Trunc = DAG.getNode(ISD::TRUNCATE, dl, MinVT, PreExt);
1386          SDValue C = DAG.getConstant(C1.trunc(MinBits), dl, MinVT);
1387          return DAG.getSetCC(dl, VT, Trunc, C, Cond);
1388        }
1389      }
1390    }
1391
1392    // If the LHS is '(and load, const)', the RHS is 0,
1393    // the test is for equality or unsigned, and all 1 bits of the const are
1394    // in the same partial word, see if we can shorten the load.
1395    if (DCI.isBeforeLegalize() &&
1396        !ISD::isSignedIntSetCC(Cond) &&
1397        N0.getOpcode() == ISD::AND && C1 == 0 &&
1398        N0.getNode()->hasOneUse() &&
1399        isa<LoadSDNode>(N0.getOperand(0)) &&
1400        N0.getOperand(0).getNode()->hasOneUse() &&
1401        isa<ConstantSDNode>(N0.getOperand(1))) {
1402      LoadSDNode *Lod = cast<LoadSDNode>(N0.getOperand(0));
1403      APInt bestMask;
1404      unsigned bestWidth = 0, bestOffset = 0;
1405      if (!Lod->isVolatile() && Lod->isUnindexed()) {
1406        unsigned origWidth = N0.getValueType().getSizeInBits();
1407        unsigned maskWidth = origWidth;
1408        // We can narrow (e.g.) 16-bit extending loads on 32-bit target to
1409        // 8 bits, but have to be careful...
1410        if (Lod->getExtensionType() != ISD::NON_EXTLOAD)
1411          origWidth = Lod->getMemoryVT().getSizeInBits();
1412        const APInt &Mask =
1413          cast<ConstantSDNode>(N0.getOperand(1))->getAPIntValue();
1414        for (unsigned width = origWidth / 2; width>=8; width /= 2) {
1415          APInt newMask = APInt::getLowBitsSet(maskWidth, width);
1416          for (unsigned offset=0; offset<origWidth/width; offset++) {
1417            if ((newMask & Mask) == Mask) {
1418              if (!DAG.getDataLayout().isLittleEndian())
1419                bestOffset = (origWidth/width - offset - 1) * (width/8);
1420              else
1421                bestOffset = (uint64_t)offset * (width/8);
1422              bestMask = Mask.lshr(offset * (width/8) * 8);
1423              bestWidth = width;
1424              break;
1425            }
1426            newMask = newMask << width;
1427          }
1428        }
1429      }
1430      if (bestWidth) {
1431        EVT newVT = EVT::getIntegerVT(*DAG.getContext(), bestWidth);
1432        if (newVT.isRound()) {
1433          EVT PtrType = Lod->getOperand(1).getValueType();
1434          SDValue Ptr = Lod->getBasePtr();
1435          if (bestOffset != 0)
1436            Ptr = DAG.getNode(ISD::ADD, dl, PtrType, Lod->getBasePtr(),
1437                              DAG.getConstant(bestOffset, dl, PtrType));
1438          unsigned NewAlign = MinAlign(Lod->getAlignment(), bestOffset);
1439          SDValue NewLoad = DAG.getLoad(newVT, dl, Lod->getChain(), Ptr,
1440                                Lod->getPointerInfo().getWithOffset(bestOffset),
1441                                        false, false, false, NewAlign);
1442          return DAG.getSetCC(dl, VT,
1443                              DAG.getNode(ISD::AND, dl, newVT, NewLoad,
1444                                      DAG.getConstant(bestMask.trunc(bestWidth),
1445                                                      dl, newVT)),
1446                              DAG.getConstant(0LL, dl, newVT), Cond);
1447        }
1448      }
1449    }
1450
1451    // If the LHS is a ZERO_EXTEND, perform the comparison on the input.
1452    if (N0.getOpcode() == ISD::ZERO_EXTEND) {
1453      unsigned InSize = N0.getOperand(0).getValueType().getSizeInBits();
1454
1455      // If the comparison constant has bits in the upper part, the
1456      // zero-extended value could never match.
1457      if (C1.intersects(APInt::getHighBitsSet(C1.getBitWidth(),
1458                                              C1.getBitWidth() - InSize))) {
1459        switch (Cond) {
1460        case ISD::SETUGT:
1461        case ISD::SETUGE:
1462        case ISD::SETEQ: return DAG.getConstant(0, dl, VT);
1463        case ISD::SETULT:
1464        case ISD::SETULE:
1465        case ISD::SETNE: return DAG.getConstant(1, dl, VT);
1466        case ISD::SETGT:
1467        case ISD::SETGE:
1468          // True if the sign bit of C1 is set.
1469          return DAG.getConstant(C1.isNegative(), dl, VT);
1470        case ISD::SETLT:
1471        case ISD::SETLE:
1472          // True if the sign bit of C1 isn't set.
1473          return DAG.getConstant(C1.isNonNegative(), dl, VT);
1474        default:
1475          break;
1476        }
1477      }
1478
1479      // Otherwise, we can perform the comparison with the low bits.
1480      switch (Cond) {
1481      case ISD::SETEQ:
1482      case ISD::SETNE:
1483      case ISD::SETUGT:
1484      case ISD::SETUGE:
1485      case ISD::SETULT:
1486      case ISD::SETULE: {
1487        EVT newVT = N0.getOperand(0).getValueType();
1488        if (DCI.isBeforeLegalizeOps() ||
1489            (isOperationLegal(ISD::SETCC, newVT) &&
1490             getCondCodeAction(Cond, newVT.getSimpleVT()) == Legal)) {
1491          EVT NewSetCCVT =
1492              getSetCCResultType(DAG.getDataLayout(), *DAG.getContext(), newVT);
1493          SDValue NewConst = DAG.getConstant(C1.trunc(InSize), dl, newVT);
1494
1495          SDValue NewSetCC = DAG.getSetCC(dl, NewSetCCVT, N0.getOperand(0),
1496                                          NewConst, Cond);
1497          return DAG.getBoolExtOrTrunc(NewSetCC, dl, VT, N0.getValueType());
1498        }
1499        break;
1500      }
1501      default:
1502        break;   // todo, be more careful with signed comparisons
1503      }
1504    } else if (N0.getOpcode() == ISD::SIGN_EXTEND_INREG &&
1505               (Cond == ISD::SETEQ || Cond == ISD::SETNE)) {
1506      EVT ExtSrcTy = cast<VTSDNode>(N0.getOperand(1))->getVT();
1507      unsigned ExtSrcTyBits = ExtSrcTy.getSizeInBits();
1508      EVT ExtDstTy = N0.getValueType();
1509      unsigned ExtDstTyBits = ExtDstTy.getSizeInBits();
1510
1511      // If the constant doesn't fit into the number of bits for the source of
1512      // the sign extension, it is impossible for both sides to be equal.
1513      if (C1.getMinSignedBits() > ExtSrcTyBits)
1514        return DAG.getConstant(Cond == ISD::SETNE, dl, VT);
1515
1516      SDValue ZextOp;
1517      EVT Op0Ty = N0.getOperand(0).getValueType();
1518      if (Op0Ty == ExtSrcTy) {
1519        ZextOp = N0.getOperand(0);
1520      } else {
1521        APInt Imm = APInt::getLowBitsSet(ExtDstTyBits, ExtSrcTyBits);
1522        ZextOp = DAG.getNode(ISD::AND, dl, Op0Ty, N0.getOperand(0),
1523                              DAG.getConstant(Imm, dl, Op0Ty));
1524      }
1525      if (!DCI.isCalledByLegalizer())
1526        DCI.AddToWorklist(ZextOp.getNode());
1527      // Otherwise, make this a use of a zext.
1528      return DAG.getSetCC(dl, VT, ZextOp,
1529                          DAG.getConstant(C1 & APInt::getLowBitsSet(
1530                                                              ExtDstTyBits,
1531                                                              ExtSrcTyBits),
1532                                          dl, ExtDstTy),
1533                          Cond);
1534    } else if ((N1C->isNullValue() || N1C->getAPIntValue() == 1) &&
1535                (Cond == ISD::SETEQ || Cond == ISD::SETNE)) {
1536      // SETCC (SETCC), [0|1], [EQ|NE]  -> SETCC
1537      if (N0.getOpcode() == ISD::SETCC &&
1538          isTypeLegal(VT) && VT.bitsLE(N0.getValueType())) {
1539        bool TrueWhenTrue = (Cond == ISD::SETEQ) ^ (N1C->getAPIntValue() != 1);
1540        if (TrueWhenTrue)
1541          return DAG.getNode(ISD::TRUNCATE, dl, VT, N0);
1542        // Invert the condition.
1543        ISD::CondCode CC = cast<CondCodeSDNode>(N0.getOperand(2))->get();
1544        CC = ISD::getSetCCInverse(CC,
1545                                  N0.getOperand(0).getValueType().isInteger());
1546        if (DCI.isBeforeLegalizeOps() ||
1547            isCondCodeLegal(CC, N0.getOperand(0).getSimpleValueType()))
1548          return DAG.getSetCC(dl, VT, N0.getOperand(0), N0.getOperand(1), CC);
1549      }
1550
1551      if ((N0.getOpcode() == ISD::XOR ||
1552           (N0.getOpcode() == ISD::AND &&
1553            N0.getOperand(0).getOpcode() == ISD::XOR &&
1554            N0.getOperand(1) == N0.getOperand(0).getOperand(1))) &&
1555          isa<ConstantSDNode>(N0.getOperand(1)) &&
1556          cast<ConstantSDNode>(N0.getOperand(1))->getAPIntValue() == 1) {
1557        // If this is (X^1) == 0/1, swap the RHS and eliminate the xor.  We
1558        // can only do this if the top bits are known zero.
1559        unsigned BitWidth = N0.getValueSizeInBits();
1560        if (DAG.MaskedValueIsZero(N0,
1561                                  APInt::getHighBitsSet(BitWidth,
1562                                                        BitWidth-1))) {
1563          // Okay, get the un-inverted input value.
1564          SDValue Val;
1565          if (N0.getOpcode() == ISD::XOR)
1566            Val = N0.getOperand(0);
1567          else {
1568            assert(N0.getOpcode() == ISD::AND &&
1569                    N0.getOperand(0).getOpcode() == ISD::XOR);
1570            // ((X^1)&1)^1 -> X & 1
1571            Val = DAG.getNode(ISD::AND, dl, N0.getValueType(),
1572                              N0.getOperand(0).getOperand(0),
1573                              N0.getOperand(1));
1574          }
1575
1576          return DAG.getSetCC(dl, VT, Val, N1,
1577                              Cond == ISD::SETEQ ? ISD::SETNE : ISD::SETEQ);
1578        }
1579      } else if (N1C->getAPIntValue() == 1 &&
1580                 (VT == MVT::i1 ||
1581                  getBooleanContents(N0->getValueType(0)) ==
1582                      ZeroOrOneBooleanContent)) {
1583        SDValue Op0 = N0;
1584        if (Op0.getOpcode() == ISD::TRUNCATE)
1585          Op0 = Op0.getOperand(0);
1586
1587        if ((Op0.getOpcode() == ISD::XOR) &&
1588            Op0.getOperand(0).getOpcode() == ISD::SETCC &&
1589            Op0.getOperand(1).getOpcode() == ISD::SETCC) {
1590          // (xor (setcc), (setcc)) == / != 1 -> (setcc) != / == (setcc)
1591          Cond = (Cond == ISD::SETEQ) ? ISD::SETNE : ISD::SETEQ;
1592          return DAG.getSetCC(dl, VT, Op0.getOperand(0), Op0.getOperand(1),
1593                              Cond);
1594        }
1595        if (Op0.getOpcode() == ISD::AND &&
1596            isa<ConstantSDNode>(Op0.getOperand(1)) &&
1597            cast<ConstantSDNode>(Op0.getOperand(1))->getAPIntValue() == 1) {
1598          // If this is (X&1) == / != 1, normalize it to (X&1) != / == 0.
1599          if (Op0.getValueType().bitsGT(VT))
1600            Op0 = DAG.getNode(ISD::AND, dl, VT,
1601                          DAG.getNode(ISD::TRUNCATE, dl, VT, Op0.getOperand(0)),
1602                          DAG.getConstant(1, dl, VT));
1603          else if (Op0.getValueType().bitsLT(VT))
1604            Op0 = DAG.getNode(ISD::AND, dl, VT,
1605                        DAG.getNode(ISD::ANY_EXTEND, dl, VT, Op0.getOperand(0)),
1606                        DAG.getConstant(1, dl, VT));
1607
1608          return DAG.getSetCC(dl, VT, Op0,
1609                              DAG.getConstant(0, dl, Op0.getValueType()),
1610                              Cond == ISD::SETEQ ? ISD::SETNE : ISD::SETEQ);
1611        }
1612        if (Op0.getOpcode() == ISD::AssertZext &&
1613            cast<VTSDNode>(Op0.getOperand(1))->getVT() == MVT::i1)
1614          return DAG.getSetCC(dl, VT, Op0,
1615                              DAG.getConstant(0, dl, Op0.getValueType()),
1616                              Cond == ISD::SETEQ ? ISD::SETNE : ISD::SETEQ);
1617      }
1618    }
1619
1620    APInt MinVal, MaxVal;
1621    unsigned OperandBitSize = N1C->getValueType(0).getSizeInBits();
1622    if (ISD::isSignedIntSetCC(Cond)) {
1623      MinVal = APInt::getSignedMinValue(OperandBitSize);
1624      MaxVal = APInt::getSignedMaxValue(OperandBitSize);
1625    } else {
1626      MinVal = APInt::getMinValue(OperandBitSize);
1627      MaxVal = APInt::getMaxValue(OperandBitSize);
1628    }
1629
1630    // Canonicalize GE/LE comparisons to use GT/LT comparisons.
1631    if (Cond == ISD::SETGE || Cond == ISD::SETUGE) {
1632      if (C1 == MinVal) return DAG.getConstant(1, dl, VT);  // X >= MIN --> true
1633      // X >= C0 --> X > (C0 - 1)
1634      APInt C = C1 - 1;
1635      ISD::CondCode NewCC = (Cond == ISD::SETGE) ? ISD::SETGT : ISD::SETUGT;
1636      if ((DCI.isBeforeLegalizeOps() ||
1637           isCondCodeLegal(NewCC, VT.getSimpleVT())) &&
1638          (!N1C->isOpaque() || (N1C->isOpaque() && C.getBitWidth() <= 64 &&
1639                                isLegalICmpImmediate(C.getSExtValue())))) {
1640        return DAG.getSetCC(dl, VT, N0,
1641                            DAG.getConstant(C, dl, N1.getValueType()),
1642                            NewCC);
1643      }
1644    }
1645
1646    if (Cond == ISD::SETLE || Cond == ISD::SETULE) {
1647      if (C1 == MaxVal) return DAG.getConstant(1, dl, VT);  // X <= MAX --> true
1648      // X <= C0 --> X < (C0 + 1)
1649      APInt C = C1 + 1;
1650      ISD::CondCode NewCC = (Cond == ISD::SETLE) ? ISD::SETLT : ISD::SETULT;
1651      if ((DCI.isBeforeLegalizeOps() ||
1652           isCondCodeLegal(NewCC, VT.getSimpleVT())) &&
1653          (!N1C->isOpaque() || (N1C->isOpaque() && C.getBitWidth() <= 64 &&
1654                                isLegalICmpImmediate(C.getSExtValue())))) {
1655        return DAG.getSetCC(dl, VT, N0,
1656                            DAG.getConstant(C, dl, N1.getValueType()),
1657                            NewCC);
1658      }
1659    }
1660
1661    if ((Cond == ISD::SETLT || Cond == ISD::SETULT) && C1 == MinVal)
1662      return DAG.getConstant(0, dl, VT);      // X < MIN --> false
1663    if ((Cond == ISD::SETGE || Cond == ISD::SETUGE) && C1 == MinVal)
1664      return DAG.getConstant(1, dl, VT);      // X >= MIN --> true
1665    if ((Cond == ISD::SETGT || Cond == ISD::SETUGT) && C1 == MaxVal)
1666      return DAG.getConstant(0, dl, VT);      // X > MAX --> false
1667    if ((Cond == ISD::SETLE || Cond == ISD::SETULE) && C1 == MaxVal)
1668      return DAG.getConstant(1, dl, VT);      // X <= MAX --> true
1669
1670    // Canonicalize setgt X, Min --> setne X, Min
1671    if ((Cond == ISD::SETGT || Cond == ISD::SETUGT) && C1 == MinVal)
1672      return DAG.getSetCC(dl, VT, N0, N1, ISD::SETNE);
1673    // Canonicalize setlt X, Max --> setne X, Max
1674    if ((Cond == ISD::SETLT || Cond == ISD::SETULT) && C1 == MaxVal)
1675      return DAG.getSetCC(dl, VT, N0, N1, ISD::SETNE);
1676
1677    // If we have setult X, 1, turn it into seteq X, 0
1678    if ((Cond == ISD::SETLT || Cond == ISD::SETULT) && C1 == MinVal+1)
1679      return DAG.getSetCC(dl, VT, N0,
1680                          DAG.getConstant(MinVal, dl, N0.getValueType()),
1681                          ISD::SETEQ);
1682    // If we have setugt X, Max-1, turn it into seteq X, Max
1683    if ((Cond == ISD::SETGT || Cond == ISD::SETUGT) && C1 == MaxVal-1)
1684      return DAG.getSetCC(dl, VT, N0,
1685                          DAG.getConstant(MaxVal, dl, N0.getValueType()),
1686                          ISD::SETEQ);
1687
1688    // If we have "setcc X, C0", check to see if we can shrink the immediate
1689    // by changing cc.
1690
1691    // SETUGT X, SINTMAX  -> SETLT X, 0
1692    if (Cond == ISD::SETUGT &&
1693        C1 == APInt::getSignedMaxValue(OperandBitSize))
1694      return DAG.getSetCC(dl, VT, N0,
1695                          DAG.getConstant(0, dl, N1.getValueType()),
1696                          ISD::SETLT);
1697
1698    // SETULT X, SINTMIN  -> SETGT X, -1
1699    if (Cond == ISD::SETULT &&
1700        C1 == APInt::getSignedMinValue(OperandBitSize)) {
1701      SDValue ConstMinusOne =
1702          DAG.getConstant(APInt::getAllOnesValue(OperandBitSize), dl,
1703                          N1.getValueType());
1704      return DAG.getSetCC(dl, VT, N0, ConstMinusOne, ISD::SETGT);
1705    }
1706
1707    // Fold bit comparisons when we can.
1708    if ((Cond == ISD::SETEQ || Cond == ISD::SETNE) &&
1709        (VT == N0.getValueType() ||
1710         (isTypeLegal(VT) && VT.bitsLE(N0.getValueType()))) &&
1711        N0.getOpcode() == ISD::AND) {
1712      auto &DL = DAG.getDataLayout();
1713      if (ConstantSDNode *AndRHS =
1714                  dyn_cast<ConstantSDNode>(N0.getOperand(1))) {
1715        EVT ShiftTy = DCI.isBeforeLegalize()
1716                          ? getPointerTy(DL)
1717                          : getShiftAmountTy(N0.getValueType(), DL);
1718        if (Cond == ISD::SETNE && C1 == 0) {// (X & 8) != 0  -->  (X & 8) >> 3
1719          // Perform the xform if the AND RHS is a single bit.
1720          if (AndRHS->getAPIntValue().isPowerOf2()) {
1721            return DAG.getNode(ISD::TRUNCATE, dl, VT,
1722                              DAG.getNode(ISD::SRL, dl, N0.getValueType(), N0,
1723                   DAG.getConstant(AndRHS->getAPIntValue().logBase2(), dl,
1724                                   ShiftTy)));
1725          }
1726        } else if (Cond == ISD::SETEQ && C1 == AndRHS->getAPIntValue()) {
1727          // (X & 8) == 8  -->  (X & 8) >> 3
1728          // Perform the xform if C1 is a single bit.
1729          if (C1.isPowerOf2()) {
1730            return DAG.getNode(ISD::TRUNCATE, dl, VT,
1731                               DAG.getNode(ISD::SRL, dl, N0.getValueType(), N0,
1732                                      DAG.getConstant(C1.logBase2(), dl,
1733                                                      ShiftTy)));
1734          }
1735        }
1736      }
1737    }
1738
1739    if (C1.getMinSignedBits() <= 64 &&
1740        !isLegalICmpImmediate(C1.getSExtValue())) {
1741      // (X & -256) == 256 -> (X >> 8) == 1
1742      if ((Cond == ISD::SETEQ || Cond == ISD::SETNE) &&
1743          N0.getOpcode() == ISD::AND && N0.hasOneUse()) {
1744        if (ConstantSDNode *AndRHS =
1745            dyn_cast<ConstantSDNode>(N0.getOperand(1))) {
1746          const APInt &AndRHSC = AndRHS->getAPIntValue();
1747          if ((-AndRHSC).isPowerOf2() && (AndRHSC & C1) == C1) {
1748            unsigned ShiftBits = AndRHSC.countTrailingZeros();
1749            auto &DL = DAG.getDataLayout();
1750            EVT ShiftTy = DCI.isBeforeLegalize()
1751                              ? getPointerTy(DL)
1752                              : getShiftAmountTy(N0.getValueType(), DL);
1753            EVT CmpTy = N0.getValueType();
1754            SDValue Shift = DAG.getNode(ISD::SRL, dl, CmpTy, N0.getOperand(0),
1755                                        DAG.getConstant(ShiftBits, dl,
1756                                                        ShiftTy));
1757            SDValue CmpRHS = DAG.getConstant(C1.lshr(ShiftBits), dl, CmpTy);
1758            return DAG.getSetCC(dl, VT, Shift, CmpRHS, Cond);
1759          }
1760        }
1761      } else if (Cond == ISD::SETULT || Cond == ISD::SETUGE ||
1762                 Cond == ISD::SETULE || Cond == ISD::SETUGT) {
1763        bool AdjOne = (Cond == ISD::SETULE || Cond == ISD::SETUGT);
1764        // X <  0x100000000 -> (X >> 32) <  1
1765        // X >= 0x100000000 -> (X >> 32) >= 1
1766        // X <= 0x0ffffffff -> (X >> 32) <  1
1767        // X >  0x0ffffffff -> (X >> 32) >= 1
1768        unsigned ShiftBits;
1769        APInt NewC = C1;
1770        ISD::CondCode NewCond = Cond;
1771        if (AdjOne) {
1772          ShiftBits = C1.countTrailingOnes();
1773          NewC = NewC + 1;
1774          NewCond = (Cond == ISD::SETULE) ? ISD::SETULT : ISD::SETUGE;
1775        } else {
1776          ShiftBits = C1.countTrailingZeros();
1777        }
1778        NewC = NewC.lshr(ShiftBits);
1779        if (ShiftBits && NewC.getMinSignedBits() <= 64 &&
1780          isLegalICmpImmediate(NewC.getSExtValue())) {
1781          auto &DL = DAG.getDataLayout();
1782          EVT ShiftTy = DCI.isBeforeLegalize()
1783                            ? getPointerTy(DL)
1784                            : getShiftAmountTy(N0.getValueType(), DL);
1785          EVT CmpTy = N0.getValueType();
1786          SDValue Shift = DAG.getNode(ISD::SRL, dl, CmpTy, N0,
1787                                      DAG.getConstant(ShiftBits, dl, ShiftTy));
1788          SDValue CmpRHS = DAG.getConstant(NewC, dl, CmpTy);
1789          return DAG.getSetCC(dl, VT, Shift, CmpRHS, NewCond);
1790        }
1791      }
1792    }
1793  }
1794
1795  if (isa<ConstantFPSDNode>(N0.getNode())) {
1796    // Constant fold or commute setcc.
1797    SDValue O = DAG.FoldSetCC(VT, N0, N1, Cond, dl);
1798    if (O.getNode()) return O;
1799  } else if (ConstantFPSDNode *CFP = dyn_cast<ConstantFPSDNode>(N1.getNode())) {
1800    // If the RHS of an FP comparison is a constant, simplify it away in
1801    // some cases.
1802    if (CFP->getValueAPF().isNaN()) {
1803      // If an operand is known to be a nan, we can fold it.
1804      switch (ISD::getUnorderedFlavor(Cond)) {
1805      default: llvm_unreachable("Unknown flavor!");
1806      case 0:  // Known false.
1807        return DAG.getConstant(0, dl, VT);
1808      case 1:  // Known true.
1809        return DAG.getConstant(1, dl, VT);
1810      case 2:  // Undefined.
1811        return DAG.getUNDEF(VT);
1812      }
1813    }
1814
1815    // Otherwise, we know the RHS is not a NaN.  Simplify the node to drop the
1816    // constant if knowing that the operand is non-nan is enough.  We prefer to
1817    // have SETO(x,x) instead of SETO(x, 0.0) because this avoids having to
1818    // materialize 0.0.
1819    if (Cond == ISD::SETO || Cond == ISD::SETUO)
1820      return DAG.getSetCC(dl, VT, N0, N0, Cond);
1821
1822    // If the condition is not legal, see if we can find an equivalent one
1823    // which is legal.
1824    if (!isCondCodeLegal(Cond, N0.getSimpleValueType())) {
1825      // If the comparison was an awkward floating-point == or != and one of
1826      // the comparison operands is infinity or negative infinity, convert the
1827      // condition to a less-awkward <= or >=.
1828      if (CFP->getValueAPF().isInfinity()) {
1829        if (CFP->getValueAPF().isNegative()) {
1830          if (Cond == ISD::SETOEQ &&
1831              isCondCodeLegal(ISD::SETOLE, N0.getSimpleValueType()))
1832            return DAG.getSetCC(dl, VT, N0, N1, ISD::SETOLE);
1833          if (Cond == ISD::SETUEQ &&
1834              isCondCodeLegal(ISD::SETOLE, N0.getSimpleValueType()))
1835            return DAG.getSetCC(dl, VT, N0, N1, ISD::SETULE);
1836          if (Cond == ISD::SETUNE &&
1837              isCondCodeLegal(ISD::SETUGT, N0.getSimpleValueType()))
1838            return DAG.getSetCC(dl, VT, N0, N1, ISD::SETUGT);
1839          if (Cond == ISD::SETONE &&
1840              isCondCodeLegal(ISD::SETUGT, N0.getSimpleValueType()))
1841            return DAG.getSetCC(dl, VT, N0, N1, ISD::SETOGT);
1842        } else {
1843          if (Cond == ISD::SETOEQ &&
1844              isCondCodeLegal(ISD::SETOGE, N0.getSimpleValueType()))
1845            return DAG.getSetCC(dl, VT, N0, N1, ISD::SETOGE);
1846          if (Cond == ISD::SETUEQ &&
1847              isCondCodeLegal(ISD::SETOGE, N0.getSimpleValueType()))
1848            return DAG.getSetCC(dl, VT, N0, N1, ISD::SETUGE);
1849          if (Cond == ISD::SETUNE &&
1850              isCondCodeLegal(ISD::SETULT, N0.getSimpleValueType()))
1851            return DAG.getSetCC(dl, VT, N0, N1, ISD::SETULT);
1852          if (Cond == ISD::SETONE &&
1853              isCondCodeLegal(ISD::SETULT, N0.getSimpleValueType()))
1854            return DAG.getSetCC(dl, VT, N0, N1, ISD::SETOLT);
1855        }
1856      }
1857    }
1858  }
1859
1860  if (N0 == N1) {
1861    // The sext(setcc()) => setcc() optimization relies on the appropriate
1862    // constant being emitted.
1863    uint64_t EqVal = 0;
1864    switch (getBooleanContents(N0.getValueType())) {
1865    case UndefinedBooleanContent:
1866    case ZeroOrOneBooleanContent:
1867      EqVal = ISD::isTrueWhenEqual(Cond);
1868      break;
1869    case ZeroOrNegativeOneBooleanContent:
1870      EqVal = ISD::isTrueWhenEqual(Cond) ? -1 : 0;
1871      break;
1872    }
1873
1874    // We can always fold X == X for integer setcc's.
1875    if (N0.getValueType().isInteger()) {
1876      return DAG.getConstant(EqVal, dl, VT);
1877    }
1878    unsigned UOF = ISD::getUnorderedFlavor(Cond);
1879    if (UOF == 2)   // FP operators that are undefined on NaNs.
1880      return DAG.getConstant(EqVal, dl, VT);
1881    if (UOF == unsigned(ISD::isTrueWhenEqual(Cond)))
1882      return DAG.getConstant(EqVal, dl, VT);
1883    // Otherwise, we can't fold it.  However, we can simplify it to SETUO/SETO
1884    // if it is not already.
1885    ISD::CondCode NewCond = UOF == 0 ? ISD::SETO : ISD::SETUO;
1886    if (NewCond != Cond && (DCI.isBeforeLegalizeOps() ||
1887          getCondCodeAction(NewCond, N0.getSimpleValueType()) == Legal))
1888      return DAG.getSetCC(dl, VT, N0, N1, NewCond);
1889  }
1890
1891  if ((Cond == ISD::SETEQ || Cond == ISD::SETNE) &&
1892      N0.getValueType().isInteger()) {
1893    if (N0.getOpcode() == ISD::ADD || N0.getOpcode() == ISD::SUB ||
1894        N0.getOpcode() == ISD::XOR) {
1895      // Simplify (X+Y) == (X+Z) -->  Y == Z
1896      if (N0.getOpcode() == N1.getOpcode()) {
1897        if (N0.getOperand(0) == N1.getOperand(0))
1898          return DAG.getSetCC(dl, VT, N0.getOperand(1), N1.getOperand(1), Cond);
1899        if (N0.getOperand(1) == N1.getOperand(1))
1900          return DAG.getSetCC(dl, VT, N0.getOperand(0), N1.getOperand(0), Cond);
1901        if (DAG.isCommutativeBinOp(N0.getOpcode())) {
1902          // If X op Y == Y op X, try other combinations.
1903          if (N0.getOperand(0) == N1.getOperand(1))
1904            return DAG.getSetCC(dl, VT, N0.getOperand(1), N1.getOperand(0),
1905                                Cond);
1906          if (N0.getOperand(1) == N1.getOperand(0))
1907            return DAG.getSetCC(dl, VT, N0.getOperand(0), N1.getOperand(1),
1908                                Cond);
1909        }
1910      }
1911
1912      // If RHS is a legal immediate value for a compare instruction, we need
1913      // to be careful about increasing register pressure needlessly.
1914      bool LegalRHSImm = false;
1915
1916      if (ConstantSDNode *RHSC = dyn_cast<ConstantSDNode>(N1)) {
1917        if (ConstantSDNode *LHSR = dyn_cast<ConstantSDNode>(N0.getOperand(1))) {
1918          // Turn (X+C1) == C2 --> X == C2-C1
1919          if (N0.getOpcode() == ISD::ADD && N0.getNode()->hasOneUse()) {
1920            return DAG.getSetCC(dl, VT, N0.getOperand(0),
1921                                DAG.getConstant(RHSC->getAPIntValue()-
1922                                                LHSR->getAPIntValue(),
1923                                dl, N0.getValueType()), Cond);
1924          }
1925
1926          // Turn (X^C1) == C2 into X == C1^C2 iff X&~C1 = 0.
1927          if (N0.getOpcode() == ISD::XOR)
1928            // If we know that all of the inverted bits are zero, don't bother
1929            // performing the inversion.
1930            if (DAG.MaskedValueIsZero(N0.getOperand(0), ~LHSR->getAPIntValue()))
1931              return
1932                DAG.getSetCC(dl, VT, N0.getOperand(0),
1933                             DAG.getConstant(LHSR->getAPIntValue() ^
1934                                               RHSC->getAPIntValue(),
1935                                             dl, N0.getValueType()),
1936                             Cond);
1937        }
1938
1939        // Turn (C1-X) == C2 --> X == C1-C2
1940        if (ConstantSDNode *SUBC = dyn_cast<ConstantSDNode>(N0.getOperand(0))) {
1941          if (N0.getOpcode() == ISD::SUB && N0.getNode()->hasOneUse()) {
1942            return
1943              DAG.getSetCC(dl, VT, N0.getOperand(1),
1944                           DAG.getConstant(SUBC->getAPIntValue() -
1945                                             RHSC->getAPIntValue(),
1946                                           dl, N0.getValueType()),
1947                           Cond);
1948          }
1949        }
1950
1951        // Could RHSC fold directly into a compare?
1952        if (RHSC->getValueType(0).getSizeInBits() <= 64)
1953          LegalRHSImm = isLegalICmpImmediate(RHSC->getSExtValue());
1954      }
1955
1956      // Simplify (X+Z) == X -->  Z == 0
1957      // Don't do this if X is an immediate that can fold into a cmp
1958      // instruction and X+Z has other uses. It could be an induction variable
1959      // chain, and the transform would increase register pressure.
1960      if (!LegalRHSImm || N0.getNode()->hasOneUse()) {
1961        if (N0.getOperand(0) == N1)
1962          return DAG.getSetCC(dl, VT, N0.getOperand(1),
1963                              DAG.getConstant(0, dl, N0.getValueType()), Cond);
1964        if (N0.getOperand(1) == N1) {
1965          if (DAG.isCommutativeBinOp(N0.getOpcode()))
1966            return DAG.getSetCC(dl, VT, N0.getOperand(0),
1967                                DAG.getConstant(0, dl, N0.getValueType()),
1968                                Cond);
1969          if (N0.getNode()->hasOneUse()) {
1970            assert(N0.getOpcode() == ISD::SUB && "Unexpected operation!");
1971            auto &DL = DAG.getDataLayout();
1972            // (Z-X) == X  --> Z == X<<1
1973            SDValue SH = DAG.getNode(
1974                ISD::SHL, dl, N1.getValueType(), N1,
1975                DAG.getConstant(1, dl,
1976                                getShiftAmountTy(N1.getValueType(), DL)));
1977            if (!DCI.isCalledByLegalizer())
1978              DCI.AddToWorklist(SH.getNode());
1979            return DAG.getSetCC(dl, VT, N0.getOperand(0), SH, Cond);
1980          }
1981        }
1982      }
1983    }
1984
1985    if (N1.getOpcode() == ISD::ADD || N1.getOpcode() == ISD::SUB ||
1986        N1.getOpcode() == ISD::XOR) {
1987      // Simplify  X == (X+Z) -->  Z == 0
1988      if (N1.getOperand(0) == N0)
1989        return DAG.getSetCC(dl, VT, N1.getOperand(1),
1990                        DAG.getConstant(0, dl, N1.getValueType()), Cond);
1991      if (N1.getOperand(1) == N0) {
1992        if (DAG.isCommutativeBinOp(N1.getOpcode()))
1993          return DAG.getSetCC(dl, VT, N1.getOperand(0),
1994                          DAG.getConstant(0, dl, N1.getValueType()), Cond);
1995        if (N1.getNode()->hasOneUse()) {
1996          assert(N1.getOpcode() == ISD::SUB && "Unexpected operation!");
1997          auto &DL = DAG.getDataLayout();
1998          // X == (Z-X)  --> X<<1 == Z
1999          SDValue SH = DAG.getNode(
2000              ISD::SHL, dl, N1.getValueType(), N0,
2001              DAG.getConstant(1, dl, getShiftAmountTy(N0.getValueType(), DL)));
2002          if (!DCI.isCalledByLegalizer())
2003            DCI.AddToWorklist(SH.getNode());
2004          return DAG.getSetCC(dl, VT, SH, N1.getOperand(0), Cond);
2005        }
2006      }
2007    }
2008
2009    // Simplify x&y == y to x&y != 0 if y has exactly one bit set.
2010    // Note that where y is variable and is known to have at most
2011    // one bit set (for example, if it is z&1) we cannot do this;
2012    // the expressions are not equivalent when y==0.
2013    if (N0.getOpcode() == ISD::AND)
2014      if (N0.getOperand(0) == N1 || N0.getOperand(1) == N1) {
2015        if (ValueHasExactlyOneBitSet(N1, DAG)) {
2016          Cond = ISD::getSetCCInverse(Cond, /*isInteger=*/true);
2017          if (DCI.isBeforeLegalizeOps() ||
2018              isCondCodeLegal(Cond, N0.getSimpleValueType())) {
2019            SDValue Zero = DAG.getConstant(0, dl, N1.getValueType());
2020            return DAG.getSetCC(dl, VT, N0, Zero, Cond);
2021          }
2022        }
2023      }
2024    if (N1.getOpcode() == ISD::AND)
2025      if (N1.getOperand(0) == N0 || N1.getOperand(1) == N0) {
2026        if (ValueHasExactlyOneBitSet(N0, DAG)) {
2027          Cond = ISD::getSetCCInverse(Cond, /*isInteger=*/true);
2028          if (DCI.isBeforeLegalizeOps() ||
2029              isCondCodeLegal(Cond, N1.getSimpleValueType())) {
2030            SDValue Zero = DAG.getConstant(0, dl, N0.getValueType());
2031            return DAG.getSetCC(dl, VT, N1, Zero, Cond);
2032          }
2033        }
2034      }
2035  }
2036
2037  // Fold away ALL boolean setcc's.
2038  SDValue Temp;
2039  if (N0.getValueType() == MVT::i1 && foldBooleans) {
2040    switch (Cond) {
2041    default: llvm_unreachable("Unknown integer setcc!");
2042    case ISD::SETEQ:  // X == Y  -> ~(X^Y)
2043      Temp = DAG.getNode(ISD::XOR, dl, MVT::i1, N0, N1);
2044      N0 = DAG.getNOT(dl, Temp, MVT::i1);
2045      if (!DCI.isCalledByLegalizer())
2046        DCI.AddToWorklist(Temp.getNode());
2047      break;
2048    case ISD::SETNE:  // X != Y   -->  (X^Y)
2049      N0 = DAG.getNode(ISD::XOR, dl, MVT::i1, N0, N1);
2050      break;
2051    case ISD::SETGT:  // X >s Y   -->  X == 0 & Y == 1  -->  ~X & Y
2052    case ISD::SETULT: // X <u Y   -->  X == 0 & Y == 1  -->  ~X & Y
2053      Temp = DAG.getNOT(dl, N0, MVT::i1);
2054      N0 = DAG.getNode(ISD::AND, dl, MVT::i1, N1, Temp);
2055      if (!DCI.isCalledByLegalizer())
2056        DCI.AddToWorklist(Temp.getNode());
2057      break;
2058    case ISD::SETLT:  // X <s Y   --> X == 1 & Y == 0  -->  ~Y & X
2059    case ISD::SETUGT: // X >u Y   --> X == 1 & Y == 0  -->  ~Y & X
2060      Temp = DAG.getNOT(dl, N1, MVT::i1);
2061      N0 = DAG.getNode(ISD::AND, dl, MVT::i1, N0, Temp);
2062      if (!DCI.isCalledByLegalizer())
2063        DCI.AddToWorklist(Temp.getNode());
2064      break;
2065    case ISD::SETULE: // X <=u Y  --> X == 0 | Y == 1  -->  ~X | Y
2066    case ISD::SETGE:  // X >=s Y  --> X == 0 | Y == 1  -->  ~X | Y
2067      Temp = DAG.getNOT(dl, N0, MVT::i1);
2068      N0 = DAG.getNode(ISD::OR, dl, MVT::i1, N1, Temp);
2069      if (!DCI.isCalledByLegalizer())
2070        DCI.AddToWorklist(Temp.getNode());
2071      break;
2072    case ISD::SETUGE: // X >=u Y  --> X == 1 | Y == 0  -->  ~Y | X
2073    case ISD::SETLE:  // X <=s Y  --> X == 1 | Y == 0  -->  ~Y | X
2074      Temp = DAG.getNOT(dl, N1, MVT::i1);
2075      N0 = DAG.getNode(ISD::OR, dl, MVT::i1, N0, Temp);
2076      break;
2077    }
2078    if (VT != MVT::i1) {
2079      if (!DCI.isCalledByLegalizer())
2080        DCI.AddToWorklist(N0.getNode());
2081      // FIXME: If running after legalize, we probably can't do this.
2082      N0 = DAG.getNode(ISD::ZERO_EXTEND, dl, VT, N0);
2083    }
2084    return N0;
2085  }
2086
2087  // Could not fold it.
2088  return SDValue();
2089}
2090
2091/// isGAPlusOffset - Returns true (and the GlobalValue and the offset) if the
2092/// node is a GlobalAddress + offset.
2093bool TargetLowering::isGAPlusOffset(SDNode *N, const GlobalValue *&GA,
2094                                    int64_t &Offset) const {
2095  if (isa<GlobalAddressSDNode>(N)) {
2096    GlobalAddressSDNode *GASD = cast<GlobalAddressSDNode>(N);
2097    GA = GASD->getGlobal();
2098    Offset += GASD->getOffset();
2099    return true;
2100  }
2101
2102  if (N->getOpcode() == ISD::ADD) {
2103    SDValue N1 = N->getOperand(0);
2104    SDValue N2 = N->getOperand(1);
2105    if (isGAPlusOffset(N1.getNode(), GA, Offset)) {
2106      ConstantSDNode *V = dyn_cast<ConstantSDNode>(N2);
2107      if (V) {
2108        Offset += V->getSExtValue();
2109        return true;
2110      }
2111    } else if (isGAPlusOffset(N2.getNode(), GA, Offset)) {
2112      ConstantSDNode *V = dyn_cast<ConstantSDNode>(N1);
2113      if (V) {
2114        Offset += V->getSExtValue();
2115        return true;
2116      }
2117    }
2118  }
2119
2120  return false;
2121}
2122
2123SDValue TargetLowering::PerformDAGCombine(SDNode *N,
2124                                          DAGCombinerInfo &DCI) const {
2125  // Default implementation: no optimization.
2126  return SDValue();
2127}
2128
2129//===----------------------------------------------------------------------===//
2130//  Inline Assembler Implementation Methods
2131//===----------------------------------------------------------------------===//
2132
2133TargetLowering::ConstraintType
2134TargetLowering::getConstraintType(StringRef Constraint) const {
2135  unsigned S = Constraint.size();
2136
2137  if (S == 1) {
2138    switch (Constraint[0]) {
2139    default: break;
2140    case 'r': return C_RegisterClass;
2141    case 'm':    // memory
2142    case 'o':    // offsetable
2143    case 'V':    // not offsetable
2144      return C_Memory;
2145    case 'i':    // Simple Integer or Relocatable Constant
2146    case 'n':    // Simple Integer
2147    case 'E':    // Floating Point Constant
2148    case 'F':    // Floating Point Constant
2149    case 's':    // Relocatable Constant
2150    case 'p':    // Address.
2151    case 'X':    // Allow ANY value.
2152    case 'I':    // Target registers.
2153    case 'J':
2154    case 'K':
2155    case 'L':
2156    case 'M':
2157    case 'N':
2158    case 'O':
2159    case 'P':
2160    case '<':
2161    case '>':
2162      return C_Other;
2163    }
2164  }
2165
2166  if (S > 1 && Constraint[0] == '{' && Constraint[S-1] == '}') {
2167    if (S == 8 && Constraint.substr(1, 6) == "memory") // "{memory}"
2168      return C_Memory;
2169    return C_Register;
2170  }
2171  return C_Unknown;
2172}
2173
2174/// LowerXConstraint - try to replace an X constraint, which matches anything,
2175/// with another that has more specific requirements based on the type of the
2176/// corresponding operand.
2177const char *TargetLowering::LowerXConstraint(EVT ConstraintVT) const{
2178  if (ConstraintVT.isInteger())
2179    return "r";
2180  if (ConstraintVT.isFloatingPoint())
2181    return "f";      // works for many targets
2182  return nullptr;
2183}
2184
2185/// LowerAsmOperandForConstraint - Lower the specified operand into the Ops
2186/// vector.  If it is invalid, don't add anything to Ops.
2187void TargetLowering::LowerAsmOperandForConstraint(SDValue Op,
2188                                                  std::string &Constraint,
2189                                                  std::vector<SDValue> &Ops,
2190                                                  SelectionDAG &DAG) const {
2191
2192  if (Constraint.length() > 1) return;
2193
2194  char ConstraintLetter = Constraint[0];
2195  switch (ConstraintLetter) {
2196  default: break;
2197  case 'X':     // Allows any operand; labels (basic block) use this.
2198    if (Op.getOpcode() == ISD::BasicBlock) {
2199      Ops.push_back(Op);
2200      return;
2201    }
2202    // fall through
2203  case 'i':    // Simple Integer or Relocatable Constant
2204  case 'n':    // Simple Integer
2205  case 's': {  // Relocatable Constant
2206    // These operands are interested in values of the form (GV+C), where C may
2207    // be folded in as an offset of GV, or it may be explicitly added.  Also, it
2208    // is possible and fine if either GV or C are missing.
2209    ConstantSDNode *C = dyn_cast<ConstantSDNode>(Op);
2210    GlobalAddressSDNode *GA = dyn_cast<GlobalAddressSDNode>(Op);
2211
2212    // If we have "(add GV, C)", pull out GV/C
2213    if (Op.getOpcode() == ISD::ADD) {
2214      C = dyn_cast<ConstantSDNode>(Op.getOperand(1));
2215      GA = dyn_cast<GlobalAddressSDNode>(Op.getOperand(0));
2216      if (!C || !GA) {
2217        C = dyn_cast<ConstantSDNode>(Op.getOperand(0));
2218        GA = dyn_cast<GlobalAddressSDNode>(Op.getOperand(1));
2219      }
2220      if (!C || !GA)
2221        C = nullptr, GA = nullptr;
2222    }
2223
2224    // If we find a valid operand, map to the TargetXXX version so that the
2225    // value itself doesn't get selected.
2226    if (GA) {   // Either &GV   or   &GV+C
2227      if (ConstraintLetter != 'n') {
2228        int64_t Offs = GA->getOffset();
2229        if (C) Offs += C->getZExtValue();
2230        Ops.push_back(DAG.getTargetGlobalAddress(GA->getGlobal(),
2231                                                 C ? SDLoc(C) : SDLoc(),
2232                                                 Op.getValueType(), Offs));
2233      }
2234      return;
2235    }
2236    if (C) {   // just C, no GV.
2237      // Simple constants are not allowed for 's'.
2238      if (ConstraintLetter != 's') {
2239        // gcc prints these as sign extended.  Sign extend value to 64 bits
2240        // now; without this it would get ZExt'd later in
2241        // ScheduleDAGSDNodes::EmitNode, which is very generic.
2242        Ops.push_back(DAG.getTargetConstant(C->getAPIntValue().getSExtValue(),
2243                                            SDLoc(C), MVT::i64));
2244      }
2245      return;
2246    }
2247    break;
2248  }
2249  }
2250}
2251
2252std::pair<unsigned, const TargetRegisterClass *>
2253TargetLowering::getRegForInlineAsmConstraint(const TargetRegisterInfo *RI,
2254                                             StringRef Constraint,
2255                                             MVT VT) const {
2256  if (Constraint.empty() || Constraint[0] != '{')
2257    return std::make_pair(0u, static_cast<TargetRegisterClass*>(nullptr));
2258  assert(*(Constraint.end()-1) == '}' && "Not a brace enclosed constraint?");
2259
2260  // Remove the braces from around the name.
2261  StringRef RegName(Constraint.data()+1, Constraint.size()-2);
2262
2263  std::pair<unsigned, const TargetRegisterClass*> R =
2264    std::make_pair(0u, static_cast<const TargetRegisterClass*>(nullptr));
2265
2266  // Figure out which register class contains this reg.
2267  for (TargetRegisterInfo::regclass_iterator RCI = RI->regclass_begin(),
2268       E = RI->regclass_end(); RCI != E; ++RCI) {
2269    const TargetRegisterClass *RC = *RCI;
2270
2271    // If none of the value types for this register class are valid, we
2272    // can't use it.  For example, 64-bit reg classes on 32-bit targets.
2273    if (!isLegalRC(RC))
2274      continue;
2275
2276    for (TargetRegisterClass::iterator I = RC->begin(), E = RC->end();
2277         I != E; ++I) {
2278      if (RegName.equals_lower(RI->getName(*I))) {
2279        std::pair<unsigned, const TargetRegisterClass*> S =
2280          std::make_pair(*I, RC);
2281
2282        // If this register class has the requested value type, return it,
2283        // otherwise keep searching and return the first class found
2284        // if no other is found which explicitly has the requested type.
2285        if (RC->hasType(VT))
2286          return S;
2287        else if (!R.second)
2288          R = S;
2289      }
2290    }
2291  }
2292
2293  return R;
2294}
2295
2296//===----------------------------------------------------------------------===//
2297// Constraint Selection.
2298
2299/// isMatchingInputConstraint - Return true of this is an input operand that is
2300/// a matching constraint like "4".
2301bool TargetLowering::AsmOperandInfo::isMatchingInputConstraint() const {
2302  assert(!ConstraintCode.empty() && "No known constraint!");
2303  return isdigit(static_cast<unsigned char>(ConstraintCode[0]));
2304}
2305
2306/// getMatchedOperand - If this is an input matching constraint, this method
2307/// returns the output operand it matches.
2308unsigned TargetLowering::AsmOperandInfo::getMatchedOperand() const {
2309  assert(!ConstraintCode.empty() && "No known constraint!");
2310  return atoi(ConstraintCode.c_str());
2311}
2312
2313/// ParseConstraints - Split up the constraint string from the inline
2314/// assembly value into the specific constraints and their prefixes,
2315/// and also tie in the associated operand values.
2316/// If this returns an empty vector, and if the constraint string itself
2317/// isn't empty, there was an error parsing.
2318TargetLowering::AsmOperandInfoVector
2319TargetLowering::ParseConstraints(const DataLayout &DL,
2320                                 const TargetRegisterInfo *TRI,
2321                                 ImmutableCallSite CS) const {
2322  /// ConstraintOperands - Information about all of the constraints.
2323  AsmOperandInfoVector ConstraintOperands;
2324  const InlineAsm *IA = cast<InlineAsm>(CS.getCalledValue());
2325  unsigned maCount = 0; // Largest number of multiple alternative constraints.
2326
2327  // Do a prepass over the constraints, canonicalizing them, and building up the
2328  // ConstraintOperands list.
2329  unsigned ArgNo = 0;   // ArgNo - The argument of the CallInst.
2330  unsigned ResNo = 0;   // ResNo - The result number of the next output.
2331
2332  for (InlineAsm::ConstraintInfo &CI : IA->ParseConstraints()) {
2333    ConstraintOperands.emplace_back(std::move(CI));
2334    AsmOperandInfo &OpInfo = ConstraintOperands.back();
2335
2336    // Update multiple alternative constraint count.
2337    if (OpInfo.multipleAlternatives.size() > maCount)
2338      maCount = OpInfo.multipleAlternatives.size();
2339
2340    OpInfo.ConstraintVT = MVT::Other;
2341
2342    // Compute the value type for each operand.
2343    switch (OpInfo.Type) {
2344    case InlineAsm::isOutput:
2345      // Indirect outputs just consume an argument.
2346      if (OpInfo.isIndirect) {
2347        OpInfo.CallOperandVal = const_cast<Value *>(CS.getArgument(ArgNo++));
2348        break;
2349      }
2350
2351      // The return value of the call is this value.  As such, there is no
2352      // corresponding argument.
2353      assert(!CS.getType()->isVoidTy() &&
2354             "Bad inline asm!");
2355      if (StructType *STy = dyn_cast<StructType>(CS.getType())) {
2356        OpInfo.ConstraintVT =
2357            getSimpleValueType(DL, STy->getElementType(ResNo));
2358      } else {
2359        assert(ResNo == 0 && "Asm only has one result!");
2360        OpInfo.ConstraintVT = getSimpleValueType(DL, CS.getType());
2361      }
2362      ++ResNo;
2363      break;
2364    case InlineAsm::isInput:
2365      OpInfo.CallOperandVal = const_cast<Value *>(CS.getArgument(ArgNo++));
2366      break;
2367    case InlineAsm::isClobber:
2368      // Nothing to do.
2369      break;
2370    }
2371
2372    if (OpInfo.CallOperandVal) {
2373      llvm::Type *OpTy = OpInfo.CallOperandVal->getType();
2374      if (OpInfo.isIndirect) {
2375        llvm::PointerType *PtrTy = dyn_cast<PointerType>(OpTy);
2376        if (!PtrTy)
2377          report_fatal_error("Indirect operand for inline asm not a pointer!");
2378        OpTy = PtrTy->getElementType();
2379      }
2380
2381      // Look for vector wrapped in a struct. e.g. { <16 x i8> }.
2382      if (StructType *STy = dyn_cast<StructType>(OpTy))
2383        if (STy->getNumElements() == 1)
2384          OpTy = STy->getElementType(0);
2385
2386      // If OpTy is not a single value, it may be a struct/union that we
2387      // can tile with integers.
2388      if (!OpTy->isSingleValueType() && OpTy->isSized()) {
2389        unsigned BitSize = DL.getTypeSizeInBits(OpTy);
2390        switch (BitSize) {
2391        default: break;
2392        case 1:
2393        case 8:
2394        case 16:
2395        case 32:
2396        case 64:
2397        case 128:
2398          OpInfo.ConstraintVT =
2399            MVT::getVT(IntegerType::get(OpTy->getContext(), BitSize), true);
2400          break;
2401        }
2402      } else if (PointerType *PT = dyn_cast<PointerType>(OpTy)) {
2403        unsigned PtrSize = DL.getPointerSizeInBits(PT->getAddressSpace());
2404        OpInfo.ConstraintVT = MVT::getIntegerVT(PtrSize);
2405      } else {
2406        OpInfo.ConstraintVT = MVT::getVT(OpTy, true);
2407      }
2408    }
2409  }
2410
2411  // If we have multiple alternative constraints, select the best alternative.
2412  if (!ConstraintOperands.empty()) {
2413    if (maCount) {
2414      unsigned bestMAIndex = 0;
2415      int bestWeight = -1;
2416      // weight:  -1 = invalid match, and 0 = so-so match to 5 = good match.
2417      int weight = -1;
2418      unsigned maIndex;
2419      // Compute the sums of the weights for each alternative, keeping track
2420      // of the best (highest weight) one so far.
2421      for (maIndex = 0; maIndex < maCount; ++maIndex) {
2422        int weightSum = 0;
2423        for (unsigned cIndex = 0, eIndex = ConstraintOperands.size();
2424            cIndex != eIndex; ++cIndex) {
2425          AsmOperandInfo& OpInfo = ConstraintOperands[cIndex];
2426          if (OpInfo.Type == InlineAsm::isClobber)
2427            continue;
2428
2429          // If this is an output operand with a matching input operand,
2430          // look up the matching input. If their types mismatch, e.g. one
2431          // is an integer, the other is floating point, or their sizes are
2432          // different, flag it as an maCantMatch.
2433          if (OpInfo.hasMatchingInput()) {
2434            AsmOperandInfo &Input = ConstraintOperands[OpInfo.MatchingInput];
2435            if (OpInfo.ConstraintVT != Input.ConstraintVT) {
2436              if ((OpInfo.ConstraintVT.isInteger() !=
2437                   Input.ConstraintVT.isInteger()) ||
2438                  (OpInfo.ConstraintVT.getSizeInBits() !=
2439                   Input.ConstraintVT.getSizeInBits())) {
2440                weightSum = -1;  // Can't match.
2441                break;
2442              }
2443            }
2444          }
2445          weight = getMultipleConstraintMatchWeight(OpInfo, maIndex);
2446          if (weight == -1) {
2447            weightSum = -1;
2448            break;
2449          }
2450          weightSum += weight;
2451        }
2452        // Update best.
2453        if (weightSum > bestWeight) {
2454          bestWeight = weightSum;
2455          bestMAIndex = maIndex;
2456        }
2457      }
2458
2459      // Now select chosen alternative in each constraint.
2460      for (unsigned cIndex = 0, eIndex = ConstraintOperands.size();
2461          cIndex != eIndex; ++cIndex) {
2462        AsmOperandInfo& cInfo = ConstraintOperands[cIndex];
2463        if (cInfo.Type == InlineAsm::isClobber)
2464          continue;
2465        cInfo.selectAlternative(bestMAIndex);
2466      }
2467    }
2468  }
2469
2470  // Check and hook up tied operands, choose constraint code to use.
2471  for (unsigned cIndex = 0, eIndex = ConstraintOperands.size();
2472      cIndex != eIndex; ++cIndex) {
2473    AsmOperandInfo& OpInfo = ConstraintOperands[cIndex];
2474
2475    // If this is an output operand with a matching input operand, look up the
2476    // matching input. If their types mismatch, e.g. one is an integer, the
2477    // other is floating point, or their sizes are different, flag it as an
2478    // error.
2479    if (OpInfo.hasMatchingInput()) {
2480      AsmOperandInfo &Input = ConstraintOperands[OpInfo.MatchingInput];
2481
2482      if (OpInfo.ConstraintVT != Input.ConstraintVT) {
2483        std::pair<unsigned, const TargetRegisterClass *> MatchRC =
2484            getRegForInlineAsmConstraint(TRI, OpInfo.ConstraintCode,
2485                                         OpInfo.ConstraintVT);
2486        std::pair<unsigned, const TargetRegisterClass *> InputRC =
2487            getRegForInlineAsmConstraint(TRI, Input.ConstraintCode,
2488                                         Input.ConstraintVT);
2489        if ((OpInfo.ConstraintVT.isInteger() !=
2490             Input.ConstraintVT.isInteger()) ||
2491            (MatchRC.second != InputRC.second)) {
2492          report_fatal_error("Unsupported asm: input constraint"
2493                             " with a matching output constraint of"
2494                             " incompatible type!");
2495        }
2496      }
2497    }
2498  }
2499
2500  return ConstraintOperands;
2501}
2502
2503/// getConstraintGenerality - Return an integer indicating how general CT
2504/// is.
2505static unsigned getConstraintGenerality(TargetLowering::ConstraintType CT) {
2506  switch (CT) {
2507  case TargetLowering::C_Other:
2508  case TargetLowering::C_Unknown:
2509    return 0;
2510  case TargetLowering::C_Register:
2511    return 1;
2512  case TargetLowering::C_RegisterClass:
2513    return 2;
2514  case TargetLowering::C_Memory:
2515    return 3;
2516  }
2517  llvm_unreachable("Invalid constraint type");
2518}
2519
2520/// Examine constraint type and operand type and determine a weight value.
2521/// This object must already have been set up with the operand type
2522/// and the current alternative constraint selected.
2523TargetLowering::ConstraintWeight
2524  TargetLowering::getMultipleConstraintMatchWeight(
2525    AsmOperandInfo &info, int maIndex) const {
2526  InlineAsm::ConstraintCodeVector *rCodes;
2527  if (maIndex >= (int)info.multipleAlternatives.size())
2528    rCodes = &info.Codes;
2529  else
2530    rCodes = &info.multipleAlternatives[maIndex].Codes;
2531  ConstraintWeight BestWeight = CW_Invalid;
2532
2533  // Loop over the options, keeping track of the most general one.
2534  for (unsigned i = 0, e = rCodes->size(); i != e; ++i) {
2535    ConstraintWeight weight =
2536      getSingleConstraintMatchWeight(info, (*rCodes)[i].c_str());
2537    if (weight > BestWeight)
2538      BestWeight = weight;
2539  }
2540
2541  return BestWeight;
2542}
2543
2544/// Examine constraint type and operand type and determine a weight value.
2545/// This object must already have been set up with the operand type
2546/// and the current alternative constraint selected.
2547TargetLowering::ConstraintWeight
2548  TargetLowering::getSingleConstraintMatchWeight(
2549    AsmOperandInfo &info, const char *constraint) const {
2550  ConstraintWeight weight = CW_Invalid;
2551  Value *CallOperandVal = info.CallOperandVal;
2552    // If we don't have a value, we can't do a match,
2553    // but allow it at the lowest weight.
2554  if (!CallOperandVal)
2555    return CW_Default;
2556  // Look at the constraint type.
2557  switch (*constraint) {
2558    case 'i': // immediate integer.
2559    case 'n': // immediate integer with a known value.
2560      if (isa<ConstantInt>(CallOperandVal))
2561        weight = CW_Constant;
2562      break;
2563    case 's': // non-explicit intregal immediate.
2564      if (isa<GlobalValue>(CallOperandVal))
2565        weight = CW_Constant;
2566      break;
2567    case 'E': // immediate float if host format.
2568    case 'F': // immediate float.
2569      if (isa<ConstantFP>(CallOperandVal))
2570        weight = CW_Constant;
2571      break;
2572    case '<': // memory operand with autodecrement.
2573    case '>': // memory operand with autoincrement.
2574    case 'm': // memory operand.
2575    case 'o': // offsettable memory operand
2576    case 'V': // non-offsettable memory operand
2577      weight = CW_Memory;
2578      break;
2579    case 'r': // general register.
2580    case 'g': // general register, memory operand or immediate integer.
2581              // note: Clang converts "g" to "imr".
2582      if (CallOperandVal->getType()->isIntegerTy())
2583        weight = CW_Register;
2584      break;
2585    case 'X': // any operand.
2586    default:
2587      weight = CW_Default;
2588      break;
2589  }
2590  return weight;
2591}
2592
2593/// ChooseConstraint - If there are multiple different constraints that we
2594/// could pick for this operand (e.g. "imr") try to pick the 'best' one.
2595/// This is somewhat tricky: constraints fall into four classes:
2596///    Other         -> immediates and magic values
2597///    Register      -> one specific register
2598///    RegisterClass -> a group of regs
2599///    Memory        -> memory
2600/// Ideally, we would pick the most specific constraint possible: if we have
2601/// something that fits into a register, we would pick it.  The problem here
2602/// is that if we have something that could either be in a register or in
2603/// memory that use of the register could cause selection of *other*
2604/// operands to fail: they might only succeed if we pick memory.  Because of
2605/// this the heuristic we use is:
2606///
2607///  1) If there is an 'other' constraint, and if the operand is valid for
2608///     that constraint, use it.  This makes us take advantage of 'i'
2609///     constraints when available.
2610///  2) Otherwise, pick the most general constraint present.  This prefers
2611///     'm' over 'r', for example.
2612///
2613static void ChooseConstraint(TargetLowering::AsmOperandInfo &OpInfo,
2614                             const TargetLowering &TLI,
2615                             SDValue Op, SelectionDAG *DAG) {
2616  assert(OpInfo.Codes.size() > 1 && "Doesn't have multiple constraint options");
2617  unsigned BestIdx = 0;
2618  TargetLowering::ConstraintType BestType = TargetLowering::C_Unknown;
2619  int BestGenerality = -1;
2620
2621  // Loop over the options, keeping track of the most general one.
2622  for (unsigned i = 0, e = OpInfo.Codes.size(); i != e; ++i) {
2623    TargetLowering::ConstraintType CType =
2624      TLI.getConstraintType(OpInfo.Codes[i]);
2625
2626    // If this is an 'other' constraint, see if the operand is valid for it.
2627    // For example, on X86 we might have an 'rI' constraint.  If the operand
2628    // is an integer in the range [0..31] we want to use I (saving a load
2629    // of a register), otherwise we must use 'r'.
2630    if (CType == TargetLowering::C_Other && Op.getNode()) {
2631      assert(OpInfo.Codes[i].size() == 1 &&
2632             "Unhandled multi-letter 'other' constraint");
2633      std::vector<SDValue> ResultOps;
2634      TLI.LowerAsmOperandForConstraint(Op, OpInfo.Codes[i],
2635                                       ResultOps, *DAG);
2636      if (!ResultOps.empty()) {
2637        BestType = CType;
2638        BestIdx = i;
2639        break;
2640      }
2641    }
2642
2643    // Things with matching constraints can only be registers, per gcc
2644    // documentation.  This mainly affects "g" constraints.
2645    if (CType == TargetLowering::C_Memory && OpInfo.hasMatchingInput())
2646      continue;
2647
2648    // This constraint letter is more general than the previous one, use it.
2649    int Generality = getConstraintGenerality(CType);
2650    if (Generality > BestGenerality) {
2651      BestType = CType;
2652      BestIdx = i;
2653      BestGenerality = Generality;
2654    }
2655  }
2656
2657  OpInfo.ConstraintCode = OpInfo.Codes[BestIdx];
2658  OpInfo.ConstraintType = BestType;
2659}
2660
2661/// ComputeConstraintToUse - Determines the constraint code and constraint
2662/// type to use for the specific AsmOperandInfo, setting
2663/// OpInfo.ConstraintCode and OpInfo.ConstraintType.
2664void TargetLowering::ComputeConstraintToUse(AsmOperandInfo &OpInfo,
2665                                            SDValue Op,
2666                                            SelectionDAG *DAG) const {
2667  assert(!OpInfo.Codes.empty() && "Must have at least one constraint");
2668
2669  // Single-letter constraints ('r') are very common.
2670  if (OpInfo.Codes.size() == 1) {
2671    OpInfo.ConstraintCode = OpInfo.Codes[0];
2672    OpInfo.ConstraintType = getConstraintType(OpInfo.ConstraintCode);
2673  } else {
2674    ChooseConstraint(OpInfo, *this, Op, DAG);
2675  }
2676
2677  // 'X' matches anything.
2678  if (OpInfo.ConstraintCode == "X" && OpInfo.CallOperandVal) {
2679    // Labels and constants are handled elsewhere ('X' is the only thing
2680    // that matches labels).  For Functions, the type here is the type of
2681    // the result, which is not what we want to look at; leave them alone.
2682    Value *v = OpInfo.CallOperandVal;
2683    if (isa<BasicBlock>(v) || isa<ConstantInt>(v) || isa<Function>(v)) {
2684      OpInfo.CallOperandVal = v;
2685      return;
2686    }
2687
2688    // Otherwise, try to resolve it to something we know about by looking at
2689    // the actual operand type.
2690    if (const char *Repl = LowerXConstraint(OpInfo.ConstraintVT)) {
2691      OpInfo.ConstraintCode = Repl;
2692      OpInfo.ConstraintType = getConstraintType(OpInfo.ConstraintCode);
2693    }
2694  }
2695}
2696
2697/// \brief Given an exact SDIV by a constant, create a multiplication
2698/// with the multiplicative inverse of the constant.
2699static SDValue BuildExactSDIV(const TargetLowering &TLI, SDValue Op1, APInt d,
2700                              SDLoc dl, SelectionDAG &DAG,
2701                              std::vector<SDNode *> &Created) {
2702  assert(d != 0 && "Division by zero!");
2703
2704  // Shift the value upfront if it is even, so the LSB is one.
2705  unsigned ShAmt = d.countTrailingZeros();
2706  if (ShAmt) {
2707    // TODO: For UDIV use SRL instead of SRA.
2708    SDValue Amt =
2709        DAG.getConstant(ShAmt, dl, TLI.getShiftAmountTy(Op1.getValueType(),
2710                                                        DAG.getDataLayout()));
2711    SDNodeFlags Flags;
2712    Flags.setExact(true);
2713    Op1 = DAG.getNode(ISD::SRA, dl, Op1.getValueType(), Op1, Amt, &Flags);
2714    Created.push_back(Op1.getNode());
2715    d = d.ashr(ShAmt);
2716  }
2717
2718  // Calculate the multiplicative inverse, using Newton's method.
2719  APInt t, xn = d;
2720  while ((t = d*xn) != 1)
2721    xn *= APInt(d.getBitWidth(), 2) - t;
2722
2723  SDValue Op2 = DAG.getConstant(xn, dl, Op1.getValueType());
2724  SDValue Mul = DAG.getNode(ISD::MUL, dl, Op1.getValueType(), Op1, Op2);
2725  Created.push_back(Mul.getNode());
2726  return Mul;
2727}
2728
2729SDValue TargetLowering::BuildSDIVPow2(SDNode *N, const APInt &Divisor,
2730                                      SelectionDAG &DAG,
2731                                      std::vector<SDNode *> *Created) const {
2732  AttributeSet Attr = DAG.getMachineFunction().getFunction()->getAttributes();
2733  const TargetLowering &TLI = DAG.getTargetLoweringInfo();
2734  if (TLI.isIntDivCheap(N->getValueType(0), Attr))
2735    return SDValue(N,0); // Lower SDIV as SDIV
2736  return SDValue();
2737}
2738
2739/// \brief Given an ISD::SDIV node expressing a divide by constant,
2740/// return a DAG expression to select that will generate the same value by
2741/// multiplying by a magic number.
2742/// Ref: "Hacker's Delight" or "The PowerPC Compiler Writer's Guide".
2743SDValue TargetLowering::BuildSDIV(SDNode *N, const APInt &Divisor,
2744                                  SelectionDAG &DAG, bool IsAfterLegalization,
2745                                  std::vector<SDNode *> *Created) const {
2746  assert(Created && "No vector to hold sdiv ops.");
2747
2748  EVT VT = N->getValueType(0);
2749  SDLoc dl(N);
2750
2751  // Check to see if we can do this.
2752  // FIXME: We should be more aggressive here.
2753  if (!isTypeLegal(VT))
2754    return SDValue();
2755
2756  // If the sdiv has an 'exact' bit we can use a simpler lowering.
2757  if (cast<BinaryWithFlagsSDNode>(N)->Flags.hasExact())
2758    return BuildExactSDIV(*this, N->getOperand(0), Divisor, dl, DAG, *Created);
2759
2760  APInt::ms magics = Divisor.magic();
2761
2762  // Multiply the numerator (operand 0) by the magic value
2763  // FIXME: We should support doing a MUL in a wider type
2764  SDValue Q;
2765  if (IsAfterLegalization ? isOperationLegal(ISD::MULHS, VT) :
2766                            isOperationLegalOrCustom(ISD::MULHS, VT))
2767    Q = DAG.getNode(ISD::MULHS, dl, VT, N->getOperand(0),
2768                    DAG.getConstant(magics.m, dl, VT));
2769  else if (IsAfterLegalization ? isOperationLegal(ISD::SMUL_LOHI, VT) :
2770                                 isOperationLegalOrCustom(ISD::SMUL_LOHI, VT))
2771    Q = SDValue(DAG.getNode(ISD::SMUL_LOHI, dl, DAG.getVTList(VT, VT),
2772                              N->getOperand(0),
2773                              DAG.getConstant(magics.m, dl, VT)).getNode(), 1);
2774  else
2775    return SDValue();       // No mulhs or equvialent
2776  // If d > 0 and m < 0, add the numerator
2777  if (Divisor.isStrictlyPositive() && magics.m.isNegative()) {
2778    Q = DAG.getNode(ISD::ADD, dl, VT, Q, N->getOperand(0));
2779    Created->push_back(Q.getNode());
2780  }
2781  // If d < 0 and m > 0, subtract the numerator.
2782  if (Divisor.isNegative() && magics.m.isStrictlyPositive()) {
2783    Q = DAG.getNode(ISD::SUB, dl, VT, Q, N->getOperand(0));
2784    Created->push_back(Q.getNode());
2785  }
2786  auto &DL = DAG.getDataLayout();
2787  // Shift right algebraic if shift value is nonzero
2788  if (magics.s > 0) {
2789    Q = DAG.getNode(
2790        ISD::SRA, dl, VT, Q,
2791        DAG.getConstant(magics.s, dl, getShiftAmountTy(Q.getValueType(), DL)));
2792    Created->push_back(Q.getNode());
2793  }
2794  // Extract the sign bit and add it to the quotient
2795  SDValue T =
2796      DAG.getNode(ISD::SRL, dl, VT, Q,
2797                  DAG.getConstant(VT.getScalarSizeInBits() - 1, dl,
2798                                  getShiftAmountTy(Q.getValueType(), DL)));
2799  Created->push_back(T.getNode());
2800  return DAG.getNode(ISD::ADD, dl, VT, Q, T);
2801}
2802
2803/// \brief Given an ISD::UDIV node expressing a divide by constant,
2804/// return a DAG expression to select that will generate the same value by
2805/// multiplying by a magic number.
2806/// Ref: "Hacker's Delight" or "The PowerPC Compiler Writer's Guide".
2807SDValue TargetLowering::BuildUDIV(SDNode *N, const APInt &Divisor,
2808                                  SelectionDAG &DAG, bool IsAfterLegalization,
2809                                  std::vector<SDNode *> *Created) const {
2810  assert(Created && "No vector to hold udiv ops.");
2811
2812  EVT VT = N->getValueType(0);
2813  SDLoc dl(N);
2814  auto &DL = DAG.getDataLayout();
2815
2816  // Check to see if we can do this.
2817  // FIXME: We should be more aggressive here.
2818  if (!isTypeLegal(VT))
2819    return SDValue();
2820
2821  // FIXME: We should use a narrower constant when the upper
2822  // bits are known to be zero.
2823  APInt::mu magics = Divisor.magicu();
2824
2825  SDValue Q = N->getOperand(0);
2826
2827  // If the divisor is even, we can avoid using the expensive fixup by shifting
2828  // the divided value upfront.
2829  if (magics.a != 0 && !Divisor[0]) {
2830    unsigned Shift = Divisor.countTrailingZeros();
2831    Q = DAG.getNode(
2832        ISD::SRL, dl, VT, Q,
2833        DAG.getConstant(Shift, dl, getShiftAmountTy(Q.getValueType(), DL)));
2834    Created->push_back(Q.getNode());
2835
2836    // Get magic number for the shifted divisor.
2837    magics = Divisor.lshr(Shift).magicu(Shift);
2838    assert(magics.a == 0 && "Should use cheap fixup now");
2839  }
2840
2841  // Multiply the numerator (operand 0) by the magic value
2842  // FIXME: We should support doing a MUL in a wider type
2843  if (IsAfterLegalization ? isOperationLegal(ISD::MULHU, VT) :
2844                            isOperationLegalOrCustom(ISD::MULHU, VT))
2845    Q = DAG.getNode(ISD::MULHU, dl, VT, Q, DAG.getConstant(magics.m, dl, VT));
2846  else if (IsAfterLegalization ? isOperationLegal(ISD::UMUL_LOHI, VT) :
2847                                 isOperationLegalOrCustom(ISD::UMUL_LOHI, VT))
2848    Q = SDValue(DAG.getNode(ISD::UMUL_LOHI, dl, DAG.getVTList(VT, VT), Q,
2849                            DAG.getConstant(magics.m, dl, VT)).getNode(), 1);
2850  else
2851    return SDValue();       // No mulhu or equvialent
2852
2853  Created->push_back(Q.getNode());
2854
2855  if (magics.a == 0) {
2856    assert(magics.s < Divisor.getBitWidth() &&
2857           "We shouldn't generate an undefined shift!");
2858    return DAG.getNode(
2859        ISD::SRL, dl, VT, Q,
2860        DAG.getConstant(magics.s, dl, getShiftAmountTy(Q.getValueType(), DL)));
2861  } else {
2862    SDValue NPQ = DAG.getNode(ISD::SUB, dl, VT, N->getOperand(0), Q);
2863    Created->push_back(NPQ.getNode());
2864    NPQ = DAG.getNode(
2865        ISD::SRL, dl, VT, NPQ,
2866        DAG.getConstant(1, dl, getShiftAmountTy(NPQ.getValueType(), DL)));
2867    Created->push_back(NPQ.getNode());
2868    NPQ = DAG.getNode(ISD::ADD, dl, VT, NPQ, Q);
2869    Created->push_back(NPQ.getNode());
2870    return DAG.getNode(
2871        ISD::SRL, dl, VT, NPQ,
2872        DAG.getConstant(magics.s - 1, dl,
2873                        getShiftAmountTy(NPQ.getValueType(), DL)));
2874  }
2875}
2876
2877bool TargetLowering::
2878verifyReturnAddressArgumentIsConstant(SDValue Op, SelectionDAG &DAG) const {
2879  if (!isa<ConstantSDNode>(Op.getOperand(0))) {
2880    DAG.getContext()->emitError("argument to '__builtin_return_address' must "
2881                                "be a constant integer");
2882    return true;
2883  }
2884
2885  return false;
2886}
2887
2888//===----------------------------------------------------------------------===//
2889// Legalization Utilities
2890//===----------------------------------------------------------------------===//
2891
2892bool TargetLowering::expandMUL(SDNode *N, SDValue &Lo, SDValue &Hi, EVT HiLoVT,
2893                               SelectionDAG &DAG, SDValue LL, SDValue LH,
2894                               SDValue RL, SDValue RH) const {
2895  EVT VT = N->getValueType(0);
2896  SDLoc dl(N);
2897
2898  bool HasMULHS = isOperationLegalOrCustom(ISD::MULHS, HiLoVT);
2899  bool HasMULHU = isOperationLegalOrCustom(ISD::MULHU, HiLoVT);
2900  bool HasSMUL_LOHI = isOperationLegalOrCustom(ISD::SMUL_LOHI, HiLoVT);
2901  bool HasUMUL_LOHI = isOperationLegalOrCustom(ISD::UMUL_LOHI, HiLoVT);
2902  if (HasMULHU || HasMULHS || HasUMUL_LOHI || HasSMUL_LOHI) {
2903    unsigned OuterBitSize = VT.getSizeInBits();
2904    unsigned InnerBitSize = HiLoVT.getSizeInBits();
2905    unsigned LHSSB = DAG.ComputeNumSignBits(N->getOperand(0));
2906    unsigned RHSSB = DAG.ComputeNumSignBits(N->getOperand(1));
2907
2908    // LL, LH, RL, and RH must be either all NULL or all set to a value.
2909    assert((LL.getNode() && LH.getNode() && RL.getNode() && RH.getNode()) ||
2910           (!LL.getNode() && !LH.getNode() && !RL.getNode() && !RH.getNode()));
2911
2912    if (!LL.getNode() && !RL.getNode() &&
2913        isOperationLegalOrCustom(ISD::TRUNCATE, HiLoVT)) {
2914      LL = DAG.getNode(ISD::TRUNCATE, dl, HiLoVT, N->getOperand(0));
2915      RL = DAG.getNode(ISD::TRUNCATE, dl, HiLoVT, N->getOperand(1));
2916    }
2917
2918    if (!LL.getNode())
2919      return false;
2920
2921    APInt HighMask = APInt::getHighBitsSet(OuterBitSize, InnerBitSize);
2922    if (DAG.MaskedValueIsZero(N->getOperand(0), HighMask) &&
2923        DAG.MaskedValueIsZero(N->getOperand(1), HighMask)) {
2924      // The inputs are both zero-extended.
2925      if (HasUMUL_LOHI) {
2926        // We can emit a umul_lohi.
2927        Lo = DAG.getNode(ISD::UMUL_LOHI, dl, DAG.getVTList(HiLoVT, HiLoVT), LL,
2928                         RL);
2929        Hi = SDValue(Lo.getNode(), 1);
2930        return true;
2931      }
2932      if (HasMULHU) {
2933        // We can emit a mulhu+mul.
2934        Lo = DAG.getNode(ISD::MUL, dl, HiLoVT, LL, RL);
2935        Hi = DAG.getNode(ISD::MULHU, dl, HiLoVT, LL, RL);
2936        return true;
2937      }
2938    }
2939    if (LHSSB > InnerBitSize && RHSSB > InnerBitSize) {
2940      // The input values are both sign-extended.
2941      if (HasSMUL_LOHI) {
2942        // We can emit a smul_lohi.
2943        Lo = DAG.getNode(ISD::SMUL_LOHI, dl, DAG.getVTList(HiLoVT, HiLoVT), LL,
2944                         RL);
2945        Hi = SDValue(Lo.getNode(), 1);
2946        return true;
2947      }
2948      if (HasMULHS) {
2949        // We can emit a mulhs+mul.
2950        Lo = DAG.getNode(ISD::MUL, dl, HiLoVT, LL, RL);
2951        Hi = DAG.getNode(ISD::MULHS, dl, HiLoVT, LL, RL);
2952        return true;
2953      }
2954    }
2955
2956    if (!LH.getNode() && !RH.getNode() &&
2957        isOperationLegalOrCustom(ISD::SRL, VT) &&
2958        isOperationLegalOrCustom(ISD::TRUNCATE, HiLoVT)) {
2959      auto &DL = DAG.getDataLayout();
2960      unsigned ShiftAmt = VT.getSizeInBits() - HiLoVT.getSizeInBits();
2961      SDValue Shift = DAG.getConstant(ShiftAmt, dl, getShiftAmountTy(VT, DL));
2962      LH = DAG.getNode(ISD::SRL, dl, VT, N->getOperand(0), Shift);
2963      LH = DAG.getNode(ISD::TRUNCATE, dl, HiLoVT, LH);
2964      RH = DAG.getNode(ISD::SRL, dl, VT, N->getOperand(1), Shift);
2965      RH = DAG.getNode(ISD::TRUNCATE, dl, HiLoVT, RH);
2966    }
2967
2968    if (!LH.getNode())
2969      return false;
2970
2971    if (HasUMUL_LOHI) {
2972      // Lo,Hi = umul LHS, RHS.
2973      SDValue UMulLOHI = DAG.getNode(ISD::UMUL_LOHI, dl,
2974                                     DAG.getVTList(HiLoVT, HiLoVT), LL, RL);
2975      Lo = UMulLOHI;
2976      Hi = UMulLOHI.getValue(1);
2977      RH = DAG.getNode(ISD::MUL, dl, HiLoVT, LL, RH);
2978      LH = DAG.getNode(ISD::MUL, dl, HiLoVT, LH, RL);
2979      Hi = DAG.getNode(ISD::ADD, dl, HiLoVT, Hi, RH);
2980      Hi = DAG.getNode(ISD::ADD, dl, HiLoVT, Hi, LH);
2981      return true;
2982    }
2983    if (HasMULHU) {
2984      Lo = DAG.getNode(ISD::MUL, dl, HiLoVT, LL, RL);
2985      Hi = DAG.getNode(ISD::MULHU, dl, HiLoVT, LL, RL);
2986      RH = DAG.getNode(ISD::MUL, dl, HiLoVT, LL, RH);
2987      LH = DAG.getNode(ISD::MUL, dl, HiLoVT, LH, RL);
2988      Hi = DAG.getNode(ISD::ADD, dl, HiLoVT, Hi, RH);
2989      Hi = DAG.getNode(ISD::ADD, dl, HiLoVT, Hi, LH);
2990      return true;
2991    }
2992  }
2993  return false;
2994}
2995
2996bool TargetLowering::expandFP_TO_SINT(SDNode *Node, SDValue &Result,
2997                               SelectionDAG &DAG) const {
2998  EVT VT = Node->getOperand(0).getValueType();
2999  EVT NVT = Node->getValueType(0);
3000  SDLoc dl(SDValue(Node, 0));
3001
3002  // FIXME: Only f32 to i64 conversions are supported.
3003  if (VT != MVT::f32 || NVT != MVT::i64)
3004    return false;
3005
3006  // Expand f32 -> i64 conversion
3007  // This algorithm comes from compiler-rt's implementation of fixsfdi:
3008  // https://github.com/llvm-mirror/compiler-rt/blob/master/lib/builtins/fixsfdi.c
3009  EVT IntVT = EVT::getIntegerVT(*DAG.getContext(),
3010                                VT.getSizeInBits());
3011  SDValue ExponentMask = DAG.getConstant(0x7F800000, dl, IntVT);
3012  SDValue ExponentLoBit = DAG.getConstant(23, dl, IntVT);
3013  SDValue Bias = DAG.getConstant(127, dl, IntVT);
3014  SDValue SignMask = DAG.getConstant(APInt::getSignBit(VT.getSizeInBits()), dl,
3015                                     IntVT);
3016  SDValue SignLowBit = DAG.getConstant(VT.getSizeInBits() - 1, dl, IntVT);
3017  SDValue MantissaMask = DAG.getConstant(0x007FFFFF, dl, IntVT);
3018
3019  SDValue Bits = DAG.getNode(ISD::BITCAST, dl, IntVT, Node->getOperand(0));
3020
3021  auto &DL = DAG.getDataLayout();
3022  SDValue ExponentBits = DAG.getNode(
3023      ISD::SRL, dl, IntVT, DAG.getNode(ISD::AND, dl, IntVT, Bits, ExponentMask),
3024      DAG.getZExtOrTrunc(ExponentLoBit, dl, getShiftAmountTy(IntVT, DL)));
3025  SDValue Exponent = DAG.getNode(ISD::SUB, dl, IntVT, ExponentBits, Bias);
3026
3027  SDValue Sign = DAG.getNode(
3028      ISD::SRA, dl, IntVT, DAG.getNode(ISD::AND, dl, IntVT, Bits, SignMask),
3029      DAG.getZExtOrTrunc(SignLowBit, dl, getShiftAmountTy(IntVT, DL)));
3030  Sign = DAG.getSExtOrTrunc(Sign, dl, NVT);
3031
3032  SDValue R = DAG.getNode(ISD::OR, dl, IntVT,
3033      DAG.getNode(ISD::AND, dl, IntVT, Bits, MantissaMask),
3034      DAG.getConstant(0x00800000, dl, IntVT));
3035
3036  R = DAG.getZExtOrTrunc(R, dl, NVT);
3037
3038  R = DAG.getSelectCC(
3039      dl, Exponent, ExponentLoBit,
3040      DAG.getNode(ISD::SHL, dl, NVT, R,
3041                  DAG.getZExtOrTrunc(
3042                      DAG.getNode(ISD::SUB, dl, IntVT, Exponent, ExponentLoBit),
3043                      dl, getShiftAmountTy(IntVT, DL))),
3044      DAG.getNode(ISD::SRL, dl, NVT, R,
3045                  DAG.getZExtOrTrunc(
3046                      DAG.getNode(ISD::SUB, dl, IntVT, ExponentLoBit, Exponent),
3047                      dl, getShiftAmountTy(IntVT, DL))),
3048      ISD::SETGT);
3049
3050  SDValue Ret = DAG.getNode(ISD::SUB, dl, NVT,
3051      DAG.getNode(ISD::XOR, dl, NVT, R, Sign),
3052      Sign);
3053
3054  Result = DAG.getSelectCC(dl, Exponent, DAG.getConstant(0, dl, IntVT),
3055      DAG.getConstant(0, dl, NVT), Ret, ISD::SETLT);
3056  return true;
3057}
3058
3059//===----------------------------------------------------------------------===//
3060// Implementation of Emulated TLS Model
3061//===----------------------------------------------------------------------===//
3062
3063SDValue TargetLowering::LowerToTLSEmulatedModel(const GlobalAddressSDNode *GA,
3064                                                SelectionDAG &DAG) const {
3065  // Access to address of TLS varialbe xyz is lowered to a function call:
3066  //   __emutls_get_address( address of global variable named "__emutls_v.xyz" )
3067  EVT PtrVT = getPointerTy(DAG.getDataLayout());
3068  PointerType *VoidPtrType = Type::getInt8PtrTy(*DAG.getContext());
3069  SDLoc dl(GA);
3070
3071  ArgListTy Args;
3072  ArgListEntry Entry;
3073  std::string NameString = ("__emutls_v." + GA->getGlobal()->getName()).str();
3074  Module *VariableModule = const_cast<Module*>(GA->getGlobal()->getParent());
3075  StringRef EmuTlsVarName(NameString);
3076  GlobalVariable *EmuTlsVar = VariableModule->getNamedGlobal(EmuTlsVarName);
3077  assert(EmuTlsVar && "Cannot find EmuTlsVar ");
3078  Entry.Node = DAG.getGlobalAddress(EmuTlsVar, dl, PtrVT);
3079  Entry.Ty = VoidPtrType;
3080  Args.push_back(Entry);
3081
3082  SDValue EmuTlsGetAddr = DAG.getExternalSymbol("__emutls_get_address", PtrVT);
3083
3084  TargetLowering::CallLoweringInfo CLI(DAG);
3085  CLI.setDebugLoc(dl).setChain(DAG.getEntryNode());
3086  CLI.setCallee(CallingConv::C, VoidPtrType, EmuTlsGetAddr, std::move(Args), 0);
3087  std::pair<SDValue, SDValue> CallResult = LowerCallTo(CLI);
3088
3089  // TLSADDR will be codegen'ed as call. Inform MFI that function has calls.
3090  // At last for X86 targets, maybe good for other targets too?
3091  MachineFrameInfo *MFI = DAG.getMachineFunction().getFrameInfo();
3092  MFI->setAdjustsStack(true);  // Is this only for X86 target?
3093  MFI->setHasCalls(true);
3094
3095  assert((GA->getOffset() == 0) &&
3096         "Emulated TLS must have zero offset in GlobalAddressSDNode");
3097  return CallResult.first;
3098}
3099