~pali/+junk/llvm-toolchain-3.7

« back to all changes in this revision

Viewing changes to lib/CodeGen/SelectionDAG/SelectionDAG.cpp

  • Committer: Package Import Robot
  • Author(s): Sylvestre Ledru
  • Date: 2015-07-15 17:51:08 UTC
  • Revision ID: package-import@ubuntu.com-20150715175108-l8mynwovkx4zx697
Tags: upstream-3.7~+rc2
ImportĀ upstreamĀ versionĀ 3.7~+rc2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
//===-- SelectionDAG.cpp - Implement the SelectionDAG data structures -----===//
 
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 SelectionDAG class.
 
11
//
 
12
//===----------------------------------------------------------------------===//
 
13
 
 
14
#include "llvm/CodeGen/SelectionDAG.h"
 
15
#include "SDNodeDbgValue.h"
 
16
#include "llvm/ADT/SetVector.h"
 
17
#include "llvm/ADT/SmallPtrSet.h"
 
18
#include "llvm/ADT/SmallSet.h"
 
19
#include "llvm/ADT/SmallVector.h"
 
20
#include "llvm/ADT/StringExtras.h"
 
21
#include "llvm/Analysis/ValueTracking.h"
 
22
#include "llvm/CodeGen/MachineBasicBlock.h"
 
23
#include "llvm/CodeGen/MachineConstantPool.h"
 
24
#include "llvm/CodeGen/MachineFrameInfo.h"
 
25
#include "llvm/CodeGen/MachineModuleInfo.h"
 
26
#include "llvm/IR/CallingConv.h"
 
27
#include "llvm/IR/Constants.h"
 
28
#include "llvm/IR/DataLayout.h"
 
29
#include "llvm/IR/DebugInfo.h"
 
30
#include "llvm/IR/DerivedTypes.h"
 
31
#include "llvm/IR/Function.h"
 
32
#include "llvm/IR/GlobalAlias.h"
 
33
#include "llvm/IR/GlobalVariable.h"
 
34
#include "llvm/IR/Intrinsics.h"
 
35
#include "llvm/Support/CommandLine.h"
 
36
#include "llvm/Support/Debug.h"
 
37
#include "llvm/Support/ErrorHandling.h"
 
38
#include "llvm/Support/ManagedStatic.h"
 
39
#include "llvm/Support/MathExtras.h"
 
40
#include "llvm/Support/Mutex.h"
 
41
#include "llvm/Support/raw_ostream.h"
 
42
#include "llvm/Target/TargetInstrInfo.h"
 
43
#include "llvm/Target/TargetIntrinsicInfo.h"
 
44
#include "llvm/Target/TargetLowering.h"
 
45
#include "llvm/Target/TargetMachine.h"
 
46
#include "llvm/Target/TargetOptions.h"
 
47
#include "llvm/Target/TargetRegisterInfo.h"
 
48
#include "llvm/Target/TargetSelectionDAGInfo.h"
 
49
#include "llvm/Target/TargetSubtargetInfo.h"
 
50
#include <algorithm>
 
51
#include <cmath>
 
52
#include <utility>
 
53
 
 
54
using namespace llvm;
 
55
 
 
56
/// makeVTList - Return an instance of the SDVTList struct initialized with the
 
57
/// specified members.
 
58
static SDVTList makeVTList(const EVT *VTs, unsigned NumVTs) {
 
59
  SDVTList Res = {VTs, NumVTs};
 
60
  return Res;
 
61
}
 
62
 
 
63
// Default null implementations of the callbacks.
 
64
void SelectionDAG::DAGUpdateListener::NodeDeleted(SDNode*, SDNode*) {}
 
65
void SelectionDAG::DAGUpdateListener::NodeUpdated(SDNode*) {}
 
66
 
 
67
//===----------------------------------------------------------------------===//
 
68
//                              ConstantFPSDNode Class
 
69
//===----------------------------------------------------------------------===//
 
70
 
 
71
/// isExactlyValue - We don't rely on operator== working on double values, as
 
72
/// it returns true for things that are clearly not equal, like -0.0 and 0.0.
 
73
/// As such, this method can be used to do an exact bit-for-bit comparison of
 
74
/// two floating point values.
 
75
bool ConstantFPSDNode::isExactlyValue(const APFloat& V) const {
 
76
  return getValueAPF().bitwiseIsEqual(V);
 
77
}
 
78
 
 
79
bool ConstantFPSDNode::isValueValidForType(EVT VT,
 
80
                                           const APFloat& Val) {
 
81
  assert(VT.isFloatingPoint() && "Can only convert between FP types");
 
82
 
 
83
  // convert modifies in place, so make a copy.
 
84
  APFloat Val2 = APFloat(Val);
 
85
  bool losesInfo;
 
86
  (void) Val2.convert(SelectionDAG::EVTToAPFloatSemantics(VT),
 
87
                      APFloat::rmNearestTiesToEven,
 
88
                      &losesInfo);
 
89
  return !losesInfo;
 
90
}
 
91
 
 
92
//===----------------------------------------------------------------------===//
 
93
//                              ISD Namespace
 
94
//===----------------------------------------------------------------------===//
 
95
 
 
96
/// isBuildVectorAllOnes - Return true if the specified node is a
 
97
/// BUILD_VECTOR where all of the elements are ~0 or undef.
 
98
bool ISD::isBuildVectorAllOnes(const SDNode *N) {
 
99
  // Look through a bit convert.
 
100
  while (N->getOpcode() == ISD::BITCAST)
 
101
    N = N->getOperand(0).getNode();
 
102
 
 
103
  if (N->getOpcode() != ISD::BUILD_VECTOR) return false;
 
104
 
 
105
  unsigned i = 0, e = N->getNumOperands();
 
106
 
 
107
  // Skip over all of the undef values.
 
108
  while (i != e && N->getOperand(i).getOpcode() == ISD::UNDEF)
 
109
    ++i;
 
110
 
 
111
  // Do not accept an all-undef vector.
 
112
  if (i == e) return false;
 
113
 
 
114
  // Do not accept build_vectors that aren't all constants or which have non-~0
 
115
  // elements. We have to be a bit careful here, as the type of the constant
 
116
  // may not be the same as the type of the vector elements due to type
 
117
  // legalization (the elements are promoted to a legal type for the target and
 
118
  // a vector of a type may be legal when the base element type is not).
 
119
  // We only want to check enough bits to cover the vector elements, because
 
120
  // we care if the resultant vector is all ones, not whether the individual
 
121
  // constants are.
 
122
  SDValue NotZero = N->getOperand(i);
 
123
  unsigned EltSize = N->getValueType(0).getVectorElementType().getSizeInBits();
 
124
  if (ConstantSDNode *CN = dyn_cast<ConstantSDNode>(NotZero)) {
 
125
    if (CN->getAPIntValue().countTrailingOnes() < EltSize)
 
126
      return false;
 
127
  } else if (ConstantFPSDNode *CFPN = dyn_cast<ConstantFPSDNode>(NotZero)) {
 
128
    if (CFPN->getValueAPF().bitcastToAPInt().countTrailingOnes() < EltSize)
 
129
      return false;
 
130
  } else
 
131
    return false;
 
132
 
 
133
  // Okay, we have at least one ~0 value, check to see if the rest match or are
 
134
  // undefs. Even with the above element type twiddling, this should be OK, as
 
135
  // the same type legalization should have applied to all the elements.
 
136
  for (++i; i != e; ++i)
 
137
    if (N->getOperand(i) != NotZero &&
 
138
        N->getOperand(i).getOpcode() != ISD::UNDEF)
 
139
      return false;
 
140
  return true;
 
141
}
 
142
 
 
143
 
 
144
/// isBuildVectorAllZeros - Return true if the specified node is a
 
145
/// BUILD_VECTOR where all of the elements are 0 or undef.
 
146
bool ISD::isBuildVectorAllZeros(const SDNode *N) {
 
147
  // Look through a bit convert.
 
148
  while (N->getOpcode() == ISD::BITCAST)
 
149
    N = N->getOperand(0).getNode();
 
150
 
 
151
  if (N->getOpcode() != ISD::BUILD_VECTOR) return false;
 
152
 
 
153
  bool IsAllUndef = true;
 
154
  for (const SDValue &Op : N->op_values()) {
 
155
    if (Op.getOpcode() == ISD::UNDEF)
 
156
      continue;
 
157
    IsAllUndef = false;
 
158
    // Do not accept build_vectors that aren't all constants or which have non-0
 
159
    // elements. We have to be a bit careful here, as the type of the constant
 
160
    // may not be the same as the type of the vector elements due to type
 
161
    // legalization (the elements are promoted to a legal type for the target
 
162
    // and a vector of a type may be legal when the base element type is not).
 
163
    // We only want to check enough bits to cover the vector elements, because
 
164
    // we care if the resultant vector is all zeros, not whether the individual
 
165
    // constants are.
 
166
    unsigned EltSize = N->getValueType(0).getVectorElementType().getSizeInBits();
 
167
    if (ConstantSDNode *CN = dyn_cast<ConstantSDNode>(Op)) {
 
168
      if (CN->getAPIntValue().countTrailingZeros() < EltSize)
 
169
        return false;
 
170
    } else if (ConstantFPSDNode *CFPN = dyn_cast<ConstantFPSDNode>(Op)) {
 
171
      if (CFPN->getValueAPF().bitcastToAPInt().countTrailingZeros() < EltSize)
 
172
        return false;
 
173
    } else
 
174
      return false;
 
175
  }
 
176
 
 
177
  // Do not accept an all-undef vector.
 
178
  if (IsAllUndef)
 
179
    return false;
 
180
  return true;
 
181
}
 
182
 
 
183
/// \brief Return true if the specified node is a BUILD_VECTOR node of
 
184
/// all ConstantSDNode or undef.
 
185
bool ISD::isBuildVectorOfConstantSDNodes(const SDNode *N) {
 
186
  if (N->getOpcode() != ISD::BUILD_VECTOR)
 
187
    return false;
 
188
 
 
189
  for (const SDValue &Op : N->op_values()) {
 
190
    if (Op.getOpcode() == ISD::UNDEF)
 
191
      continue;
 
192
    if (!isa<ConstantSDNode>(Op))
 
193
      return false;
 
194
  }
 
195
  return true;
 
196
}
 
197
 
 
198
/// \brief Return true if the specified node is a BUILD_VECTOR node of
 
199
/// all ConstantFPSDNode or undef.
 
200
bool ISD::isBuildVectorOfConstantFPSDNodes(const SDNode *N) {
 
201
  if (N->getOpcode() != ISD::BUILD_VECTOR)
 
202
    return false;
 
203
 
 
204
  for (const SDValue &Op : N->op_values()) {
 
205
    if (Op.getOpcode() == ISD::UNDEF)
 
206
      continue;
 
207
    if (!isa<ConstantFPSDNode>(Op))
 
208
      return false;
 
209
  }
 
210
  return true;
 
211
}
 
212
 
 
213
/// isScalarToVector - Return true if the specified node is a
 
214
/// ISD::SCALAR_TO_VECTOR node or a BUILD_VECTOR node where only the low
 
215
/// element is not an undef.
 
216
bool ISD::isScalarToVector(const SDNode *N) {
 
217
  if (N->getOpcode() == ISD::SCALAR_TO_VECTOR)
 
218
    return true;
 
219
 
 
220
  if (N->getOpcode() != ISD::BUILD_VECTOR)
 
221
    return false;
 
222
  if (N->getOperand(0).getOpcode() == ISD::UNDEF)
 
223
    return false;
 
224
  unsigned NumElems = N->getNumOperands();
 
225
  if (NumElems == 1)
 
226
    return false;
 
227
  for (unsigned i = 1; i < NumElems; ++i) {
 
228
    SDValue V = N->getOperand(i);
 
229
    if (V.getOpcode() != ISD::UNDEF)
 
230
      return false;
 
231
  }
 
232
  return true;
 
233
}
 
234
 
 
235
/// allOperandsUndef - Return true if the node has at least one operand
 
236
/// and all operands of the specified node are ISD::UNDEF.
 
237
bool ISD::allOperandsUndef(const SDNode *N) {
 
238
  // Return false if the node has no operands.
 
239
  // This is "logically inconsistent" with the definition of "all" but
 
240
  // is probably the desired behavior.
 
241
  if (N->getNumOperands() == 0)
 
242
    return false;
 
243
 
 
244
  for (const SDValue &Op : N->op_values())
 
245
    if (Op.getOpcode() != ISD::UNDEF)
 
246
      return false;
 
247
 
 
248
  return true;
 
249
}
 
250
 
 
251
ISD::NodeType ISD::getExtForLoadExtType(bool IsFP, ISD::LoadExtType ExtType) {
 
252
  switch (ExtType) {
 
253
  case ISD::EXTLOAD:
 
254
    return IsFP ? ISD::FP_EXTEND : ISD::ANY_EXTEND;
 
255
  case ISD::SEXTLOAD:
 
256
    return ISD::SIGN_EXTEND;
 
257
  case ISD::ZEXTLOAD:
 
258
    return ISD::ZERO_EXTEND;
 
259
  default:
 
260
    break;
 
261
  }
 
262
 
 
263
  llvm_unreachable("Invalid LoadExtType");
 
264
}
 
265
 
 
266
/// getSetCCSwappedOperands - Return the operation corresponding to (Y op X)
 
267
/// when given the operation for (X op Y).
 
268
ISD::CondCode ISD::getSetCCSwappedOperands(ISD::CondCode Operation) {
 
269
  // To perform this operation, we just need to swap the L and G bits of the
 
270
  // operation.
 
271
  unsigned OldL = (Operation >> 2) & 1;
 
272
  unsigned OldG = (Operation >> 1) & 1;
 
273
  return ISD::CondCode((Operation & ~6) |  // Keep the N, U, E bits
 
274
                       (OldL << 1) |       // New G bit
 
275
                       (OldG << 2));       // New L bit.
 
276
}
 
277
 
 
278
/// getSetCCInverse - Return the operation corresponding to !(X op Y), where
 
279
/// 'op' is a valid SetCC operation.
 
280
ISD::CondCode ISD::getSetCCInverse(ISD::CondCode Op, bool isInteger) {
 
281
  unsigned Operation = Op;
 
282
  if (isInteger)
 
283
    Operation ^= 7;   // Flip L, G, E bits, but not U.
 
284
  else
 
285
    Operation ^= 15;  // Flip all of the condition bits.
 
286
 
 
287
  if (Operation > ISD::SETTRUE2)
 
288
    Operation &= ~8;  // Don't let N and U bits get set.
 
289
 
 
290
  return ISD::CondCode(Operation);
 
291
}
 
292
 
 
293
 
 
294
/// isSignedOp - For an integer comparison, return 1 if the comparison is a
 
295
/// signed operation and 2 if the result is an unsigned comparison.  Return zero
 
296
/// if the operation does not depend on the sign of the input (setne and seteq).
 
297
static int isSignedOp(ISD::CondCode Opcode) {
 
298
  switch (Opcode) {
 
299
  default: llvm_unreachable("Illegal integer setcc operation!");
 
300
  case ISD::SETEQ:
 
301
  case ISD::SETNE: return 0;
 
302
  case ISD::SETLT:
 
303
  case ISD::SETLE:
 
304
  case ISD::SETGT:
 
305
  case ISD::SETGE: return 1;
 
306
  case ISD::SETULT:
 
307
  case ISD::SETULE:
 
308
  case ISD::SETUGT:
 
309
  case ISD::SETUGE: return 2;
 
310
  }
 
311
}
 
312
 
 
313
/// getSetCCOrOperation - Return the result of a logical OR between different
 
314
/// comparisons of identical values: ((X op1 Y) | (X op2 Y)).  This function
 
315
/// returns SETCC_INVALID if it is not possible to represent the resultant
 
316
/// comparison.
 
317
ISD::CondCode ISD::getSetCCOrOperation(ISD::CondCode Op1, ISD::CondCode Op2,
 
318
                                       bool isInteger) {
 
319
  if (isInteger && (isSignedOp(Op1) | isSignedOp(Op2)) == 3)
 
320
    // Cannot fold a signed integer setcc with an unsigned integer setcc.
 
321
    return ISD::SETCC_INVALID;
 
322
 
 
323
  unsigned Op = Op1 | Op2;  // Combine all of the condition bits.
 
324
 
 
325
  // If the N and U bits get set then the resultant comparison DOES suddenly
 
326
  // care about orderedness, and is true when ordered.
 
327
  if (Op > ISD::SETTRUE2)
 
328
    Op &= ~16;     // Clear the U bit if the N bit is set.
 
329
 
 
330
  // Canonicalize illegal integer setcc's.
 
331
  if (isInteger && Op == ISD::SETUNE)  // e.g. SETUGT | SETULT
 
332
    Op = ISD::SETNE;
 
333
 
 
334
  return ISD::CondCode(Op);
 
335
}
 
336
 
 
337
/// getSetCCAndOperation - Return the result of a logical AND between different
 
338
/// comparisons of identical values: ((X op1 Y) & (X op2 Y)).  This
 
339
/// function returns zero if it is not possible to represent the resultant
 
340
/// comparison.
 
341
ISD::CondCode ISD::getSetCCAndOperation(ISD::CondCode Op1, ISD::CondCode Op2,
 
342
                                        bool isInteger) {
 
343
  if (isInteger && (isSignedOp(Op1) | isSignedOp(Op2)) == 3)
 
344
    // Cannot fold a signed setcc with an unsigned setcc.
 
345
    return ISD::SETCC_INVALID;
 
346
 
 
347
  // Combine all of the condition bits.
 
348
  ISD::CondCode Result = ISD::CondCode(Op1 & Op2);
 
349
 
 
350
  // Canonicalize illegal integer setcc's.
 
351
  if (isInteger) {
 
352
    switch (Result) {
 
353
    default: break;
 
354
    case ISD::SETUO : Result = ISD::SETFALSE; break;  // SETUGT & SETULT
 
355
    case ISD::SETOEQ:                                 // SETEQ  & SETU[LG]E
 
356
    case ISD::SETUEQ: Result = ISD::SETEQ   ; break;  // SETUGE & SETULE
 
357
    case ISD::SETOLT: Result = ISD::SETULT  ; break;  // SETULT & SETNE
 
358
    case ISD::SETOGT: Result = ISD::SETUGT  ; break;  // SETUGT & SETNE
 
359
    }
 
360
  }
 
361
 
 
362
  return Result;
 
363
}
 
364
 
 
365
//===----------------------------------------------------------------------===//
 
366
//                           SDNode Profile Support
 
367
//===----------------------------------------------------------------------===//
 
368
 
 
369
/// AddNodeIDOpcode - Add the node opcode to the NodeID data.
 
370
///
 
371
static void AddNodeIDOpcode(FoldingSetNodeID &ID, unsigned OpC)  {
 
372
  ID.AddInteger(OpC);
 
373
}
 
374
 
 
375
/// AddNodeIDValueTypes - Value type lists are intern'd so we can represent them
 
376
/// solely with their pointer.
 
377
static void AddNodeIDValueTypes(FoldingSetNodeID &ID, SDVTList VTList) {
 
378
  ID.AddPointer(VTList.VTs);
 
379
}
 
380
 
 
381
/// AddNodeIDOperands - Various routines for adding operands to the NodeID data.
 
382
///
 
383
static void AddNodeIDOperands(FoldingSetNodeID &ID,
 
384
                              ArrayRef<SDValue> Ops) {
 
385
  for (auto& Op : Ops) {
 
386
    ID.AddPointer(Op.getNode());
 
387
    ID.AddInteger(Op.getResNo());
 
388
  }
 
389
}
 
390
 
 
391
/// AddNodeIDOperands - Various routines for adding operands to the NodeID data.
 
392
///
 
393
static void AddNodeIDOperands(FoldingSetNodeID &ID,
 
394
                              ArrayRef<SDUse> Ops) {
 
395
  for (auto& Op : Ops) {
 
396
    ID.AddPointer(Op.getNode());
 
397
    ID.AddInteger(Op.getResNo());
 
398
  }
 
399
}
 
400
/// Add logical or fast math flag values to FoldingSetNodeID value.
 
401
static void AddNodeIDFlags(FoldingSetNodeID &ID, unsigned Opcode,
 
402
                           const SDNodeFlags *Flags) {
 
403
  if (!Flags || !isBinOpWithFlags(Opcode))
 
404
    return;
 
405
 
 
406
  unsigned RawFlags = Flags->getRawFlags();
 
407
  // If no flags are set, do not alter the ID. We must match the ID of nodes
 
408
  // that were created without explicitly specifying flags. This also saves time
 
409
  // and allows a gradual increase in API usage of the optional optimization
 
410
  // flags.
 
411
  if (RawFlags != 0)
 
412
    ID.AddInteger(RawFlags);
 
413
}
 
414
 
 
415
static void AddNodeIDFlags(FoldingSetNodeID &ID, const SDNode *N) {
 
416
  if (auto *Node = dyn_cast<BinaryWithFlagsSDNode>(N))
 
417
    AddNodeIDFlags(ID, Node->getOpcode(), &Node->Flags);
 
418
}
 
419
 
 
420
static void AddNodeIDNode(FoldingSetNodeID &ID, unsigned short OpC,
 
421
                          SDVTList VTList, ArrayRef<SDValue> OpList) {
 
422
  AddNodeIDOpcode(ID, OpC);
 
423
  AddNodeIDValueTypes(ID, VTList);
 
424
  AddNodeIDOperands(ID, OpList);
 
425
}
 
426
 
 
427
/// If this is an SDNode with special info, add this info to the NodeID data.
 
428
static void AddNodeIDCustom(FoldingSetNodeID &ID, const SDNode *N) {
 
429
  switch (N->getOpcode()) {
 
430
  case ISD::TargetExternalSymbol:
 
431
  case ISD::ExternalSymbol:
 
432
  case ISD::MCSymbol:
 
433
    llvm_unreachable("Should only be used on nodes with operands");
 
434
  default: break;  // Normal nodes don't need extra info.
 
435
  case ISD::TargetConstant:
 
436
  case ISD::Constant: {
 
437
    const ConstantSDNode *C = cast<ConstantSDNode>(N);
 
438
    ID.AddPointer(C->getConstantIntValue());
 
439
    ID.AddBoolean(C->isOpaque());
 
440
    break;
 
441
  }
 
442
  case ISD::TargetConstantFP:
 
443
  case ISD::ConstantFP: {
 
444
    ID.AddPointer(cast<ConstantFPSDNode>(N)->getConstantFPValue());
 
445
    break;
 
446
  }
 
447
  case ISD::TargetGlobalAddress:
 
448
  case ISD::GlobalAddress:
 
449
  case ISD::TargetGlobalTLSAddress:
 
450
  case ISD::GlobalTLSAddress: {
 
451
    const GlobalAddressSDNode *GA = cast<GlobalAddressSDNode>(N);
 
452
    ID.AddPointer(GA->getGlobal());
 
453
    ID.AddInteger(GA->getOffset());
 
454
    ID.AddInteger(GA->getTargetFlags());
 
455
    ID.AddInteger(GA->getAddressSpace());
 
456
    break;
 
457
  }
 
458
  case ISD::BasicBlock:
 
459
    ID.AddPointer(cast<BasicBlockSDNode>(N)->getBasicBlock());
 
460
    break;
 
461
  case ISD::Register:
 
462
    ID.AddInteger(cast<RegisterSDNode>(N)->getReg());
 
463
    break;
 
464
  case ISD::RegisterMask:
 
465
    ID.AddPointer(cast<RegisterMaskSDNode>(N)->getRegMask());
 
466
    break;
 
467
  case ISD::SRCVALUE:
 
468
    ID.AddPointer(cast<SrcValueSDNode>(N)->getValue());
 
469
    break;
 
470
  case ISD::FrameIndex:
 
471
  case ISD::TargetFrameIndex:
 
472
    ID.AddInteger(cast<FrameIndexSDNode>(N)->getIndex());
 
473
    break;
 
474
  case ISD::JumpTable:
 
475
  case ISD::TargetJumpTable:
 
476
    ID.AddInteger(cast<JumpTableSDNode>(N)->getIndex());
 
477
    ID.AddInteger(cast<JumpTableSDNode>(N)->getTargetFlags());
 
478
    break;
 
479
  case ISD::ConstantPool:
 
480
  case ISD::TargetConstantPool: {
 
481
    const ConstantPoolSDNode *CP = cast<ConstantPoolSDNode>(N);
 
482
    ID.AddInteger(CP->getAlignment());
 
483
    ID.AddInteger(CP->getOffset());
 
484
    if (CP->isMachineConstantPoolEntry())
 
485
      CP->getMachineCPVal()->addSelectionDAGCSEId(ID);
 
486
    else
 
487
      ID.AddPointer(CP->getConstVal());
 
488
    ID.AddInteger(CP->getTargetFlags());
 
489
    break;
 
490
  }
 
491
  case ISD::TargetIndex: {
 
492
    const TargetIndexSDNode *TI = cast<TargetIndexSDNode>(N);
 
493
    ID.AddInteger(TI->getIndex());
 
494
    ID.AddInteger(TI->getOffset());
 
495
    ID.AddInteger(TI->getTargetFlags());
 
496
    break;
 
497
  }
 
498
  case ISD::LOAD: {
 
499
    const LoadSDNode *LD = cast<LoadSDNode>(N);
 
500
    ID.AddInteger(LD->getMemoryVT().getRawBits());
 
501
    ID.AddInteger(LD->getRawSubclassData());
 
502
    ID.AddInteger(LD->getPointerInfo().getAddrSpace());
 
503
    break;
 
504
  }
 
505
  case ISD::STORE: {
 
506
    const StoreSDNode *ST = cast<StoreSDNode>(N);
 
507
    ID.AddInteger(ST->getMemoryVT().getRawBits());
 
508
    ID.AddInteger(ST->getRawSubclassData());
 
509
    ID.AddInteger(ST->getPointerInfo().getAddrSpace());
 
510
    break;
 
511
  }
 
512
  case ISD::ATOMIC_CMP_SWAP:
 
513
  case ISD::ATOMIC_CMP_SWAP_WITH_SUCCESS:
 
514
  case ISD::ATOMIC_SWAP:
 
515
  case ISD::ATOMIC_LOAD_ADD:
 
516
  case ISD::ATOMIC_LOAD_SUB:
 
517
  case ISD::ATOMIC_LOAD_AND:
 
518
  case ISD::ATOMIC_LOAD_OR:
 
519
  case ISD::ATOMIC_LOAD_XOR:
 
520
  case ISD::ATOMIC_LOAD_NAND:
 
521
  case ISD::ATOMIC_LOAD_MIN:
 
522
  case ISD::ATOMIC_LOAD_MAX:
 
523
  case ISD::ATOMIC_LOAD_UMIN:
 
524
  case ISD::ATOMIC_LOAD_UMAX:
 
525
  case ISD::ATOMIC_LOAD:
 
526
  case ISD::ATOMIC_STORE: {
 
527
    const AtomicSDNode *AT = cast<AtomicSDNode>(N);
 
528
    ID.AddInteger(AT->getMemoryVT().getRawBits());
 
529
    ID.AddInteger(AT->getRawSubclassData());
 
530
    ID.AddInteger(AT->getPointerInfo().getAddrSpace());
 
531
    break;
 
532
  }
 
533
  case ISD::PREFETCH: {
 
534
    const MemSDNode *PF = cast<MemSDNode>(N);
 
535
    ID.AddInteger(PF->getPointerInfo().getAddrSpace());
 
536
    break;
 
537
  }
 
538
  case ISD::VECTOR_SHUFFLE: {
 
539
    const ShuffleVectorSDNode *SVN = cast<ShuffleVectorSDNode>(N);
 
540
    for (unsigned i = 0, e = N->getValueType(0).getVectorNumElements();
 
541
         i != e; ++i)
 
542
      ID.AddInteger(SVN->getMaskElt(i));
 
543
    break;
 
544
  }
 
545
  case ISD::TargetBlockAddress:
 
546
  case ISD::BlockAddress: {
 
547
    const BlockAddressSDNode *BA = cast<BlockAddressSDNode>(N);
 
548
    ID.AddPointer(BA->getBlockAddress());
 
549
    ID.AddInteger(BA->getOffset());
 
550
    ID.AddInteger(BA->getTargetFlags());
 
551
    break;
 
552
  }
 
553
  } // end switch (N->getOpcode())
 
554
 
 
555
  AddNodeIDFlags(ID, N);
 
556
 
 
557
  // Target specific memory nodes could also have address spaces to check.
 
558
  if (N->isTargetMemoryOpcode())
 
559
    ID.AddInteger(cast<MemSDNode>(N)->getPointerInfo().getAddrSpace());
 
560
}
 
561
 
 
562
/// AddNodeIDNode - Generic routine for adding a nodes info to the NodeID
 
563
/// data.
 
564
static void AddNodeIDNode(FoldingSetNodeID &ID, const SDNode *N) {
 
565
  AddNodeIDOpcode(ID, N->getOpcode());
 
566
  // Add the return value info.
 
567
  AddNodeIDValueTypes(ID, N->getVTList());
 
568
  // Add the operand info.
 
569
  AddNodeIDOperands(ID, N->ops());
 
570
 
 
571
  // Handle SDNode leafs with special info.
 
572
  AddNodeIDCustom(ID, N);
 
573
}
 
574
 
 
575
/// encodeMemSDNodeFlags - Generic routine for computing a value for use in
 
576
/// the CSE map that carries volatility, temporalness, indexing mode, and
 
577
/// extension/truncation information.
 
578
///
 
579
static inline unsigned
 
580
encodeMemSDNodeFlags(int ConvType, ISD::MemIndexedMode AM, bool isVolatile,
 
581
                     bool isNonTemporal, bool isInvariant) {
 
582
  assert((ConvType & 3) == ConvType &&
 
583
         "ConvType may not require more than 2 bits!");
 
584
  assert((AM & 7) == AM &&
 
585
         "AM may not require more than 3 bits!");
 
586
  return ConvType |
 
587
         (AM << 2) |
 
588
         (isVolatile << 5) |
 
589
         (isNonTemporal << 6) |
 
590
         (isInvariant << 7);
 
591
}
 
592
 
 
593
//===----------------------------------------------------------------------===//
 
594
//                              SelectionDAG Class
 
595
//===----------------------------------------------------------------------===//
 
596
 
 
597
/// doNotCSE - Return true if CSE should not be performed for this node.
 
598
static bool doNotCSE(SDNode *N) {
 
599
  if (N->getValueType(0) == MVT::Glue)
 
600
    return true; // Never CSE anything that produces a flag.
 
601
 
 
602
  switch (N->getOpcode()) {
 
603
  default: break;
 
604
  case ISD::HANDLENODE:
 
605
  case ISD::EH_LABEL:
 
606
    return true;   // Never CSE these nodes.
 
607
  }
 
608
 
 
609
  // Check that remaining values produced are not flags.
 
610
  for (unsigned i = 1, e = N->getNumValues(); i != e; ++i)
 
611
    if (N->getValueType(i) == MVT::Glue)
 
612
      return true; // Never CSE anything that produces a flag.
 
613
 
 
614
  return false;
 
615
}
 
616
 
 
617
/// RemoveDeadNodes - This method deletes all unreachable nodes in the
 
618
/// SelectionDAG.
 
619
void SelectionDAG::RemoveDeadNodes() {
 
620
  // Create a dummy node (which is not added to allnodes), that adds a reference
 
621
  // to the root node, preventing it from being deleted.
 
622
  HandleSDNode Dummy(getRoot());
 
623
 
 
624
  SmallVector<SDNode*, 128> DeadNodes;
 
625
 
 
626
  // Add all obviously-dead nodes to the DeadNodes worklist.
 
627
  for (allnodes_iterator I = allnodes_begin(), E = allnodes_end(); I != E; ++I)
 
628
    if (I->use_empty())
 
629
      DeadNodes.push_back(I);
 
630
 
 
631
  RemoveDeadNodes(DeadNodes);
 
632
 
 
633
  // If the root changed (e.g. it was a dead load, update the root).
 
634
  setRoot(Dummy.getValue());
 
635
}
 
636
 
 
637
/// RemoveDeadNodes - This method deletes the unreachable nodes in the
 
638
/// given list, and any nodes that become unreachable as a result.
 
639
void SelectionDAG::RemoveDeadNodes(SmallVectorImpl<SDNode *> &DeadNodes) {
 
640
 
 
641
  // Process the worklist, deleting the nodes and adding their uses to the
 
642
  // worklist.
 
643
  while (!DeadNodes.empty()) {
 
644
    SDNode *N = DeadNodes.pop_back_val();
 
645
 
 
646
    for (DAGUpdateListener *DUL = UpdateListeners; DUL; DUL = DUL->Next)
 
647
      DUL->NodeDeleted(N, nullptr);
 
648
 
 
649
    // Take the node out of the appropriate CSE map.
 
650
    RemoveNodeFromCSEMaps(N);
 
651
 
 
652
    // Next, brutally remove the operand list.  This is safe to do, as there are
 
653
    // no cycles in the graph.
 
654
    for (SDNode::op_iterator I = N->op_begin(), E = N->op_end(); I != E; ) {
 
655
      SDUse &Use = *I++;
 
656
      SDNode *Operand = Use.getNode();
 
657
      Use.set(SDValue());
 
658
 
 
659
      // Now that we removed this operand, see if there are no uses of it left.
 
660
      if (Operand->use_empty())
 
661
        DeadNodes.push_back(Operand);
 
662
    }
 
663
 
 
664
    DeallocateNode(N);
 
665
  }
 
666
}
 
667
 
 
668
void SelectionDAG::RemoveDeadNode(SDNode *N){
 
669
  SmallVector<SDNode*, 16> DeadNodes(1, N);
 
670
 
 
671
  // Create a dummy node that adds a reference to the root node, preventing
 
672
  // it from being deleted.  (This matters if the root is an operand of the
 
673
  // dead node.)
 
674
  HandleSDNode Dummy(getRoot());
 
675
 
 
676
  RemoveDeadNodes(DeadNodes);
 
677
}
 
678
 
 
679
void SelectionDAG::DeleteNode(SDNode *N) {
 
680
  // First take this out of the appropriate CSE map.
 
681
  RemoveNodeFromCSEMaps(N);
 
682
 
 
683
  // Finally, remove uses due to operands of this node, remove from the
 
684
  // AllNodes list, and delete the node.
 
685
  DeleteNodeNotInCSEMaps(N);
 
686
}
 
687
 
 
688
void SelectionDAG::DeleteNodeNotInCSEMaps(SDNode *N) {
 
689
  assert(N != AllNodes.begin() && "Cannot delete the entry node!");
 
690
  assert(N->use_empty() && "Cannot delete a node that is not dead!");
 
691
 
 
692
  // Drop all of the operands and decrement used node's use counts.
 
693
  N->DropOperands();
 
694
 
 
695
  DeallocateNode(N);
 
696
}
 
697
 
 
698
void SDDbgInfo::erase(const SDNode *Node) {
 
699
  DbgValMapType::iterator I = DbgValMap.find(Node);
 
700
  if (I == DbgValMap.end())
 
701
    return;
 
702
  for (auto &Val: I->second)
 
703
    Val->setIsInvalidated();
 
704
  DbgValMap.erase(I);
 
705
}
 
706
 
 
707
void SelectionDAG::DeallocateNode(SDNode *N) {
 
708
  if (N->OperandsNeedDelete)
 
709
    delete[] N->OperandList;
 
710
 
 
711
  // Set the opcode to DELETED_NODE to help catch bugs when node
 
712
  // memory is reallocated.
 
713
  N->NodeType = ISD::DELETED_NODE;
 
714
 
 
715
  NodeAllocator.Deallocate(AllNodes.remove(N));
 
716
 
 
717
  // If any of the SDDbgValue nodes refer to this SDNode, invalidate
 
718
  // them and forget about that node.
 
719
  DbgInfo->erase(N);
 
720
}
 
721
 
 
722
#ifndef NDEBUG
 
723
/// VerifySDNode - Sanity check the given SDNode.  Aborts if it is invalid.
 
724
static void VerifySDNode(SDNode *N) {
 
725
  switch (N->getOpcode()) {
 
726
  default:
 
727
    break;
 
728
  case ISD::BUILD_PAIR: {
 
729
    EVT VT = N->getValueType(0);
 
730
    assert(N->getNumValues() == 1 && "Too many results!");
 
731
    assert(!VT.isVector() && (VT.isInteger() || VT.isFloatingPoint()) &&
 
732
           "Wrong return type!");
 
733
    assert(N->getNumOperands() == 2 && "Wrong number of operands!");
 
734
    assert(N->getOperand(0).getValueType() == N->getOperand(1).getValueType() &&
 
735
           "Mismatched operand types!");
 
736
    assert(N->getOperand(0).getValueType().isInteger() == VT.isInteger() &&
 
737
           "Wrong operand type!");
 
738
    assert(VT.getSizeInBits() == 2 * N->getOperand(0).getValueSizeInBits() &&
 
739
           "Wrong return type size");
 
740
    break;
 
741
  }
 
742
  case ISD::BUILD_VECTOR: {
 
743
    assert(N->getNumValues() == 1 && "Too many results!");
 
744
    assert(N->getValueType(0).isVector() && "Wrong return type!");
 
745
    assert(N->getNumOperands() == N->getValueType(0).getVectorNumElements() &&
 
746
           "Wrong number of operands!");
 
747
    EVT EltVT = N->getValueType(0).getVectorElementType();
 
748
    for (SDNode::op_iterator I = N->op_begin(), E = N->op_end(); I != E; ++I) {
 
749
      assert((I->getValueType() == EltVT ||
 
750
             (EltVT.isInteger() && I->getValueType().isInteger() &&
 
751
              EltVT.bitsLE(I->getValueType()))) &&
 
752
            "Wrong operand type!");
 
753
      assert(I->getValueType() == N->getOperand(0).getValueType() &&
 
754
             "Operands must all have the same type");
 
755
    }
 
756
    break;
 
757
  }
 
758
  }
 
759
}
 
760
#endif // NDEBUG
 
761
 
 
762
/// \brief Insert a newly allocated node into the DAG.
 
763
///
 
764
/// Handles insertion into the all nodes list and CSE map, as well as
 
765
/// verification and other common operations when a new node is allocated.
 
766
void SelectionDAG::InsertNode(SDNode *N) {
 
767
  AllNodes.push_back(N);
 
768
#ifndef NDEBUG
 
769
  VerifySDNode(N);
 
770
#endif
 
771
}
 
772
 
 
773
/// RemoveNodeFromCSEMaps - Take the specified node out of the CSE map that
 
774
/// correspond to it.  This is useful when we're about to delete or repurpose
 
775
/// the node.  We don't want future request for structurally identical nodes
 
776
/// to return N anymore.
 
777
bool SelectionDAG::RemoveNodeFromCSEMaps(SDNode *N) {
 
778
  bool Erased = false;
 
779
  switch (N->getOpcode()) {
 
780
  case ISD::HANDLENODE: return false;  // noop.
 
781
  case ISD::CONDCODE:
 
782
    assert(CondCodeNodes[cast<CondCodeSDNode>(N)->get()] &&
 
783
           "Cond code doesn't exist!");
 
784
    Erased = CondCodeNodes[cast<CondCodeSDNode>(N)->get()] != nullptr;
 
785
    CondCodeNodes[cast<CondCodeSDNode>(N)->get()] = nullptr;
 
786
    break;
 
787
  case ISD::ExternalSymbol:
 
788
    Erased = ExternalSymbols.erase(cast<ExternalSymbolSDNode>(N)->getSymbol());
 
789
    break;
 
790
  case ISD::TargetExternalSymbol: {
 
791
    ExternalSymbolSDNode *ESN = cast<ExternalSymbolSDNode>(N);
 
792
    Erased = TargetExternalSymbols.erase(
 
793
               std::pair<std::string,unsigned char>(ESN->getSymbol(),
 
794
                                                    ESN->getTargetFlags()));
 
795
    break;
 
796
  }
 
797
  case ISD::MCSymbol: {
 
798
    auto *MCSN = cast<MCSymbolSDNode>(N);
 
799
    Erased = MCSymbols.erase(MCSN->getMCSymbol());
 
800
    break;
 
801
  }
 
802
  case ISD::VALUETYPE: {
 
803
    EVT VT = cast<VTSDNode>(N)->getVT();
 
804
    if (VT.isExtended()) {
 
805
      Erased = ExtendedValueTypeNodes.erase(VT);
 
806
    } else {
 
807
      Erased = ValueTypeNodes[VT.getSimpleVT().SimpleTy] != nullptr;
 
808
      ValueTypeNodes[VT.getSimpleVT().SimpleTy] = nullptr;
 
809
    }
 
810
    break;
 
811
  }
 
812
  default:
 
813
    // Remove it from the CSE Map.
 
814
    assert(N->getOpcode() != ISD::DELETED_NODE && "DELETED_NODE in CSEMap!");
 
815
    assert(N->getOpcode() != ISD::EntryToken && "EntryToken in CSEMap!");
 
816
    Erased = CSEMap.RemoveNode(N);
 
817
    break;
 
818
  }
 
819
#ifndef NDEBUG
 
820
  // Verify that the node was actually in one of the CSE maps, unless it has a
 
821
  // flag result (which cannot be CSE'd) or is one of the special cases that are
 
822
  // not subject to CSE.
 
823
  if (!Erased && N->getValueType(N->getNumValues()-1) != MVT::Glue &&
 
824
      !N->isMachineOpcode() && !doNotCSE(N)) {
 
825
    N->dump(this);
 
826
    dbgs() << "\n";
 
827
    llvm_unreachable("Node is not in map!");
 
828
  }
 
829
#endif
 
830
  return Erased;
 
831
}
 
832
 
 
833
/// AddModifiedNodeToCSEMaps - The specified node has been removed from the CSE
 
834
/// maps and modified in place. Add it back to the CSE maps, unless an identical
 
835
/// node already exists, in which case transfer all its users to the existing
 
836
/// node. This transfer can potentially trigger recursive merging.
 
837
///
 
838
void
 
839
SelectionDAG::AddModifiedNodeToCSEMaps(SDNode *N) {
 
840
  // For node types that aren't CSE'd, just act as if no identical node
 
841
  // already exists.
 
842
  if (!doNotCSE(N)) {
 
843
    SDNode *Existing = CSEMap.GetOrInsertNode(N);
 
844
    if (Existing != N) {
 
845
      // If there was already an existing matching node, use ReplaceAllUsesWith
 
846
      // to replace the dead one with the existing one.  This can cause
 
847
      // recursive merging of other unrelated nodes down the line.
 
848
      ReplaceAllUsesWith(N, Existing);
 
849
 
 
850
      // N is now dead. Inform the listeners and delete it.
 
851
      for (DAGUpdateListener *DUL = UpdateListeners; DUL; DUL = DUL->Next)
 
852
        DUL->NodeDeleted(N, Existing);
 
853
      DeleteNodeNotInCSEMaps(N);
 
854
      return;
 
855
    }
 
856
  }
 
857
 
 
858
  // If the node doesn't already exist, we updated it.  Inform listeners.
 
859
  for (DAGUpdateListener *DUL = UpdateListeners; DUL; DUL = DUL->Next)
 
860
    DUL->NodeUpdated(N);
 
861
}
 
862
 
 
863
/// FindModifiedNodeSlot - Find a slot for the specified node if its operands
 
864
/// were replaced with those specified.  If this node is never memoized,
 
865
/// return null, otherwise return a pointer to the slot it would take.  If a
 
866
/// node already exists with these operands, the slot will be non-null.
 
867
SDNode *SelectionDAG::FindModifiedNodeSlot(SDNode *N, SDValue Op,
 
868
                                           void *&InsertPos) {
 
869
  if (doNotCSE(N))
 
870
    return nullptr;
 
871
 
 
872
  SDValue Ops[] = { Op };
 
873
  FoldingSetNodeID ID;
 
874
  AddNodeIDNode(ID, N->getOpcode(), N->getVTList(), Ops);
 
875
  AddNodeIDCustom(ID, N);
 
876
  SDNode *Node = FindNodeOrInsertPos(ID, N->getDebugLoc(), InsertPos);
 
877
  return Node;
 
878
}
 
879
 
 
880
/// FindModifiedNodeSlot - Find a slot for the specified node if its operands
 
881
/// were replaced with those specified.  If this node is never memoized,
 
882
/// return null, otherwise return a pointer to the slot it would take.  If a
 
883
/// node already exists with these operands, the slot will be non-null.
 
884
SDNode *SelectionDAG::FindModifiedNodeSlot(SDNode *N,
 
885
                                           SDValue Op1, SDValue Op2,
 
886
                                           void *&InsertPos) {
 
887
  if (doNotCSE(N))
 
888
    return nullptr;
 
889
 
 
890
  SDValue Ops[] = { Op1, Op2 };
 
891
  FoldingSetNodeID ID;
 
892
  AddNodeIDNode(ID, N->getOpcode(), N->getVTList(), Ops);
 
893
  AddNodeIDCustom(ID, N);
 
894
  SDNode *Node = FindNodeOrInsertPos(ID, N->getDebugLoc(), InsertPos);
 
895
  return Node;
 
896
}
 
897
 
 
898
 
 
899
/// FindModifiedNodeSlot - Find a slot for the specified node if its operands
 
900
/// were replaced with those specified.  If this node is never memoized,
 
901
/// return null, otherwise return a pointer to the slot it would take.  If a
 
902
/// node already exists with these operands, the slot will be non-null.
 
903
SDNode *SelectionDAG::FindModifiedNodeSlot(SDNode *N, ArrayRef<SDValue> Ops,
 
904
                                           void *&InsertPos) {
 
905
  if (doNotCSE(N))
 
906
    return nullptr;
 
907
 
 
908
  FoldingSetNodeID ID;
 
909
  AddNodeIDNode(ID, N->getOpcode(), N->getVTList(), Ops);
 
910
  AddNodeIDCustom(ID, N);
 
911
  SDNode *Node = FindNodeOrInsertPos(ID, N->getDebugLoc(), InsertPos);
 
912
  return Node;
 
913
}
 
914
 
 
915
/// getEVTAlignment - Compute the default alignment value for the
 
916
/// given type.
 
917
///
 
918
unsigned SelectionDAG::getEVTAlignment(EVT VT) const {
 
919
  Type *Ty = VT == MVT::iPTR ?
 
920
                   PointerType::get(Type::getInt8Ty(*getContext()), 0) :
 
921
                   VT.getTypeForEVT(*getContext());
 
922
 
 
923
  return getDataLayout().getABITypeAlignment(Ty);
 
924
}
 
925
 
 
926
// EntryNode could meaningfully have debug info if we can find it...
 
927
SelectionDAG::SelectionDAG(const TargetMachine &tm, CodeGenOpt::Level OL)
 
928
    : TM(tm), TSI(nullptr), TLI(nullptr), OptLevel(OL),
 
929
      EntryNode(ISD::EntryToken, 0, DebugLoc(), getVTList(MVT::Other)),
 
930
      Root(getEntryNode()), NewNodesMustHaveLegalTypes(false),
 
931
      UpdateListeners(nullptr) {
 
932
  AllNodes.push_back(&EntryNode);
 
933
  DbgInfo = new SDDbgInfo();
 
934
}
 
935
 
 
936
void SelectionDAG::init(MachineFunction &mf) {
 
937
  MF = &mf;
 
938
  TLI = getSubtarget().getTargetLowering();
 
939
  TSI = getSubtarget().getSelectionDAGInfo();
 
940
  Context = &mf.getFunction()->getContext();
 
941
}
 
942
 
 
943
SelectionDAG::~SelectionDAG() {
 
944
  assert(!UpdateListeners && "Dangling registered DAGUpdateListeners");
 
945
  allnodes_clear();
 
946
  delete DbgInfo;
 
947
}
 
948
 
 
949
void SelectionDAG::allnodes_clear() {
 
950
  assert(&*AllNodes.begin() == &EntryNode);
 
951
  AllNodes.remove(AllNodes.begin());
 
952
  while (!AllNodes.empty())
 
953
    DeallocateNode(AllNodes.begin());
 
954
}
 
955
 
 
956
BinarySDNode *SelectionDAG::GetBinarySDNode(unsigned Opcode, SDLoc DL,
 
957
                                            SDVTList VTs, SDValue N1,
 
958
                                            SDValue N2,
 
959
                                            const SDNodeFlags *Flags) {
 
960
  if (isBinOpWithFlags(Opcode)) {
 
961
    // If no flags were passed in, use a default flags object.
 
962
    SDNodeFlags F;
 
963
    if (Flags == nullptr)
 
964
      Flags = &F;
 
965
 
 
966
    BinaryWithFlagsSDNode *FN = new (NodeAllocator) BinaryWithFlagsSDNode(
 
967
        Opcode, DL.getIROrder(), DL.getDebugLoc(), VTs, N1, N2, *Flags);
 
968
 
 
969
    return FN;
 
970
  }
 
971
 
 
972
  BinarySDNode *N = new (NodeAllocator)
 
973
      BinarySDNode(Opcode, DL.getIROrder(), DL.getDebugLoc(), VTs, N1, N2);
 
974
  return N;
 
975
}
 
976
 
 
977
SDNode *SelectionDAG::FindNodeOrInsertPos(const FoldingSetNodeID &ID,
 
978
                                          void *&InsertPos) {
 
979
  SDNode *N = CSEMap.FindNodeOrInsertPos(ID, InsertPos);
 
980
  if (N) {
 
981
    switch (N->getOpcode()) {
 
982
    default: break;
 
983
    case ISD::Constant:
 
984
    case ISD::ConstantFP:
 
985
      llvm_unreachable("Querying for Constant and ConstantFP nodes requires "
 
986
                       "debug location.  Use another overload.");
 
987
    }
 
988
  }
 
989
  return N;
 
990
}
 
991
 
 
992
SDNode *SelectionDAG::FindNodeOrInsertPos(const FoldingSetNodeID &ID,
 
993
                                          DebugLoc DL, void *&InsertPos) {
 
994
  SDNode *N = CSEMap.FindNodeOrInsertPos(ID, InsertPos);
 
995
  if (N) {
 
996
    switch (N->getOpcode()) {
 
997
    default: break; // Process only regular (non-target) constant nodes.
 
998
    case ISD::Constant:
 
999
    case ISD::ConstantFP:
 
1000
      // Erase debug location from the node if the node is used at several
 
1001
      // different places to do not propagate one location to all uses as it
 
1002
      // leads to incorrect debug info.
 
1003
      if (N->getDebugLoc() != DL)
 
1004
        N->setDebugLoc(DebugLoc());
 
1005
      break;
 
1006
    }
 
1007
  }
 
1008
  return N;
 
1009
}
 
1010
 
 
1011
void SelectionDAG::clear() {
 
1012
  allnodes_clear();
 
1013
  OperandAllocator.Reset();
 
1014
  CSEMap.clear();
 
1015
 
 
1016
  ExtendedValueTypeNodes.clear();
 
1017
  ExternalSymbols.clear();
 
1018
  TargetExternalSymbols.clear();
 
1019
  MCSymbols.clear();
 
1020
  std::fill(CondCodeNodes.begin(), CondCodeNodes.end(),
 
1021
            static_cast<CondCodeSDNode*>(nullptr));
 
1022
  std::fill(ValueTypeNodes.begin(), ValueTypeNodes.end(),
 
1023
            static_cast<SDNode*>(nullptr));
 
1024
 
 
1025
  EntryNode.UseList = nullptr;
 
1026
  AllNodes.push_back(&EntryNode);
 
1027
  Root = getEntryNode();
 
1028
  DbgInfo->clear();
 
1029
}
 
1030
 
 
1031
SDValue SelectionDAG::getAnyExtOrTrunc(SDValue Op, SDLoc DL, EVT VT) {
 
1032
  return VT.bitsGT(Op.getValueType()) ?
 
1033
    getNode(ISD::ANY_EXTEND, DL, VT, Op) :
 
1034
    getNode(ISD::TRUNCATE, DL, VT, Op);
 
1035
}
 
1036
 
 
1037
SDValue SelectionDAG::getSExtOrTrunc(SDValue Op, SDLoc DL, EVT VT) {
 
1038
  return VT.bitsGT(Op.getValueType()) ?
 
1039
    getNode(ISD::SIGN_EXTEND, DL, VT, Op) :
 
1040
    getNode(ISD::TRUNCATE, DL, VT, Op);
 
1041
}
 
1042
 
 
1043
SDValue SelectionDAG::getZExtOrTrunc(SDValue Op, SDLoc DL, EVT VT) {
 
1044
  return VT.bitsGT(Op.getValueType()) ?
 
1045
    getNode(ISD::ZERO_EXTEND, DL, VT, Op) :
 
1046
    getNode(ISD::TRUNCATE, DL, VT, Op);
 
1047
}
 
1048
 
 
1049
SDValue SelectionDAG::getBoolExtOrTrunc(SDValue Op, SDLoc SL, EVT VT,
 
1050
                                        EVT OpVT) {
 
1051
  if (VT.bitsLE(Op.getValueType()))
 
1052
    return getNode(ISD::TRUNCATE, SL, VT, Op);
 
1053
 
 
1054
  TargetLowering::BooleanContent BType = TLI->getBooleanContents(OpVT);
 
1055
  return getNode(TLI->getExtendForContent(BType), SL, VT, Op);
 
1056
}
 
1057
 
 
1058
SDValue SelectionDAG::getZeroExtendInReg(SDValue Op, SDLoc DL, EVT VT) {
 
1059
  assert(!VT.isVector() &&
 
1060
         "getZeroExtendInReg should use the vector element type instead of "
 
1061
         "the vector type!");
 
1062
  if (Op.getValueType() == VT) return Op;
 
1063
  unsigned BitWidth = Op.getValueType().getScalarType().getSizeInBits();
 
1064
  APInt Imm = APInt::getLowBitsSet(BitWidth,
 
1065
                                   VT.getSizeInBits());
 
1066
  return getNode(ISD::AND, DL, Op.getValueType(), Op,
 
1067
                 getConstant(Imm, DL, Op.getValueType()));
 
1068
}
 
1069
 
 
1070
SDValue SelectionDAG::getAnyExtendVectorInReg(SDValue Op, SDLoc DL, EVT VT) {
 
1071
  assert(VT.isVector() && "This DAG node is restricted to vector types.");
 
1072
  assert(VT.getSizeInBits() == Op.getValueType().getSizeInBits() &&
 
1073
         "The sizes of the input and result must match in order to perform the "
 
1074
         "extend in-register.");
 
1075
  assert(VT.getVectorNumElements() < Op.getValueType().getVectorNumElements() &&
 
1076
         "The destination vector type must have fewer lanes than the input.");
 
1077
  return getNode(ISD::ANY_EXTEND_VECTOR_INREG, DL, VT, Op);
 
1078
}
 
1079
 
 
1080
SDValue SelectionDAG::getSignExtendVectorInReg(SDValue Op, SDLoc DL, EVT VT) {
 
1081
  assert(VT.isVector() && "This DAG node is restricted to vector types.");
 
1082
  assert(VT.getSizeInBits() == Op.getValueType().getSizeInBits() &&
 
1083
         "The sizes of the input and result must match in order to perform the "
 
1084
         "extend in-register.");
 
1085
  assert(VT.getVectorNumElements() < Op.getValueType().getVectorNumElements() &&
 
1086
         "The destination vector type must have fewer lanes than the input.");
 
1087
  return getNode(ISD::SIGN_EXTEND_VECTOR_INREG, DL, VT, Op);
 
1088
}
 
1089
 
 
1090
SDValue SelectionDAG::getZeroExtendVectorInReg(SDValue Op, SDLoc DL, EVT VT) {
 
1091
  assert(VT.isVector() && "This DAG node is restricted to vector types.");
 
1092
  assert(VT.getSizeInBits() == Op.getValueType().getSizeInBits() &&
 
1093
         "The sizes of the input and result must match in order to perform the "
 
1094
         "extend in-register.");
 
1095
  assert(VT.getVectorNumElements() < Op.getValueType().getVectorNumElements() &&
 
1096
         "The destination vector type must have fewer lanes than the input.");
 
1097
  return getNode(ISD::ZERO_EXTEND_VECTOR_INREG, DL, VT, Op);
 
1098
}
 
1099
 
 
1100
/// getNOT - Create a bitwise NOT operation as (XOR Val, -1).
 
1101
///
 
1102
SDValue SelectionDAG::getNOT(SDLoc DL, SDValue Val, EVT VT) {
 
1103
  EVT EltVT = VT.getScalarType();
 
1104
  SDValue NegOne =
 
1105
    getConstant(APInt::getAllOnesValue(EltVT.getSizeInBits()), DL, VT);
 
1106
  return getNode(ISD::XOR, DL, VT, Val, NegOne);
 
1107
}
 
1108
 
 
1109
SDValue SelectionDAG::getLogicalNOT(SDLoc DL, SDValue Val, EVT VT) {
 
1110
  EVT EltVT = VT.getScalarType();
 
1111
  SDValue TrueValue;
 
1112
  switch (TLI->getBooleanContents(VT)) {
 
1113
    case TargetLowering::ZeroOrOneBooleanContent:
 
1114
    case TargetLowering::UndefinedBooleanContent:
 
1115
      TrueValue = getConstant(1, DL, VT);
 
1116
      break;
 
1117
    case TargetLowering::ZeroOrNegativeOneBooleanContent:
 
1118
      TrueValue = getConstant(APInt::getAllOnesValue(EltVT.getSizeInBits()), DL,
 
1119
                              VT);
 
1120
      break;
 
1121
  }
 
1122
  return getNode(ISD::XOR, DL, VT, Val, TrueValue);
 
1123
}
 
1124
 
 
1125
SDValue SelectionDAG::getConstant(uint64_t Val, SDLoc DL, EVT VT, bool isT,
 
1126
                                  bool isO) {
 
1127
  EVT EltVT = VT.getScalarType();
 
1128
  assert((EltVT.getSizeInBits() >= 64 ||
 
1129
         (uint64_t)((int64_t)Val >> EltVT.getSizeInBits()) + 1 < 2) &&
 
1130
         "getConstant with a uint64_t value that doesn't fit in the type!");
 
1131
  return getConstant(APInt(EltVT.getSizeInBits(), Val), DL, VT, isT, isO);
 
1132
}
 
1133
 
 
1134
SDValue SelectionDAG::getConstant(const APInt &Val, SDLoc DL, EVT VT, bool isT,
 
1135
                                  bool isO)
 
1136
{
 
1137
  return getConstant(*ConstantInt::get(*Context, Val), DL, VT, isT, isO);
 
1138
}
 
1139
 
 
1140
SDValue SelectionDAG::getConstant(const ConstantInt &Val, SDLoc DL, EVT VT,
 
1141
                                  bool isT, bool isO) {
 
1142
  assert(VT.isInteger() && "Cannot create FP integer constant!");
 
1143
 
 
1144
  EVT EltVT = VT.getScalarType();
 
1145
  const ConstantInt *Elt = &Val;
 
1146
 
 
1147
  // In some cases the vector type is legal but the element type is illegal and
 
1148
  // needs to be promoted, for example v8i8 on ARM.  In this case, promote the
 
1149
  // inserted value (the type does not need to match the vector element type).
 
1150
  // Any extra bits introduced will be truncated away.
 
1151
  if (VT.isVector() && TLI->getTypeAction(*getContext(), EltVT) ==
 
1152
      TargetLowering::TypePromoteInteger) {
 
1153
   EltVT = TLI->getTypeToTransformTo(*getContext(), EltVT);
 
1154
   APInt NewVal = Elt->getValue().zext(EltVT.getSizeInBits());
 
1155
   Elt = ConstantInt::get(*getContext(), NewVal);
 
1156
  }
 
1157
  // In other cases the element type is illegal and needs to be expanded, for
 
1158
  // example v2i64 on MIPS32. In this case, find the nearest legal type, split
 
1159
  // the value into n parts and use a vector type with n-times the elements.
 
1160
  // Then bitcast to the type requested.
 
1161
  // Legalizing constants too early makes the DAGCombiner's job harder so we
 
1162
  // only legalize if the DAG tells us we must produce legal types.
 
1163
  else if (NewNodesMustHaveLegalTypes && VT.isVector() &&
 
1164
           TLI->getTypeAction(*getContext(), EltVT) ==
 
1165
           TargetLowering::TypeExpandInteger) {
 
1166
    APInt NewVal = Elt->getValue();
 
1167
    EVT ViaEltVT = TLI->getTypeToTransformTo(*getContext(), EltVT);
 
1168
    unsigned ViaEltSizeInBits = ViaEltVT.getSizeInBits();
 
1169
    unsigned ViaVecNumElts = VT.getSizeInBits() / ViaEltSizeInBits;
 
1170
    EVT ViaVecVT = EVT::getVectorVT(*getContext(), ViaEltVT, ViaVecNumElts);
 
1171
 
 
1172
    // Check the temporary vector is the correct size. If this fails then
 
1173
    // getTypeToTransformTo() probably returned a type whose size (in bits)
 
1174
    // isn't a power-of-2 factor of the requested type size.
 
1175
    assert(ViaVecVT.getSizeInBits() == VT.getSizeInBits());
 
1176
 
 
1177
    SmallVector<SDValue, 2> EltParts;
 
1178
    for (unsigned i = 0; i < ViaVecNumElts / VT.getVectorNumElements(); ++i) {
 
1179
      EltParts.push_back(getConstant(NewVal.lshr(i * ViaEltSizeInBits)
 
1180
                                           .trunc(ViaEltSizeInBits), DL,
 
1181
                                     ViaEltVT, isT, isO));
 
1182
    }
 
1183
 
 
1184
    // EltParts is currently in little endian order. If we actually want
 
1185
    // big-endian order then reverse it now.
 
1186
    if (getDataLayout().isBigEndian())
 
1187
      std::reverse(EltParts.begin(), EltParts.end());
 
1188
 
 
1189
    // The elements must be reversed when the element order is different
 
1190
    // to the endianness of the elements (because the BITCAST is itself a
 
1191
    // vector shuffle in this situation). However, we do not need any code to
 
1192
    // perform this reversal because getConstant() is producing a vector
 
1193
    // splat.
 
1194
    // This situation occurs in MIPS MSA.
 
1195
 
 
1196
    SmallVector<SDValue, 8> Ops;
 
1197
    for (unsigned i = 0; i < VT.getVectorNumElements(); ++i)
 
1198
      Ops.insert(Ops.end(), EltParts.begin(), EltParts.end());
 
1199
 
 
1200
    SDValue Result = getNode(ISD::BITCAST, SDLoc(), VT,
 
1201
                             getNode(ISD::BUILD_VECTOR, SDLoc(), ViaVecVT,
 
1202
                                     Ops));
 
1203
    return Result;
 
1204
  }
 
1205
 
 
1206
  assert(Elt->getBitWidth() == EltVT.getSizeInBits() &&
 
1207
         "APInt size does not match type size!");
 
1208
  unsigned Opc = isT ? ISD::TargetConstant : ISD::Constant;
 
1209
  FoldingSetNodeID ID;
 
1210
  AddNodeIDNode(ID, Opc, getVTList(EltVT), None);
 
1211
  ID.AddPointer(Elt);
 
1212
  ID.AddBoolean(isO);
 
1213
  void *IP = nullptr;
 
1214
  SDNode *N = nullptr;
 
1215
  if ((N = FindNodeOrInsertPos(ID, DL.getDebugLoc(), IP)))
 
1216
    if (!VT.isVector())
 
1217
      return SDValue(N, 0);
 
1218
 
 
1219
  if (!N) {
 
1220
    N = new (NodeAllocator) ConstantSDNode(isT, isO, Elt, DL.getDebugLoc(),
 
1221
                                           EltVT);
 
1222
    CSEMap.InsertNode(N, IP);
 
1223
    InsertNode(N);
 
1224
  }
 
1225
 
 
1226
  SDValue Result(N, 0);
 
1227
  if (VT.isVector()) {
 
1228
    SmallVector<SDValue, 8> Ops;
 
1229
    Ops.assign(VT.getVectorNumElements(), Result);
 
1230
    Result = getNode(ISD::BUILD_VECTOR, SDLoc(), VT, Ops);
 
1231
  }
 
1232
  return Result;
 
1233
}
 
1234
 
 
1235
SDValue SelectionDAG::getIntPtrConstant(uint64_t Val, SDLoc DL, bool isTarget) {
 
1236
  return getConstant(Val, DL, TLI->getPointerTy(getDataLayout()), isTarget);
 
1237
}
 
1238
 
 
1239
SDValue SelectionDAG::getConstantFP(const APFloat& V, SDLoc DL, EVT VT,
 
1240
                                    bool isTarget) {
 
1241
  return getConstantFP(*ConstantFP::get(*getContext(), V), DL, VT, isTarget);
 
1242
}
 
1243
 
 
1244
SDValue SelectionDAG::getConstantFP(const ConstantFP& V, SDLoc DL, EVT VT,
 
1245
                                    bool isTarget){
 
1246
  assert(VT.isFloatingPoint() && "Cannot create integer FP constant!");
 
1247
 
 
1248
  EVT EltVT = VT.getScalarType();
 
1249
 
 
1250
  // Do the map lookup using the actual bit pattern for the floating point
 
1251
  // value, so that we don't have problems with 0.0 comparing equal to -0.0, and
 
1252
  // we don't have issues with SNANs.
 
1253
  unsigned Opc = isTarget ? ISD::TargetConstantFP : ISD::ConstantFP;
 
1254
  FoldingSetNodeID ID;
 
1255
  AddNodeIDNode(ID, Opc, getVTList(EltVT), None);
 
1256
  ID.AddPointer(&V);
 
1257
  void *IP = nullptr;
 
1258
  SDNode *N = nullptr;
 
1259
  if ((N = FindNodeOrInsertPos(ID, DL.getDebugLoc(), IP)))
 
1260
    if (!VT.isVector())
 
1261
      return SDValue(N, 0);
 
1262
 
 
1263
  if (!N) {
 
1264
    N = new (NodeAllocator) ConstantFPSDNode(isTarget, &V, DL.getDebugLoc(),
 
1265
                                             EltVT);
 
1266
    CSEMap.InsertNode(N, IP);
 
1267
    InsertNode(N);
 
1268
  }
 
1269
 
 
1270
  SDValue Result(N, 0);
 
1271
  if (VT.isVector()) {
 
1272
    SmallVector<SDValue, 8> Ops;
 
1273
    Ops.assign(VT.getVectorNumElements(), Result);
 
1274
    Result = getNode(ISD::BUILD_VECTOR, SDLoc(), VT, Ops);
 
1275
  }
 
1276
  return Result;
 
1277
}
 
1278
 
 
1279
SDValue SelectionDAG::getConstantFP(double Val, SDLoc DL, EVT VT,
 
1280
                                    bool isTarget) {
 
1281
  EVT EltVT = VT.getScalarType();
 
1282
  if (EltVT==MVT::f32)
 
1283
    return getConstantFP(APFloat((float)Val), DL, VT, isTarget);
 
1284
  else if (EltVT==MVT::f64)
 
1285
    return getConstantFP(APFloat(Val), DL, VT, isTarget);
 
1286
  else if (EltVT==MVT::f80 || EltVT==MVT::f128 || EltVT==MVT::ppcf128 ||
 
1287
           EltVT==MVT::f16) {
 
1288
    bool ignored;
 
1289
    APFloat apf = APFloat(Val);
 
1290
    apf.convert(EVTToAPFloatSemantics(EltVT), APFloat::rmNearestTiesToEven,
 
1291
                &ignored);
 
1292
    return getConstantFP(apf, DL, VT, isTarget);
 
1293
  } else
 
1294
    llvm_unreachable("Unsupported type in getConstantFP");
 
1295
}
 
1296
 
 
1297
SDValue SelectionDAG::getGlobalAddress(const GlobalValue *GV, SDLoc DL,
 
1298
                                       EVT VT, int64_t Offset,
 
1299
                                       bool isTargetGA,
 
1300
                                       unsigned char TargetFlags) {
 
1301
  assert((TargetFlags == 0 || isTargetGA) &&
 
1302
         "Cannot set target flags on target-independent globals");
 
1303
 
 
1304
  // Truncate (with sign-extension) the offset value to the pointer size.
 
1305
  unsigned BitWidth = getDataLayout().getPointerTypeSizeInBits(GV->getType());
 
1306
  if (BitWidth < 64)
 
1307
    Offset = SignExtend64(Offset, BitWidth);
 
1308
 
 
1309
  unsigned Opc;
 
1310
  if (GV->isThreadLocal())
 
1311
    Opc = isTargetGA ? ISD::TargetGlobalTLSAddress : ISD::GlobalTLSAddress;
 
1312
  else
 
1313
    Opc = isTargetGA ? ISD::TargetGlobalAddress : ISD::GlobalAddress;
 
1314
 
 
1315
  FoldingSetNodeID ID;
 
1316
  AddNodeIDNode(ID, Opc, getVTList(VT), None);
 
1317
  ID.AddPointer(GV);
 
1318
  ID.AddInteger(Offset);
 
1319
  ID.AddInteger(TargetFlags);
 
1320
  ID.AddInteger(GV->getType()->getAddressSpace());
 
1321
  void *IP = nullptr;
 
1322
  if (SDNode *E = FindNodeOrInsertPos(ID, DL.getDebugLoc(), IP))
 
1323
    return SDValue(E, 0);
 
1324
 
 
1325
  SDNode *N = new (NodeAllocator) GlobalAddressSDNode(Opc, DL.getIROrder(),
 
1326
                                                      DL.getDebugLoc(), GV, VT,
 
1327
                                                      Offset, TargetFlags);
 
1328
  CSEMap.InsertNode(N, IP);
 
1329
    InsertNode(N);
 
1330
  return SDValue(N, 0);
 
1331
}
 
1332
 
 
1333
SDValue SelectionDAG::getFrameIndex(int FI, EVT VT, bool isTarget) {
 
1334
  unsigned Opc = isTarget ? ISD::TargetFrameIndex : ISD::FrameIndex;
 
1335
  FoldingSetNodeID ID;
 
1336
  AddNodeIDNode(ID, Opc, getVTList(VT), None);
 
1337
  ID.AddInteger(FI);
 
1338
  void *IP = nullptr;
 
1339
  if (SDNode *E = FindNodeOrInsertPos(ID, IP))
 
1340
    return SDValue(E, 0);
 
1341
 
 
1342
  SDNode *N = new (NodeAllocator) FrameIndexSDNode(FI, VT, isTarget);
 
1343
  CSEMap.InsertNode(N, IP);
 
1344
  InsertNode(N);
 
1345
  return SDValue(N, 0);
 
1346
}
 
1347
 
 
1348
SDValue SelectionDAG::getJumpTable(int JTI, EVT VT, bool isTarget,
 
1349
                                   unsigned char TargetFlags) {
 
1350
  assert((TargetFlags == 0 || isTarget) &&
 
1351
         "Cannot set target flags on target-independent jump tables");
 
1352
  unsigned Opc = isTarget ? ISD::TargetJumpTable : ISD::JumpTable;
 
1353
  FoldingSetNodeID ID;
 
1354
  AddNodeIDNode(ID, Opc, getVTList(VT), None);
 
1355
  ID.AddInteger(JTI);
 
1356
  ID.AddInteger(TargetFlags);
 
1357
  void *IP = nullptr;
 
1358
  if (SDNode *E = FindNodeOrInsertPos(ID, IP))
 
1359
    return SDValue(E, 0);
 
1360
 
 
1361
  SDNode *N = new (NodeAllocator) JumpTableSDNode(JTI, VT, isTarget,
 
1362
                                                  TargetFlags);
 
1363
  CSEMap.InsertNode(N, IP);
 
1364
  InsertNode(N);
 
1365
  return SDValue(N, 0);
 
1366
}
 
1367
 
 
1368
SDValue SelectionDAG::getConstantPool(const Constant *C, EVT VT,
 
1369
                                      unsigned Alignment, int Offset,
 
1370
                                      bool isTarget,
 
1371
                                      unsigned char TargetFlags) {
 
1372
  assert((TargetFlags == 0 || isTarget) &&
 
1373
         "Cannot set target flags on target-independent globals");
 
1374
  if (Alignment == 0)
 
1375
    Alignment = getDataLayout().getPrefTypeAlignment(C->getType());
 
1376
  unsigned Opc = isTarget ? ISD::TargetConstantPool : ISD::ConstantPool;
 
1377
  FoldingSetNodeID ID;
 
1378
  AddNodeIDNode(ID, Opc, getVTList(VT), None);
 
1379
  ID.AddInteger(Alignment);
 
1380
  ID.AddInteger(Offset);
 
1381
  ID.AddPointer(C);
 
1382
  ID.AddInteger(TargetFlags);
 
1383
  void *IP = nullptr;
 
1384
  if (SDNode *E = FindNodeOrInsertPos(ID, IP))
 
1385
    return SDValue(E, 0);
 
1386
 
 
1387
  SDNode *N = new (NodeAllocator) ConstantPoolSDNode(isTarget, C, VT, Offset,
 
1388
                                                     Alignment, TargetFlags);
 
1389
  CSEMap.InsertNode(N, IP);
 
1390
  InsertNode(N);
 
1391
  return SDValue(N, 0);
 
1392
}
 
1393
 
 
1394
 
 
1395
SDValue SelectionDAG::getConstantPool(MachineConstantPoolValue *C, EVT VT,
 
1396
                                      unsigned Alignment, int Offset,
 
1397
                                      bool isTarget,
 
1398
                                      unsigned char TargetFlags) {
 
1399
  assert((TargetFlags == 0 || isTarget) &&
 
1400
         "Cannot set target flags on target-independent globals");
 
1401
  if (Alignment == 0)
 
1402
    Alignment = getDataLayout().getPrefTypeAlignment(C->getType());
 
1403
  unsigned Opc = isTarget ? ISD::TargetConstantPool : ISD::ConstantPool;
 
1404
  FoldingSetNodeID ID;
 
1405
  AddNodeIDNode(ID, Opc, getVTList(VT), None);
 
1406
  ID.AddInteger(Alignment);
 
1407
  ID.AddInteger(Offset);
 
1408
  C->addSelectionDAGCSEId(ID);
 
1409
  ID.AddInteger(TargetFlags);
 
1410
  void *IP = nullptr;
 
1411
  if (SDNode *E = FindNodeOrInsertPos(ID, IP))
 
1412
    return SDValue(E, 0);
 
1413
 
 
1414
  SDNode *N = new (NodeAllocator) ConstantPoolSDNode(isTarget, C, VT, Offset,
 
1415
                                                     Alignment, TargetFlags);
 
1416
  CSEMap.InsertNode(N, IP);
 
1417
  InsertNode(N);
 
1418
  return SDValue(N, 0);
 
1419
}
 
1420
 
 
1421
SDValue SelectionDAG::getTargetIndex(int Index, EVT VT, int64_t Offset,
 
1422
                                     unsigned char TargetFlags) {
 
1423
  FoldingSetNodeID ID;
 
1424
  AddNodeIDNode(ID, ISD::TargetIndex, getVTList(VT), None);
 
1425
  ID.AddInteger(Index);
 
1426
  ID.AddInteger(Offset);
 
1427
  ID.AddInteger(TargetFlags);
 
1428
  void *IP = nullptr;
 
1429
  if (SDNode *E = FindNodeOrInsertPos(ID, IP))
 
1430
    return SDValue(E, 0);
 
1431
 
 
1432
  SDNode *N = new (NodeAllocator) TargetIndexSDNode(Index, VT, Offset,
 
1433
                                                    TargetFlags);
 
1434
  CSEMap.InsertNode(N, IP);
 
1435
  InsertNode(N);
 
1436
  return SDValue(N, 0);
 
1437
}
 
1438
 
 
1439
SDValue SelectionDAG::getBasicBlock(MachineBasicBlock *MBB) {
 
1440
  FoldingSetNodeID ID;
 
1441
  AddNodeIDNode(ID, ISD::BasicBlock, getVTList(MVT::Other), None);
 
1442
  ID.AddPointer(MBB);
 
1443
  void *IP = nullptr;
 
1444
  if (SDNode *E = FindNodeOrInsertPos(ID, IP))
 
1445
    return SDValue(E, 0);
 
1446
 
 
1447
  SDNode *N = new (NodeAllocator) BasicBlockSDNode(MBB);
 
1448
  CSEMap.InsertNode(N, IP);
 
1449
  InsertNode(N);
 
1450
  return SDValue(N, 0);
 
1451
}
 
1452
 
 
1453
SDValue SelectionDAG::getValueType(EVT VT) {
 
1454
  if (VT.isSimple() && (unsigned)VT.getSimpleVT().SimpleTy >=
 
1455
      ValueTypeNodes.size())
 
1456
    ValueTypeNodes.resize(VT.getSimpleVT().SimpleTy+1);
 
1457
 
 
1458
  SDNode *&N = VT.isExtended() ?
 
1459
    ExtendedValueTypeNodes[VT] : ValueTypeNodes[VT.getSimpleVT().SimpleTy];
 
1460
 
 
1461
  if (N) return SDValue(N, 0);
 
1462
  N = new (NodeAllocator) VTSDNode(VT);
 
1463
  InsertNode(N);
 
1464
  return SDValue(N, 0);
 
1465
}
 
1466
 
 
1467
SDValue SelectionDAG::getExternalSymbol(const char *Sym, EVT VT) {
 
1468
  SDNode *&N = ExternalSymbols[Sym];
 
1469
  if (N) return SDValue(N, 0);
 
1470
  N = new (NodeAllocator) ExternalSymbolSDNode(false, Sym, 0, VT);
 
1471
  InsertNode(N);
 
1472
  return SDValue(N, 0);
 
1473
}
 
1474
 
 
1475
SDValue SelectionDAG::getMCSymbol(MCSymbol *Sym, EVT VT) {
 
1476
  SDNode *&N = MCSymbols[Sym];
 
1477
  if (N)
 
1478
    return SDValue(N, 0);
 
1479
  N = new (NodeAllocator) MCSymbolSDNode(Sym, VT);
 
1480
  InsertNode(N);
 
1481
  return SDValue(N, 0);
 
1482
}
 
1483
 
 
1484
SDValue SelectionDAG::getTargetExternalSymbol(const char *Sym, EVT VT,
 
1485
                                              unsigned char TargetFlags) {
 
1486
  SDNode *&N =
 
1487
    TargetExternalSymbols[std::pair<std::string,unsigned char>(Sym,
 
1488
                                                               TargetFlags)];
 
1489
  if (N) return SDValue(N, 0);
 
1490
  N = new (NodeAllocator) ExternalSymbolSDNode(true, Sym, TargetFlags, VT);
 
1491
  InsertNode(N);
 
1492
  return SDValue(N, 0);
 
1493
}
 
1494
 
 
1495
SDValue SelectionDAG::getCondCode(ISD::CondCode Cond) {
 
1496
  if ((unsigned)Cond >= CondCodeNodes.size())
 
1497
    CondCodeNodes.resize(Cond+1);
 
1498
 
 
1499
  if (!CondCodeNodes[Cond]) {
 
1500
    CondCodeSDNode *N = new (NodeAllocator) CondCodeSDNode(Cond);
 
1501
    CondCodeNodes[Cond] = N;
 
1502
    InsertNode(N);
 
1503
  }
 
1504
 
 
1505
  return SDValue(CondCodeNodes[Cond], 0);
 
1506
}
 
1507
 
 
1508
// commuteShuffle - swaps the values of N1 and N2, and swaps all indices in
 
1509
// the shuffle mask M that point at N1 to point at N2, and indices that point
 
1510
// N2 to point at N1.
 
1511
static void commuteShuffle(SDValue &N1, SDValue &N2, SmallVectorImpl<int> &M) {
 
1512
  std::swap(N1, N2);
 
1513
  ShuffleVectorSDNode::commuteMask(M);
 
1514
}
 
1515
 
 
1516
SDValue SelectionDAG::getVectorShuffle(EVT VT, SDLoc dl, SDValue N1,
 
1517
                                       SDValue N2, const int *Mask) {
 
1518
  assert(VT == N1.getValueType() && VT == N2.getValueType() &&
 
1519
         "Invalid VECTOR_SHUFFLE");
 
1520
 
 
1521
  // Canonicalize shuffle undef, undef -> undef
 
1522
  if (N1.getOpcode() == ISD::UNDEF && N2.getOpcode() == ISD::UNDEF)
 
1523
    return getUNDEF(VT);
 
1524
 
 
1525
  // Validate that all indices in Mask are within the range of the elements
 
1526
  // input to the shuffle.
 
1527
  unsigned NElts = VT.getVectorNumElements();
 
1528
  SmallVector<int, 8> MaskVec;
 
1529
  for (unsigned i = 0; i != NElts; ++i) {
 
1530
    assert(Mask[i] < (int)(NElts * 2) && "Index out of range");
 
1531
    MaskVec.push_back(Mask[i]);
 
1532
  }
 
1533
 
 
1534
  // Canonicalize shuffle v, v -> v, undef
 
1535
  if (N1 == N2) {
 
1536
    N2 = getUNDEF(VT);
 
1537
    for (unsigned i = 0; i != NElts; ++i)
 
1538
      if (MaskVec[i] >= (int)NElts) MaskVec[i] -= NElts;
 
1539
  }
 
1540
 
 
1541
  // Canonicalize shuffle undef, v -> v, undef.  Commute the shuffle mask.
 
1542
  if (N1.getOpcode() == ISD::UNDEF)
 
1543
    commuteShuffle(N1, N2, MaskVec);
 
1544
 
 
1545
  // If shuffling a splat, try to blend the splat instead. We do this here so
 
1546
  // that even when this arises during lowering we don't have to re-handle it.
 
1547
  auto BlendSplat = [&](BuildVectorSDNode *BV, int Offset) {
 
1548
    BitVector UndefElements;
 
1549
    SDValue Splat = BV->getSplatValue(&UndefElements);
 
1550
    if (!Splat)
 
1551
      return;
 
1552
 
 
1553
    for (int i = 0; i < (int)NElts; ++i) {
 
1554
      if (MaskVec[i] < Offset || MaskVec[i] >= (Offset + (int)NElts))
 
1555
        continue;
 
1556
 
 
1557
      // If this input comes from undef, mark it as such.
 
1558
      if (UndefElements[MaskVec[i] - Offset]) {
 
1559
        MaskVec[i] = -1;
 
1560
        continue;
 
1561
      }
 
1562
 
 
1563
      // If we can blend a non-undef lane, use that instead.
 
1564
      if (!UndefElements[i])
 
1565
        MaskVec[i] = i + Offset;
 
1566
    }
 
1567
  };
 
1568
  if (auto *N1BV = dyn_cast<BuildVectorSDNode>(N1))
 
1569
    BlendSplat(N1BV, 0);
 
1570
  if (auto *N2BV = dyn_cast<BuildVectorSDNode>(N2))
 
1571
    BlendSplat(N2BV, NElts);
 
1572
 
 
1573
  // Canonicalize all index into lhs, -> shuffle lhs, undef
 
1574
  // Canonicalize all index into rhs, -> shuffle rhs, undef
 
1575
  bool AllLHS = true, AllRHS = true;
 
1576
  bool N2Undef = N2.getOpcode() == ISD::UNDEF;
 
1577
  for (unsigned i = 0; i != NElts; ++i) {
 
1578
    if (MaskVec[i] >= (int)NElts) {
 
1579
      if (N2Undef)
 
1580
        MaskVec[i] = -1;
 
1581
      else
 
1582
        AllLHS = false;
 
1583
    } else if (MaskVec[i] >= 0) {
 
1584
      AllRHS = false;
 
1585
    }
 
1586
  }
 
1587
  if (AllLHS && AllRHS)
 
1588
    return getUNDEF(VT);
 
1589
  if (AllLHS && !N2Undef)
 
1590
    N2 = getUNDEF(VT);
 
1591
  if (AllRHS) {
 
1592
    N1 = getUNDEF(VT);
 
1593
    commuteShuffle(N1, N2, MaskVec);
 
1594
  }
 
1595
  // Reset our undef status after accounting for the mask.
 
1596
  N2Undef = N2.getOpcode() == ISD::UNDEF;
 
1597
  // Re-check whether both sides ended up undef.
 
1598
  if (N1.getOpcode() == ISD::UNDEF && N2Undef)
 
1599
    return getUNDEF(VT);
 
1600
 
 
1601
  // If Identity shuffle return that node.
 
1602
  bool Identity = true, AllSame = true;
 
1603
  for (unsigned i = 0; i != NElts; ++i) {
 
1604
    if (MaskVec[i] >= 0 && MaskVec[i] != (int)i) Identity = false;
 
1605
    if (MaskVec[i] != MaskVec[0]) AllSame = false;
 
1606
  }
 
1607
  if (Identity && NElts)
 
1608
    return N1;
 
1609
 
 
1610
  // Shuffling a constant splat doesn't change the result.
 
1611
  if (N2Undef) {
 
1612
    SDValue V = N1;
 
1613
 
 
1614
    // Look through any bitcasts. We check that these don't change the number
 
1615
    // (and size) of elements and just changes their types.
 
1616
    while (V.getOpcode() == ISD::BITCAST)
 
1617
      V = V->getOperand(0);
 
1618
 
 
1619
    // A splat should always show up as a build vector node.
 
1620
    if (auto *BV = dyn_cast<BuildVectorSDNode>(V)) {
 
1621
      BitVector UndefElements;
 
1622
      SDValue Splat = BV->getSplatValue(&UndefElements);
 
1623
      // If this is a splat of an undef, shuffling it is also undef.
 
1624
      if (Splat && Splat.getOpcode() == ISD::UNDEF)
 
1625
        return getUNDEF(VT);
 
1626
 
 
1627
      bool SameNumElts =
 
1628
          V.getValueType().getVectorNumElements() == VT.getVectorNumElements();
 
1629
 
 
1630
      // We only have a splat which can skip shuffles if there is a splatted
 
1631
      // value and no undef lanes rearranged by the shuffle.
 
1632
      if (Splat && UndefElements.none()) {
 
1633
        // Splat of <x, x, ..., x>, return <x, x, ..., x>, provided that the
 
1634
        // number of elements match or the value splatted is a zero constant.
 
1635
        if (SameNumElts)
 
1636
          return N1;
 
1637
        if (auto *C = dyn_cast<ConstantSDNode>(Splat))
 
1638
          if (C->isNullValue())
 
1639
            return N1;
 
1640
      }
 
1641
 
 
1642
      // If the shuffle itself creates a splat, build the vector directly.
 
1643
      if (AllSame && SameNumElts) {
 
1644
        const SDValue &Splatted = BV->getOperand(MaskVec[0]);
 
1645
        SmallVector<SDValue, 8> Ops(NElts, Splatted);
 
1646
 
 
1647
        EVT BuildVT = BV->getValueType(0);
 
1648
        SDValue NewBV = getNode(ISD::BUILD_VECTOR, dl, BuildVT, Ops);
 
1649
 
 
1650
        // We may have jumped through bitcasts, so the type of the
 
1651
        // BUILD_VECTOR may not match the type of the shuffle.
 
1652
        if (BuildVT != VT)
 
1653
          NewBV = getNode(ISD::BITCAST, dl, VT, NewBV);
 
1654
        return NewBV;
 
1655
      }
 
1656
    }
 
1657
  }
 
1658
 
 
1659
  FoldingSetNodeID ID;
 
1660
  SDValue Ops[2] = { N1, N2 };
 
1661
  AddNodeIDNode(ID, ISD::VECTOR_SHUFFLE, getVTList(VT), Ops);
 
1662
  for (unsigned i = 0; i != NElts; ++i)
 
1663
    ID.AddInteger(MaskVec[i]);
 
1664
 
 
1665
  void* IP = nullptr;
 
1666
  if (SDNode *E = FindNodeOrInsertPos(ID, dl.getDebugLoc(), IP))
 
1667
    return SDValue(E, 0);
 
1668
 
 
1669
  // Allocate the mask array for the node out of the BumpPtrAllocator, since
 
1670
  // SDNode doesn't have access to it.  This memory will be "leaked" when
 
1671
  // the node is deallocated, but recovered when the NodeAllocator is released.
 
1672
  int *MaskAlloc = OperandAllocator.Allocate<int>(NElts);
 
1673
  memcpy(MaskAlloc, &MaskVec[0], NElts * sizeof(int));
 
1674
 
 
1675
  ShuffleVectorSDNode *N =
 
1676
    new (NodeAllocator) ShuffleVectorSDNode(VT, dl.getIROrder(),
 
1677
                                            dl.getDebugLoc(), N1, N2,
 
1678
                                            MaskAlloc);
 
1679
  CSEMap.InsertNode(N, IP);
 
1680
  InsertNode(N);
 
1681
  return SDValue(N, 0);
 
1682
}
 
1683
 
 
1684
SDValue SelectionDAG::getCommutedVectorShuffle(const ShuffleVectorSDNode &SV) {
 
1685
  MVT VT = SV.getSimpleValueType(0);
 
1686
  SmallVector<int, 8> MaskVec(SV.getMask().begin(), SV.getMask().end());
 
1687
  ShuffleVectorSDNode::commuteMask(MaskVec);
 
1688
 
 
1689
  SDValue Op0 = SV.getOperand(0);
 
1690
  SDValue Op1 = SV.getOperand(1);
 
1691
  return getVectorShuffle(VT, SDLoc(&SV), Op1, Op0, &MaskVec[0]);
 
1692
}
 
1693
 
 
1694
SDValue SelectionDAG::getConvertRndSat(EVT VT, SDLoc dl,
 
1695
                                       SDValue Val, SDValue DTy,
 
1696
                                       SDValue STy, SDValue Rnd, SDValue Sat,
 
1697
                                       ISD::CvtCode Code) {
 
1698
  // If the src and dest types are the same and the conversion is between
 
1699
  // integer types of the same sign or two floats, no conversion is necessary.
 
1700
  if (DTy == STy &&
 
1701
      (Code == ISD::CVT_UU || Code == ISD::CVT_SS || Code == ISD::CVT_FF))
 
1702
    return Val;
 
1703
 
 
1704
  FoldingSetNodeID ID;
 
1705
  SDValue Ops[] = { Val, DTy, STy, Rnd, Sat };
 
1706
  AddNodeIDNode(ID, ISD::CONVERT_RNDSAT, getVTList(VT), Ops);
 
1707
  void* IP = nullptr;
 
1708
  if (SDNode *E = FindNodeOrInsertPos(ID, dl.getDebugLoc(), IP))
 
1709
    return SDValue(E, 0);
 
1710
 
 
1711
  CvtRndSatSDNode *N = new (NodeAllocator) CvtRndSatSDNode(VT, dl.getIROrder(),
 
1712
                                                           dl.getDebugLoc(),
 
1713
                                                           Ops, Code);
 
1714
  CSEMap.InsertNode(N, IP);
 
1715
  InsertNode(N);
 
1716
  return SDValue(N, 0);
 
1717
}
 
1718
 
 
1719
SDValue SelectionDAG::getRegister(unsigned RegNo, EVT VT) {
 
1720
  FoldingSetNodeID ID;
 
1721
  AddNodeIDNode(ID, ISD::Register, getVTList(VT), None);
 
1722
  ID.AddInteger(RegNo);
 
1723
  void *IP = nullptr;
 
1724
  if (SDNode *E = FindNodeOrInsertPos(ID, IP))
 
1725
    return SDValue(E, 0);
 
1726
 
 
1727
  SDNode *N = new (NodeAllocator) RegisterSDNode(RegNo, VT);
 
1728
  CSEMap.InsertNode(N, IP);
 
1729
  InsertNode(N);
 
1730
  return SDValue(N, 0);
 
1731
}
 
1732
 
 
1733
SDValue SelectionDAG::getRegisterMask(const uint32_t *RegMask) {
 
1734
  FoldingSetNodeID ID;
 
1735
  AddNodeIDNode(ID, ISD::RegisterMask, getVTList(MVT::Untyped), None);
 
1736
  ID.AddPointer(RegMask);
 
1737
  void *IP = nullptr;
 
1738
  if (SDNode *E = FindNodeOrInsertPos(ID, IP))
 
1739
    return SDValue(E, 0);
 
1740
 
 
1741
  SDNode *N = new (NodeAllocator) RegisterMaskSDNode(RegMask);
 
1742
  CSEMap.InsertNode(N, IP);
 
1743
  InsertNode(N);
 
1744
  return SDValue(N, 0);
 
1745
}
 
1746
 
 
1747
SDValue SelectionDAG::getEHLabel(SDLoc dl, SDValue Root, MCSymbol *Label) {
 
1748
  FoldingSetNodeID ID;
 
1749
  SDValue Ops[] = { Root };
 
1750
  AddNodeIDNode(ID, ISD::EH_LABEL, getVTList(MVT::Other), Ops);
 
1751
  ID.AddPointer(Label);
 
1752
  void *IP = nullptr;
 
1753
  if (SDNode *E = FindNodeOrInsertPos(ID, IP))
 
1754
    return SDValue(E, 0);
 
1755
 
 
1756
  SDNode *N = new (NodeAllocator) EHLabelSDNode(dl.getIROrder(),
 
1757
                                                dl.getDebugLoc(), Root, Label);
 
1758
  CSEMap.InsertNode(N, IP);
 
1759
  InsertNode(N);
 
1760
  return SDValue(N, 0);
 
1761
}
 
1762
 
 
1763
 
 
1764
SDValue SelectionDAG::getBlockAddress(const BlockAddress *BA, EVT VT,
 
1765
                                      int64_t Offset,
 
1766
                                      bool isTarget,
 
1767
                                      unsigned char TargetFlags) {
 
1768
  unsigned Opc = isTarget ? ISD::TargetBlockAddress : ISD::BlockAddress;
 
1769
 
 
1770
  FoldingSetNodeID ID;
 
1771
  AddNodeIDNode(ID, Opc, getVTList(VT), None);
 
1772
  ID.AddPointer(BA);
 
1773
  ID.AddInteger(Offset);
 
1774
  ID.AddInteger(TargetFlags);
 
1775
  void *IP = nullptr;
 
1776
  if (SDNode *E = FindNodeOrInsertPos(ID, IP))
 
1777
    return SDValue(E, 0);
 
1778
 
 
1779
  SDNode *N = new (NodeAllocator) BlockAddressSDNode(Opc, VT, BA, Offset,
 
1780
                                                     TargetFlags);
 
1781
  CSEMap.InsertNode(N, IP);
 
1782
  InsertNode(N);
 
1783
  return SDValue(N, 0);
 
1784
}
 
1785
 
 
1786
SDValue SelectionDAG::getSrcValue(const Value *V) {
 
1787
  assert((!V || V->getType()->isPointerTy()) &&
 
1788
         "SrcValue is not a pointer?");
 
1789
 
 
1790
  FoldingSetNodeID ID;
 
1791
  AddNodeIDNode(ID, ISD::SRCVALUE, getVTList(MVT::Other), None);
 
1792
  ID.AddPointer(V);
 
1793
 
 
1794
  void *IP = nullptr;
 
1795
  if (SDNode *E = FindNodeOrInsertPos(ID, IP))
 
1796
    return SDValue(E, 0);
 
1797
 
 
1798
  SDNode *N = new (NodeAllocator) SrcValueSDNode(V);
 
1799
  CSEMap.InsertNode(N, IP);
 
1800
  InsertNode(N);
 
1801
  return SDValue(N, 0);
 
1802
}
 
1803
 
 
1804
/// getMDNode - Return an MDNodeSDNode which holds an MDNode.
 
1805
SDValue SelectionDAG::getMDNode(const MDNode *MD) {
 
1806
  FoldingSetNodeID ID;
 
1807
  AddNodeIDNode(ID, ISD::MDNODE_SDNODE, getVTList(MVT::Other), None);
 
1808
  ID.AddPointer(MD);
 
1809
 
 
1810
  void *IP = nullptr;
 
1811
  if (SDNode *E = FindNodeOrInsertPos(ID, IP))
 
1812
    return SDValue(E, 0);
 
1813
 
 
1814
  SDNode *N = new (NodeAllocator) MDNodeSDNode(MD);
 
1815
  CSEMap.InsertNode(N, IP);
 
1816
  InsertNode(N);
 
1817
  return SDValue(N, 0);
 
1818
}
 
1819
 
 
1820
SDValue SelectionDAG::getBitcast(EVT VT, SDValue V) {
 
1821
  if (VT == V.getValueType())
 
1822
    return V;
 
1823
 
 
1824
  return getNode(ISD::BITCAST, SDLoc(V), VT, V);
 
1825
}
 
1826
 
 
1827
/// getAddrSpaceCast - Return an AddrSpaceCastSDNode.
 
1828
SDValue SelectionDAG::getAddrSpaceCast(SDLoc dl, EVT VT, SDValue Ptr,
 
1829
                                       unsigned SrcAS, unsigned DestAS) {
 
1830
  SDValue Ops[] = {Ptr};
 
1831
  FoldingSetNodeID ID;
 
1832
  AddNodeIDNode(ID, ISD::ADDRSPACECAST, getVTList(VT), Ops);
 
1833
  ID.AddInteger(SrcAS);
 
1834
  ID.AddInteger(DestAS);
 
1835
 
 
1836
  void *IP = nullptr;
 
1837
  if (SDNode *E = FindNodeOrInsertPos(ID, dl.getDebugLoc(), IP))
 
1838
    return SDValue(E, 0);
 
1839
 
 
1840
  SDNode *N = new (NodeAllocator) AddrSpaceCastSDNode(dl.getIROrder(),
 
1841
                                                      dl.getDebugLoc(),
 
1842
                                                      VT, Ptr, SrcAS, DestAS);
 
1843
  CSEMap.InsertNode(N, IP);
 
1844
  InsertNode(N);
 
1845
  return SDValue(N, 0);
 
1846
}
 
1847
 
 
1848
/// getShiftAmountOperand - Return the specified value casted to
 
1849
/// the target's desired shift amount type.
 
1850
SDValue SelectionDAG::getShiftAmountOperand(EVT LHSTy, SDValue Op) {
 
1851
  EVT OpTy = Op.getValueType();
 
1852
  EVT ShTy = TLI->getShiftAmountTy(LHSTy, getDataLayout());
 
1853
  if (OpTy == ShTy || OpTy.isVector()) return Op;
 
1854
 
 
1855
  ISD::NodeType Opcode = OpTy.bitsGT(ShTy) ?  ISD::TRUNCATE : ISD::ZERO_EXTEND;
 
1856
  return getNode(Opcode, SDLoc(Op), ShTy, Op);
 
1857
}
 
1858
 
 
1859
/// CreateStackTemporary - Create a stack temporary, suitable for holding the
 
1860
/// specified value type.
 
1861
SDValue SelectionDAG::CreateStackTemporary(EVT VT, unsigned minAlign) {
 
1862
  MachineFrameInfo *FrameInfo = getMachineFunction().getFrameInfo();
 
1863
  unsigned ByteSize = VT.getStoreSize();
 
1864
  Type *Ty = VT.getTypeForEVT(*getContext());
 
1865
  unsigned StackAlign =
 
1866
      std::max((unsigned)getDataLayout().getPrefTypeAlignment(Ty), minAlign);
 
1867
 
 
1868
  int FrameIdx = FrameInfo->CreateStackObject(ByteSize, StackAlign, false);
 
1869
  return getFrameIndex(FrameIdx, TLI->getPointerTy(getDataLayout()));
 
1870
}
 
1871
 
 
1872
/// CreateStackTemporary - Create a stack temporary suitable for holding
 
1873
/// either of the specified value types.
 
1874
SDValue SelectionDAG::CreateStackTemporary(EVT VT1, EVT VT2) {
 
1875
  unsigned Bytes = std::max(VT1.getStoreSizeInBits(),
 
1876
                            VT2.getStoreSizeInBits())/8;
 
1877
  Type *Ty1 = VT1.getTypeForEVT(*getContext());
 
1878
  Type *Ty2 = VT2.getTypeForEVT(*getContext());
 
1879
  const DataLayout &DL = getDataLayout();
 
1880
  unsigned Align =
 
1881
      std::max(DL.getPrefTypeAlignment(Ty1), DL.getPrefTypeAlignment(Ty2));
 
1882
 
 
1883
  MachineFrameInfo *FrameInfo = getMachineFunction().getFrameInfo();
 
1884
  int FrameIdx = FrameInfo->CreateStackObject(Bytes, Align, false);
 
1885
  return getFrameIndex(FrameIdx, TLI->getPointerTy(getDataLayout()));
 
1886
}
 
1887
 
 
1888
SDValue SelectionDAG::FoldSetCC(EVT VT, SDValue N1,
 
1889
                                SDValue N2, ISD::CondCode Cond, SDLoc dl) {
 
1890
  // These setcc operations always fold.
 
1891
  switch (Cond) {
 
1892
  default: break;
 
1893
  case ISD::SETFALSE:
 
1894
  case ISD::SETFALSE2: return getConstant(0, dl, VT);
 
1895
  case ISD::SETTRUE:
 
1896
  case ISD::SETTRUE2: {
 
1897
    TargetLowering::BooleanContent Cnt =
 
1898
        TLI->getBooleanContents(N1->getValueType(0));
 
1899
    return getConstant(
 
1900
        Cnt == TargetLowering::ZeroOrNegativeOneBooleanContent ? -1ULL : 1, dl,
 
1901
        VT);
 
1902
  }
 
1903
 
 
1904
  case ISD::SETOEQ:
 
1905
  case ISD::SETOGT:
 
1906
  case ISD::SETOGE:
 
1907
  case ISD::SETOLT:
 
1908
  case ISD::SETOLE:
 
1909
  case ISD::SETONE:
 
1910
  case ISD::SETO:
 
1911
  case ISD::SETUO:
 
1912
  case ISD::SETUEQ:
 
1913
  case ISD::SETUNE:
 
1914
    assert(!N1.getValueType().isInteger() && "Illegal setcc for integer!");
 
1915
    break;
 
1916
  }
 
1917
 
 
1918
  if (ConstantSDNode *N2C = dyn_cast<ConstantSDNode>(N2)) {
 
1919
    const APInt &C2 = N2C->getAPIntValue();
 
1920
    if (ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1)) {
 
1921
      const APInt &C1 = N1C->getAPIntValue();
 
1922
 
 
1923
      switch (Cond) {
 
1924
      default: llvm_unreachable("Unknown integer setcc!");
 
1925
      case ISD::SETEQ:  return getConstant(C1 == C2, dl, VT);
 
1926
      case ISD::SETNE:  return getConstant(C1 != C2, dl, VT);
 
1927
      case ISD::SETULT: return getConstant(C1.ult(C2), dl, VT);
 
1928
      case ISD::SETUGT: return getConstant(C1.ugt(C2), dl, VT);
 
1929
      case ISD::SETULE: return getConstant(C1.ule(C2), dl, VT);
 
1930
      case ISD::SETUGE: return getConstant(C1.uge(C2), dl, VT);
 
1931
      case ISD::SETLT:  return getConstant(C1.slt(C2), dl, VT);
 
1932
      case ISD::SETGT:  return getConstant(C1.sgt(C2), dl, VT);
 
1933
      case ISD::SETLE:  return getConstant(C1.sle(C2), dl, VT);
 
1934
      case ISD::SETGE:  return getConstant(C1.sge(C2), dl, VT);
 
1935
      }
 
1936
    }
 
1937
  }
 
1938
  if (ConstantFPSDNode *N1C = dyn_cast<ConstantFPSDNode>(N1)) {
 
1939
    if (ConstantFPSDNode *N2C = dyn_cast<ConstantFPSDNode>(N2)) {
 
1940
      APFloat::cmpResult R = N1C->getValueAPF().compare(N2C->getValueAPF());
 
1941
      switch (Cond) {
 
1942
      default: break;
 
1943
      case ISD::SETEQ:  if (R==APFloat::cmpUnordered)
 
1944
                          return getUNDEF(VT);
 
1945
                        // fall through
 
1946
      case ISD::SETOEQ: return getConstant(R==APFloat::cmpEqual, dl, VT);
 
1947
      case ISD::SETNE:  if (R==APFloat::cmpUnordered)
 
1948
                          return getUNDEF(VT);
 
1949
                        // fall through
 
1950
      case ISD::SETONE: return getConstant(R==APFloat::cmpGreaterThan ||
 
1951
                                           R==APFloat::cmpLessThan, dl, VT);
 
1952
      case ISD::SETLT:  if (R==APFloat::cmpUnordered)
 
1953
                          return getUNDEF(VT);
 
1954
                        // fall through
 
1955
      case ISD::SETOLT: return getConstant(R==APFloat::cmpLessThan, dl, VT);
 
1956
      case ISD::SETGT:  if (R==APFloat::cmpUnordered)
 
1957
                          return getUNDEF(VT);
 
1958
                        // fall through
 
1959
      case ISD::SETOGT: return getConstant(R==APFloat::cmpGreaterThan, dl, VT);
 
1960
      case ISD::SETLE:  if (R==APFloat::cmpUnordered)
 
1961
                          return getUNDEF(VT);
 
1962
                        // fall through
 
1963
      case ISD::SETOLE: return getConstant(R==APFloat::cmpLessThan ||
 
1964
                                           R==APFloat::cmpEqual, dl, VT);
 
1965
      case ISD::SETGE:  if (R==APFloat::cmpUnordered)
 
1966
                          return getUNDEF(VT);
 
1967
                        // fall through
 
1968
      case ISD::SETOGE: return getConstant(R==APFloat::cmpGreaterThan ||
 
1969
                                           R==APFloat::cmpEqual, dl, VT);
 
1970
      case ISD::SETO:   return getConstant(R!=APFloat::cmpUnordered, dl, VT);
 
1971
      case ISD::SETUO:  return getConstant(R==APFloat::cmpUnordered, dl, VT);
 
1972
      case ISD::SETUEQ: return getConstant(R==APFloat::cmpUnordered ||
 
1973
                                           R==APFloat::cmpEqual, dl, VT);
 
1974
      case ISD::SETUNE: return getConstant(R!=APFloat::cmpEqual, dl, VT);
 
1975
      case ISD::SETULT: return getConstant(R==APFloat::cmpUnordered ||
 
1976
                                           R==APFloat::cmpLessThan, dl, VT);
 
1977
      case ISD::SETUGT: return getConstant(R==APFloat::cmpGreaterThan ||
 
1978
                                           R==APFloat::cmpUnordered, dl, VT);
 
1979
      case ISD::SETULE: return getConstant(R!=APFloat::cmpGreaterThan, dl, VT);
 
1980
      case ISD::SETUGE: return getConstant(R!=APFloat::cmpLessThan, dl, VT);
 
1981
      }
 
1982
    } else {
 
1983
      // Ensure that the constant occurs on the RHS.
 
1984
      ISD::CondCode SwappedCond = ISD::getSetCCSwappedOperands(Cond);
 
1985
      MVT CompVT = N1.getValueType().getSimpleVT();
 
1986
      if (!TLI->isCondCodeLegal(SwappedCond, CompVT))
 
1987
        return SDValue();
 
1988
 
 
1989
      return getSetCC(dl, VT, N2, N1, SwappedCond);
 
1990
    }
 
1991
  }
 
1992
 
 
1993
  // Could not fold it.
 
1994
  return SDValue();
 
1995
}
 
1996
 
 
1997
/// SignBitIsZero - Return true if the sign bit of Op is known to be zero.  We
 
1998
/// use this predicate to simplify operations downstream.
 
1999
bool SelectionDAG::SignBitIsZero(SDValue Op, unsigned Depth) const {
 
2000
  // This predicate is not safe for vector operations.
 
2001
  if (Op.getValueType().isVector())
 
2002
    return false;
 
2003
 
 
2004
  unsigned BitWidth = Op.getValueType().getScalarType().getSizeInBits();
 
2005
  return MaskedValueIsZero(Op, APInt::getSignBit(BitWidth), Depth);
 
2006
}
 
2007
 
 
2008
/// MaskedValueIsZero - Return true if 'V & Mask' is known to be zero.  We use
 
2009
/// this predicate to simplify operations downstream.  Mask is known to be zero
 
2010
/// for bits that V cannot have.
 
2011
bool SelectionDAG::MaskedValueIsZero(SDValue Op, const APInt &Mask,
 
2012
                                     unsigned Depth) const {
 
2013
  APInt KnownZero, KnownOne;
 
2014
  computeKnownBits(Op, KnownZero, KnownOne, Depth);
 
2015
  return (KnownZero & Mask) == Mask;
 
2016
}
 
2017
 
 
2018
/// Determine which bits of Op are known to be either zero or one and return
 
2019
/// them in the KnownZero/KnownOne bitsets.
 
2020
void SelectionDAG::computeKnownBits(SDValue Op, APInt &KnownZero,
 
2021
                                    APInt &KnownOne, unsigned Depth) const {
 
2022
  unsigned BitWidth = Op.getValueType().getScalarType().getSizeInBits();
 
2023
 
 
2024
  KnownZero = KnownOne = APInt(BitWidth, 0);   // Don't know anything.
 
2025
  if (Depth == 6)
 
2026
    return;  // Limit search depth.
 
2027
 
 
2028
  APInt KnownZero2, KnownOne2;
 
2029
 
 
2030
  switch (Op.getOpcode()) {
 
2031
  case ISD::Constant:
 
2032
    // We know all of the bits for a constant!
 
2033
    KnownOne = cast<ConstantSDNode>(Op)->getAPIntValue();
 
2034
    KnownZero = ~KnownOne;
 
2035
    break;
 
2036
  case ISD::AND:
 
2037
    // If either the LHS or the RHS are Zero, the result is zero.
 
2038
    computeKnownBits(Op.getOperand(1), KnownZero, KnownOne, Depth+1);
 
2039
    computeKnownBits(Op.getOperand(0), KnownZero2, KnownOne2, Depth+1);
 
2040
 
 
2041
    // Output known-1 bits are only known if set in both the LHS & RHS.
 
2042
    KnownOne &= KnownOne2;
 
2043
    // Output known-0 are known to be clear if zero in either the LHS | RHS.
 
2044
    KnownZero |= KnownZero2;
 
2045
    break;
 
2046
  case ISD::OR:
 
2047
    computeKnownBits(Op.getOperand(1), KnownZero, KnownOne, Depth+1);
 
2048
    computeKnownBits(Op.getOperand(0), KnownZero2, KnownOne2, Depth+1);
 
2049
 
 
2050
    // Output known-0 bits are only known if clear in both the LHS & RHS.
 
2051
    KnownZero &= KnownZero2;
 
2052
    // Output known-1 are known to be set if set in either the LHS | RHS.
 
2053
    KnownOne |= KnownOne2;
 
2054
    break;
 
2055
  case ISD::XOR: {
 
2056
    computeKnownBits(Op.getOperand(1), KnownZero, KnownOne, Depth+1);
 
2057
    computeKnownBits(Op.getOperand(0), KnownZero2, KnownOne2, Depth+1);
 
2058
 
 
2059
    // Output known-0 bits are known if clear or set in both the LHS & RHS.
 
2060
    APInt KnownZeroOut = (KnownZero & KnownZero2) | (KnownOne & KnownOne2);
 
2061
    // Output known-1 are known to be set if set in only one of the LHS, RHS.
 
2062
    KnownOne = (KnownZero & KnownOne2) | (KnownOne & KnownZero2);
 
2063
    KnownZero = KnownZeroOut;
 
2064
    break;
 
2065
  }
 
2066
  case ISD::MUL: {
 
2067
    computeKnownBits(Op.getOperand(1), KnownZero, KnownOne, Depth+1);
 
2068
    computeKnownBits(Op.getOperand(0), KnownZero2, KnownOne2, Depth+1);
 
2069
 
 
2070
    // If low bits are zero in either operand, output low known-0 bits.
 
2071
    // Also compute a conserative estimate for high known-0 bits.
 
2072
    // More trickiness is possible, but this is sufficient for the
 
2073
    // interesting case of alignment computation.
 
2074
    KnownOne.clearAllBits();
 
2075
    unsigned TrailZ = KnownZero.countTrailingOnes() +
 
2076
                      KnownZero2.countTrailingOnes();
 
2077
    unsigned LeadZ =  std::max(KnownZero.countLeadingOnes() +
 
2078
                               KnownZero2.countLeadingOnes(),
 
2079
                               BitWidth) - BitWidth;
 
2080
 
 
2081
    TrailZ = std::min(TrailZ, BitWidth);
 
2082
    LeadZ = std::min(LeadZ, BitWidth);
 
2083
    KnownZero = APInt::getLowBitsSet(BitWidth, TrailZ) |
 
2084
                APInt::getHighBitsSet(BitWidth, LeadZ);
 
2085
    break;
 
2086
  }
 
2087
  case ISD::UDIV: {
 
2088
    // For the purposes of computing leading zeros we can conservatively
 
2089
    // treat a udiv as a logical right shift by the power of 2 known to
 
2090
    // be less than the denominator.
 
2091
    computeKnownBits(Op.getOperand(0), KnownZero2, KnownOne2, Depth+1);
 
2092
    unsigned LeadZ = KnownZero2.countLeadingOnes();
 
2093
 
 
2094
    KnownOne2.clearAllBits();
 
2095
    KnownZero2.clearAllBits();
 
2096
    computeKnownBits(Op.getOperand(1), KnownZero2, KnownOne2, Depth+1);
 
2097
    unsigned RHSUnknownLeadingOnes = KnownOne2.countLeadingZeros();
 
2098
    if (RHSUnknownLeadingOnes != BitWidth)
 
2099
      LeadZ = std::min(BitWidth,
 
2100
                       LeadZ + BitWidth - RHSUnknownLeadingOnes - 1);
 
2101
 
 
2102
    KnownZero = APInt::getHighBitsSet(BitWidth, LeadZ);
 
2103
    break;
 
2104
  }
 
2105
  case ISD::SELECT:
 
2106
    computeKnownBits(Op.getOperand(2), KnownZero, KnownOne, Depth+1);
 
2107
    computeKnownBits(Op.getOperand(1), KnownZero2, KnownOne2, Depth+1);
 
2108
 
 
2109
    // Only known if known in both the LHS and RHS.
 
2110
    KnownOne &= KnownOne2;
 
2111
    KnownZero &= KnownZero2;
 
2112
    break;
 
2113
  case ISD::SELECT_CC:
 
2114
    computeKnownBits(Op.getOperand(3), KnownZero, KnownOne, Depth+1);
 
2115
    computeKnownBits(Op.getOperand(2), KnownZero2, KnownOne2, Depth+1);
 
2116
 
 
2117
    // Only known if known in both the LHS and RHS.
 
2118
    KnownOne &= KnownOne2;
 
2119
    KnownZero &= KnownZero2;
 
2120
    break;
 
2121
  case ISD::SADDO:
 
2122
  case ISD::UADDO:
 
2123
  case ISD::SSUBO:
 
2124
  case ISD::USUBO:
 
2125
  case ISD::SMULO:
 
2126
  case ISD::UMULO:
 
2127
    if (Op.getResNo() != 1)
 
2128
      break;
 
2129
    // The boolean result conforms to getBooleanContents.
 
2130
    // If we know the result of a setcc has the top bits zero, use this info.
 
2131
    // We know that we have an integer-based boolean since these operations
 
2132
    // are only available for integer.
 
2133
    if (TLI->getBooleanContents(Op.getValueType().isVector(), false) ==
 
2134
            TargetLowering::ZeroOrOneBooleanContent &&
 
2135
        BitWidth > 1)
 
2136
      KnownZero |= APInt::getHighBitsSet(BitWidth, BitWidth - 1);
 
2137
    break;
 
2138
  case ISD::SETCC:
 
2139
    // If we know the result of a setcc has the top bits zero, use this info.
 
2140
    if (TLI->getBooleanContents(Op.getOperand(0).getValueType()) ==
 
2141
            TargetLowering::ZeroOrOneBooleanContent &&
 
2142
        BitWidth > 1)
 
2143
      KnownZero |= APInt::getHighBitsSet(BitWidth, BitWidth - 1);
 
2144
    break;
 
2145
  case ISD::SHL:
 
2146
    // (shl X, C1) & C2 == 0   iff   (X & C2 >>u C1) == 0
 
2147
    if (ConstantSDNode *SA = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
 
2148
      unsigned ShAmt = SA->getZExtValue();
 
2149
 
 
2150
      // If the shift count is an invalid immediate, don't do anything.
 
2151
      if (ShAmt >= BitWidth)
 
2152
        break;
 
2153
 
 
2154
      computeKnownBits(Op.getOperand(0), KnownZero, KnownOne, Depth+1);
 
2155
      KnownZero <<= ShAmt;
 
2156
      KnownOne  <<= ShAmt;
 
2157
      // low bits known zero.
 
2158
      KnownZero |= APInt::getLowBitsSet(BitWidth, ShAmt);
 
2159
    }
 
2160
    break;
 
2161
  case ISD::SRL:
 
2162
    // (ushr X, C1) & C2 == 0   iff  (-1 >> C1) & C2 == 0
 
2163
    if (ConstantSDNode *SA = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
 
2164
      unsigned ShAmt = SA->getZExtValue();
 
2165
 
 
2166
      // If the shift count is an invalid immediate, don't do anything.
 
2167
      if (ShAmt >= BitWidth)
 
2168
        break;
 
2169
 
 
2170
      computeKnownBits(Op.getOperand(0), KnownZero, KnownOne, Depth+1);
 
2171
      KnownZero = KnownZero.lshr(ShAmt);
 
2172
      KnownOne  = KnownOne.lshr(ShAmt);
 
2173
 
 
2174
      APInt HighBits = APInt::getHighBitsSet(BitWidth, ShAmt);
 
2175
      KnownZero |= HighBits;  // High bits known zero.
 
2176
    }
 
2177
    break;
 
2178
  case ISD::SRA:
 
2179
    if (ConstantSDNode *SA = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
 
2180
      unsigned ShAmt = SA->getZExtValue();
 
2181
 
 
2182
      // If the shift count is an invalid immediate, don't do anything.
 
2183
      if (ShAmt >= BitWidth)
 
2184
        break;
 
2185
 
 
2186
      // If any of the demanded bits are produced by the sign extension, we also
 
2187
      // demand the input sign bit.
 
2188
      APInt HighBits = APInt::getHighBitsSet(BitWidth, ShAmt);
 
2189
 
 
2190
      computeKnownBits(Op.getOperand(0), KnownZero, KnownOne, Depth+1);
 
2191
      KnownZero = KnownZero.lshr(ShAmt);
 
2192
      KnownOne  = KnownOne.lshr(ShAmt);
 
2193
 
 
2194
      // Handle the sign bits.
 
2195
      APInt SignBit = APInt::getSignBit(BitWidth);
 
2196
      SignBit = SignBit.lshr(ShAmt);  // Adjust to where it is now in the mask.
 
2197
 
 
2198
      if (KnownZero.intersects(SignBit)) {
 
2199
        KnownZero |= HighBits;  // New bits are known zero.
 
2200
      } else if (KnownOne.intersects(SignBit)) {
 
2201
        KnownOne  |= HighBits;  // New bits are known one.
 
2202
      }
 
2203
    }
 
2204
    break;
 
2205
  case ISD::SIGN_EXTEND_INREG: {
 
2206
    EVT EVT = cast<VTSDNode>(Op.getOperand(1))->getVT();
 
2207
    unsigned EBits = EVT.getScalarType().getSizeInBits();
 
2208
 
 
2209
    // Sign extension.  Compute the demanded bits in the result that are not
 
2210
    // present in the input.
 
2211
    APInt NewBits = APInt::getHighBitsSet(BitWidth, BitWidth - EBits);
 
2212
 
 
2213
    APInt InSignBit = APInt::getSignBit(EBits);
 
2214
    APInt InputDemandedBits = APInt::getLowBitsSet(BitWidth, EBits);
 
2215
 
 
2216
    // If the sign extended bits are demanded, we know that the sign
 
2217
    // bit is demanded.
 
2218
    InSignBit = InSignBit.zext(BitWidth);
 
2219
    if (NewBits.getBoolValue())
 
2220
      InputDemandedBits |= InSignBit;
 
2221
 
 
2222
    computeKnownBits(Op.getOperand(0), KnownZero, KnownOne, Depth+1);
 
2223
    KnownOne &= InputDemandedBits;
 
2224
    KnownZero &= InputDemandedBits;
 
2225
 
 
2226
    // If the sign bit of the input is known set or clear, then we know the
 
2227
    // top bits of the result.
 
2228
    if (KnownZero.intersects(InSignBit)) {         // Input sign bit known clear
 
2229
      KnownZero |= NewBits;
 
2230
      KnownOne  &= ~NewBits;
 
2231
    } else if (KnownOne.intersects(InSignBit)) {   // Input sign bit known set
 
2232
      KnownOne  |= NewBits;
 
2233
      KnownZero &= ~NewBits;
 
2234
    } else {                              // Input sign bit unknown
 
2235
      KnownZero &= ~NewBits;
 
2236
      KnownOne  &= ~NewBits;
 
2237
    }
 
2238
    break;
 
2239
  }
 
2240
  case ISD::CTTZ:
 
2241
  case ISD::CTTZ_ZERO_UNDEF:
 
2242
  case ISD::CTLZ:
 
2243
  case ISD::CTLZ_ZERO_UNDEF:
 
2244
  case ISD::CTPOP: {
 
2245
    unsigned LowBits = Log2_32(BitWidth)+1;
 
2246
    KnownZero = APInt::getHighBitsSet(BitWidth, BitWidth - LowBits);
 
2247
    KnownOne.clearAllBits();
 
2248
    break;
 
2249
  }
 
2250
  case ISD::LOAD: {
 
2251
    LoadSDNode *LD = cast<LoadSDNode>(Op);
 
2252
    // If this is a ZEXTLoad and we are looking at the loaded value.
 
2253
    if (ISD::isZEXTLoad(Op.getNode()) && Op.getResNo() == 0) {
 
2254
      EVT VT = LD->getMemoryVT();
 
2255
      unsigned MemBits = VT.getScalarType().getSizeInBits();
 
2256
      KnownZero |= APInt::getHighBitsSet(BitWidth, BitWidth - MemBits);
 
2257
    } else if (const MDNode *Ranges = LD->getRanges()) {
 
2258
      computeKnownBitsFromRangeMetadata(*Ranges, KnownZero);
 
2259
    }
 
2260
    break;
 
2261
  }
 
2262
  case ISD::ZERO_EXTEND: {
 
2263
    EVT InVT = Op.getOperand(0).getValueType();
 
2264
    unsigned InBits = InVT.getScalarType().getSizeInBits();
 
2265
    APInt NewBits   = APInt::getHighBitsSet(BitWidth, BitWidth - InBits);
 
2266
    KnownZero = KnownZero.trunc(InBits);
 
2267
    KnownOne = KnownOne.trunc(InBits);
 
2268
    computeKnownBits(Op.getOperand(0), KnownZero, KnownOne, Depth+1);
 
2269
    KnownZero = KnownZero.zext(BitWidth);
 
2270
    KnownOne = KnownOne.zext(BitWidth);
 
2271
    KnownZero |= NewBits;
 
2272
    break;
 
2273
  }
 
2274
  case ISD::SIGN_EXTEND: {
 
2275
    EVT InVT = Op.getOperand(0).getValueType();
 
2276
    unsigned InBits = InVT.getScalarType().getSizeInBits();
 
2277
    APInt NewBits   = APInt::getHighBitsSet(BitWidth, BitWidth - InBits);
 
2278
 
 
2279
    KnownZero = KnownZero.trunc(InBits);
 
2280
    KnownOne = KnownOne.trunc(InBits);
 
2281
    computeKnownBits(Op.getOperand(0), KnownZero, KnownOne, Depth+1);
 
2282
 
 
2283
    // Note if the sign bit is known to be zero or one.
 
2284
    bool SignBitKnownZero = KnownZero.isNegative();
 
2285
    bool SignBitKnownOne  = KnownOne.isNegative();
 
2286
 
 
2287
    KnownZero = KnownZero.zext(BitWidth);
 
2288
    KnownOne = KnownOne.zext(BitWidth);
 
2289
 
 
2290
    // If the sign bit is known zero or one, the top bits match.
 
2291
    if (SignBitKnownZero)
 
2292
      KnownZero |= NewBits;
 
2293
    else if (SignBitKnownOne)
 
2294
      KnownOne  |= NewBits;
 
2295
    break;
 
2296
  }
 
2297
  case ISD::ANY_EXTEND: {
 
2298
    EVT InVT = Op.getOperand(0).getValueType();
 
2299
    unsigned InBits = InVT.getScalarType().getSizeInBits();
 
2300
    KnownZero = KnownZero.trunc(InBits);
 
2301
    KnownOne = KnownOne.trunc(InBits);
 
2302
    computeKnownBits(Op.getOperand(0), KnownZero, KnownOne, Depth+1);
 
2303
    KnownZero = KnownZero.zext(BitWidth);
 
2304
    KnownOne = KnownOne.zext(BitWidth);
 
2305
    break;
 
2306
  }
 
2307
  case ISD::TRUNCATE: {
 
2308
    EVT InVT = Op.getOperand(0).getValueType();
 
2309
    unsigned InBits = InVT.getScalarType().getSizeInBits();
 
2310
    KnownZero = KnownZero.zext(InBits);
 
2311
    KnownOne = KnownOne.zext(InBits);
 
2312
    computeKnownBits(Op.getOperand(0), KnownZero, KnownOne, Depth+1);
 
2313
    KnownZero = KnownZero.trunc(BitWidth);
 
2314
    KnownOne = KnownOne.trunc(BitWidth);
 
2315
    break;
 
2316
  }
 
2317
  case ISD::AssertZext: {
 
2318
    EVT VT = cast<VTSDNode>(Op.getOperand(1))->getVT();
 
2319
    APInt InMask = APInt::getLowBitsSet(BitWidth, VT.getSizeInBits());
 
2320
    computeKnownBits(Op.getOperand(0), KnownZero, KnownOne, Depth+1);
 
2321
    KnownZero |= (~InMask);
 
2322
    KnownOne  &= (~KnownZero);
 
2323
    break;
 
2324
  }
 
2325
  case ISD::FGETSIGN:
 
2326
    // All bits are zero except the low bit.
 
2327
    KnownZero = APInt::getHighBitsSet(BitWidth, BitWidth - 1);
 
2328
    break;
 
2329
 
 
2330
  case ISD::SUB: {
 
2331
    if (ConstantSDNode *CLHS = dyn_cast<ConstantSDNode>(Op.getOperand(0))) {
 
2332
      // We know that the top bits of C-X are clear if X contains less bits
 
2333
      // than C (i.e. no wrap-around can happen).  For example, 20-X is
 
2334
      // positive if we can prove that X is >= 0 and < 16.
 
2335
      if (CLHS->getAPIntValue().isNonNegative()) {
 
2336
        unsigned NLZ = (CLHS->getAPIntValue()+1).countLeadingZeros();
 
2337
        // NLZ can't be BitWidth with no sign bit
 
2338
        APInt MaskV = APInt::getHighBitsSet(BitWidth, NLZ+1);
 
2339
        computeKnownBits(Op.getOperand(1), KnownZero2, KnownOne2, Depth+1);
 
2340
 
 
2341
        // If all of the MaskV bits are known to be zero, then we know the
 
2342
        // output top bits are zero, because we now know that the output is
 
2343
        // from [0-C].
 
2344
        if ((KnownZero2 & MaskV) == MaskV) {
 
2345
          unsigned NLZ2 = CLHS->getAPIntValue().countLeadingZeros();
 
2346
          // Top bits known zero.
 
2347
          KnownZero = APInt::getHighBitsSet(BitWidth, NLZ2);
 
2348
        }
 
2349
      }
 
2350
    }
 
2351
  }
 
2352
  // fall through
 
2353
  case ISD::ADD:
 
2354
  case ISD::ADDE: {
 
2355
    // Output known-0 bits are known if clear or set in both the low clear bits
 
2356
    // common to both LHS & RHS.  For example, 8+(X<<3) is known to have the
 
2357
    // low 3 bits clear.
 
2358
    // Output known-0 bits are also known if the top bits of each input are
 
2359
    // known to be clear. For example, if one input has the top 10 bits clear
 
2360
    // and the other has the top 8 bits clear, we know the top 7 bits of the
 
2361
    // output must be clear.
 
2362
    computeKnownBits(Op.getOperand(0), KnownZero2, KnownOne2, Depth+1);
 
2363
    unsigned KnownZeroHigh = KnownZero2.countLeadingOnes();
 
2364
    unsigned KnownZeroLow = KnownZero2.countTrailingOnes();
 
2365
 
 
2366
    computeKnownBits(Op.getOperand(1), KnownZero2, KnownOne2, Depth+1);
 
2367
    KnownZeroHigh = std::min(KnownZeroHigh,
 
2368
                             KnownZero2.countLeadingOnes());
 
2369
    KnownZeroLow = std::min(KnownZeroLow,
 
2370
                            KnownZero2.countTrailingOnes());
 
2371
 
 
2372
    if (Op.getOpcode() == ISD::ADD) {
 
2373
      KnownZero |= APInt::getLowBitsSet(BitWidth, KnownZeroLow);
 
2374
      if (KnownZeroHigh > 1)
 
2375
        KnownZero |= APInt::getHighBitsSet(BitWidth, KnownZeroHigh - 1);
 
2376
      break;
 
2377
    }
 
2378
 
 
2379
    // With ADDE, a carry bit may be added in, so we can only use this
 
2380
    // information if we know (at least) that the low two bits are clear.  We
 
2381
    // then return to the caller that the low bit is unknown but that other bits
 
2382
    // are known zero.
 
2383
    if (KnownZeroLow >= 2) // ADDE
 
2384
      KnownZero |= APInt::getBitsSet(BitWidth, 1, KnownZeroLow);
 
2385
    break;
 
2386
  }
 
2387
  case ISD::SREM:
 
2388
    if (ConstantSDNode *Rem = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
 
2389
      const APInt &RA = Rem->getAPIntValue().abs();
 
2390
      if (RA.isPowerOf2()) {
 
2391
        APInt LowBits = RA - 1;
 
2392
        computeKnownBits(Op.getOperand(0), KnownZero2,KnownOne2,Depth+1);
 
2393
 
 
2394
        // The low bits of the first operand are unchanged by the srem.
 
2395
        KnownZero = KnownZero2 & LowBits;
 
2396
        KnownOne = KnownOne2 & LowBits;
 
2397
 
 
2398
        // If the first operand is non-negative or has all low bits zero, then
 
2399
        // the upper bits are all zero.
 
2400
        if (KnownZero2[BitWidth-1] || ((KnownZero2 & LowBits) == LowBits))
 
2401
          KnownZero |= ~LowBits;
 
2402
 
 
2403
        // If the first operand is negative and not all low bits are zero, then
 
2404
        // the upper bits are all one.
 
2405
        if (KnownOne2[BitWidth-1] && ((KnownOne2 & LowBits) != 0))
 
2406
          KnownOne |= ~LowBits;
 
2407
        assert((KnownZero & KnownOne) == 0&&"Bits known to be one AND zero?");
 
2408
      }
 
2409
    }
 
2410
    break;
 
2411
  case ISD::UREM: {
 
2412
    if (ConstantSDNode *Rem = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
 
2413
      const APInt &RA = Rem->getAPIntValue();
 
2414
      if (RA.isPowerOf2()) {
 
2415
        APInt LowBits = (RA - 1);
 
2416
        computeKnownBits(Op.getOperand(0), KnownZero2, KnownOne2, Depth + 1);
 
2417
 
 
2418
        // The upper bits are all zero, the lower ones are unchanged.
 
2419
        KnownZero = KnownZero2 | ~LowBits;
 
2420
        KnownOne = KnownOne2 & LowBits;
 
2421
        break;
 
2422
      }
 
2423
    }
 
2424
 
 
2425
    // Since the result is less than or equal to either operand, any leading
 
2426
    // zero bits in either operand must also exist in the result.
 
2427
    computeKnownBits(Op.getOperand(0), KnownZero, KnownOne, Depth+1);
 
2428
    computeKnownBits(Op.getOperand(1), KnownZero2, KnownOne2, Depth+1);
 
2429
 
 
2430
    uint32_t Leaders = std::max(KnownZero.countLeadingOnes(),
 
2431
                                KnownZero2.countLeadingOnes());
 
2432
    KnownOne.clearAllBits();
 
2433
    KnownZero = APInt::getHighBitsSet(BitWidth, Leaders);
 
2434
    break;
 
2435
  }
 
2436
  case ISD::EXTRACT_ELEMENT: {
 
2437
    computeKnownBits(Op.getOperand(0), KnownZero, KnownOne, Depth+1);
 
2438
    const unsigned Index =
 
2439
      cast<ConstantSDNode>(Op.getOperand(1))->getZExtValue();
 
2440
    const unsigned BitWidth = Op.getValueType().getSizeInBits();
 
2441
 
 
2442
    // Remove low part of known bits mask
 
2443
    KnownZero = KnownZero.getHiBits(KnownZero.getBitWidth() - Index * BitWidth);
 
2444
    KnownOne = KnownOne.getHiBits(KnownOne.getBitWidth() - Index * BitWidth);
 
2445
 
 
2446
    // Remove high part of known bit mask
 
2447
    KnownZero = KnownZero.trunc(BitWidth);
 
2448
    KnownOne = KnownOne.trunc(BitWidth);
 
2449
    break;
 
2450
  }
 
2451
  case ISD::SMIN:
 
2452
  case ISD::SMAX:
 
2453
  case ISD::UMIN:
 
2454
  case ISD::UMAX: {
 
2455
    APInt Op0Zero, Op0One;
 
2456
    APInt Op1Zero, Op1One;
 
2457
    computeKnownBits(Op.getOperand(0), Op0Zero, Op0One, Depth);
 
2458
    computeKnownBits(Op.getOperand(1), Op1Zero, Op1One, Depth);
 
2459
 
 
2460
    KnownZero = Op0Zero & Op1Zero;
 
2461
    KnownOne = Op0One & Op1One;
 
2462
    break;
 
2463
  }
 
2464
  case ISD::FrameIndex:
 
2465
  case ISD::TargetFrameIndex:
 
2466
    if (unsigned Align = InferPtrAlignment(Op)) {
 
2467
      // The low bits are known zero if the pointer is aligned.
 
2468
      KnownZero = APInt::getLowBitsSet(BitWidth, Log2_32(Align));
 
2469
      break;
 
2470
    }
 
2471
    break;
 
2472
 
 
2473
  default:
 
2474
    if (Op.getOpcode() < ISD::BUILTIN_OP_END)
 
2475
      break;
 
2476
    // Fallthrough
 
2477
  case ISD::INTRINSIC_WO_CHAIN:
 
2478
  case ISD::INTRINSIC_W_CHAIN:
 
2479
  case ISD::INTRINSIC_VOID:
 
2480
    // Allow the target to implement this method for its nodes.
 
2481
    TLI->computeKnownBitsForTargetNode(Op, KnownZero, KnownOne, *this, Depth);
 
2482
    break;
 
2483
  }
 
2484
 
 
2485
  assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
 
2486
}
 
2487
 
 
2488
/// ComputeNumSignBits - Return the number of times the sign bit of the
 
2489
/// register is replicated into the other bits.  We know that at least 1 bit
 
2490
/// is always equal to the sign bit (itself), but other cases can give us
 
2491
/// information.  For example, immediately after an "SRA X, 2", we know that
 
2492
/// the top 3 bits are all equal to each other, so we return 3.
 
2493
unsigned SelectionDAG::ComputeNumSignBits(SDValue Op, unsigned Depth) const{
 
2494
  EVT VT = Op.getValueType();
 
2495
  assert(VT.isInteger() && "Invalid VT!");
 
2496
  unsigned VTBits = VT.getScalarType().getSizeInBits();
 
2497
  unsigned Tmp, Tmp2;
 
2498
  unsigned FirstAnswer = 1;
 
2499
 
 
2500
  if (Depth == 6)
 
2501
    return 1;  // Limit search depth.
 
2502
 
 
2503
  switch (Op.getOpcode()) {
 
2504
  default: break;
 
2505
  case ISD::AssertSext:
 
2506
    Tmp = cast<VTSDNode>(Op.getOperand(1))->getVT().getSizeInBits();
 
2507
    return VTBits-Tmp+1;
 
2508
  case ISD::AssertZext:
 
2509
    Tmp = cast<VTSDNode>(Op.getOperand(1))->getVT().getSizeInBits();
 
2510
    return VTBits-Tmp;
 
2511
 
 
2512
  case ISD::Constant: {
 
2513
    const APInt &Val = cast<ConstantSDNode>(Op)->getAPIntValue();
 
2514
    return Val.getNumSignBits();
 
2515
  }
 
2516
 
 
2517
  case ISD::SIGN_EXTEND:
 
2518
    Tmp =
 
2519
        VTBits-Op.getOperand(0).getValueType().getScalarType().getSizeInBits();
 
2520
    return ComputeNumSignBits(Op.getOperand(0), Depth+1) + Tmp;
 
2521
 
 
2522
  case ISD::SIGN_EXTEND_INREG:
 
2523
    // Max of the input and what this extends.
 
2524
    Tmp =
 
2525
      cast<VTSDNode>(Op.getOperand(1))->getVT().getScalarType().getSizeInBits();
 
2526
    Tmp = VTBits-Tmp+1;
 
2527
 
 
2528
    Tmp2 = ComputeNumSignBits(Op.getOperand(0), Depth+1);
 
2529
    return std::max(Tmp, Tmp2);
 
2530
 
 
2531
  case ISD::SRA:
 
2532
    Tmp = ComputeNumSignBits(Op.getOperand(0), Depth+1);
 
2533
    // SRA X, C   -> adds C sign bits.
 
2534
    if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
 
2535
      Tmp += C->getZExtValue();
 
2536
      if (Tmp > VTBits) Tmp = VTBits;
 
2537
    }
 
2538
    return Tmp;
 
2539
  case ISD::SHL:
 
2540
    if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
 
2541
      // shl destroys sign bits.
 
2542
      Tmp = ComputeNumSignBits(Op.getOperand(0), Depth+1);
 
2543
      if (C->getZExtValue() >= VTBits ||      // Bad shift.
 
2544
          C->getZExtValue() >= Tmp) break;    // Shifted all sign bits out.
 
2545
      return Tmp - C->getZExtValue();
 
2546
    }
 
2547
    break;
 
2548
  case ISD::AND:
 
2549
  case ISD::OR:
 
2550
  case ISD::XOR:    // NOT is handled here.
 
2551
    // Logical binary ops preserve the number of sign bits at the worst.
 
2552
    Tmp = ComputeNumSignBits(Op.getOperand(0), Depth+1);
 
2553
    if (Tmp != 1) {
 
2554
      Tmp2 = ComputeNumSignBits(Op.getOperand(1), Depth+1);
 
2555
      FirstAnswer = std::min(Tmp, Tmp2);
 
2556
      // We computed what we know about the sign bits as our first
 
2557
      // answer. Now proceed to the generic code that uses
 
2558
      // computeKnownBits, and pick whichever answer is better.
 
2559
    }
 
2560
    break;
 
2561
 
 
2562
  case ISD::SELECT:
 
2563
    Tmp = ComputeNumSignBits(Op.getOperand(1), Depth+1);
 
2564
    if (Tmp == 1) return 1;  // Early out.
 
2565
    Tmp2 = ComputeNumSignBits(Op.getOperand(2), Depth+1);
 
2566
    return std::min(Tmp, Tmp2);
 
2567
  case ISD::SMIN:
 
2568
  case ISD::SMAX:
 
2569
  case ISD::UMIN:
 
2570
  case ISD::UMAX:
 
2571
    Tmp = ComputeNumSignBits(Op.getOperand(0), Depth + 1);
 
2572
    if (Tmp == 1)
 
2573
      return 1;  // Early out.
 
2574
    Tmp2 = ComputeNumSignBits(Op.getOperand(1), Depth + 1);
 
2575
    return std::min(Tmp, Tmp2);
 
2576
  case ISD::SADDO:
 
2577
  case ISD::UADDO:
 
2578
  case ISD::SSUBO:
 
2579
  case ISD::USUBO:
 
2580
  case ISD::SMULO:
 
2581
  case ISD::UMULO:
 
2582
    if (Op.getResNo() != 1)
 
2583
      break;
 
2584
    // The boolean result conforms to getBooleanContents.  Fall through.
 
2585
    // If setcc returns 0/-1, all bits are sign bits.
 
2586
    // We know that we have an integer-based boolean since these operations
 
2587
    // are only available for integer.
 
2588
    if (TLI->getBooleanContents(Op.getValueType().isVector(), false) ==
 
2589
        TargetLowering::ZeroOrNegativeOneBooleanContent)
 
2590
      return VTBits;
 
2591
    break;
 
2592
  case ISD::SETCC:
 
2593
    // If setcc returns 0/-1, all bits are sign bits.
 
2594
    if (TLI->getBooleanContents(Op.getOperand(0).getValueType()) ==
 
2595
        TargetLowering::ZeroOrNegativeOneBooleanContent)
 
2596
      return VTBits;
 
2597
    break;
 
2598
  case ISD::ROTL:
 
2599
  case ISD::ROTR:
 
2600
    if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
 
2601
      unsigned RotAmt = C->getZExtValue() & (VTBits-1);
 
2602
 
 
2603
      // Handle rotate right by N like a rotate left by 32-N.
 
2604
      if (Op.getOpcode() == ISD::ROTR)
 
2605
        RotAmt = (VTBits-RotAmt) & (VTBits-1);
 
2606
 
 
2607
      // If we aren't rotating out all of the known-in sign bits, return the
 
2608
      // number that are left.  This handles rotl(sext(x), 1) for example.
 
2609
      Tmp = ComputeNumSignBits(Op.getOperand(0), Depth+1);
 
2610
      if (Tmp > RotAmt+1) return Tmp-RotAmt;
 
2611
    }
 
2612
    break;
 
2613
  case ISD::ADD:
 
2614
    // Add can have at most one carry bit.  Thus we know that the output
 
2615
    // is, at worst, one more bit than the inputs.
 
2616
    Tmp = ComputeNumSignBits(Op.getOperand(0), Depth+1);
 
2617
    if (Tmp == 1) return 1;  // Early out.
 
2618
 
 
2619
    // Special case decrementing a value (ADD X, -1):
 
2620
    if (ConstantSDNode *CRHS = dyn_cast<ConstantSDNode>(Op.getOperand(1)))
 
2621
      if (CRHS->isAllOnesValue()) {
 
2622
        APInt KnownZero, KnownOne;
 
2623
        computeKnownBits(Op.getOperand(0), KnownZero, KnownOne, Depth+1);
 
2624
 
 
2625
        // If the input is known to be 0 or 1, the output is 0/-1, which is all
 
2626
        // sign bits set.
 
2627
        if ((KnownZero | APInt(VTBits, 1)).isAllOnesValue())
 
2628
          return VTBits;
 
2629
 
 
2630
        // If we are subtracting one from a positive number, there is no carry
 
2631
        // out of the result.
 
2632
        if (KnownZero.isNegative())
 
2633
          return Tmp;
 
2634
      }
 
2635
 
 
2636
    Tmp2 = ComputeNumSignBits(Op.getOperand(1), Depth+1);
 
2637
    if (Tmp2 == 1) return 1;
 
2638
    return std::min(Tmp, Tmp2)-1;
 
2639
 
 
2640
  case ISD::SUB:
 
2641
    Tmp2 = ComputeNumSignBits(Op.getOperand(1), Depth+1);
 
2642
    if (Tmp2 == 1) return 1;
 
2643
 
 
2644
    // Handle NEG.
 
2645
    if (ConstantSDNode *CLHS = dyn_cast<ConstantSDNode>(Op.getOperand(0)))
 
2646
      if (CLHS->isNullValue()) {
 
2647
        APInt KnownZero, KnownOne;
 
2648
        computeKnownBits(Op.getOperand(1), KnownZero, KnownOne, Depth+1);
 
2649
        // If the input is known to be 0 or 1, the output is 0/-1, which is all
 
2650
        // sign bits set.
 
2651
        if ((KnownZero | APInt(VTBits, 1)).isAllOnesValue())
 
2652
          return VTBits;
 
2653
 
 
2654
        // If the input is known to be positive (the sign bit is known clear),
 
2655
        // the output of the NEG has the same number of sign bits as the input.
 
2656
        if (KnownZero.isNegative())
 
2657
          return Tmp2;
 
2658
 
 
2659
        // Otherwise, we treat this like a SUB.
 
2660
      }
 
2661
 
 
2662
    // Sub can have at most one carry bit.  Thus we know that the output
 
2663
    // is, at worst, one more bit than the inputs.
 
2664
    Tmp = ComputeNumSignBits(Op.getOperand(0), Depth+1);
 
2665
    if (Tmp == 1) return 1;  // Early out.
 
2666
    return std::min(Tmp, Tmp2)-1;
 
2667
  case ISD::TRUNCATE:
 
2668
    // FIXME: it's tricky to do anything useful for this, but it is an important
 
2669
    // case for targets like X86.
 
2670
    break;
 
2671
  case ISD::EXTRACT_ELEMENT: {
 
2672
    const int KnownSign = ComputeNumSignBits(Op.getOperand(0), Depth+1);
 
2673
    const int BitWidth = Op.getValueType().getSizeInBits();
 
2674
    const int Items =
 
2675
      Op.getOperand(0).getValueType().getSizeInBits() / BitWidth;
 
2676
 
 
2677
    // Get reverse index (starting from 1), Op1 value indexes elements from
 
2678
    // little end. Sign starts at big end.
 
2679
    const int rIndex = Items - 1 -
 
2680
      cast<ConstantSDNode>(Op.getOperand(1))->getZExtValue();
 
2681
 
 
2682
    // If the sign portion ends in our element the substraction gives correct
 
2683
    // result. Otherwise it gives either negative or > bitwidth result
 
2684
    return std::max(std::min(KnownSign - rIndex * BitWidth, BitWidth), 0);
 
2685
  }
 
2686
  }
 
2687
 
 
2688
  // If we are looking at the loaded value of the SDNode.
 
2689
  if (Op.getResNo() == 0) {
 
2690
    // Handle LOADX separately here. EXTLOAD case will fallthrough.
 
2691
    if (LoadSDNode *LD = dyn_cast<LoadSDNode>(Op)) {
 
2692
      unsigned ExtType = LD->getExtensionType();
 
2693
      switch (ExtType) {
 
2694
        default: break;
 
2695
        case ISD::SEXTLOAD:    // '17' bits known
 
2696
          Tmp = LD->getMemoryVT().getScalarType().getSizeInBits();
 
2697
          return VTBits-Tmp+1;
 
2698
        case ISD::ZEXTLOAD:    // '16' bits known
 
2699
          Tmp = LD->getMemoryVT().getScalarType().getSizeInBits();
 
2700
          return VTBits-Tmp;
 
2701
      }
 
2702
    }
 
2703
  }
 
2704
 
 
2705
  // Allow the target to implement this method for its nodes.
 
2706
  if (Op.getOpcode() >= ISD::BUILTIN_OP_END ||
 
2707
      Op.getOpcode() == ISD::INTRINSIC_WO_CHAIN ||
 
2708
      Op.getOpcode() == ISD::INTRINSIC_W_CHAIN ||
 
2709
      Op.getOpcode() == ISD::INTRINSIC_VOID) {
 
2710
    unsigned NumBits = TLI->ComputeNumSignBitsForTargetNode(Op, *this, Depth);
 
2711
    if (NumBits > 1) FirstAnswer = std::max(FirstAnswer, NumBits);
 
2712
  }
 
2713
 
 
2714
  // Finally, if we can prove that the top bits of the result are 0's or 1's,
 
2715
  // use this information.
 
2716
  APInt KnownZero, KnownOne;
 
2717
  computeKnownBits(Op, KnownZero, KnownOne, Depth);
 
2718
 
 
2719
  APInt Mask;
 
2720
  if (KnownZero.isNegative()) {        // sign bit is 0
 
2721
    Mask = KnownZero;
 
2722
  } else if (KnownOne.isNegative()) {  // sign bit is 1;
 
2723
    Mask = KnownOne;
 
2724
  } else {
 
2725
    // Nothing known.
 
2726
    return FirstAnswer;
 
2727
  }
 
2728
 
 
2729
  // Okay, we know that the sign bit in Mask is set.  Use CLZ to determine
 
2730
  // the number of identical bits in the top of the input value.
 
2731
  Mask = ~Mask;
 
2732
  Mask <<= Mask.getBitWidth()-VTBits;
 
2733
  // Return # leading zeros.  We use 'min' here in case Val was zero before
 
2734
  // shifting.  We don't want to return '64' as for an i32 "0".
 
2735
  return std::max(FirstAnswer, std::min(VTBits, Mask.countLeadingZeros()));
 
2736
}
 
2737
 
 
2738
/// isBaseWithConstantOffset - Return true if the specified operand is an
 
2739
/// ISD::ADD with a ConstantSDNode on the right-hand side, or if it is an
 
2740
/// ISD::OR with a ConstantSDNode that is guaranteed to have the same
 
2741
/// semantics as an ADD.  This handles the equivalence:
 
2742
///     X|Cst == X+Cst iff X&Cst = 0.
 
2743
bool SelectionDAG::isBaseWithConstantOffset(SDValue Op) const {
 
2744
  if ((Op.getOpcode() != ISD::ADD && Op.getOpcode() != ISD::OR) ||
 
2745
      !isa<ConstantSDNode>(Op.getOperand(1)))
 
2746
    return false;
 
2747
 
 
2748
  if (Op.getOpcode() == ISD::OR &&
 
2749
      !MaskedValueIsZero(Op.getOperand(0),
 
2750
                     cast<ConstantSDNode>(Op.getOperand(1))->getAPIntValue()))
 
2751
    return false;
 
2752
 
 
2753
  return true;
 
2754
}
 
2755
 
 
2756
 
 
2757
bool SelectionDAG::isKnownNeverNaN(SDValue Op) const {
 
2758
  // If we're told that NaNs won't happen, assume they won't.
 
2759
  if (getTarget().Options.NoNaNsFPMath)
 
2760
    return true;
 
2761
 
 
2762
  // If the value is a constant, we can obviously see if it is a NaN or not.
 
2763
  if (const ConstantFPSDNode *C = dyn_cast<ConstantFPSDNode>(Op))
 
2764
    return !C->getValueAPF().isNaN();
 
2765
 
 
2766
  // TODO: Recognize more cases here.
 
2767
 
 
2768
  return false;
 
2769
}
 
2770
 
 
2771
bool SelectionDAG::isKnownNeverZero(SDValue Op) const {
 
2772
  // If the value is a constant, we can obviously see if it is a zero or not.
 
2773
  if (const ConstantFPSDNode *C = dyn_cast<ConstantFPSDNode>(Op))
 
2774
    return !C->isZero();
 
2775
 
 
2776
  // TODO: Recognize more cases here.
 
2777
  switch (Op.getOpcode()) {
 
2778
  default: break;
 
2779
  case ISD::OR:
 
2780
    if (const ConstantSDNode *C = dyn_cast<ConstantSDNode>(Op.getOperand(1)))
 
2781
      return !C->isNullValue();
 
2782
    break;
 
2783
  }
 
2784
 
 
2785
  return false;
 
2786
}
 
2787
 
 
2788
bool SelectionDAG::isEqualTo(SDValue A, SDValue B) const {
 
2789
  // Check the obvious case.
 
2790
  if (A == B) return true;
 
2791
 
 
2792
  // For for negative and positive zero.
 
2793
  if (const ConstantFPSDNode *CA = dyn_cast<ConstantFPSDNode>(A))
 
2794
    if (const ConstantFPSDNode *CB = dyn_cast<ConstantFPSDNode>(B))
 
2795
      if (CA->isZero() && CB->isZero()) return true;
 
2796
 
 
2797
  // Otherwise they may not be equal.
 
2798
  return false;
 
2799
}
 
2800
 
 
2801
/// getNode - Gets or creates the specified node.
 
2802
///
 
2803
SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, EVT VT) {
 
2804
  FoldingSetNodeID ID;
 
2805
  AddNodeIDNode(ID, Opcode, getVTList(VT), None);
 
2806
  void *IP = nullptr;
 
2807
  if (SDNode *E = FindNodeOrInsertPos(ID, DL.getDebugLoc(), IP))
 
2808
    return SDValue(E, 0);
 
2809
 
 
2810
  SDNode *N = new (NodeAllocator) SDNode(Opcode, DL.getIROrder(),
 
2811
                                         DL.getDebugLoc(), getVTList(VT));
 
2812
  CSEMap.InsertNode(N, IP);
 
2813
 
 
2814
  InsertNode(N);
 
2815
  return SDValue(N, 0);
 
2816
}
 
2817
 
 
2818
SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL,
 
2819
                              EVT VT, SDValue Operand) {
 
2820
  // Constant fold unary operations with an integer constant operand. Even
 
2821
  // opaque constant will be folded, because the folding of unary operations
 
2822
  // doesn't create new constants with different values. Nevertheless, the
 
2823
  // opaque flag is preserved during folding to prevent future folding with
 
2824
  // other constants.
 
2825
  if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Operand)) {
 
2826
    const APInt &Val = C->getAPIntValue();
 
2827
    switch (Opcode) {
 
2828
    default: break;
 
2829
    case ISD::SIGN_EXTEND:
 
2830
      return getConstant(Val.sextOrTrunc(VT.getSizeInBits()), DL, VT,
 
2831
                         C->isTargetOpcode(), C->isOpaque());
 
2832
    case ISD::ANY_EXTEND:
 
2833
    case ISD::ZERO_EXTEND:
 
2834
    case ISD::TRUNCATE:
 
2835
      return getConstant(Val.zextOrTrunc(VT.getSizeInBits()), DL, VT,
 
2836
                         C->isTargetOpcode(), C->isOpaque());
 
2837
    case ISD::UINT_TO_FP:
 
2838
    case ISD::SINT_TO_FP: {
 
2839
      APFloat apf(EVTToAPFloatSemantics(VT),
 
2840
                  APInt::getNullValue(VT.getSizeInBits()));
 
2841
      (void)apf.convertFromAPInt(Val,
 
2842
                                 Opcode==ISD::SINT_TO_FP,
 
2843
                                 APFloat::rmNearestTiesToEven);
 
2844
      return getConstantFP(apf, DL, VT);
 
2845
    }
 
2846
    case ISD::BITCAST:
 
2847
      if (VT == MVT::f16 && C->getValueType(0) == MVT::i16)
 
2848
        return getConstantFP(APFloat(APFloat::IEEEhalf, Val), DL, VT);
 
2849
      if (VT == MVT::f32 && C->getValueType(0) == MVT::i32)
 
2850
        return getConstantFP(APFloat(APFloat::IEEEsingle, Val), DL, VT);
 
2851
      else if (VT == MVT::f64 && C->getValueType(0) == MVT::i64)
 
2852
        return getConstantFP(APFloat(APFloat::IEEEdouble, Val), DL, VT);
 
2853
      break;
 
2854
    case ISD::BSWAP:
 
2855
      return getConstant(Val.byteSwap(), DL, VT, C->isTargetOpcode(),
 
2856
                         C->isOpaque());
 
2857
    case ISD::CTPOP:
 
2858
      return getConstant(Val.countPopulation(), DL, VT, C->isTargetOpcode(),
 
2859
                         C->isOpaque());
 
2860
    case ISD::CTLZ:
 
2861
    case ISD::CTLZ_ZERO_UNDEF:
 
2862
      return getConstant(Val.countLeadingZeros(), DL, VT, C->isTargetOpcode(),
 
2863
                         C->isOpaque());
 
2864
    case ISD::CTTZ:
 
2865
    case ISD::CTTZ_ZERO_UNDEF:
 
2866
      return getConstant(Val.countTrailingZeros(), DL, VT, C->isTargetOpcode(),
 
2867
                         C->isOpaque());
 
2868
    }
 
2869
  }
 
2870
 
 
2871
  // Constant fold unary operations with a floating point constant operand.
 
2872
  if (ConstantFPSDNode *C = dyn_cast<ConstantFPSDNode>(Operand)) {
 
2873
    APFloat V = C->getValueAPF();    // make copy
 
2874
    switch (Opcode) {
 
2875
    case ISD::FNEG:
 
2876
      V.changeSign();
 
2877
      return getConstantFP(V, DL, VT);
 
2878
    case ISD::FABS:
 
2879
      V.clearSign();
 
2880
      return getConstantFP(V, DL, VT);
 
2881
    case ISD::FCEIL: {
 
2882
      APFloat::opStatus fs = V.roundToIntegral(APFloat::rmTowardPositive);
 
2883
      if (fs == APFloat::opOK || fs == APFloat::opInexact)
 
2884
        return getConstantFP(V, DL, VT);
 
2885
      break;
 
2886
    }
 
2887
    case ISD::FTRUNC: {
 
2888
      APFloat::opStatus fs = V.roundToIntegral(APFloat::rmTowardZero);
 
2889
      if (fs == APFloat::opOK || fs == APFloat::opInexact)
 
2890
        return getConstantFP(V, DL, VT);
 
2891
      break;
 
2892
    }
 
2893
    case ISD::FFLOOR: {
 
2894
      APFloat::opStatus fs = V.roundToIntegral(APFloat::rmTowardNegative);
 
2895
      if (fs == APFloat::opOK || fs == APFloat::opInexact)
 
2896
        return getConstantFP(V, DL, VT);
 
2897
      break;
 
2898
    }
 
2899
    case ISD::FP_EXTEND: {
 
2900
      bool ignored;
 
2901
      // This can return overflow, underflow, or inexact; we don't care.
 
2902
      // FIXME need to be more flexible about rounding mode.
 
2903
      (void)V.convert(EVTToAPFloatSemantics(VT),
 
2904
                      APFloat::rmNearestTiesToEven, &ignored);
 
2905
      return getConstantFP(V, DL, VT);
 
2906
    }
 
2907
    case ISD::FP_TO_SINT:
 
2908
    case ISD::FP_TO_UINT: {
 
2909
      integerPart x[2];
 
2910
      bool ignored;
 
2911
      static_assert(integerPartWidth >= 64, "APFloat parts too small!");
 
2912
      // FIXME need to be more flexible about rounding mode.
 
2913
      APFloat::opStatus s = V.convertToInteger(x, VT.getSizeInBits(),
 
2914
                            Opcode==ISD::FP_TO_SINT,
 
2915
                            APFloat::rmTowardZero, &ignored);
 
2916
      if (s==APFloat::opInvalidOp)     // inexact is OK, in fact usual
 
2917
        break;
 
2918
      APInt api(VT.getSizeInBits(), x);
 
2919
      return getConstant(api, DL, VT);
 
2920
    }
 
2921
    case ISD::BITCAST:
 
2922
      if (VT == MVT::i16 && C->getValueType(0) == MVT::f16)
 
2923
        return getConstant((uint16_t)V.bitcastToAPInt().getZExtValue(), DL, VT);
 
2924
      else if (VT == MVT::i32 && C->getValueType(0) == MVT::f32)
 
2925
        return getConstant((uint32_t)V.bitcastToAPInt().getZExtValue(), DL, VT);
 
2926
      else if (VT == MVT::i64 && C->getValueType(0) == MVT::f64)
 
2927
        return getConstant(V.bitcastToAPInt().getZExtValue(), DL, VT);
 
2928
      break;
 
2929
    }
 
2930
  }
 
2931
 
 
2932
  // Constant fold unary operations with a vector integer or float operand.
 
2933
  if (BuildVectorSDNode *BV = dyn_cast<BuildVectorSDNode>(Operand)) {
 
2934
    if (BV->isConstant()) {
 
2935
      switch (Opcode) {
 
2936
      default:
 
2937
        // FIXME: Entirely reasonable to perform folding of other unary
 
2938
        // operations here as the need arises.
 
2939
        break;
 
2940
      case ISD::FNEG:
 
2941
      case ISD::FABS:
 
2942
      case ISD::FCEIL:
 
2943
      case ISD::FTRUNC:
 
2944
      case ISD::FFLOOR:
 
2945
      case ISD::FP_EXTEND:
 
2946
      case ISD::FP_TO_SINT:
 
2947
      case ISD::FP_TO_UINT:
 
2948
      case ISD::TRUNCATE:
 
2949
      case ISD::UINT_TO_FP:
 
2950
      case ISD::SINT_TO_FP:
 
2951
      case ISD::BSWAP:
 
2952
      case ISD::CTLZ:
 
2953
      case ISD::CTLZ_ZERO_UNDEF:
 
2954
      case ISD::CTTZ:
 
2955
      case ISD::CTTZ_ZERO_UNDEF:
 
2956
      case ISD::CTPOP: {
 
2957
        EVT SVT = VT.getScalarType();
 
2958
        EVT InVT = BV->getValueType(0);
 
2959
        EVT InSVT = InVT.getScalarType();
 
2960
 
 
2961
        // Find legal integer scalar type for constant promotion and
 
2962
        // ensure that its scalar size is at least as large as source.
 
2963
        EVT LegalSVT = SVT;
 
2964
        if (SVT.isInteger()) {
 
2965
          LegalSVT = TLI->getTypeToTransformTo(*getContext(), SVT);
 
2966
          if (LegalSVT.bitsLT(SVT)) break;
 
2967
        }
 
2968
 
 
2969
        // Let the above scalar folding handle the folding of each element.
 
2970
        SmallVector<SDValue, 8> Ops;
 
2971
        for (int i = 0, e = VT.getVectorNumElements(); i != e; ++i) {
 
2972
          SDValue OpN = BV->getOperand(i);
 
2973
          EVT OpVT = OpN.getValueType();
 
2974
 
 
2975
          // Build vector (integer) scalar operands may need implicit
 
2976
          // truncation - do this before constant folding.
 
2977
          if (OpVT.isInteger() && OpVT.bitsGT(InSVT))
 
2978
            OpN = getNode(ISD::TRUNCATE, DL, InSVT, OpN);
 
2979
 
 
2980
          OpN = getNode(Opcode, DL, SVT, OpN);
 
2981
 
 
2982
          // Legalize the (integer) scalar constant if necessary.
 
2983
          if (LegalSVT != SVT)
 
2984
            OpN = getNode(ISD::ANY_EXTEND, DL, LegalSVT, OpN);
 
2985
 
 
2986
          if (OpN.getOpcode() != ISD::UNDEF &&
 
2987
              OpN.getOpcode() != ISD::Constant &&
 
2988
              OpN.getOpcode() != ISD::ConstantFP)
 
2989
            break;
 
2990
          Ops.push_back(OpN);
 
2991
        }
 
2992
        if (Ops.size() == VT.getVectorNumElements())
 
2993
          return getNode(ISD::BUILD_VECTOR, DL, VT, Ops);
 
2994
        break;
 
2995
      }
 
2996
      }
 
2997
    }
 
2998
  }
 
2999
 
 
3000
  unsigned OpOpcode = Operand.getNode()->getOpcode();
 
3001
  switch (Opcode) {
 
3002
  case ISD::TokenFactor:
 
3003
  case ISD::MERGE_VALUES:
 
3004
  case ISD::CONCAT_VECTORS:
 
3005
    return Operand;         // Factor, merge or concat of one node?  No need.
 
3006
  case ISD::FP_ROUND: llvm_unreachable("Invalid method to make FP_ROUND node");
 
3007
  case ISD::FP_EXTEND:
 
3008
    assert(VT.isFloatingPoint() &&
 
3009
           Operand.getValueType().isFloatingPoint() && "Invalid FP cast!");
 
3010
    if (Operand.getValueType() == VT) return Operand;  // noop conversion.
 
3011
    assert((!VT.isVector() ||
 
3012
            VT.getVectorNumElements() ==
 
3013
            Operand.getValueType().getVectorNumElements()) &&
 
3014
           "Vector element count mismatch!");
 
3015
    if (Operand.getOpcode() == ISD::UNDEF)
 
3016
      return getUNDEF(VT);
 
3017
    break;
 
3018
  case ISD::SIGN_EXTEND:
 
3019
    assert(VT.isInteger() && Operand.getValueType().isInteger() &&
 
3020
           "Invalid SIGN_EXTEND!");
 
3021
    if (Operand.getValueType() == VT) return Operand;   // noop extension
 
3022
    assert(Operand.getValueType().getScalarType().bitsLT(VT.getScalarType()) &&
 
3023
           "Invalid sext node, dst < src!");
 
3024
    assert((!VT.isVector() ||
 
3025
            VT.getVectorNumElements() ==
 
3026
            Operand.getValueType().getVectorNumElements()) &&
 
3027
           "Vector element count mismatch!");
 
3028
    if (OpOpcode == ISD::SIGN_EXTEND || OpOpcode == ISD::ZERO_EXTEND)
 
3029
      return getNode(OpOpcode, DL, VT, Operand.getNode()->getOperand(0));
 
3030
    else if (OpOpcode == ISD::UNDEF)
 
3031
      // sext(undef) = 0, because the top bits will all be the same.
 
3032
      return getConstant(0, DL, VT);
 
3033
    break;
 
3034
  case ISD::ZERO_EXTEND:
 
3035
    assert(VT.isInteger() && Operand.getValueType().isInteger() &&
 
3036
           "Invalid ZERO_EXTEND!");
 
3037
    if (Operand.getValueType() == VT) return Operand;   // noop extension
 
3038
    assert(Operand.getValueType().getScalarType().bitsLT(VT.getScalarType()) &&
 
3039
           "Invalid zext node, dst < src!");
 
3040
    assert((!VT.isVector() ||
 
3041
            VT.getVectorNumElements() ==
 
3042
            Operand.getValueType().getVectorNumElements()) &&
 
3043
           "Vector element count mismatch!");
 
3044
    if (OpOpcode == ISD::ZERO_EXTEND)   // (zext (zext x)) -> (zext x)
 
3045
      return getNode(ISD::ZERO_EXTEND, DL, VT,
 
3046
                     Operand.getNode()->getOperand(0));
 
3047
    else if (OpOpcode == ISD::UNDEF)
 
3048
      // zext(undef) = 0, because the top bits will be zero.
 
3049
      return getConstant(0, DL, VT);
 
3050
    break;
 
3051
  case ISD::ANY_EXTEND:
 
3052
    assert(VT.isInteger() && Operand.getValueType().isInteger() &&
 
3053
           "Invalid ANY_EXTEND!");
 
3054
    if (Operand.getValueType() == VT) return Operand;   // noop extension
 
3055
    assert(Operand.getValueType().getScalarType().bitsLT(VT.getScalarType()) &&
 
3056
           "Invalid anyext node, dst < src!");
 
3057
    assert((!VT.isVector() ||
 
3058
            VT.getVectorNumElements() ==
 
3059
            Operand.getValueType().getVectorNumElements()) &&
 
3060
           "Vector element count mismatch!");
 
3061
 
 
3062
    if (OpOpcode == ISD::ZERO_EXTEND || OpOpcode == ISD::SIGN_EXTEND ||
 
3063
        OpOpcode == ISD::ANY_EXTEND)
 
3064
      // (ext (zext x)) -> (zext x)  and  (ext (sext x)) -> (sext x)
 
3065
      return getNode(OpOpcode, DL, VT, Operand.getNode()->getOperand(0));
 
3066
    else if (OpOpcode == ISD::UNDEF)
 
3067
      return getUNDEF(VT);
 
3068
 
 
3069
    // (ext (trunx x)) -> x
 
3070
    if (OpOpcode == ISD::TRUNCATE) {
 
3071
      SDValue OpOp = Operand.getNode()->getOperand(0);
 
3072
      if (OpOp.getValueType() == VT)
 
3073
        return OpOp;
 
3074
    }
 
3075
    break;
 
3076
  case ISD::TRUNCATE:
 
3077
    assert(VT.isInteger() && Operand.getValueType().isInteger() &&
 
3078
           "Invalid TRUNCATE!");
 
3079
    if (Operand.getValueType() == VT) return Operand;   // noop truncate
 
3080
    assert(Operand.getValueType().getScalarType().bitsGT(VT.getScalarType()) &&
 
3081
           "Invalid truncate node, src < dst!");
 
3082
    assert((!VT.isVector() ||
 
3083
            VT.getVectorNumElements() ==
 
3084
            Operand.getValueType().getVectorNumElements()) &&
 
3085
           "Vector element count mismatch!");
 
3086
    if (OpOpcode == ISD::TRUNCATE)
 
3087
      return getNode(ISD::TRUNCATE, DL, VT, Operand.getNode()->getOperand(0));
 
3088
    if (OpOpcode == ISD::ZERO_EXTEND || OpOpcode == ISD::SIGN_EXTEND ||
 
3089
        OpOpcode == ISD::ANY_EXTEND) {
 
3090
      // If the source is smaller than the dest, we still need an extend.
 
3091
      if (Operand.getNode()->getOperand(0).getValueType().getScalarType()
 
3092
            .bitsLT(VT.getScalarType()))
 
3093
        return getNode(OpOpcode, DL, VT, Operand.getNode()->getOperand(0));
 
3094
      if (Operand.getNode()->getOperand(0).getValueType().bitsGT(VT))
 
3095
        return getNode(ISD::TRUNCATE, DL, VT, Operand.getNode()->getOperand(0));
 
3096
      return Operand.getNode()->getOperand(0);
 
3097
    }
 
3098
    if (OpOpcode == ISD::UNDEF)
 
3099
      return getUNDEF(VT);
 
3100
    break;
 
3101
  case ISD::BSWAP:
 
3102
    assert(VT.isInteger() && VT == Operand.getValueType() &&
 
3103
           "Invalid BSWAP!");
 
3104
    assert((VT.getScalarSizeInBits() % 16 == 0) &&
 
3105
           "BSWAP types must be a multiple of 16 bits!");
 
3106
    if (OpOpcode == ISD::UNDEF)
 
3107
      return getUNDEF(VT);
 
3108
    break;
 
3109
  case ISD::BITCAST:
 
3110
    // Basic sanity checking.
 
3111
    assert(VT.getSizeInBits() == Operand.getValueType().getSizeInBits()
 
3112
           && "Cannot BITCAST between types of different sizes!");
 
3113
    if (VT == Operand.getValueType()) return Operand;  // noop conversion.
 
3114
    if (OpOpcode == ISD::BITCAST)  // bitconv(bitconv(x)) -> bitconv(x)
 
3115
      return getNode(ISD::BITCAST, DL, VT, Operand.getOperand(0));
 
3116
    if (OpOpcode == ISD::UNDEF)
 
3117
      return getUNDEF(VT);
 
3118
    break;
 
3119
  case ISD::SCALAR_TO_VECTOR:
 
3120
    assert(VT.isVector() && !Operand.getValueType().isVector() &&
 
3121
           (VT.getVectorElementType() == Operand.getValueType() ||
 
3122
            (VT.getVectorElementType().isInteger() &&
 
3123
             Operand.getValueType().isInteger() &&
 
3124
             VT.getVectorElementType().bitsLE(Operand.getValueType()))) &&
 
3125
           "Illegal SCALAR_TO_VECTOR node!");
 
3126
    if (OpOpcode == ISD::UNDEF)
 
3127
      return getUNDEF(VT);
 
3128
    // scalar_to_vector(extract_vector_elt V, 0) -> V, top bits are undefined.
 
3129
    if (OpOpcode == ISD::EXTRACT_VECTOR_ELT &&
 
3130
        isa<ConstantSDNode>(Operand.getOperand(1)) &&
 
3131
        Operand.getConstantOperandVal(1) == 0 &&
 
3132
        Operand.getOperand(0).getValueType() == VT)
 
3133
      return Operand.getOperand(0);
 
3134
    break;
 
3135
  case ISD::FNEG:
 
3136
    // -(X-Y) -> (Y-X) is unsafe because when X==Y, -0.0 != +0.0
 
3137
    if (getTarget().Options.UnsafeFPMath && OpOpcode == ISD::FSUB)
 
3138
      return getNode(ISD::FSUB, DL, VT, Operand.getNode()->getOperand(1),
 
3139
                     Operand.getNode()->getOperand(0));
 
3140
    if (OpOpcode == ISD::FNEG)  // --X -> X
 
3141
      return Operand.getNode()->getOperand(0);
 
3142
    break;
 
3143
  case ISD::FABS:
 
3144
    if (OpOpcode == ISD::FNEG)  // abs(-X) -> abs(X)
 
3145
      return getNode(ISD::FABS, DL, VT, Operand.getNode()->getOperand(0));
 
3146
    break;
 
3147
  }
 
3148
 
 
3149
  SDNode *N;
 
3150
  SDVTList VTs = getVTList(VT);
 
3151
  if (VT != MVT::Glue) { // Don't CSE flag producing nodes
 
3152
    FoldingSetNodeID ID;
 
3153
    SDValue Ops[1] = { Operand };
 
3154
    AddNodeIDNode(ID, Opcode, VTs, Ops);
 
3155
    void *IP = nullptr;
 
3156
    if (SDNode *E = FindNodeOrInsertPos(ID, DL.getDebugLoc(), IP))
 
3157
      return SDValue(E, 0);
 
3158
 
 
3159
    N = new (NodeAllocator) UnarySDNode(Opcode, DL.getIROrder(),
 
3160
                                        DL.getDebugLoc(), VTs, Operand);
 
3161
    CSEMap.InsertNode(N, IP);
 
3162
  } else {
 
3163
    N = new (NodeAllocator) UnarySDNode(Opcode, DL.getIROrder(),
 
3164
                                        DL.getDebugLoc(), VTs, Operand);
 
3165
  }
 
3166
 
 
3167
  InsertNode(N);
 
3168
  return SDValue(N, 0);
 
3169
}
 
3170
 
 
3171
static std::pair<APInt, bool> FoldValue(unsigned Opcode, const APInt &C1,
 
3172
                                        const APInt &C2) {
 
3173
  switch (Opcode) {
 
3174
  case ISD::ADD:  return std::make_pair(C1 + C2, true);
 
3175
  case ISD::SUB:  return std::make_pair(C1 - C2, true);
 
3176
  case ISD::MUL:  return std::make_pair(C1 * C2, true);
 
3177
  case ISD::AND:  return std::make_pair(C1 & C2, true);
 
3178
  case ISD::OR:   return std::make_pair(C1 | C2, true);
 
3179
  case ISD::XOR:  return std::make_pair(C1 ^ C2, true);
 
3180
  case ISD::SHL:  return std::make_pair(C1 << C2, true);
 
3181
  case ISD::SRL:  return std::make_pair(C1.lshr(C2), true);
 
3182
  case ISD::SRA:  return std::make_pair(C1.ashr(C2), true);
 
3183
  case ISD::ROTL: return std::make_pair(C1.rotl(C2), true);
 
3184
  case ISD::ROTR: return std::make_pair(C1.rotr(C2), true);
 
3185
  case ISD::UDIV:
 
3186
    if (!C2.getBoolValue())
 
3187
      break;
 
3188
    return std::make_pair(C1.udiv(C2), true);
 
3189
  case ISD::UREM:
 
3190
    if (!C2.getBoolValue())
 
3191
      break;
 
3192
    return std::make_pair(C1.urem(C2), true);
 
3193
  case ISD::SDIV:
 
3194
    if (!C2.getBoolValue())
 
3195
      break;
 
3196
    return std::make_pair(C1.sdiv(C2), true);
 
3197
  case ISD::SREM:
 
3198
    if (!C2.getBoolValue())
 
3199
      break;
 
3200
    return std::make_pair(C1.srem(C2), true);
 
3201
  }
 
3202
  return std::make_pair(APInt(1, 0), false);
 
3203
}
 
3204
 
 
3205
SDValue SelectionDAG::FoldConstantArithmetic(unsigned Opcode, SDLoc DL, EVT VT,
 
3206
                                             const ConstantSDNode *Cst1,
 
3207
                                             const ConstantSDNode *Cst2) {
 
3208
  if (Cst1->isOpaque() || Cst2->isOpaque())
 
3209
    return SDValue();
 
3210
 
 
3211
  std::pair<APInt, bool> Folded = FoldValue(Opcode, Cst1->getAPIntValue(),
 
3212
                                            Cst2->getAPIntValue());
 
3213
  if (!Folded.second)
 
3214
    return SDValue();
 
3215
  return getConstant(Folded.first, DL, VT);
 
3216
}
 
3217
 
 
3218
SDValue SelectionDAG::FoldConstantArithmetic(unsigned Opcode, SDLoc DL, EVT VT,
 
3219
                                             SDNode *Cst1, SDNode *Cst2) {
 
3220
  // If the opcode is a target-specific ISD node, there's nothing we can
 
3221
  // do here and the operand rules may not line up with the below, so
 
3222
  // bail early.
 
3223
  if (Opcode >= ISD::BUILTIN_OP_END)
 
3224
    return SDValue();
 
3225
 
 
3226
  // Handle the case of two scalars.
 
3227
  if (const ConstantSDNode *Scalar1 = dyn_cast<ConstantSDNode>(Cst1)) {
 
3228
    if (const ConstantSDNode *Scalar2 = dyn_cast<ConstantSDNode>(Cst2)) {
 
3229
      if (SDValue Folded =
 
3230
          FoldConstantArithmetic(Opcode, DL, VT, Scalar1, Scalar2)) {
 
3231
        if (!VT.isVector())
 
3232
          return Folded;
 
3233
        SmallVector<SDValue, 4> Outputs;
 
3234
        // We may have a vector type but a scalar result. Create a splat.
 
3235
        Outputs.resize(VT.getVectorNumElements(), Outputs.back());
 
3236
        // Build a big vector out of the scalar elements we generated.
 
3237
        return getNode(ISD::BUILD_VECTOR, SDLoc(), VT, Outputs);
 
3238
      } else {
 
3239
        return SDValue();
 
3240
      }
 
3241
    }
 
3242
  }
 
3243
 
 
3244
  // For vectors extract each constant element into Inputs so we can constant
 
3245
  // fold them individually.
 
3246
  BuildVectorSDNode *BV1 = dyn_cast<BuildVectorSDNode>(Cst1);
 
3247
  BuildVectorSDNode *BV2 = dyn_cast<BuildVectorSDNode>(Cst2);
 
3248
  if (!BV1 || !BV2)
 
3249
    return SDValue();
 
3250
 
 
3251
  assert(BV1->getNumOperands() == BV2->getNumOperands() && "Out of sync!");
 
3252
 
 
3253
  EVT SVT = VT.getScalarType();
 
3254
  SmallVector<SDValue, 4> Outputs;
 
3255
  for (unsigned I = 0, E = BV1->getNumOperands(); I != E; ++I) {
 
3256
    ConstantSDNode *V1 = dyn_cast<ConstantSDNode>(BV1->getOperand(I));
 
3257
    ConstantSDNode *V2 = dyn_cast<ConstantSDNode>(BV2->getOperand(I));
 
3258
    if (!V1 || !V2) // Not a constant, bail.
 
3259
      return SDValue();
 
3260
 
 
3261
    if (V1->isOpaque() || V2->isOpaque())
 
3262
      return SDValue();
 
3263
 
 
3264
    // Avoid BUILD_VECTOR nodes that perform implicit truncation.
 
3265
    // FIXME: This is valid and could be handled by truncating the APInts.
 
3266
    if (V1->getValueType(0) != SVT || V2->getValueType(0) != SVT)
 
3267
      return SDValue();
 
3268
 
 
3269
    // Fold one vector element.
 
3270
    std::pair<APInt, bool> Folded = FoldValue(Opcode, V1->getAPIntValue(),
 
3271
                                              V2->getAPIntValue());
 
3272
    if (!Folded.second)
 
3273
      return SDValue();
 
3274
    Outputs.push_back(getConstant(Folded.first, DL, SVT));
 
3275
  }
 
3276
 
 
3277
  assert(VT.getVectorNumElements() == Outputs.size() &&
 
3278
         "Vector size mismatch!");
 
3279
 
 
3280
  // We may have a vector type but a scalar result. Create a splat.
 
3281
  Outputs.resize(VT.getVectorNumElements(), Outputs.back());
 
3282
 
 
3283
  // Build a big vector out of the scalar elements we generated.
 
3284
  return getNode(ISD::BUILD_VECTOR, SDLoc(), VT, Outputs);
 
3285
}
 
3286
 
 
3287
SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, EVT VT, SDValue N1,
 
3288
                              SDValue N2, const SDNodeFlags *Flags) {
 
3289
  ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1);
 
3290
  ConstantSDNode *N2C = dyn_cast<ConstantSDNode>(N2);
 
3291
  switch (Opcode) {
 
3292
  default: break;
 
3293
  case ISD::TokenFactor:
 
3294
    assert(VT == MVT::Other && N1.getValueType() == MVT::Other &&
 
3295
           N2.getValueType() == MVT::Other && "Invalid token factor!");
 
3296
    // Fold trivial token factors.
 
3297
    if (N1.getOpcode() == ISD::EntryToken) return N2;
 
3298
    if (N2.getOpcode() == ISD::EntryToken) return N1;
 
3299
    if (N1 == N2) return N1;
 
3300
    break;
 
3301
  case ISD::CONCAT_VECTORS:
 
3302
    // Concat of UNDEFs is UNDEF.
 
3303
    if (N1.getOpcode() == ISD::UNDEF &&
 
3304
        N2.getOpcode() == ISD::UNDEF)
 
3305
      return getUNDEF(VT);
 
3306
 
 
3307
    // A CONCAT_VECTOR with all operands BUILD_VECTOR can be simplified to
 
3308
    // one big BUILD_VECTOR.
 
3309
    if (N1.getOpcode() == ISD::BUILD_VECTOR &&
 
3310
        N2.getOpcode() == ISD::BUILD_VECTOR) {
 
3311
      SmallVector<SDValue, 16> Elts(N1.getNode()->op_begin(),
 
3312
                                    N1.getNode()->op_end());
 
3313
      Elts.append(N2.getNode()->op_begin(), N2.getNode()->op_end());
 
3314
 
 
3315
      // BUILD_VECTOR requires all inputs to be of the same type, find the
 
3316
      // maximum type and extend them all.
 
3317
      EVT SVT = VT.getScalarType();
 
3318
      for (SDValue Op : Elts)
 
3319
        SVT = (SVT.bitsLT(Op.getValueType()) ? Op.getValueType() : SVT);
 
3320
      if (SVT.bitsGT(VT.getScalarType()))
 
3321
        for (SDValue &Op : Elts)
 
3322
          Op = TLI->isZExtFree(Op.getValueType(), SVT)
 
3323
             ? getZExtOrTrunc(Op, DL, SVT)
 
3324
             : getSExtOrTrunc(Op, DL, SVT);
 
3325
 
 
3326
      return getNode(ISD::BUILD_VECTOR, DL, VT, Elts);
 
3327
    }
 
3328
    break;
 
3329
  case ISD::AND:
 
3330
    assert(VT.isInteger() && "This operator does not apply to FP types!");
 
3331
    assert(N1.getValueType() == N2.getValueType() &&
 
3332
           N1.getValueType() == VT && "Binary operator types must match!");
 
3333
    // (X & 0) -> 0.  This commonly occurs when legalizing i64 values, so it's
 
3334
    // worth handling here.
 
3335
    if (N2C && N2C->isNullValue())
 
3336
      return N2;
 
3337
    if (N2C && N2C->isAllOnesValue())  // X & -1 -> X
 
3338
      return N1;
 
3339
    break;
 
3340
  case ISD::OR:
 
3341
  case ISD::XOR:
 
3342
  case ISD::ADD:
 
3343
  case ISD::SUB:
 
3344
    assert(VT.isInteger() && "This operator does not apply to FP types!");
 
3345
    assert(N1.getValueType() == N2.getValueType() &&
 
3346
           N1.getValueType() == VT && "Binary operator types must match!");
 
3347
    // (X ^|+- 0) -> X.  This commonly occurs when legalizing i64 values, so
 
3348
    // it's worth handling here.
 
3349
    if (N2C && N2C->isNullValue())
 
3350
      return N1;
 
3351
    break;
 
3352
  case ISD::UDIV:
 
3353
  case ISD::UREM:
 
3354
  case ISD::MULHU:
 
3355
  case ISD::MULHS:
 
3356
  case ISD::MUL:
 
3357
  case ISD::SDIV:
 
3358
  case ISD::SREM:
 
3359
    assert(VT.isInteger() && "This operator does not apply to FP types!");
 
3360
    assert(N1.getValueType() == N2.getValueType() &&
 
3361
           N1.getValueType() == VT && "Binary operator types must match!");
 
3362
    break;
 
3363
  case ISD::FADD:
 
3364
  case ISD::FSUB:
 
3365
  case ISD::FMUL:
 
3366
  case ISD::FDIV:
 
3367
  case ISD::FREM:
 
3368
    if (getTarget().Options.UnsafeFPMath) {
 
3369
      if (Opcode == ISD::FADD) {
 
3370
        // 0+x --> x
 
3371
        if (ConstantFPSDNode *CFP = dyn_cast<ConstantFPSDNode>(N1))
 
3372
          if (CFP->getValueAPF().isZero())
 
3373
            return N2;
 
3374
        // x+0 --> x
 
3375
        if (ConstantFPSDNode *CFP = dyn_cast<ConstantFPSDNode>(N2))
 
3376
          if (CFP->getValueAPF().isZero())
 
3377
            return N1;
 
3378
      } else if (Opcode == ISD::FSUB) {
 
3379
        // x-0 --> x
 
3380
        if (ConstantFPSDNode *CFP = dyn_cast<ConstantFPSDNode>(N2))
 
3381
          if (CFP->getValueAPF().isZero())
 
3382
            return N1;
 
3383
      } else if (Opcode == ISD::FMUL) {
 
3384
        ConstantFPSDNode *CFP = dyn_cast<ConstantFPSDNode>(N1);
 
3385
        SDValue V = N2;
 
3386
 
 
3387
        // If the first operand isn't the constant, try the second
 
3388
        if (!CFP) {
 
3389
          CFP = dyn_cast<ConstantFPSDNode>(N2);
 
3390
          V = N1;
 
3391
        }
 
3392
 
 
3393
        if (CFP) {
 
3394
          // 0*x --> 0
 
3395
          if (CFP->isZero())
 
3396
            return SDValue(CFP,0);
 
3397
          // 1*x --> x
 
3398
          if (CFP->isExactlyValue(1.0))
 
3399
            return V;
 
3400
        }
 
3401
      }
 
3402
    }
 
3403
    assert(VT.isFloatingPoint() && "This operator only applies to FP types!");
 
3404
    assert(N1.getValueType() == N2.getValueType() &&
 
3405
           N1.getValueType() == VT && "Binary operator types must match!");
 
3406
    break;
 
3407
  case ISD::FCOPYSIGN:   // N1 and result must match.  N1/N2 need not match.
 
3408
    assert(N1.getValueType() == VT &&
 
3409
           N1.getValueType().isFloatingPoint() &&
 
3410
           N2.getValueType().isFloatingPoint() &&
 
3411
           "Invalid FCOPYSIGN!");
 
3412
    break;
 
3413
  case ISD::SHL:
 
3414
  case ISD::SRA:
 
3415
  case ISD::SRL:
 
3416
  case ISD::ROTL:
 
3417
  case ISD::ROTR:
 
3418
    assert(VT == N1.getValueType() &&
 
3419
           "Shift operators return type must be the same as their first arg");
 
3420
    assert(VT.isInteger() && N2.getValueType().isInteger() &&
 
3421
           "Shifts only work on integers");
 
3422
    assert((!VT.isVector() || VT == N2.getValueType()) &&
 
3423
           "Vector shift amounts must be in the same as their first arg");
 
3424
    // Verify that the shift amount VT is bit enough to hold valid shift
 
3425
    // amounts.  This catches things like trying to shift an i1024 value by an
 
3426
    // i8, which is easy to fall into in generic code that uses
 
3427
    // TLI.getShiftAmount().
 
3428
    assert(N2.getValueType().getSizeInBits() >=
 
3429
                   Log2_32_Ceil(N1.getValueType().getSizeInBits()) &&
 
3430
           "Invalid use of small shift amount with oversized value!");
 
3431
 
 
3432
    // Always fold shifts of i1 values so the code generator doesn't need to
 
3433
    // handle them.  Since we know the size of the shift has to be less than the
 
3434
    // size of the value, the shift/rotate count is guaranteed to be zero.
 
3435
    if (VT == MVT::i1)
 
3436
      return N1;
 
3437
    if (N2C && N2C->isNullValue())
 
3438
      return N1;
 
3439
    break;
 
3440
  case ISD::FP_ROUND_INREG: {
 
3441
    EVT EVT = cast<VTSDNode>(N2)->getVT();
 
3442
    assert(VT == N1.getValueType() && "Not an inreg round!");
 
3443
    assert(VT.isFloatingPoint() && EVT.isFloatingPoint() &&
 
3444
           "Cannot FP_ROUND_INREG integer types");
 
3445
    assert(EVT.isVector() == VT.isVector() &&
 
3446
           "FP_ROUND_INREG type should be vector iff the operand "
 
3447
           "type is vector!");
 
3448
    assert((!EVT.isVector() ||
 
3449
            EVT.getVectorNumElements() == VT.getVectorNumElements()) &&
 
3450
           "Vector element counts must match in FP_ROUND_INREG");
 
3451
    assert(EVT.bitsLE(VT) && "Not rounding down!");
 
3452
    (void)EVT;
 
3453
    if (cast<VTSDNode>(N2)->getVT() == VT) return N1;  // Not actually rounding.
 
3454
    break;
 
3455
  }
 
3456
  case ISD::FP_ROUND:
 
3457
    assert(VT.isFloatingPoint() &&
 
3458
           N1.getValueType().isFloatingPoint() &&
 
3459
           VT.bitsLE(N1.getValueType()) &&
 
3460
           isa<ConstantSDNode>(N2) && "Invalid FP_ROUND!");
 
3461
    if (N1.getValueType() == VT) return N1;  // noop conversion.
 
3462
    break;
 
3463
  case ISD::AssertSext:
 
3464
  case ISD::AssertZext: {
 
3465
    EVT EVT = cast<VTSDNode>(N2)->getVT();
 
3466
    assert(VT == N1.getValueType() && "Not an inreg extend!");
 
3467
    assert(VT.isInteger() && EVT.isInteger() &&
 
3468
           "Cannot *_EXTEND_INREG FP types");
 
3469
    assert(!EVT.isVector() &&
 
3470
           "AssertSExt/AssertZExt type should be the vector element type "
 
3471
           "rather than the vector type!");
 
3472
    assert(EVT.bitsLE(VT) && "Not extending!");
 
3473
    if (VT == EVT) return N1; // noop assertion.
 
3474
    break;
 
3475
  }
 
3476
  case ISD::SIGN_EXTEND_INREG: {
 
3477
    EVT EVT = cast<VTSDNode>(N2)->getVT();
 
3478
    assert(VT == N1.getValueType() && "Not an inreg extend!");
 
3479
    assert(VT.isInteger() && EVT.isInteger() &&
 
3480
           "Cannot *_EXTEND_INREG FP types");
 
3481
    assert(EVT.isVector() == VT.isVector() &&
 
3482
           "SIGN_EXTEND_INREG type should be vector iff the operand "
 
3483
           "type is vector!");
 
3484
    assert((!EVT.isVector() ||
 
3485
            EVT.getVectorNumElements() == VT.getVectorNumElements()) &&
 
3486
           "Vector element counts must match in SIGN_EXTEND_INREG");
 
3487
    assert(EVT.bitsLE(VT) && "Not extending!");
 
3488
    if (EVT == VT) return N1;  // Not actually extending
 
3489
 
 
3490
    auto SignExtendInReg = [&](APInt Val) {
 
3491
      unsigned FromBits = EVT.getScalarType().getSizeInBits();
 
3492
      Val <<= Val.getBitWidth() - FromBits;
 
3493
      Val = Val.ashr(Val.getBitWidth() - FromBits);
 
3494
      return getConstant(Val, DL, VT.getScalarType());
 
3495
    };
 
3496
 
 
3497
    if (N1C) {
 
3498
      APInt Val = N1C->getAPIntValue();
 
3499
      return SignExtendInReg(Val);
 
3500
    }
 
3501
    if (ISD::isBuildVectorOfConstantSDNodes(N1.getNode())) {
 
3502
      SmallVector<SDValue, 8> Ops;
 
3503
      for (int i = 0, e = VT.getVectorNumElements(); i != e; ++i) {
 
3504
        SDValue Op = N1.getOperand(i);
 
3505
        if (Op.getValueType() != VT.getScalarType()) break;
 
3506
        if (Op.getOpcode() == ISD::UNDEF) {
 
3507
          Ops.push_back(Op);
 
3508
          continue;
 
3509
        }
 
3510
        if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Op)) {
 
3511
          APInt Val = C->getAPIntValue();
 
3512
          Ops.push_back(SignExtendInReg(Val));
 
3513
          continue;
 
3514
        }
 
3515
        break;
 
3516
      }
 
3517
      if (Ops.size() == VT.getVectorNumElements())
 
3518
        return getNode(ISD::BUILD_VECTOR, DL, VT, Ops);
 
3519
    }
 
3520
    break;
 
3521
  }
 
3522
  case ISD::EXTRACT_VECTOR_ELT:
 
3523
    // EXTRACT_VECTOR_ELT of an UNDEF is an UNDEF.
 
3524
    if (N1.getOpcode() == ISD::UNDEF)
 
3525
      return getUNDEF(VT);
 
3526
 
 
3527
    // EXTRACT_VECTOR_ELT of out-of-bounds element is an UNDEF
 
3528
    if (N2C && N2C->getZExtValue() >= N1.getValueType().getVectorNumElements())
 
3529
      return getUNDEF(VT);
 
3530
 
 
3531
    // EXTRACT_VECTOR_ELT of CONCAT_VECTORS is often formed while lowering is
 
3532
    // expanding copies of large vectors from registers.
 
3533
    if (N2C &&
 
3534
        N1.getOpcode() == ISD::CONCAT_VECTORS &&
 
3535
        N1.getNumOperands() > 0) {
 
3536
      unsigned Factor =
 
3537
        N1.getOperand(0).getValueType().getVectorNumElements();
 
3538
      return getNode(ISD::EXTRACT_VECTOR_ELT, DL, VT,
 
3539
                     N1.getOperand(N2C->getZExtValue() / Factor),
 
3540
                     getConstant(N2C->getZExtValue() % Factor, DL,
 
3541
                                 N2.getValueType()));
 
3542
    }
 
3543
 
 
3544
    // EXTRACT_VECTOR_ELT of BUILD_VECTOR is often formed while lowering is
 
3545
    // expanding large vector constants.
 
3546
    if (N2C && N1.getOpcode() == ISD::BUILD_VECTOR) {
 
3547
      SDValue Elt = N1.getOperand(N2C->getZExtValue());
 
3548
 
 
3549
      if (VT != Elt.getValueType())
 
3550
        // If the vector element type is not legal, the BUILD_VECTOR operands
 
3551
        // are promoted and implicitly truncated, and the result implicitly
 
3552
        // extended. Make that explicit here.
 
3553
        Elt = getAnyExtOrTrunc(Elt, DL, VT);
 
3554
 
 
3555
      return Elt;
 
3556
    }
 
3557
 
 
3558
    // EXTRACT_VECTOR_ELT of INSERT_VECTOR_ELT is often formed when vector
 
3559
    // operations are lowered to scalars.
 
3560
    if (N1.getOpcode() == ISD::INSERT_VECTOR_ELT) {
 
3561
      // If the indices are the same, return the inserted element else
 
3562
      // if the indices are known different, extract the element from
 
3563
      // the original vector.
 
3564
      SDValue N1Op2 = N1.getOperand(2);
 
3565
      ConstantSDNode *N1Op2C = dyn_cast<ConstantSDNode>(N1Op2);
 
3566
 
 
3567
      if (N1Op2C && N2C) {
 
3568
        if (N1Op2C->getZExtValue() == N2C->getZExtValue()) {
 
3569
          if (VT == N1.getOperand(1).getValueType())
 
3570
            return N1.getOperand(1);
 
3571
          else
 
3572
            return getSExtOrTrunc(N1.getOperand(1), DL, VT);
 
3573
        }
 
3574
 
 
3575
        return getNode(ISD::EXTRACT_VECTOR_ELT, DL, VT, N1.getOperand(0), N2);
 
3576
      }
 
3577
    }
 
3578
    break;
 
3579
  case ISD::EXTRACT_ELEMENT:
 
3580
    assert(N2C && (unsigned)N2C->getZExtValue() < 2 && "Bad EXTRACT_ELEMENT!");
 
3581
    assert(!N1.getValueType().isVector() && !VT.isVector() &&
 
3582
           (N1.getValueType().isInteger() == VT.isInteger()) &&
 
3583
           N1.getValueType() != VT &&
 
3584
           "Wrong types for EXTRACT_ELEMENT!");
 
3585
 
 
3586
    // EXTRACT_ELEMENT of BUILD_PAIR is often formed while legalize is expanding
 
3587
    // 64-bit integers into 32-bit parts.  Instead of building the extract of
 
3588
    // the BUILD_PAIR, only to have legalize rip it apart, just do it now.
 
3589
    if (N1.getOpcode() == ISD::BUILD_PAIR)
 
3590
      return N1.getOperand(N2C->getZExtValue());
 
3591
 
 
3592
    // EXTRACT_ELEMENT of a constant int is also very common.
 
3593
    if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(N1)) {
 
3594
      unsigned ElementSize = VT.getSizeInBits();
 
3595
      unsigned Shift = ElementSize * N2C->getZExtValue();
 
3596
      APInt ShiftedVal = C->getAPIntValue().lshr(Shift);
 
3597
      return getConstant(ShiftedVal.trunc(ElementSize), DL, VT);
 
3598
    }
 
3599
    break;
 
3600
  case ISD::EXTRACT_SUBVECTOR: {
 
3601
    SDValue Index = N2;
 
3602
    if (VT.isSimple() && N1.getValueType().isSimple()) {
 
3603
      assert(VT.isVector() && N1.getValueType().isVector() &&
 
3604
             "Extract subvector VTs must be a vectors!");
 
3605
      assert(VT.getVectorElementType() ==
 
3606
             N1.getValueType().getVectorElementType() &&
 
3607
             "Extract subvector VTs must have the same element type!");
 
3608
      assert(VT.getSimpleVT() <= N1.getSimpleValueType() &&
 
3609
             "Extract subvector must be from larger vector to smaller vector!");
 
3610
 
 
3611
      if (isa<ConstantSDNode>(Index)) {
 
3612
        assert((VT.getVectorNumElements() +
 
3613
                cast<ConstantSDNode>(Index)->getZExtValue()
 
3614
                <= N1.getValueType().getVectorNumElements())
 
3615
               && "Extract subvector overflow!");
 
3616
      }
 
3617
 
 
3618
      // Trivial extraction.
 
3619
      if (VT.getSimpleVT() == N1.getSimpleValueType())
 
3620
        return N1;
 
3621
    }
 
3622
    break;
 
3623
  }
 
3624
  }
 
3625
 
 
3626
  // Perform trivial constant folding.
 
3627
  if (SDValue SV =
 
3628
          FoldConstantArithmetic(Opcode, DL, VT, N1.getNode(), N2.getNode()))
 
3629
    return SV;
 
3630
 
 
3631
  // Canonicalize constant to RHS if commutative.
 
3632
  if (N1C && !N2C && isCommutativeBinOp(Opcode)) {
 
3633
    std::swap(N1C, N2C);
 
3634
    std::swap(N1, N2);
 
3635
  }
 
3636
 
 
3637
  // Constant fold FP operations.
 
3638
  bool HasFPExceptions = TLI->hasFloatingPointExceptions();
 
3639
  ConstantFPSDNode *N1CFP = dyn_cast<ConstantFPSDNode>(N1);
 
3640
  ConstantFPSDNode *N2CFP = dyn_cast<ConstantFPSDNode>(N2);
 
3641
  if (N1CFP) {
 
3642
    if (!N2CFP && isCommutativeBinOp(Opcode)) {
 
3643
      // Canonicalize constant to RHS if commutative.
 
3644
      std::swap(N1CFP, N2CFP);
 
3645
      std::swap(N1, N2);
 
3646
    } else if (N2CFP) {
 
3647
      APFloat V1 = N1CFP->getValueAPF(), V2 = N2CFP->getValueAPF();
 
3648
      APFloat::opStatus s;
 
3649
      switch (Opcode) {
 
3650
      case ISD::FADD:
 
3651
        s = V1.add(V2, APFloat::rmNearestTiesToEven);
 
3652
        if (!HasFPExceptions || s != APFloat::opInvalidOp)
 
3653
          return getConstantFP(V1, DL, VT);
 
3654
        break;
 
3655
      case ISD::FSUB:
 
3656
        s = V1.subtract(V2, APFloat::rmNearestTiesToEven);
 
3657
        if (!HasFPExceptions || s!=APFloat::opInvalidOp)
 
3658
          return getConstantFP(V1, DL, VT);
 
3659
        break;
 
3660
      case ISD::FMUL:
 
3661
        s = V1.multiply(V2, APFloat::rmNearestTiesToEven);
 
3662
        if (!HasFPExceptions || s!=APFloat::opInvalidOp)
 
3663
          return getConstantFP(V1, DL, VT);
 
3664
        break;
 
3665
      case ISD::FDIV:
 
3666
        s = V1.divide(V2, APFloat::rmNearestTiesToEven);
 
3667
        if (!HasFPExceptions || (s!=APFloat::opInvalidOp &&
 
3668
                                 s!=APFloat::opDivByZero)) {
 
3669
          return getConstantFP(V1, DL, VT);
 
3670
        }
 
3671
        break;
 
3672
      case ISD::FREM :
 
3673
        s = V1.mod(V2, APFloat::rmNearestTiesToEven);
 
3674
        if (!HasFPExceptions || (s!=APFloat::opInvalidOp &&
 
3675
                                 s!=APFloat::opDivByZero)) {
 
3676
          return getConstantFP(V1, DL, VT);
 
3677
        }
 
3678
        break;
 
3679
      case ISD::FCOPYSIGN:
 
3680
        V1.copySign(V2);
 
3681
        return getConstantFP(V1, DL, VT);
 
3682
      default: break;
 
3683
      }
 
3684
    }
 
3685
 
 
3686
    if (Opcode == ISD::FP_ROUND) {
 
3687
      APFloat V = N1CFP->getValueAPF();    // make copy
 
3688
      bool ignored;
 
3689
      // This can return overflow, underflow, or inexact; we don't care.
 
3690
      // FIXME need to be more flexible about rounding mode.
 
3691
      (void)V.convert(EVTToAPFloatSemantics(VT),
 
3692
                      APFloat::rmNearestTiesToEven, &ignored);
 
3693
      return getConstantFP(V, DL, VT);
 
3694
    }
 
3695
  }
 
3696
 
 
3697
  // Canonicalize an UNDEF to the RHS, even over a constant.
 
3698
  if (N1.getOpcode() == ISD::UNDEF) {
 
3699
    if (isCommutativeBinOp(Opcode)) {
 
3700
      std::swap(N1, N2);
 
3701
    } else {
 
3702
      switch (Opcode) {
 
3703
      case ISD::FP_ROUND_INREG:
 
3704
      case ISD::SIGN_EXTEND_INREG:
 
3705
      case ISD::SUB:
 
3706
      case ISD::FSUB:
 
3707
      case ISD::FDIV:
 
3708
      case ISD::FREM:
 
3709
      case ISD::SRA:
 
3710
        return N1;     // fold op(undef, arg2) -> undef
 
3711
      case ISD::UDIV:
 
3712
      case ISD::SDIV:
 
3713
      case ISD::UREM:
 
3714
      case ISD::SREM:
 
3715
      case ISD::SRL:
 
3716
      case ISD::SHL:
 
3717
        if (!VT.isVector())
 
3718
          return getConstant(0, DL, VT);    // fold op(undef, arg2) -> 0
 
3719
        // For vectors, we can't easily build an all zero vector, just return
 
3720
        // the LHS.
 
3721
        return N2;
 
3722
      }
 
3723
    }
 
3724
  }
 
3725
 
 
3726
  // Fold a bunch of operators when the RHS is undef.
 
3727
  if (N2.getOpcode() == ISD::UNDEF) {
 
3728
    switch (Opcode) {
 
3729
    case ISD::XOR:
 
3730
      if (N1.getOpcode() == ISD::UNDEF)
 
3731
        // Handle undef ^ undef -> 0 special case. This is a common
 
3732
        // idiom (misuse).
 
3733
        return getConstant(0, DL, VT);
 
3734
      // fallthrough
 
3735
    case ISD::ADD:
 
3736
    case ISD::ADDC:
 
3737
    case ISD::ADDE:
 
3738
    case ISD::SUB:
 
3739
    case ISD::UDIV:
 
3740
    case ISD::SDIV:
 
3741
    case ISD::UREM:
 
3742
    case ISD::SREM:
 
3743
      return N2;       // fold op(arg1, undef) -> undef
 
3744
    case ISD::FADD:
 
3745
    case ISD::FSUB:
 
3746
    case ISD::FMUL:
 
3747
    case ISD::FDIV:
 
3748
    case ISD::FREM:
 
3749
      if (getTarget().Options.UnsafeFPMath)
 
3750
        return N2;
 
3751
      break;
 
3752
    case ISD::MUL:
 
3753
    case ISD::AND:
 
3754
    case ISD::SRL:
 
3755
    case ISD::SHL:
 
3756
      if (!VT.isVector())
 
3757
        return getConstant(0, DL, VT);  // fold op(arg1, undef) -> 0
 
3758
      // For vectors, we can't easily build an all zero vector, just return
 
3759
      // the LHS.
 
3760
      return N1;
 
3761
    case ISD::OR:
 
3762
      if (!VT.isVector())
 
3763
        return getConstant(APInt::getAllOnesValue(VT.getSizeInBits()), DL, VT);
 
3764
      // For vectors, we can't easily build an all one vector, just return
 
3765
      // the LHS.
 
3766
      return N1;
 
3767
    case ISD::SRA:
 
3768
      return N1;
 
3769
    }
 
3770
  }
 
3771
 
 
3772
  // Memoize this node if possible.
 
3773
  BinarySDNode *N;
 
3774
  SDVTList VTs = getVTList(VT);
 
3775
  if (VT != MVT::Glue) {
 
3776
    SDValue Ops[] = {N1, N2};
 
3777
    FoldingSetNodeID ID;
 
3778
    AddNodeIDNode(ID, Opcode, VTs, Ops);
 
3779
    AddNodeIDFlags(ID, Opcode, Flags);
 
3780
    void *IP = nullptr;
 
3781
    if (SDNode *E = FindNodeOrInsertPos(ID, DL.getDebugLoc(), IP))
 
3782
      return SDValue(E, 0);
 
3783
 
 
3784
    N = GetBinarySDNode(Opcode, DL, VTs, N1, N2, Flags);
 
3785
 
 
3786
    CSEMap.InsertNode(N, IP);
 
3787
  } else {
 
3788
    N = GetBinarySDNode(Opcode, DL, VTs, N1, N2, Flags);
 
3789
  }
 
3790
 
 
3791
  InsertNode(N);
 
3792
  return SDValue(N, 0);
 
3793
}
 
3794
 
 
3795
SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, EVT VT,
 
3796
                              SDValue N1, SDValue N2, SDValue N3) {
 
3797
  // Perform various simplifications.
 
3798
  ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1);
 
3799
  switch (Opcode) {
 
3800
  case ISD::FMA: {
 
3801
    ConstantFPSDNode *N1CFP = dyn_cast<ConstantFPSDNode>(N1);
 
3802
    ConstantFPSDNode *N2CFP = dyn_cast<ConstantFPSDNode>(N2);
 
3803
    ConstantFPSDNode *N3CFP = dyn_cast<ConstantFPSDNode>(N3);
 
3804
    if (N1CFP && N2CFP && N3CFP) {
 
3805
      APFloat  V1 = N1CFP->getValueAPF();
 
3806
      const APFloat &V2 = N2CFP->getValueAPF();
 
3807
      const APFloat &V3 = N3CFP->getValueAPF();
 
3808
      APFloat::opStatus s =
 
3809
        V1.fusedMultiplyAdd(V2, V3, APFloat::rmNearestTiesToEven);
 
3810
      if (!TLI->hasFloatingPointExceptions() || s != APFloat::opInvalidOp)
 
3811
        return getConstantFP(V1, DL, VT);
 
3812
    }
 
3813
    break;
 
3814
  }
 
3815
  case ISD::CONCAT_VECTORS:
 
3816
    // A CONCAT_VECTOR with all operands BUILD_VECTOR can be simplified to
 
3817
    // one big BUILD_VECTOR.
 
3818
    if (N1.getOpcode() == ISD::BUILD_VECTOR &&
 
3819
        N2.getOpcode() == ISD::BUILD_VECTOR &&
 
3820
        N3.getOpcode() == ISD::BUILD_VECTOR) {
 
3821
      SmallVector<SDValue, 16> Elts(N1.getNode()->op_begin(),
 
3822
                                    N1.getNode()->op_end());
 
3823
      Elts.append(N2.getNode()->op_begin(), N2.getNode()->op_end());
 
3824
      Elts.append(N3.getNode()->op_begin(), N3.getNode()->op_end());
 
3825
      return getNode(ISD::BUILD_VECTOR, DL, VT, Elts);
 
3826
    }
 
3827
    break;
 
3828
  case ISD::SETCC: {
 
3829
    // Use FoldSetCC to simplify SETCC's.
 
3830
    SDValue Simp = FoldSetCC(VT, N1, N2, cast<CondCodeSDNode>(N3)->get(), DL);
 
3831
    if (Simp.getNode()) return Simp;
 
3832
    break;
 
3833
  }
 
3834
  case ISD::SELECT:
 
3835
    if (N1C) {
 
3836
     if (N1C->getZExtValue())
 
3837
       return N2;             // select true, X, Y -> X
 
3838
     return N3;             // select false, X, Y -> Y
 
3839
    }
 
3840
 
 
3841
    if (N2 == N3) return N2;   // select C, X, X -> X
 
3842
    break;
 
3843
  case ISD::VECTOR_SHUFFLE:
 
3844
    llvm_unreachable("should use getVectorShuffle constructor!");
 
3845
  case ISD::INSERT_SUBVECTOR: {
 
3846
    SDValue Index = N3;
 
3847
    if (VT.isSimple() && N1.getValueType().isSimple()
 
3848
        && N2.getValueType().isSimple()) {
 
3849
      assert(VT.isVector() && N1.getValueType().isVector() &&
 
3850
             N2.getValueType().isVector() &&
 
3851
             "Insert subvector VTs must be a vectors");
 
3852
      assert(VT == N1.getValueType() &&
 
3853
             "Dest and insert subvector source types must match!");
 
3854
      assert(N2.getSimpleValueType() <= N1.getSimpleValueType() &&
 
3855
             "Insert subvector must be from smaller vector to larger vector!");
 
3856
      if (isa<ConstantSDNode>(Index)) {
 
3857
        assert((N2.getValueType().getVectorNumElements() +
 
3858
                cast<ConstantSDNode>(Index)->getZExtValue()
 
3859
                <= VT.getVectorNumElements())
 
3860
               && "Insert subvector overflow!");
 
3861
      }
 
3862
 
 
3863
      // Trivial insertion.
 
3864
      if (VT.getSimpleVT() == N2.getSimpleValueType())
 
3865
        return N2;
 
3866
    }
 
3867
    break;
 
3868
  }
 
3869
  case ISD::BITCAST:
 
3870
    // Fold bit_convert nodes from a type to themselves.
 
3871
    if (N1.getValueType() == VT)
 
3872
      return N1;
 
3873
    break;
 
3874
  }
 
3875
 
 
3876
  // Memoize node if it doesn't produce a flag.
 
3877
  SDNode *N;
 
3878
  SDVTList VTs = getVTList(VT);
 
3879
  if (VT != MVT::Glue) {
 
3880
    SDValue Ops[] = { N1, N2, N3 };
 
3881
    FoldingSetNodeID ID;
 
3882
    AddNodeIDNode(ID, Opcode, VTs, Ops);
 
3883
    void *IP = nullptr;
 
3884
    if (SDNode *E = FindNodeOrInsertPos(ID, DL.getDebugLoc(), IP))
 
3885
      return SDValue(E, 0);
 
3886
 
 
3887
    N = new (NodeAllocator) TernarySDNode(Opcode, DL.getIROrder(),
 
3888
                                          DL.getDebugLoc(), VTs, N1, N2, N3);
 
3889
    CSEMap.InsertNode(N, IP);
 
3890
  } else {
 
3891
    N = new (NodeAllocator) TernarySDNode(Opcode, DL.getIROrder(),
 
3892
                                          DL.getDebugLoc(), VTs, N1, N2, N3);
 
3893
  }
 
3894
 
 
3895
  InsertNode(N);
 
3896
  return SDValue(N, 0);
 
3897
}
 
3898
 
 
3899
SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, EVT VT,
 
3900
                              SDValue N1, SDValue N2, SDValue N3,
 
3901
                              SDValue N4) {
 
3902
  SDValue Ops[] = { N1, N2, N3, N4 };
 
3903
  return getNode(Opcode, DL, VT, Ops);
 
3904
}
 
3905
 
 
3906
SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, EVT VT,
 
3907
                              SDValue N1, SDValue N2, SDValue N3,
 
3908
                              SDValue N4, SDValue N5) {
 
3909
  SDValue Ops[] = { N1, N2, N3, N4, N5 };
 
3910
  return getNode(Opcode, DL, VT, Ops);
 
3911
}
 
3912
 
 
3913
/// getStackArgumentTokenFactor - Compute a TokenFactor to force all
 
3914
/// the incoming stack arguments to be loaded from the stack.
 
3915
SDValue SelectionDAG::getStackArgumentTokenFactor(SDValue Chain) {
 
3916
  SmallVector<SDValue, 8> ArgChains;
 
3917
 
 
3918
  // Include the original chain at the beginning of the list. When this is
 
3919
  // used by target LowerCall hooks, this helps legalize find the
 
3920
  // CALLSEQ_BEGIN node.
 
3921
  ArgChains.push_back(Chain);
 
3922
 
 
3923
  // Add a chain value for each stack argument.
 
3924
  for (SDNode::use_iterator U = getEntryNode().getNode()->use_begin(),
 
3925
       UE = getEntryNode().getNode()->use_end(); U != UE; ++U)
 
3926
    if (LoadSDNode *L = dyn_cast<LoadSDNode>(*U))
 
3927
      if (FrameIndexSDNode *FI = dyn_cast<FrameIndexSDNode>(L->getBasePtr()))
 
3928
        if (FI->getIndex() < 0)
 
3929
          ArgChains.push_back(SDValue(L, 1));
 
3930
 
 
3931
  // Build a tokenfactor for all the chains.
 
3932
  return getNode(ISD::TokenFactor, SDLoc(Chain), MVT::Other, ArgChains);
 
3933
}
 
3934
 
 
3935
/// getMemsetValue - Vectorized representation of the memset value
 
3936
/// operand.
 
3937
static SDValue getMemsetValue(SDValue Value, EVT VT, SelectionDAG &DAG,
 
3938
                              SDLoc dl) {
 
3939
  assert(Value.getOpcode() != ISD::UNDEF);
 
3940
 
 
3941
  unsigned NumBits = VT.getScalarType().getSizeInBits();
 
3942
  if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Value)) {
 
3943
    assert(C->getAPIntValue().getBitWidth() == 8);
 
3944
    APInt Val = APInt::getSplat(NumBits, C->getAPIntValue());
 
3945
    if (VT.isInteger())
 
3946
      return DAG.getConstant(Val, dl, VT);
 
3947
    return DAG.getConstantFP(APFloat(DAG.EVTToAPFloatSemantics(VT), Val), dl,
 
3948
                             VT);
 
3949
  }
 
3950
 
 
3951
  assert(Value.getValueType() == MVT::i8 && "memset with non-byte fill value?");
 
3952
  EVT IntVT = VT.getScalarType();
 
3953
  if (!IntVT.isInteger())
 
3954
    IntVT = EVT::getIntegerVT(*DAG.getContext(), IntVT.getSizeInBits());
 
3955
 
 
3956
  Value = DAG.getNode(ISD::ZERO_EXTEND, dl, IntVT, Value);
 
3957
  if (NumBits > 8) {
 
3958
    // Use a multiplication with 0x010101... to extend the input to the
 
3959
    // required length.
 
3960
    APInt Magic = APInt::getSplat(NumBits, APInt(8, 0x01));
 
3961
    Value = DAG.getNode(ISD::MUL, dl, IntVT, Value,
 
3962
                        DAG.getConstant(Magic, dl, IntVT));
 
3963
  }
 
3964
 
 
3965
  if (VT != Value.getValueType() && !VT.isInteger())
 
3966
    Value = DAG.getNode(ISD::BITCAST, dl, VT.getScalarType(), Value);
 
3967
  if (VT != Value.getValueType()) {
 
3968
    assert(VT.getVectorElementType() == Value.getValueType() &&
 
3969
           "value type should be one vector element here");
 
3970
    SmallVector<SDValue, 8> BVOps(VT.getVectorNumElements(), Value);
 
3971
    Value = DAG.getNode(ISD::BUILD_VECTOR, dl, VT, BVOps);
 
3972
  }
 
3973
 
 
3974
  return Value;
 
3975
}
 
3976
 
 
3977
/// getMemsetStringVal - Similar to getMemsetValue. Except this is only
 
3978
/// used when a memcpy is turned into a memset when the source is a constant
 
3979
/// string ptr.
 
3980
static SDValue getMemsetStringVal(EVT VT, SDLoc dl, SelectionDAG &DAG,
 
3981
                                  const TargetLowering &TLI, StringRef Str) {
 
3982
  // Handle vector with all elements zero.
 
3983
  if (Str.empty()) {
 
3984
    if (VT.isInteger())
 
3985
      return DAG.getConstant(0, dl, VT);
 
3986
    else if (VT == MVT::f32 || VT == MVT::f64 || VT == MVT::f128)
 
3987
      return DAG.getConstantFP(0.0, dl, VT);
 
3988
    else if (VT.isVector()) {
 
3989
      unsigned NumElts = VT.getVectorNumElements();
 
3990
      MVT EltVT = (VT.getVectorElementType() == MVT::f32) ? MVT::i32 : MVT::i64;
 
3991
      return DAG.getNode(ISD::BITCAST, dl, VT,
 
3992
                         DAG.getConstant(0, dl,
 
3993
                                         EVT::getVectorVT(*DAG.getContext(),
 
3994
                                                          EltVT, NumElts)));
 
3995
    } else
 
3996
      llvm_unreachable("Expected type!");
 
3997
  }
 
3998
 
 
3999
  assert(!VT.isVector() && "Can't handle vector type here!");
 
4000
  unsigned NumVTBits = VT.getSizeInBits();
 
4001
  unsigned NumVTBytes = NumVTBits / 8;
 
4002
  unsigned NumBytes = std::min(NumVTBytes, unsigned(Str.size()));
 
4003
 
 
4004
  APInt Val(NumVTBits, 0);
 
4005
  if (DAG.getDataLayout().isLittleEndian()) {
 
4006
    for (unsigned i = 0; i != NumBytes; ++i)
 
4007
      Val |= (uint64_t)(unsigned char)Str[i] << i*8;
 
4008
  } else {
 
4009
    for (unsigned i = 0; i != NumBytes; ++i)
 
4010
      Val |= (uint64_t)(unsigned char)Str[i] << (NumVTBytes-i-1)*8;
 
4011
  }
 
4012
 
 
4013
  // If the "cost" of materializing the integer immediate is less than the cost
 
4014
  // of a load, then it is cost effective to turn the load into the immediate.
 
4015
  Type *Ty = VT.getTypeForEVT(*DAG.getContext());
 
4016
  if (TLI.shouldConvertConstantLoadToIntImm(Val, Ty))
 
4017
    return DAG.getConstant(Val, dl, VT);
 
4018
  return SDValue(nullptr, 0);
 
4019
}
 
4020
 
 
4021
/// getMemBasePlusOffset - Returns base and offset node for the
 
4022
///
 
4023
static SDValue getMemBasePlusOffset(SDValue Base, unsigned Offset, SDLoc dl,
 
4024
                                      SelectionDAG &DAG) {
 
4025
  EVT VT = Base.getValueType();
 
4026
  return DAG.getNode(ISD::ADD, dl,
 
4027
                     VT, Base, DAG.getConstant(Offset, dl, VT));
 
4028
}
 
4029
 
 
4030
/// isMemSrcFromString - Returns true if memcpy source is a string constant.
 
4031
///
 
4032
static bool isMemSrcFromString(SDValue Src, StringRef &Str) {
 
4033
  unsigned SrcDelta = 0;
 
4034
  GlobalAddressSDNode *G = nullptr;
 
4035
  if (Src.getOpcode() == ISD::GlobalAddress)
 
4036
    G = cast<GlobalAddressSDNode>(Src);
 
4037
  else if (Src.getOpcode() == ISD::ADD &&
 
4038
           Src.getOperand(0).getOpcode() == ISD::GlobalAddress &&
 
4039
           Src.getOperand(1).getOpcode() == ISD::Constant) {
 
4040
    G = cast<GlobalAddressSDNode>(Src.getOperand(0));
 
4041
    SrcDelta = cast<ConstantSDNode>(Src.getOperand(1))->getZExtValue();
 
4042
  }
 
4043
  if (!G)
 
4044
    return false;
 
4045
 
 
4046
  return getConstantStringInfo(G->getGlobal(), Str, SrcDelta, false);
 
4047
}
 
4048
 
 
4049
/// Determines the optimal series of memory ops to replace the memset / memcpy.
 
4050
/// Return true if the number of memory ops is below the threshold (Limit).
 
4051
/// It returns the types of the sequence of memory ops to perform
 
4052
/// memset / memcpy by reference.
 
4053
static bool FindOptimalMemOpLowering(std::vector<EVT> &MemOps,
 
4054
                                     unsigned Limit, uint64_t Size,
 
4055
                                     unsigned DstAlign, unsigned SrcAlign,
 
4056
                                     bool IsMemset,
 
4057
                                     bool ZeroMemset,
 
4058
                                     bool MemcpyStrSrc,
 
4059
                                     bool AllowOverlap,
 
4060
                                     SelectionDAG &DAG,
 
4061
                                     const TargetLowering &TLI) {
 
4062
  assert((SrcAlign == 0 || SrcAlign >= DstAlign) &&
 
4063
         "Expecting memcpy / memset source to meet alignment requirement!");
 
4064
  // If 'SrcAlign' is zero, that means the memory operation does not need to
 
4065
  // load the value, i.e. memset or memcpy from constant string. Otherwise,
 
4066
  // it's the inferred alignment of the source. 'DstAlign', on the other hand,
 
4067
  // is the specified alignment of the memory operation. If it is zero, that
 
4068
  // means it's possible to change the alignment of the destination.
 
4069
  // 'MemcpyStrSrc' indicates whether the memcpy source is constant so it does
 
4070
  // not need to be loaded.
 
4071
  EVT VT = TLI.getOptimalMemOpType(Size, DstAlign, SrcAlign,
 
4072
                                   IsMemset, ZeroMemset, MemcpyStrSrc,
 
4073
                                   DAG.getMachineFunction());
 
4074
 
 
4075
  if (VT == MVT::Other) {
 
4076
    unsigned AS = 0;
 
4077
    if (DstAlign >= DAG.getDataLayout().getPointerPrefAlignment(AS) ||
 
4078
        TLI.allowsMisalignedMemoryAccesses(VT, AS, DstAlign)) {
 
4079
      VT = TLI.getPointerTy(DAG.getDataLayout());
 
4080
    } else {
 
4081
      switch (DstAlign & 7) {
 
4082
      case 0:  VT = MVT::i64; break;
 
4083
      case 4:  VT = MVT::i32; break;
 
4084
      case 2:  VT = MVT::i16; break;
 
4085
      default: VT = MVT::i8;  break;
 
4086
      }
 
4087
    }
 
4088
 
 
4089
    MVT LVT = MVT::i64;
 
4090
    while (!TLI.isTypeLegal(LVT))
 
4091
      LVT = (MVT::SimpleValueType)(LVT.SimpleTy - 1);
 
4092
    assert(LVT.isInteger());
 
4093
 
 
4094
    if (VT.bitsGT(LVT))
 
4095
      VT = LVT;
 
4096
  }
 
4097
 
 
4098
  unsigned NumMemOps = 0;
 
4099
  while (Size != 0) {
 
4100
    unsigned VTSize = VT.getSizeInBits() / 8;
 
4101
    while (VTSize > Size) {
 
4102
      // For now, only use non-vector load / store's for the left-over pieces.
 
4103
      EVT NewVT = VT;
 
4104
      unsigned NewVTSize;
 
4105
 
 
4106
      bool Found = false;
 
4107
      if (VT.isVector() || VT.isFloatingPoint()) {
 
4108
        NewVT = (VT.getSizeInBits() > 64) ? MVT::i64 : MVT::i32;
 
4109
        if (TLI.isOperationLegalOrCustom(ISD::STORE, NewVT) &&
 
4110
            TLI.isSafeMemOpType(NewVT.getSimpleVT()))
 
4111
          Found = true;
 
4112
        else if (NewVT == MVT::i64 &&
 
4113
                 TLI.isOperationLegalOrCustom(ISD::STORE, MVT::f64) &&
 
4114
                 TLI.isSafeMemOpType(MVT::f64)) {
 
4115
          // i64 is usually not legal on 32-bit targets, but f64 may be.
 
4116
          NewVT = MVT::f64;
 
4117
          Found = true;
 
4118
        }
 
4119
      }
 
4120
 
 
4121
      if (!Found) {
 
4122
        do {
 
4123
          NewVT = (MVT::SimpleValueType)(NewVT.getSimpleVT().SimpleTy - 1);
 
4124
          if (NewVT == MVT::i8)
 
4125
            break;
 
4126
        } while (!TLI.isSafeMemOpType(NewVT.getSimpleVT()));
 
4127
      }
 
4128
      NewVTSize = NewVT.getSizeInBits() / 8;
 
4129
 
 
4130
      // If the new VT cannot cover all of the remaining bits, then consider
 
4131
      // issuing a (or a pair of) unaligned and overlapping load / store.
 
4132
      // FIXME: Only does this for 64-bit or more since we don't have proper
 
4133
      // cost model for unaligned load / store.
 
4134
      bool Fast;
 
4135
      unsigned AS = 0;
 
4136
      if (NumMemOps && AllowOverlap &&
 
4137
          VTSize >= 8 && NewVTSize < Size &&
 
4138
          TLI.allowsMisalignedMemoryAccesses(VT, AS, DstAlign, &Fast) && Fast)
 
4139
        VTSize = Size;
 
4140
      else {
 
4141
        VT = NewVT;
 
4142
        VTSize = NewVTSize;
 
4143
      }
 
4144
    }
 
4145
 
 
4146
    if (++NumMemOps > Limit)
 
4147
      return false;
 
4148
 
 
4149
    MemOps.push_back(VT);
 
4150
    Size -= VTSize;
 
4151
  }
 
4152
 
 
4153
  return true;
 
4154
}
 
4155
 
 
4156
static SDValue getMemcpyLoadsAndStores(SelectionDAG &DAG, SDLoc dl,
 
4157
                                       SDValue Chain, SDValue Dst,
 
4158
                                       SDValue Src, uint64_t Size,
 
4159
                                       unsigned Align, bool isVol,
 
4160
                                       bool AlwaysInline,
 
4161
                                       MachinePointerInfo DstPtrInfo,
 
4162
                                       MachinePointerInfo SrcPtrInfo) {
 
4163
  // Turn a memcpy of undef to nop.
 
4164
  if (Src.getOpcode() == ISD::UNDEF)
 
4165
    return Chain;
 
4166
 
 
4167
  // Expand memcpy to a series of load and store ops if the size operand falls
 
4168
  // below a certain threshold.
 
4169
  // TODO: In the AlwaysInline case, if the size is big then generate a loop
 
4170
  // rather than maybe a humongous number of loads and stores.
 
4171
  const TargetLowering &TLI = DAG.getTargetLoweringInfo();
 
4172
  std::vector<EVT> MemOps;
 
4173
  bool DstAlignCanChange = false;
 
4174
  MachineFunction &MF = DAG.getMachineFunction();
 
4175
  MachineFrameInfo *MFI = MF.getFrameInfo();
 
4176
  bool OptSize = MF.getFunction()->hasFnAttribute(Attribute::OptimizeForSize);
 
4177
  FrameIndexSDNode *FI = dyn_cast<FrameIndexSDNode>(Dst);
 
4178
  if (FI && !MFI->isFixedObjectIndex(FI->getIndex()))
 
4179
    DstAlignCanChange = true;
 
4180
  unsigned SrcAlign = DAG.InferPtrAlignment(Src);
 
4181
  if (Align > SrcAlign)
 
4182
    SrcAlign = Align;
 
4183
  StringRef Str;
 
4184
  bool CopyFromStr = isMemSrcFromString(Src, Str);
 
4185
  bool isZeroStr = CopyFromStr && Str.empty();
 
4186
  unsigned Limit = AlwaysInline ? ~0U : TLI.getMaxStoresPerMemcpy(OptSize);
 
4187
 
 
4188
  if (!FindOptimalMemOpLowering(MemOps, Limit, Size,
 
4189
                                (DstAlignCanChange ? 0 : Align),
 
4190
                                (isZeroStr ? 0 : SrcAlign),
 
4191
                                false, false, CopyFromStr, true, DAG, TLI))
 
4192
    return SDValue();
 
4193
 
 
4194
  if (DstAlignCanChange) {
 
4195
    Type *Ty = MemOps[0].getTypeForEVT(*DAG.getContext());
 
4196
    unsigned NewAlign = (unsigned)DAG.getDataLayout().getABITypeAlignment(Ty);
 
4197
 
 
4198
    // Don't promote to an alignment that would require dynamic stack
 
4199
    // realignment.
 
4200
    const TargetRegisterInfo *TRI = MF.getSubtarget().getRegisterInfo();
 
4201
    if (!TRI->needsStackRealignment(MF))
 
4202
      while (NewAlign > Align &&
 
4203
             DAG.getDataLayout().exceedsNaturalStackAlignment(NewAlign))
 
4204
          NewAlign /= 2;
 
4205
 
 
4206
    if (NewAlign > Align) {
 
4207
      // Give the stack frame object a larger alignment if needed.
 
4208
      if (MFI->getObjectAlignment(FI->getIndex()) < NewAlign)
 
4209
        MFI->setObjectAlignment(FI->getIndex(), NewAlign);
 
4210
      Align = NewAlign;
 
4211
    }
 
4212
  }
 
4213
 
 
4214
  SmallVector<SDValue, 8> OutChains;
 
4215
  unsigned NumMemOps = MemOps.size();
 
4216
  uint64_t SrcOff = 0, DstOff = 0;
 
4217
  for (unsigned i = 0; i != NumMemOps; ++i) {
 
4218
    EVT VT = MemOps[i];
 
4219
    unsigned VTSize = VT.getSizeInBits() / 8;
 
4220
    SDValue Value, Store;
 
4221
 
 
4222
    if (VTSize > Size) {
 
4223
      // Issuing an unaligned load / store pair  that overlaps with the previous
 
4224
      // pair. Adjust the offset accordingly.
 
4225
      assert(i == NumMemOps-1 && i != 0);
 
4226
      SrcOff -= VTSize - Size;
 
4227
      DstOff -= VTSize - Size;
 
4228
    }
 
4229
 
 
4230
    if (CopyFromStr &&
 
4231
        (isZeroStr || (VT.isInteger() && !VT.isVector()))) {
 
4232
      // It's unlikely a store of a vector immediate can be done in a single
 
4233
      // instruction. It would require a load from a constantpool first.
 
4234
      // We only handle zero vectors here.
 
4235
      // FIXME: Handle other cases where store of vector immediate is done in
 
4236
      // a single instruction.
 
4237
      Value = getMemsetStringVal(VT, dl, DAG, TLI, Str.substr(SrcOff));
 
4238
      if (Value.getNode())
 
4239
        Store = DAG.getStore(Chain, dl, Value,
 
4240
                             getMemBasePlusOffset(Dst, DstOff, dl, DAG),
 
4241
                             DstPtrInfo.getWithOffset(DstOff), isVol,
 
4242
                             false, Align);
 
4243
    }
 
4244
 
 
4245
    if (!Store.getNode()) {
 
4246
      // The type might not be legal for the target.  This should only happen
 
4247
      // if the type is smaller than a legal type, as on PPC, so the right
 
4248
      // thing to do is generate a LoadExt/StoreTrunc pair.  These simplify
 
4249
      // to Load/Store if NVT==VT.
 
4250
      // FIXME does the case above also need this?
 
4251
      EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), VT);
 
4252
      assert(NVT.bitsGE(VT));
 
4253
      Value = DAG.getExtLoad(ISD::EXTLOAD, dl, NVT, Chain,
 
4254
                             getMemBasePlusOffset(Src, SrcOff, dl, DAG),
 
4255
                             SrcPtrInfo.getWithOffset(SrcOff), VT, isVol, false,
 
4256
                             false, MinAlign(SrcAlign, SrcOff));
 
4257
      Store = DAG.getTruncStore(Chain, dl, Value,
 
4258
                                getMemBasePlusOffset(Dst, DstOff, dl, DAG),
 
4259
                                DstPtrInfo.getWithOffset(DstOff), VT, isVol,
 
4260
                                false, Align);
 
4261
    }
 
4262
    OutChains.push_back(Store);
 
4263
    SrcOff += VTSize;
 
4264
    DstOff += VTSize;
 
4265
    Size -= VTSize;
 
4266
  }
 
4267
 
 
4268
  return DAG.getNode(ISD::TokenFactor, dl, MVT::Other, OutChains);
 
4269
}
 
4270
 
 
4271
static SDValue getMemmoveLoadsAndStores(SelectionDAG &DAG, SDLoc dl,
 
4272
                                        SDValue Chain, SDValue Dst,
 
4273
                                        SDValue Src, uint64_t Size,
 
4274
                                        unsigned Align,  bool isVol,
 
4275
                                        bool AlwaysInline,
 
4276
                                        MachinePointerInfo DstPtrInfo,
 
4277
                                        MachinePointerInfo SrcPtrInfo) {
 
4278
  // Turn a memmove of undef to nop.
 
4279
  if (Src.getOpcode() == ISD::UNDEF)
 
4280
    return Chain;
 
4281
 
 
4282
  // Expand memmove to a series of load and store ops if the size operand falls
 
4283
  // below a certain threshold.
 
4284
  const TargetLowering &TLI = DAG.getTargetLoweringInfo();
 
4285
  std::vector<EVT> MemOps;
 
4286
  bool DstAlignCanChange = false;
 
4287
  MachineFunction &MF = DAG.getMachineFunction();
 
4288
  MachineFrameInfo *MFI = MF.getFrameInfo();
 
4289
  bool OptSize = MF.getFunction()->hasFnAttribute(Attribute::OptimizeForSize);
 
4290
  FrameIndexSDNode *FI = dyn_cast<FrameIndexSDNode>(Dst);
 
4291
  if (FI && !MFI->isFixedObjectIndex(FI->getIndex()))
 
4292
    DstAlignCanChange = true;
 
4293
  unsigned SrcAlign = DAG.InferPtrAlignment(Src);
 
4294
  if (Align > SrcAlign)
 
4295
    SrcAlign = Align;
 
4296
  unsigned Limit = AlwaysInline ? ~0U : TLI.getMaxStoresPerMemmove(OptSize);
 
4297
 
 
4298
  if (!FindOptimalMemOpLowering(MemOps, Limit, Size,
 
4299
                                (DstAlignCanChange ? 0 : Align), SrcAlign,
 
4300
                                false, false, false, false, DAG, TLI))
 
4301
    return SDValue();
 
4302
 
 
4303
  if (DstAlignCanChange) {
 
4304
    Type *Ty = MemOps[0].getTypeForEVT(*DAG.getContext());
 
4305
    unsigned NewAlign = (unsigned)DAG.getDataLayout().getABITypeAlignment(Ty);
 
4306
    if (NewAlign > Align) {
 
4307
      // Give the stack frame object a larger alignment if needed.
 
4308
      if (MFI->getObjectAlignment(FI->getIndex()) < NewAlign)
 
4309
        MFI->setObjectAlignment(FI->getIndex(), NewAlign);
 
4310
      Align = NewAlign;
 
4311
    }
 
4312
  }
 
4313
 
 
4314
  uint64_t SrcOff = 0, DstOff = 0;
 
4315
  SmallVector<SDValue, 8> LoadValues;
 
4316
  SmallVector<SDValue, 8> LoadChains;
 
4317
  SmallVector<SDValue, 8> OutChains;
 
4318
  unsigned NumMemOps = MemOps.size();
 
4319
  for (unsigned i = 0; i < NumMemOps; i++) {
 
4320
    EVT VT = MemOps[i];
 
4321
    unsigned VTSize = VT.getSizeInBits() / 8;
 
4322
    SDValue Value;
 
4323
 
 
4324
    Value = DAG.getLoad(VT, dl, Chain,
 
4325
                        getMemBasePlusOffset(Src, SrcOff, dl, DAG),
 
4326
                        SrcPtrInfo.getWithOffset(SrcOff), isVol,
 
4327
                        false, false, SrcAlign);
 
4328
    LoadValues.push_back(Value);
 
4329
    LoadChains.push_back(Value.getValue(1));
 
4330
    SrcOff += VTSize;
 
4331
  }
 
4332
  Chain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, LoadChains);
 
4333
  OutChains.clear();
 
4334
  for (unsigned i = 0; i < NumMemOps; i++) {
 
4335
    EVT VT = MemOps[i];
 
4336
    unsigned VTSize = VT.getSizeInBits() / 8;
 
4337
    SDValue Store;
 
4338
 
 
4339
    Store = DAG.getStore(Chain, dl, LoadValues[i],
 
4340
                         getMemBasePlusOffset(Dst, DstOff, dl, DAG),
 
4341
                         DstPtrInfo.getWithOffset(DstOff), isVol, false, Align);
 
4342
    OutChains.push_back(Store);
 
4343
    DstOff += VTSize;
 
4344
  }
 
4345
 
 
4346
  return DAG.getNode(ISD::TokenFactor, dl, MVT::Other, OutChains);
 
4347
}
 
4348
 
 
4349
/// \brief Lower the call to 'memset' intrinsic function into a series of store
 
4350
/// operations.
 
4351
///
 
4352
/// \param DAG Selection DAG where lowered code is placed.
 
4353
/// \param dl Link to corresponding IR location.
 
4354
/// \param Chain Control flow dependency.
 
4355
/// \param Dst Pointer to destination memory location.
 
4356
/// \param Src Value of byte to write into the memory.
 
4357
/// \param Size Number of bytes to write.
 
4358
/// \param Align Alignment of the destination in bytes.
 
4359
/// \param isVol True if destination is volatile.
 
4360
/// \param DstPtrInfo IR information on the memory pointer.
 
4361
/// \returns New head in the control flow, if lowering was successful, empty
 
4362
/// SDValue otherwise.
 
4363
///
 
4364
/// The function tries to replace 'llvm.memset' intrinsic with several store
 
4365
/// operations and value calculation code. This is usually profitable for small
 
4366
/// memory size.
 
4367
static SDValue getMemsetStores(SelectionDAG &DAG, SDLoc dl,
 
4368
                               SDValue Chain, SDValue Dst,
 
4369
                               SDValue Src, uint64_t Size,
 
4370
                               unsigned Align, bool isVol,
 
4371
                               MachinePointerInfo DstPtrInfo) {
 
4372
  // Turn a memset of undef to nop.
 
4373
  if (Src.getOpcode() == ISD::UNDEF)
 
4374
    return Chain;
 
4375
 
 
4376
  // Expand memset to a series of load/store ops if the size operand
 
4377
  // falls below a certain threshold.
 
4378
  const TargetLowering &TLI = DAG.getTargetLoweringInfo();
 
4379
  std::vector<EVT> MemOps;
 
4380
  bool DstAlignCanChange = false;
 
4381
  MachineFunction &MF = DAG.getMachineFunction();
 
4382
  MachineFrameInfo *MFI = MF.getFrameInfo();
 
4383
  bool OptSize = MF.getFunction()->hasFnAttribute(Attribute::OptimizeForSize);
 
4384
  FrameIndexSDNode *FI = dyn_cast<FrameIndexSDNode>(Dst);
 
4385
  if (FI && !MFI->isFixedObjectIndex(FI->getIndex()))
 
4386
    DstAlignCanChange = true;
 
4387
  bool IsZeroVal =
 
4388
    isa<ConstantSDNode>(Src) && cast<ConstantSDNode>(Src)->isNullValue();
 
4389
  if (!FindOptimalMemOpLowering(MemOps, TLI.getMaxStoresPerMemset(OptSize),
 
4390
                                Size, (DstAlignCanChange ? 0 : Align), 0,
 
4391
                                true, IsZeroVal, false, true, DAG, TLI))
 
4392
    return SDValue();
 
4393
 
 
4394
  if (DstAlignCanChange) {
 
4395
    Type *Ty = MemOps[0].getTypeForEVT(*DAG.getContext());
 
4396
    unsigned NewAlign = (unsigned)DAG.getDataLayout().getABITypeAlignment(Ty);
 
4397
    if (NewAlign > Align) {
 
4398
      // Give the stack frame object a larger alignment if needed.
 
4399
      if (MFI->getObjectAlignment(FI->getIndex()) < NewAlign)
 
4400
        MFI->setObjectAlignment(FI->getIndex(), NewAlign);
 
4401
      Align = NewAlign;
 
4402
    }
 
4403
  }
 
4404
 
 
4405
  SmallVector<SDValue, 8> OutChains;
 
4406
  uint64_t DstOff = 0;
 
4407
  unsigned NumMemOps = MemOps.size();
 
4408
 
 
4409
  // Find the largest store and generate the bit pattern for it.
 
4410
  EVT LargestVT = MemOps[0];
 
4411
  for (unsigned i = 1; i < NumMemOps; i++)
 
4412
    if (MemOps[i].bitsGT(LargestVT))
 
4413
      LargestVT = MemOps[i];
 
4414
  SDValue MemSetValue = getMemsetValue(Src, LargestVT, DAG, dl);
 
4415
 
 
4416
  for (unsigned i = 0; i < NumMemOps; i++) {
 
4417
    EVT VT = MemOps[i];
 
4418
    unsigned VTSize = VT.getSizeInBits() / 8;
 
4419
    if (VTSize > Size) {
 
4420
      // Issuing an unaligned load / store pair  that overlaps with the previous
 
4421
      // pair. Adjust the offset accordingly.
 
4422
      assert(i == NumMemOps-1 && i != 0);
 
4423
      DstOff -= VTSize - Size;
 
4424
    }
 
4425
 
 
4426
    // If this store is smaller than the largest store see whether we can get
 
4427
    // the smaller value for free with a truncate.
 
4428
    SDValue Value = MemSetValue;
 
4429
    if (VT.bitsLT(LargestVT)) {
 
4430
      if (!LargestVT.isVector() && !VT.isVector() &&
 
4431
          TLI.isTruncateFree(LargestVT, VT))
 
4432
        Value = DAG.getNode(ISD::TRUNCATE, dl, VT, MemSetValue);
 
4433
      else
 
4434
        Value = getMemsetValue(Src, VT, DAG, dl);
 
4435
    }
 
4436
    assert(Value.getValueType() == VT && "Value with wrong type.");
 
4437
    SDValue Store = DAG.getStore(Chain, dl, Value,
 
4438
                                 getMemBasePlusOffset(Dst, DstOff, dl, DAG),
 
4439
                                 DstPtrInfo.getWithOffset(DstOff),
 
4440
                                 isVol, false, Align);
 
4441
    OutChains.push_back(Store);
 
4442
    DstOff += VT.getSizeInBits() / 8;
 
4443
    Size -= VTSize;
 
4444
  }
 
4445
 
 
4446
  return DAG.getNode(ISD::TokenFactor, dl, MVT::Other, OutChains);
 
4447
}
 
4448
 
 
4449
SDValue SelectionDAG::getMemcpy(SDValue Chain, SDLoc dl, SDValue Dst,
 
4450
                                SDValue Src, SDValue Size,
 
4451
                                unsigned Align, bool isVol, bool AlwaysInline,
 
4452
                                bool isTailCall, MachinePointerInfo DstPtrInfo,
 
4453
                                MachinePointerInfo SrcPtrInfo) {
 
4454
  assert(Align && "The SDAG layer expects explicit alignment and reserves 0");
 
4455
 
 
4456
  // Check to see if we should lower the memcpy to loads and stores first.
 
4457
  // For cases within the target-specified limits, this is the best choice.
 
4458
  ConstantSDNode *ConstantSize = dyn_cast<ConstantSDNode>(Size);
 
4459
  if (ConstantSize) {
 
4460
    // Memcpy with size zero? Just return the original chain.
 
4461
    if (ConstantSize->isNullValue())
 
4462
      return Chain;
 
4463
 
 
4464
    SDValue Result = getMemcpyLoadsAndStores(*this, dl, Chain, Dst, Src,
 
4465
                                             ConstantSize->getZExtValue(),Align,
 
4466
                                isVol, false, DstPtrInfo, SrcPtrInfo);
 
4467
    if (Result.getNode())
 
4468
      return Result;
 
4469
  }
 
4470
 
 
4471
  // Then check to see if we should lower the memcpy with target-specific
 
4472
  // code. If the target chooses to do this, this is the next best.
 
4473
  if (TSI) {
 
4474
    SDValue Result = TSI->EmitTargetCodeForMemcpy(
 
4475
        *this, dl, Chain, Dst, Src, Size, Align, isVol, AlwaysInline,
 
4476
        DstPtrInfo, SrcPtrInfo);
 
4477
    if (Result.getNode())
 
4478
      return Result;
 
4479
  }
 
4480
 
 
4481
  // If we really need inline code and the target declined to provide it,
 
4482
  // use a (potentially long) sequence of loads and stores.
 
4483
  if (AlwaysInline) {
 
4484
    assert(ConstantSize && "AlwaysInline requires a constant size!");
 
4485
    return getMemcpyLoadsAndStores(*this, dl, Chain, Dst, Src,
 
4486
                                   ConstantSize->getZExtValue(), Align, isVol,
 
4487
                                   true, DstPtrInfo, SrcPtrInfo);
 
4488
  }
 
4489
 
 
4490
  // FIXME: If the memcpy is volatile (isVol), lowering it to a plain libc
 
4491
  // memcpy is not guaranteed to be safe. libc memcpys aren't required to
 
4492
  // respect volatile, so they may do things like read or write memory
 
4493
  // beyond the given memory regions. But fixing this isn't easy, and most
 
4494
  // people don't care.
 
4495
 
 
4496
  // Emit a library call.
 
4497
  TargetLowering::ArgListTy Args;
 
4498
  TargetLowering::ArgListEntry Entry;
 
4499
  Entry.Ty = getDataLayout().getIntPtrType(*getContext());
 
4500
  Entry.Node = Dst; Args.push_back(Entry);
 
4501
  Entry.Node = Src; Args.push_back(Entry);
 
4502
  Entry.Node = Size; Args.push_back(Entry);
 
4503
  // FIXME: pass in SDLoc
 
4504
  TargetLowering::CallLoweringInfo CLI(*this);
 
4505
  CLI.setDebugLoc(dl)
 
4506
      .setChain(Chain)
 
4507
      .setCallee(TLI->getLibcallCallingConv(RTLIB::MEMCPY),
 
4508
                 Type::getVoidTy(*getContext()),
 
4509
                 getExternalSymbol(TLI->getLibcallName(RTLIB::MEMCPY),
 
4510
                                   TLI->getPointerTy(getDataLayout())),
 
4511
                 std::move(Args), 0)
 
4512
      .setDiscardResult()
 
4513
      .setTailCall(isTailCall);
 
4514
 
 
4515
  std::pair<SDValue,SDValue> CallResult = TLI->LowerCallTo(CLI);
 
4516
  return CallResult.second;
 
4517
}
 
4518
 
 
4519
SDValue SelectionDAG::getMemmove(SDValue Chain, SDLoc dl, SDValue Dst,
 
4520
                                 SDValue Src, SDValue Size,
 
4521
                                 unsigned Align, bool isVol, bool isTailCall,
 
4522
                                 MachinePointerInfo DstPtrInfo,
 
4523
                                 MachinePointerInfo SrcPtrInfo) {
 
4524
  assert(Align && "The SDAG layer expects explicit alignment and reserves 0");
 
4525
 
 
4526
  // Check to see if we should lower the memmove to loads and stores first.
 
4527
  // For cases within the target-specified limits, this is the best choice.
 
4528
  ConstantSDNode *ConstantSize = dyn_cast<ConstantSDNode>(Size);
 
4529
  if (ConstantSize) {
 
4530
    // Memmove with size zero? Just return the original chain.
 
4531
    if (ConstantSize->isNullValue())
 
4532
      return Chain;
 
4533
 
 
4534
    SDValue Result =
 
4535
      getMemmoveLoadsAndStores(*this, dl, Chain, Dst, Src,
 
4536
                               ConstantSize->getZExtValue(), Align, isVol,
 
4537
                               false, DstPtrInfo, SrcPtrInfo);
 
4538
    if (Result.getNode())
 
4539
      return Result;
 
4540
  }
 
4541
 
 
4542
  // Then check to see if we should lower the memmove with target-specific
 
4543
  // code. If the target chooses to do this, this is the next best.
 
4544
  if (TSI) {
 
4545
    SDValue Result = TSI->EmitTargetCodeForMemmove(
 
4546
        *this, dl, Chain, Dst, Src, Size, Align, isVol, DstPtrInfo, SrcPtrInfo);
 
4547
    if (Result.getNode())
 
4548
      return Result;
 
4549
  }
 
4550
 
 
4551
  // FIXME: If the memmove is volatile, lowering it to plain libc memmove may
 
4552
  // not be safe.  See memcpy above for more details.
 
4553
 
 
4554
  // Emit a library call.
 
4555
  TargetLowering::ArgListTy Args;
 
4556
  TargetLowering::ArgListEntry Entry;
 
4557
  Entry.Ty = getDataLayout().getIntPtrType(*getContext());
 
4558
  Entry.Node = Dst; Args.push_back(Entry);
 
4559
  Entry.Node = Src; Args.push_back(Entry);
 
4560
  Entry.Node = Size; Args.push_back(Entry);
 
4561
  // FIXME:  pass in SDLoc
 
4562
  TargetLowering::CallLoweringInfo CLI(*this);
 
4563
  CLI.setDebugLoc(dl)
 
4564
      .setChain(Chain)
 
4565
      .setCallee(TLI->getLibcallCallingConv(RTLIB::MEMMOVE),
 
4566
                 Type::getVoidTy(*getContext()),
 
4567
                 getExternalSymbol(TLI->getLibcallName(RTLIB::MEMMOVE),
 
4568
                                   TLI->getPointerTy(getDataLayout())),
 
4569
                 std::move(Args), 0)
 
4570
      .setDiscardResult()
 
4571
      .setTailCall(isTailCall);
 
4572
 
 
4573
  std::pair<SDValue,SDValue> CallResult = TLI->LowerCallTo(CLI);
 
4574
  return CallResult.second;
 
4575
}
 
4576
 
 
4577
SDValue SelectionDAG::getMemset(SDValue Chain, SDLoc dl, SDValue Dst,
 
4578
                                SDValue Src, SDValue Size,
 
4579
                                unsigned Align, bool isVol, bool isTailCall,
 
4580
                                MachinePointerInfo DstPtrInfo) {
 
4581
  assert(Align && "The SDAG layer expects explicit alignment and reserves 0");
 
4582
 
 
4583
  // Check to see if we should lower the memset to stores first.
 
4584
  // For cases within the target-specified limits, this is the best choice.
 
4585
  ConstantSDNode *ConstantSize = dyn_cast<ConstantSDNode>(Size);
 
4586
  if (ConstantSize) {
 
4587
    // Memset with size zero? Just return the original chain.
 
4588
    if (ConstantSize->isNullValue())
 
4589
      return Chain;
 
4590
 
 
4591
    SDValue Result =
 
4592
      getMemsetStores(*this, dl, Chain, Dst, Src, ConstantSize->getZExtValue(),
 
4593
                      Align, isVol, DstPtrInfo);
 
4594
 
 
4595
    if (Result.getNode())
 
4596
      return Result;
 
4597
  }
 
4598
 
 
4599
  // Then check to see if we should lower the memset with target-specific
 
4600
  // code. If the target chooses to do this, this is the next best.
 
4601
  if (TSI) {
 
4602
    SDValue Result = TSI->EmitTargetCodeForMemset(
 
4603
        *this, dl, Chain, Dst, Src, Size, Align, isVol, DstPtrInfo);
 
4604
    if (Result.getNode())
 
4605
      return Result;
 
4606
  }
 
4607
 
 
4608
  // Emit a library call.
 
4609
  Type *IntPtrTy = getDataLayout().getIntPtrType(*getContext());
 
4610
  TargetLowering::ArgListTy Args;
 
4611
  TargetLowering::ArgListEntry Entry;
 
4612
  Entry.Node = Dst; Entry.Ty = IntPtrTy;
 
4613
  Args.push_back(Entry);
 
4614
  Entry.Node = Src;
 
4615
  Entry.Ty = Src.getValueType().getTypeForEVT(*getContext());
 
4616
  Args.push_back(Entry);
 
4617
  Entry.Node = Size;
 
4618
  Entry.Ty = IntPtrTy;
 
4619
  Args.push_back(Entry);
 
4620
 
 
4621
  // FIXME: pass in SDLoc
 
4622
  TargetLowering::CallLoweringInfo CLI(*this);
 
4623
  CLI.setDebugLoc(dl)
 
4624
      .setChain(Chain)
 
4625
      .setCallee(TLI->getLibcallCallingConv(RTLIB::MEMSET),
 
4626
                 Type::getVoidTy(*getContext()),
 
4627
                 getExternalSymbol(TLI->getLibcallName(RTLIB::MEMSET),
 
4628
                                   TLI->getPointerTy(getDataLayout())),
 
4629
                 std::move(Args), 0)
 
4630
      .setDiscardResult()
 
4631
      .setTailCall(isTailCall);
 
4632
 
 
4633
  std::pair<SDValue,SDValue> CallResult = TLI->LowerCallTo(CLI);
 
4634
  return CallResult.second;
 
4635
}
 
4636
 
 
4637
SDValue SelectionDAG::getAtomic(unsigned Opcode, SDLoc dl, EVT MemVT,
 
4638
                                SDVTList VTList, ArrayRef<SDValue> Ops,
 
4639
                                MachineMemOperand *MMO,
 
4640
                                AtomicOrdering SuccessOrdering,
 
4641
                                AtomicOrdering FailureOrdering,
 
4642
                                SynchronizationScope SynchScope) {
 
4643
  FoldingSetNodeID ID;
 
4644
  ID.AddInteger(MemVT.getRawBits());
 
4645
  AddNodeIDNode(ID, Opcode, VTList, Ops);
 
4646
  ID.AddInteger(MMO->getPointerInfo().getAddrSpace());
 
4647
  void* IP = nullptr;
 
4648
  if (SDNode *E = FindNodeOrInsertPos(ID, dl.getDebugLoc(), IP)) {
 
4649
    cast<AtomicSDNode>(E)->refineAlignment(MMO);
 
4650
    return SDValue(E, 0);
 
4651
  }
 
4652
 
 
4653
  // Allocate the operands array for the node out of the BumpPtrAllocator, since
 
4654
  // SDNode doesn't have access to it.  This memory will be "leaked" when
 
4655
  // the node is deallocated, but recovered when the allocator is released.
 
4656
  // If the number of operands is less than 5 we use AtomicSDNode's internal
 
4657
  // storage.
 
4658
  unsigned NumOps = Ops.size();
 
4659
  SDUse *DynOps = NumOps > 4 ? OperandAllocator.Allocate<SDUse>(NumOps)
 
4660
                             : nullptr;
 
4661
 
 
4662
  SDNode *N = new (NodeAllocator) AtomicSDNode(Opcode, dl.getIROrder(),
 
4663
                                               dl.getDebugLoc(), VTList, MemVT,
 
4664
                                               Ops.data(), DynOps, NumOps, MMO,
 
4665
                                               SuccessOrdering, FailureOrdering,
 
4666
                                               SynchScope);
 
4667
  CSEMap.InsertNode(N, IP);
 
4668
  InsertNode(N);
 
4669
  return SDValue(N, 0);
 
4670
}
 
4671
 
 
4672
SDValue SelectionDAG::getAtomic(unsigned Opcode, SDLoc dl, EVT MemVT,
 
4673
                                SDVTList VTList, ArrayRef<SDValue> Ops,
 
4674
                                MachineMemOperand *MMO,
 
4675
                                AtomicOrdering Ordering,
 
4676
                                SynchronizationScope SynchScope) {
 
4677
  return getAtomic(Opcode, dl, MemVT, VTList, Ops, MMO, Ordering,
 
4678
                   Ordering, SynchScope);
 
4679
}
 
4680
 
 
4681
SDValue SelectionDAG::getAtomicCmpSwap(
 
4682
    unsigned Opcode, SDLoc dl, EVT MemVT, SDVTList VTs, SDValue Chain,
 
4683
    SDValue Ptr, SDValue Cmp, SDValue Swp, MachinePointerInfo PtrInfo,
 
4684
    unsigned Alignment, AtomicOrdering SuccessOrdering,
 
4685
    AtomicOrdering FailureOrdering, SynchronizationScope SynchScope) {
 
4686
  assert(Opcode == ISD::ATOMIC_CMP_SWAP ||
 
4687
         Opcode == ISD::ATOMIC_CMP_SWAP_WITH_SUCCESS);
 
4688
  assert(Cmp.getValueType() == Swp.getValueType() && "Invalid Atomic Op Types");
 
4689
 
 
4690
  if (Alignment == 0)  // Ensure that codegen never sees alignment 0
 
4691
    Alignment = getEVTAlignment(MemVT);
 
4692
 
 
4693
  MachineFunction &MF = getMachineFunction();
 
4694
 
 
4695
  // FIXME: Volatile isn't really correct; we should keep track of atomic
 
4696
  // orderings in the memoperand.
 
4697
  unsigned Flags = MachineMemOperand::MOVolatile;
 
4698
  Flags |= MachineMemOperand::MOLoad;
 
4699
  Flags |= MachineMemOperand::MOStore;
 
4700
 
 
4701
  MachineMemOperand *MMO =
 
4702
    MF.getMachineMemOperand(PtrInfo, Flags, MemVT.getStoreSize(), Alignment);
 
4703
 
 
4704
  return getAtomicCmpSwap(Opcode, dl, MemVT, VTs, Chain, Ptr, Cmp, Swp, MMO,
 
4705
                          SuccessOrdering, FailureOrdering, SynchScope);
 
4706
}
 
4707
 
 
4708
SDValue SelectionDAG::getAtomicCmpSwap(unsigned Opcode, SDLoc dl, EVT MemVT,
 
4709
                                       SDVTList VTs, SDValue Chain, SDValue Ptr,
 
4710
                                       SDValue Cmp, SDValue Swp,
 
4711
                                       MachineMemOperand *MMO,
 
4712
                                       AtomicOrdering SuccessOrdering,
 
4713
                                       AtomicOrdering FailureOrdering,
 
4714
                                       SynchronizationScope SynchScope) {
 
4715
  assert(Opcode == ISD::ATOMIC_CMP_SWAP ||
 
4716
         Opcode == ISD::ATOMIC_CMP_SWAP_WITH_SUCCESS);
 
4717
  assert(Cmp.getValueType() == Swp.getValueType() && "Invalid Atomic Op Types");
 
4718
 
 
4719
  SDValue Ops[] = {Chain, Ptr, Cmp, Swp};
 
4720
  return getAtomic(Opcode, dl, MemVT, VTs, Ops, MMO,
 
4721
                   SuccessOrdering, FailureOrdering, SynchScope);
 
4722
}
 
4723
 
 
4724
SDValue SelectionDAG::getAtomic(unsigned Opcode, SDLoc dl, EVT MemVT,
 
4725
                                SDValue Chain,
 
4726
                                SDValue Ptr, SDValue Val,
 
4727
                                const Value* PtrVal,
 
4728
                                unsigned Alignment,
 
4729
                                AtomicOrdering Ordering,
 
4730
                                SynchronizationScope SynchScope) {
 
4731
  if (Alignment == 0)  // Ensure that codegen never sees alignment 0
 
4732
    Alignment = getEVTAlignment(MemVT);
 
4733
 
 
4734
  MachineFunction &MF = getMachineFunction();
 
4735
  // An atomic store does not load. An atomic load does not store.
 
4736
  // (An atomicrmw obviously both loads and stores.)
 
4737
  // For now, atomics are considered to be volatile always, and they are
 
4738
  // chained as such.
 
4739
  // FIXME: Volatile isn't really correct; we should keep track of atomic
 
4740
  // orderings in the memoperand.
 
4741
  unsigned Flags = MachineMemOperand::MOVolatile;
 
4742
  if (Opcode != ISD::ATOMIC_STORE)
 
4743
    Flags |= MachineMemOperand::MOLoad;
 
4744
  if (Opcode != ISD::ATOMIC_LOAD)
 
4745
    Flags |= MachineMemOperand::MOStore;
 
4746
 
 
4747
  MachineMemOperand *MMO =
 
4748
    MF.getMachineMemOperand(MachinePointerInfo(PtrVal), Flags,
 
4749
                            MemVT.getStoreSize(), Alignment);
 
4750
 
 
4751
  return getAtomic(Opcode, dl, MemVT, Chain, Ptr, Val, MMO,
 
4752
                   Ordering, SynchScope);
 
4753
}
 
4754
 
 
4755
SDValue SelectionDAG::getAtomic(unsigned Opcode, SDLoc dl, EVT MemVT,
 
4756
                                SDValue Chain,
 
4757
                                SDValue Ptr, SDValue Val,
 
4758
                                MachineMemOperand *MMO,
 
4759
                                AtomicOrdering Ordering,
 
4760
                                SynchronizationScope SynchScope) {
 
4761
  assert((Opcode == ISD::ATOMIC_LOAD_ADD ||
 
4762
          Opcode == ISD::ATOMIC_LOAD_SUB ||
 
4763
          Opcode == ISD::ATOMIC_LOAD_AND ||
 
4764
          Opcode == ISD::ATOMIC_LOAD_OR ||
 
4765
          Opcode == ISD::ATOMIC_LOAD_XOR ||
 
4766
          Opcode == ISD::ATOMIC_LOAD_NAND ||
 
4767
          Opcode == ISD::ATOMIC_LOAD_MIN ||
 
4768
          Opcode == ISD::ATOMIC_LOAD_MAX ||
 
4769
          Opcode == ISD::ATOMIC_LOAD_UMIN ||
 
4770
          Opcode == ISD::ATOMIC_LOAD_UMAX ||
 
4771
          Opcode == ISD::ATOMIC_SWAP ||
 
4772
          Opcode == ISD::ATOMIC_STORE) &&
 
4773
         "Invalid Atomic Op");
 
4774
 
 
4775
  EVT VT = Val.getValueType();
 
4776
 
 
4777
  SDVTList VTs = Opcode == ISD::ATOMIC_STORE ? getVTList(MVT::Other) :
 
4778
                                               getVTList(VT, MVT::Other);
 
4779
  SDValue Ops[] = {Chain, Ptr, Val};
 
4780
  return getAtomic(Opcode, dl, MemVT, VTs, Ops, MMO, Ordering, SynchScope);
 
4781
}
 
4782
 
 
4783
SDValue SelectionDAG::getAtomic(unsigned Opcode, SDLoc dl, EVT MemVT,
 
4784
                                EVT VT, SDValue Chain,
 
4785
                                SDValue Ptr,
 
4786
                                MachineMemOperand *MMO,
 
4787
                                AtomicOrdering Ordering,
 
4788
                                SynchronizationScope SynchScope) {
 
4789
  assert(Opcode == ISD::ATOMIC_LOAD && "Invalid Atomic Op");
 
4790
 
 
4791
  SDVTList VTs = getVTList(VT, MVT::Other);
 
4792
  SDValue Ops[] = {Chain, Ptr};
 
4793
  return getAtomic(Opcode, dl, MemVT, VTs, Ops, MMO, Ordering, SynchScope);
 
4794
}
 
4795
 
 
4796
/// getMergeValues - Create a MERGE_VALUES node from the given operands.
 
4797
SDValue SelectionDAG::getMergeValues(ArrayRef<SDValue> Ops, SDLoc dl) {
 
4798
  if (Ops.size() == 1)
 
4799
    return Ops[0];
 
4800
 
 
4801
  SmallVector<EVT, 4> VTs;
 
4802
  VTs.reserve(Ops.size());
 
4803
  for (unsigned i = 0; i < Ops.size(); ++i)
 
4804
    VTs.push_back(Ops[i].getValueType());
 
4805
  return getNode(ISD::MERGE_VALUES, dl, getVTList(VTs), Ops);
 
4806
}
 
4807
 
 
4808
SDValue
 
4809
SelectionDAG::getMemIntrinsicNode(unsigned Opcode, SDLoc dl, SDVTList VTList,
 
4810
                                  ArrayRef<SDValue> Ops,
 
4811
                                  EVT MemVT, MachinePointerInfo PtrInfo,
 
4812
                                  unsigned Align, bool Vol,
 
4813
                                  bool ReadMem, bool WriteMem, unsigned Size) {
 
4814
  if (Align == 0)  // Ensure that codegen never sees alignment 0
 
4815
    Align = getEVTAlignment(MemVT);
 
4816
 
 
4817
  MachineFunction &MF = getMachineFunction();
 
4818
  unsigned Flags = 0;
 
4819
  if (WriteMem)
 
4820
    Flags |= MachineMemOperand::MOStore;
 
4821
  if (ReadMem)
 
4822
    Flags |= MachineMemOperand::MOLoad;
 
4823
  if (Vol)
 
4824
    Flags |= MachineMemOperand::MOVolatile;
 
4825
  if (!Size)
 
4826
    Size = MemVT.getStoreSize();
 
4827
  MachineMemOperand *MMO =
 
4828
    MF.getMachineMemOperand(PtrInfo, Flags, Size, Align);
 
4829
 
 
4830
  return getMemIntrinsicNode(Opcode, dl, VTList, Ops, MemVT, MMO);
 
4831
}
 
4832
 
 
4833
SDValue
 
4834
SelectionDAG::getMemIntrinsicNode(unsigned Opcode, SDLoc dl, SDVTList VTList,
 
4835
                                  ArrayRef<SDValue> Ops, EVT MemVT,
 
4836
                                  MachineMemOperand *MMO) {
 
4837
  assert((Opcode == ISD::INTRINSIC_VOID ||
 
4838
          Opcode == ISD::INTRINSIC_W_CHAIN ||
 
4839
          Opcode == ISD::PREFETCH ||
 
4840
          Opcode == ISD::LIFETIME_START ||
 
4841
          Opcode == ISD::LIFETIME_END ||
 
4842
          (Opcode <= INT_MAX &&
 
4843
           (int)Opcode >= ISD::FIRST_TARGET_MEMORY_OPCODE)) &&
 
4844
         "Opcode is not a memory-accessing opcode!");
 
4845
 
 
4846
  // Memoize the node unless it returns a flag.
 
4847
  MemIntrinsicSDNode *N;
 
4848
  if (VTList.VTs[VTList.NumVTs-1] != MVT::Glue) {
 
4849
    FoldingSetNodeID ID;
 
4850
    AddNodeIDNode(ID, Opcode, VTList, Ops);
 
4851
    ID.AddInteger(MMO->getPointerInfo().getAddrSpace());
 
4852
    void *IP = nullptr;
 
4853
    if (SDNode *E = FindNodeOrInsertPos(ID, dl.getDebugLoc(), IP)) {
 
4854
      cast<MemIntrinsicSDNode>(E)->refineAlignment(MMO);
 
4855
      return SDValue(E, 0);
 
4856
    }
 
4857
 
 
4858
    N = new (NodeAllocator) MemIntrinsicSDNode(Opcode, dl.getIROrder(),
 
4859
                                               dl.getDebugLoc(), VTList, Ops,
 
4860
                                               MemVT, MMO);
 
4861
    CSEMap.InsertNode(N, IP);
 
4862
  } else {
 
4863
    N = new (NodeAllocator) MemIntrinsicSDNode(Opcode, dl.getIROrder(),
 
4864
                                               dl.getDebugLoc(), VTList, Ops,
 
4865
                                               MemVT, MMO);
 
4866
  }
 
4867
  InsertNode(N);
 
4868
  return SDValue(N, 0);
 
4869
}
 
4870
 
 
4871
/// InferPointerInfo - If the specified ptr/offset is a frame index, infer a
 
4872
/// MachinePointerInfo record from it.  This is particularly useful because the
 
4873
/// code generator has many cases where it doesn't bother passing in a
 
4874
/// MachinePointerInfo to getLoad or getStore when it has "FI+Cst".
 
4875
static MachinePointerInfo InferPointerInfo(SDValue Ptr, int64_t Offset = 0) {
 
4876
  // If this is FI+Offset, we can model it.
 
4877
  if (const FrameIndexSDNode *FI = dyn_cast<FrameIndexSDNode>(Ptr))
 
4878
    return MachinePointerInfo::getFixedStack(FI->getIndex(), Offset);
 
4879
 
 
4880
  // If this is (FI+Offset1)+Offset2, we can model it.
 
4881
  if (Ptr.getOpcode() != ISD::ADD ||
 
4882
      !isa<ConstantSDNode>(Ptr.getOperand(1)) ||
 
4883
      !isa<FrameIndexSDNode>(Ptr.getOperand(0)))
 
4884
    return MachinePointerInfo();
 
4885
 
 
4886
  int FI = cast<FrameIndexSDNode>(Ptr.getOperand(0))->getIndex();
 
4887
  return MachinePointerInfo::getFixedStack(FI, Offset+
 
4888
                       cast<ConstantSDNode>(Ptr.getOperand(1))->getSExtValue());
 
4889
}
 
4890
 
 
4891
/// InferPointerInfo - If the specified ptr/offset is a frame index, infer a
 
4892
/// MachinePointerInfo record from it.  This is particularly useful because the
 
4893
/// code generator has many cases where it doesn't bother passing in a
 
4894
/// MachinePointerInfo to getLoad or getStore when it has "FI+Cst".
 
4895
static MachinePointerInfo InferPointerInfo(SDValue Ptr, SDValue OffsetOp) {
 
4896
  // If the 'Offset' value isn't a constant, we can't handle this.
 
4897
  if (ConstantSDNode *OffsetNode = dyn_cast<ConstantSDNode>(OffsetOp))
 
4898
    return InferPointerInfo(Ptr, OffsetNode->getSExtValue());
 
4899
  if (OffsetOp.getOpcode() == ISD::UNDEF)
 
4900
    return InferPointerInfo(Ptr);
 
4901
  return MachinePointerInfo();
 
4902
}
 
4903
 
 
4904
 
 
4905
SDValue
 
4906
SelectionDAG::getLoad(ISD::MemIndexedMode AM, ISD::LoadExtType ExtType,
 
4907
                      EVT VT, SDLoc dl, SDValue Chain,
 
4908
                      SDValue Ptr, SDValue Offset,
 
4909
                      MachinePointerInfo PtrInfo, EVT MemVT,
 
4910
                      bool isVolatile, bool isNonTemporal, bool isInvariant,
 
4911
                      unsigned Alignment, const AAMDNodes &AAInfo,
 
4912
                      const MDNode *Ranges) {
 
4913
  assert(Chain.getValueType() == MVT::Other &&
 
4914
        "Invalid chain type");
 
4915
  if (Alignment == 0)  // Ensure that codegen never sees alignment 0
 
4916
    Alignment = getEVTAlignment(VT);
 
4917
 
 
4918
  unsigned Flags = MachineMemOperand::MOLoad;
 
4919
  if (isVolatile)
 
4920
    Flags |= MachineMemOperand::MOVolatile;
 
4921
  if (isNonTemporal)
 
4922
    Flags |= MachineMemOperand::MONonTemporal;
 
4923
  if (isInvariant)
 
4924
    Flags |= MachineMemOperand::MOInvariant;
 
4925
 
 
4926
  // If we don't have a PtrInfo, infer the trivial frame index case to simplify
 
4927
  // clients.
 
4928
  if (PtrInfo.V.isNull())
 
4929
    PtrInfo = InferPointerInfo(Ptr, Offset);
 
4930
 
 
4931
  MachineFunction &MF = getMachineFunction();
 
4932
  MachineMemOperand *MMO =
 
4933
    MF.getMachineMemOperand(PtrInfo, Flags, MemVT.getStoreSize(), Alignment,
 
4934
                            AAInfo, Ranges);
 
4935
  return getLoad(AM, ExtType, VT, dl, Chain, Ptr, Offset, MemVT, MMO);
 
4936
}
 
4937
 
 
4938
SDValue
 
4939
SelectionDAG::getLoad(ISD::MemIndexedMode AM, ISD::LoadExtType ExtType,
 
4940
                      EVT VT, SDLoc dl, SDValue Chain,
 
4941
                      SDValue Ptr, SDValue Offset, EVT MemVT,
 
4942
                      MachineMemOperand *MMO) {
 
4943
  if (VT == MemVT) {
 
4944
    ExtType = ISD::NON_EXTLOAD;
 
4945
  } else if (ExtType == ISD::NON_EXTLOAD) {
 
4946
    assert(VT == MemVT && "Non-extending load from different memory type!");
 
4947
  } else {
 
4948
    // Extending load.
 
4949
    assert(MemVT.getScalarType().bitsLT(VT.getScalarType()) &&
 
4950
           "Should only be an extending load, not truncating!");
 
4951
    assert(VT.isInteger() == MemVT.isInteger() &&
 
4952
           "Cannot convert from FP to Int or Int -> FP!");
 
4953
    assert(VT.isVector() == MemVT.isVector() &&
 
4954
           "Cannot use an ext load to convert to or from a vector!");
 
4955
    assert((!VT.isVector() ||
 
4956
            VT.getVectorNumElements() == MemVT.getVectorNumElements()) &&
 
4957
           "Cannot use an ext load to change the number of vector elements!");
 
4958
  }
 
4959
 
 
4960
  bool Indexed = AM != ISD::UNINDEXED;
 
4961
  assert((Indexed || Offset.getOpcode() == ISD::UNDEF) &&
 
4962
         "Unindexed load with an offset!");
 
4963
 
 
4964
  SDVTList VTs = Indexed ?
 
4965
    getVTList(VT, Ptr.getValueType(), MVT::Other) : getVTList(VT, MVT::Other);
 
4966
  SDValue Ops[] = { Chain, Ptr, Offset };
 
4967
  FoldingSetNodeID ID;
 
4968
  AddNodeIDNode(ID, ISD::LOAD, VTs, Ops);
 
4969
  ID.AddInteger(MemVT.getRawBits());
 
4970
  ID.AddInteger(encodeMemSDNodeFlags(ExtType, AM, MMO->isVolatile(),
 
4971
                                     MMO->isNonTemporal(),
 
4972
                                     MMO->isInvariant()));
 
4973
  ID.AddInteger(MMO->getPointerInfo().getAddrSpace());
 
4974
  void *IP = nullptr;
 
4975
  if (SDNode *E = FindNodeOrInsertPos(ID, dl.getDebugLoc(), IP)) {
 
4976
    cast<LoadSDNode>(E)->refineAlignment(MMO);
 
4977
    return SDValue(E, 0);
 
4978
  }
 
4979
  SDNode *N = new (NodeAllocator) LoadSDNode(Ops, dl.getIROrder(),
 
4980
                                             dl.getDebugLoc(), VTs, AM, ExtType,
 
4981
                                             MemVT, MMO);
 
4982
  CSEMap.InsertNode(N, IP);
 
4983
  InsertNode(N);
 
4984
  return SDValue(N, 0);
 
4985
}
 
4986
 
 
4987
SDValue SelectionDAG::getLoad(EVT VT, SDLoc dl,
 
4988
                              SDValue Chain, SDValue Ptr,
 
4989
                              MachinePointerInfo PtrInfo,
 
4990
                              bool isVolatile, bool isNonTemporal,
 
4991
                              bool isInvariant, unsigned Alignment,
 
4992
                              const AAMDNodes &AAInfo,
 
4993
                              const MDNode *Ranges) {
 
4994
  SDValue Undef = getUNDEF(Ptr.getValueType());
 
4995
  return getLoad(ISD::UNINDEXED, ISD::NON_EXTLOAD, VT, dl, Chain, Ptr, Undef,
 
4996
                 PtrInfo, VT, isVolatile, isNonTemporal, isInvariant, Alignment,
 
4997
                 AAInfo, Ranges);
 
4998
}
 
4999
 
 
5000
SDValue SelectionDAG::getLoad(EVT VT, SDLoc dl,
 
5001
                              SDValue Chain, SDValue Ptr,
 
5002
                              MachineMemOperand *MMO) {
 
5003
  SDValue Undef = getUNDEF(Ptr.getValueType());
 
5004
  return getLoad(ISD::UNINDEXED, ISD::NON_EXTLOAD, VT, dl, Chain, Ptr, Undef,
 
5005
                 VT, MMO);
 
5006
}
 
5007
 
 
5008
SDValue SelectionDAG::getExtLoad(ISD::LoadExtType ExtType, SDLoc dl, EVT VT,
 
5009
                                 SDValue Chain, SDValue Ptr,
 
5010
                                 MachinePointerInfo PtrInfo, EVT MemVT,
 
5011
                                 bool isVolatile, bool isNonTemporal,
 
5012
                                 bool isInvariant, unsigned Alignment,
 
5013
                                 const AAMDNodes &AAInfo) {
 
5014
  SDValue Undef = getUNDEF(Ptr.getValueType());
 
5015
  return getLoad(ISD::UNINDEXED, ExtType, VT, dl, Chain, Ptr, Undef,
 
5016
                 PtrInfo, MemVT, isVolatile, isNonTemporal, isInvariant,
 
5017
                 Alignment, AAInfo);
 
5018
}
 
5019
 
 
5020
 
 
5021
SDValue SelectionDAG::getExtLoad(ISD::LoadExtType ExtType, SDLoc dl, EVT VT,
 
5022
                                 SDValue Chain, SDValue Ptr, EVT MemVT,
 
5023
                                 MachineMemOperand *MMO) {
 
5024
  SDValue Undef = getUNDEF(Ptr.getValueType());
 
5025
  return getLoad(ISD::UNINDEXED, ExtType, VT, dl, Chain, Ptr, Undef,
 
5026
                 MemVT, MMO);
 
5027
}
 
5028
 
 
5029
SDValue
 
5030
SelectionDAG::getIndexedLoad(SDValue OrigLoad, SDLoc dl, SDValue Base,
 
5031
                             SDValue Offset, ISD::MemIndexedMode AM) {
 
5032
  LoadSDNode *LD = cast<LoadSDNode>(OrigLoad);
 
5033
  assert(LD->getOffset().getOpcode() == ISD::UNDEF &&
 
5034
         "Load is already a indexed load!");
 
5035
  return getLoad(AM, LD->getExtensionType(), OrigLoad.getValueType(), dl,
 
5036
                 LD->getChain(), Base, Offset, LD->getPointerInfo(),
 
5037
                 LD->getMemoryVT(), LD->isVolatile(), LD->isNonTemporal(),
 
5038
                 false, LD->getAlignment());
 
5039
}
 
5040
 
 
5041
SDValue SelectionDAG::getStore(SDValue Chain, SDLoc dl, SDValue Val,
 
5042
                               SDValue Ptr, MachinePointerInfo PtrInfo,
 
5043
                               bool isVolatile, bool isNonTemporal,
 
5044
                               unsigned Alignment, const AAMDNodes &AAInfo) {
 
5045
  assert(Chain.getValueType() == MVT::Other &&
 
5046
        "Invalid chain type");
 
5047
  if (Alignment == 0)  // Ensure that codegen never sees alignment 0
 
5048
    Alignment = getEVTAlignment(Val.getValueType());
 
5049
 
 
5050
  unsigned Flags = MachineMemOperand::MOStore;
 
5051
  if (isVolatile)
 
5052
    Flags |= MachineMemOperand::MOVolatile;
 
5053
  if (isNonTemporal)
 
5054
    Flags |= MachineMemOperand::MONonTemporal;
 
5055
 
 
5056
  if (PtrInfo.V.isNull())
 
5057
    PtrInfo = InferPointerInfo(Ptr);
 
5058
 
 
5059
  MachineFunction &MF = getMachineFunction();
 
5060
  MachineMemOperand *MMO =
 
5061
    MF.getMachineMemOperand(PtrInfo, Flags,
 
5062
                            Val.getValueType().getStoreSize(), Alignment,
 
5063
                            AAInfo);
 
5064
 
 
5065
  return getStore(Chain, dl, Val, Ptr, MMO);
 
5066
}
 
5067
 
 
5068
SDValue SelectionDAG::getStore(SDValue Chain, SDLoc dl, SDValue Val,
 
5069
                               SDValue Ptr, MachineMemOperand *MMO) {
 
5070
  assert(Chain.getValueType() == MVT::Other &&
 
5071
        "Invalid chain type");
 
5072
  EVT VT = Val.getValueType();
 
5073
  SDVTList VTs = getVTList(MVT::Other);
 
5074
  SDValue Undef = getUNDEF(Ptr.getValueType());
 
5075
  SDValue Ops[] = { Chain, Val, Ptr, Undef };
 
5076
  FoldingSetNodeID ID;
 
5077
  AddNodeIDNode(ID, ISD::STORE, VTs, Ops);
 
5078
  ID.AddInteger(VT.getRawBits());
 
5079
  ID.AddInteger(encodeMemSDNodeFlags(false, ISD::UNINDEXED, MMO->isVolatile(),
 
5080
                                     MMO->isNonTemporal(), MMO->isInvariant()));
 
5081
  ID.AddInteger(MMO->getPointerInfo().getAddrSpace());
 
5082
  void *IP = nullptr;
 
5083
  if (SDNode *E = FindNodeOrInsertPos(ID, dl.getDebugLoc(), IP)) {
 
5084
    cast<StoreSDNode>(E)->refineAlignment(MMO);
 
5085
    return SDValue(E, 0);
 
5086
  }
 
5087
  SDNode *N = new (NodeAllocator) StoreSDNode(Ops, dl.getIROrder(),
 
5088
                                              dl.getDebugLoc(), VTs,
 
5089
                                              ISD::UNINDEXED, false, VT, MMO);
 
5090
  CSEMap.InsertNode(N, IP);
 
5091
  InsertNode(N);
 
5092
  return SDValue(N, 0);
 
5093
}
 
5094
 
 
5095
SDValue SelectionDAG::getTruncStore(SDValue Chain, SDLoc dl, SDValue Val,
 
5096
                                    SDValue Ptr, MachinePointerInfo PtrInfo,
 
5097
                                    EVT SVT,bool isVolatile, bool isNonTemporal,
 
5098
                                    unsigned Alignment,
 
5099
                                    const AAMDNodes &AAInfo) {
 
5100
  assert(Chain.getValueType() == MVT::Other &&
 
5101
        "Invalid chain type");
 
5102
  if (Alignment == 0)  // Ensure that codegen never sees alignment 0
 
5103
    Alignment = getEVTAlignment(SVT);
 
5104
 
 
5105
  unsigned Flags = MachineMemOperand::MOStore;
 
5106
  if (isVolatile)
 
5107
    Flags |= MachineMemOperand::MOVolatile;
 
5108
  if (isNonTemporal)
 
5109
    Flags |= MachineMemOperand::MONonTemporal;
 
5110
 
 
5111
  if (PtrInfo.V.isNull())
 
5112
    PtrInfo = InferPointerInfo(Ptr);
 
5113
 
 
5114
  MachineFunction &MF = getMachineFunction();
 
5115
  MachineMemOperand *MMO =
 
5116
    MF.getMachineMemOperand(PtrInfo, Flags, SVT.getStoreSize(), Alignment,
 
5117
                            AAInfo);
 
5118
 
 
5119
  return getTruncStore(Chain, dl, Val, Ptr, SVT, MMO);
 
5120
}
 
5121
 
 
5122
SDValue SelectionDAG::getTruncStore(SDValue Chain, SDLoc dl, SDValue Val,
 
5123
                                    SDValue Ptr, EVT SVT,
 
5124
                                    MachineMemOperand *MMO) {
 
5125
  EVT VT = Val.getValueType();
 
5126
 
 
5127
  assert(Chain.getValueType() == MVT::Other &&
 
5128
        "Invalid chain type");
 
5129
  if (VT == SVT)
 
5130
    return getStore(Chain, dl, Val, Ptr, MMO);
 
5131
 
 
5132
  assert(SVT.getScalarType().bitsLT(VT.getScalarType()) &&
 
5133
         "Should only be a truncating store, not extending!");
 
5134
  assert(VT.isInteger() == SVT.isInteger() &&
 
5135
         "Can't do FP-INT conversion!");
 
5136
  assert(VT.isVector() == SVT.isVector() &&
 
5137
         "Cannot use trunc store to convert to or from a vector!");
 
5138
  assert((!VT.isVector() ||
 
5139
          VT.getVectorNumElements() == SVT.getVectorNumElements()) &&
 
5140
         "Cannot use trunc store to change the number of vector elements!");
 
5141
 
 
5142
  SDVTList VTs = getVTList(MVT::Other);
 
5143
  SDValue Undef = getUNDEF(Ptr.getValueType());
 
5144
  SDValue Ops[] = { Chain, Val, Ptr, Undef };
 
5145
  FoldingSetNodeID ID;
 
5146
  AddNodeIDNode(ID, ISD::STORE, VTs, Ops);
 
5147
  ID.AddInteger(SVT.getRawBits());
 
5148
  ID.AddInteger(encodeMemSDNodeFlags(true, ISD::UNINDEXED, MMO->isVolatile(),
 
5149
                                     MMO->isNonTemporal(), MMO->isInvariant()));
 
5150
  ID.AddInteger(MMO->getPointerInfo().getAddrSpace());
 
5151
  void *IP = nullptr;
 
5152
  if (SDNode *E = FindNodeOrInsertPos(ID, dl.getDebugLoc(), IP)) {
 
5153
    cast<StoreSDNode>(E)->refineAlignment(MMO);
 
5154
    return SDValue(E, 0);
 
5155
  }
 
5156
  SDNode *N = new (NodeAllocator) StoreSDNode(Ops, dl.getIROrder(),
 
5157
                                              dl.getDebugLoc(), VTs,
 
5158
                                              ISD::UNINDEXED, true, SVT, MMO);
 
5159
  CSEMap.InsertNode(N, IP);
 
5160
  InsertNode(N);
 
5161
  return SDValue(N, 0);
 
5162
}
 
5163
 
 
5164
SDValue
 
5165
SelectionDAG::getIndexedStore(SDValue OrigStore, SDLoc dl, SDValue Base,
 
5166
                              SDValue Offset, ISD::MemIndexedMode AM) {
 
5167
  StoreSDNode *ST = cast<StoreSDNode>(OrigStore);
 
5168
  assert(ST->getOffset().getOpcode() == ISD::UNDEF &&
 
5169
         "Store is already a indexed store!");
 
5170
  SDVTList VTs = getVTList(Base.getValueType(), MVT::Other);
 
5171
  SDValue Ops[] = { ST->getChain(), ST->getValue(), Base, Offset };
 
5172
  FoldingSetNodeID ID;
 
5173
  AddNodeIDNode(ID, ISD::STORE, VTs, Ops);
 
5174
  ID.AddInteger(ST->getMemoryVT().getRawBits());
 
5175
  ID.AddInteger(ST->getRawSubclassData());
 
5176
  ID.AddInteger(ST->getPointerInfo().getAddrSpace());
 
5177
  void *IP = nullptr;
 
5178
  if (SDNode *E = FindNodeOrInsertPos(ID, dl.getDebugLoc(), IP))
 
5179
    return SDValue(E, 0);
 
5180
 
 
5181
  SDNode *N = new (NodeAllocator) StoreSDNode(Ops, dl.getIROrder(),
 
5182
                                              dl.getDebugLoc(), VTs, AM,
 
5183
                                              ST->isTruncatingStore(),
 
5184
                                              ST->getMemoryVT(),
 
5185
                                              ST->getMemOperand());
 
5186
  CSEMap.InsertNode(N, IP);
 
5187
  InsertNode(N);
 
5188
  return SDValue(N, 0);
 
5189
}
 
5190
 
 
5191
SDValue
 
5192
SelectionDAG::getMaskedLoad(EVT VT, SDLoc dl, SDValue Chain,
 
5193
                            SDValue Ptr, SDValue Mask, SDValue Src0, EVT MemVT,
 
5194
                            MachineMemOperand *MMO, ISD::LoadExtType ExtTy) {
 
5195
 
 
5196
  SDVTList VTs = getVTList(VT, MVT::Other);
 
5197
  SDValue Ops[] = { Chain, Ptr, Mask, Src0 };
 
5198
  FoldingSetNodeID ID;
 
5199
  AddNodeIDNode(ID, ISD::MLOAD, VTs, Ops);
 
5200
  ID.AddInteger(VT.getRawBits());
 
5201
  ID.AddInteger(encodeMemSDNodeFlags(ExtTy, ISD::UNINDEXED,
 
5202
                                     MMO->isVolatile(),
 
5203
                                     MMO->isNonTemporal(),
 
5204
                                     MMO->isInvariant()));
 
5205
  ID.AddInteger(MMO->getPointerInfo().getAddrSpace());
 
5206
  void *IP = nullptr;
 
5207
  if (SDNode *E = FindNodeOrInsertPos(ID, dl.getDebugLoc(), IP)) {
 
5208
    cast<MaskedLoadSDNode>(E)->refineAlignment(MMO);
 
5209
    return SDValue(E, 0);
 
5210
  }
 
5211
  SDNode *N = new (NodeAllocator) MaskedLoadSDNode(dl.getIROrder(),
 
5212
                                             dl.getDebugLoc(), Ops, 4, VTs,
 
5213
                                             ExtTy, MemVT, MMO);
 
5214
  CSEMap.InsertNode(N, IP);
 
5215
  InsertNode(N);
 
5216
  return SDValue(N, 0);
 
5217
}
 
5218
 
 
5219
SDValue SelectionDAG::getMaskedStore(SDValue Chain, SDLoc dl, SDValue Val,
 
5220
                                     SDValue Ptr, SDValue Mask, EVT MemVT,
 
5221
                                     MachineMemOperand *MMO, bool isTrunc) {
 
5222
  assert(Chain.getValueType() == MVT::Other &&
 
5223
        "Invalid chain type");
 
5224
  EVT VT = Val.getValueType();
 
5225
  SDVTList VTs = getVTList(MVT::Other);
 
5226
  SDValue Ops[] = { Chain, Ptr, Mask, Val };
 
5227
  FoldingSetNodeID ID;
 
5228
  AddNodeIDNode(ID, ISD::MSTORE, VTs, Ops);
 
5229
  ID.AddInteger(VT.getRawBits());
 
5230
  ID.AddInteger(encodeMemSDNodeFlags(false, ISD::UNINDEXED, MMO->isVolatile(),
 
5231
                                     MMO->isNonTemporal(), MMO->isInvariant()));
 
5232
  ID.AddInteger(MMO->getPointerInfo().getAddrSpace());
 
5233
  void *IP = nullptr;
 
5234
  if (SDNode *E = FindNodeOrInsertPos(ID, dl.getDebugLoc(), IP)) {
 
5235
    cast<MaskedStoreSDNode>(E)->refineAlignment(MMO);
 
5236
    return SDValue(E, 0);
 
5237
  }
 
5238
  SDNode *N = new (NodeAllocator) MaskedStoreSDNode(dl.getIROrder(),
 
5239
                                                    dl.getDebugLoc(), Ops, 4,
 
5240
                                                    VTs, isTrunc, MemVT, MMO);
 
5241
  CSEMap.InsertNode(N, IP);
 
5242
  InsertNode(N);
 
5243
  return SDValue(N, 0);
 
5244
}
 
5245
 
 
5246
SDValue
 
5247
SelectionDAG::getMaskedGather(SDVTList VTs, EVT VT, SDLoc dl,
 
5248
                              ArrayRef<SDValue> Ops,
 
5249
                              MachineMemOperand *MMO) {
 
5250
 
 
5251
  FoldingSetNodeID ID;
 
5252
  AddNodeIDNode(ID, ISD::MGATHER, VTs, Ops);
 
5253
  ID.AddInteger(VT.getRawBits());
 
5254
  ID.AddInteger(encodeMemSDNodeFlags(ISD::NON_EXTLOAD, ISD::UNINDEXED,
 
5255
                                     MMO->isVolatile(),
 
5256
                                     MMO->isNonTemporal(),
 
5257
                                     MMO->isInvariant()));
 
5258
  ID.AddInteger(MMO->getPointerInfo().getAddrSpace());
 
5259
  void *IP = nullptr;
 
5260
  if (SDNode *E = FindNodeOrInsertPos(ID, dl.getDebugLoc(), IP)) {
 
5261
    cast<MaskedGatherSDNode>(E)->refineAlignment(MMO);
 
5262
    return SDValue(E, 0);
 
5263
  }
 
5264
  MaskedGatherSDNode *N = 
 
5265
    new (NodeAllocator) MaskedGatherSDNode(dl.getIROrder(), dl.getDebugLoc(),
 
5266
                                           Ops, VTs, VT, MMO);
 
5267
  CSEMap.InsertNode(N, IP);
 
5268
  InsertNode(N);
 
5269
  return SDValue(N, 0);
 
5270
}
 
5271
 
 
5272
SDValue SelectionDAG::getMaskedScatter(SDVTList VTs, EVT VT, SDLoc dl,
 
5273
                                       ArrayRef<SDValue> Ops,
 
5274
                                       MachineMemOperand *MMO) {
 
5275
  FoldingSetNodeID ID;
 
5276
  AddNodeIDNode(ID, ISD::MSCATTER, VTs, Ops);
 
5277
  ID.AddInteger(VT.getRawBits());
 
5278
  ID.AddInteger(encodeMemSDNodeFlags(false, ISD::UNINDEXED, MMO->isVolatile(),
 
5279
                                     MMO->isNonTemporal(),
 
5280
                                     MMO->isInvariant()));
 
5281
  ID.AddInteger(MMO->getPointerInfo().getAddrSpace());
 
5282
  void *IP = nullptr;
 
5283
  if (SDNode *E = FindNodeOrInsertPos(ID, dl.getDebugLoc(), IP)) {
 
5284
    cast<MaskedScatterSDNode>(E)->refineAlignment(MMO);
 
5285
    return SDValue(E, 0);
 
5286
  }
 
5287
  SDNode *N =
 
5288
    new (NodeAllocator) MaskedScatterSDNode(dl.getIROrder(), dl.getDebugLoc(),
 
5289
                                            Ops, VTs, VT, MMO);
 
5290
  CSEMap.InsertNode(N, IP);
 
5291
  InsertNode(N);
 
5292
  return SDValue(N, 0);
 
5293
}
 
5294
 
 
5295
SDValue SelectionDAG::getVAArg(EVT VT, SDLoc dl,
 
5296
                               SDValue Chain, SDValue Ptr,
 
5297
                               SDValue SV,
 
5298
                               unsigned Align) {
 
5299
  SDValue Ops[] = { Chain, Ptr, SV, getTargetConstant(Align, dl, MVT::i32) };
 
5300
  return getNode(ISD::VAARG, dl, getVTList(VT, MVT::Other), Ops);
 
5301
}
 
5302
 
 
5303
SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, EVT VT,
 
5304
                              ArrayRef<SDUse> Ops) {
 
5305
  switch (Ops.size()) {
 
5306
  case 0: return getNode(Opcode, DL, VT);
 
5307
  case 1: return getNode(Opcode, DL, VT, static_cast<const SDValue>(Ops[0]));
 
5308
  case 2: return getNode(Opcode, DL, VT, Ops[0], Ops[1]);
 
5309
  case 3: return getNode(Opcode, DL, VT, Ops[0], Ops[1], Ops[2]);
 
5310
  default: break;
 
5311
  }
 
5312
 
 
5313
  // Copy from an SDUse array into an SDValue array for use with
 
5314
  // the regular getNode logic.
 
5315
  SmallVector<SDValue, 8> NewOps(Ops.begin(), Ops.end());
 
5316
  return getNode(Opcode, DL, VT, NewOps);
 
5317
}
 
5318
 
 
5319
SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, EVT VT,
 
5320
                              ArrayRef<SDValue> Ops) {
 
5321
  unsigned NumOps = Ops.size();
 
5322
  switch (NumOps) {
 
5323
  case 0: return getNode(Opcode, DL, VT);
 
5324
  case 1: return getNode(Opcode, DL, VT, Ops[0]);
 
5325
  case 2: return getNode(Opcode, DL, VT, Ops[0], Ops[1]);
 
5326
  case 3: return getNode(Opcode, DL, VT, Ops[0], Ops[1], Ops[2]);
 
5327
  default: break;
 
5328
  }
 
5329
 
 
5330
  switch (Opcode) {
 
5331
  default: break;
 
5332
  case ISD::SELECT_CC: {
 
5333
    assert(NumOps == 5 && "SELECT_CC takes 5 operands!");
 
5334
    assert(Ops[0].getValueType() == Ops[1].getValueType() &&
 
5335
           "LHS and RHS of condition must have same type!");
 
5336
    assert(Ops[2].getValueType() == Ops[3].getValueType() &&
 
5337
           "True and False arms of SelectCC must have same type!");
 
5338
    assert(Ops[2].getValueType() == VT &&
 
5339
           "select_cc node must be of same type as true and false value!");
 
5340
    break;
 
5341
  }
 
5342
  case ISD::BR_CC: {
 
5343
    assert(NumOps == 5 && "BR_CC takes 5 operands!");
 
5344
    assert(Ops[2].getValueType() == Ops[3].getValueType() &&
 
5345
           "LHS/RHS of comparison should match types!");
 
5346
    break;
 
5347
  }
 
5348
  }
 
5349
 
 
5350
  // Memoize nodes.
 
5351
  SDNode *N;
 
5352
  SDVTList VTs = getVTList(VT);
 
5353
 
 
5354
  if (VT != MVT::Glue) {
 
5355
    FoldingSetNodeID ID;
 
5356
    AddNodeIDNode(ID, Opcode, VTs, Ops);
 
5357
    void *IP = nullptr;
 
5358
 
 
5359
    if (SDNode *E = FindNodeOrInsertPos(ID, DL.getDebugLoc(), IP))
 
5360
      return SDValue(E, 0);
 
5361
 
 
5362
    N = new (NodeAllocator) SDNode(Opcode, DL.getIROrder(), DL.getDebugLoc(),
 
5363
                                   VTs, Ops);
 
5364
    CSEMap.InsertNode(N, IP);
 
5365
  } else {
 
5366
    N = new (NodeAllocator) SDNode(Opcode, DL.getIROrder(), DL.getDebugLoc(),
 
5367
                                   VTs, Ops);
 
5368
  }
 
5369
 
 
5370
  InsertNode(N);
 
5371
  return SDValue(N, 0);
 
5372
}
 
5373
 
 
5374
SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL,
 
5375
                              ArrayRef<EVT> ResultTys, ArrayRef<SDValue> Ops) {
 
5376
  return getNode(Opcode, DL, getVTList(ResultTys), Ops);
 
5377
}
 
5378
 
 
5379
SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, SDVTList VTList,
 
5380
                              ArrayRef<SDValue> Ops) {
 
5381
  if (VTList.NumVTs == 1)
 
5382
    return getNode(Opcode, DL, VTList.VTs[0], Ops);
 
5383
 
 
5384
#if 0
 
5385
  switch (Opcode) {
 
5386
  // FIXME: figure out how to safely handle things like
 
5387
  // int foo(int x) { return 1 << (x & 255); }
 
5388
  // int bar() { return foo(256); }
 
5389
  case ISD::SRA_PARTS:
 
5390
  case ISD::SRL_PARTS:
 
5391
  case ISD::SHL_PARTS:
 
5392
    if (N3.getOpcode() == ISD::SIGN_EXTEND_INREG &&
 
5393
        cast<VTSDNode>(N3.getOperand(1))->getVT() != MVT::i1)
 
5394
      return getNode(Opcode, DL, VT, N1, N2, N3.getOperand(0));
 
5395
    else if (N3.getOpcode() == ISD::AND)
 
5396
      if (ConstantSDNode *AndRHS = dyn_cast<ConstantSDNode>(N3.getOperand(1))) {
 
5397
        // If the and is only masking out bits that cannot effect the shift,
 
5398
        // eliminate the and.
 
5399
        unsigned NumBits = VT.getScalarType().getSizeInBits()*2;
 
5400
        if ((AndRHS->getValue() & (NumBits-1)) == NumBits-1)
 
5401
          return getNode(Opcode, DL, VT, N1, N2, N3.getOperand(0));
 
5402
      }
 
5403
    break;
 
5404
  }
 
5405
#endif
 
5406
 
 
5407
  // Memoize the node unless it returns a flag.
 
5408
  SDNode *N;
 
5409
  unsigned NumOps = Ops.size();
 
5410
  if (VTList.VTs[VTList.NumVTs-1] != MVT::Glue) {
 
5411
    FoldingSetNodeID ID;
 
5412
    AddNodeIDNode(ID, Opcode, VTList, Ops);
 
5413
    void *IP = nullptr;
 
5414
    if (SDNode *E = FindNodeOrInsertPos(ID, DL.getDebugLoc(), IP))
 
5415
      return SDValue(E, 0);
 
5416
 
 
5417
    if (NumOps == 1) {
 
5418
      N = new (NodeAllocator) UnarySDNode(Opcode, DL.getIROrder(),
 
5419
                                          DL.getDebugLoc(), VTList, Ops[0]);
 
5420
    } else if (NumOps == 2) {
 
5421
      N = new (NodeAllocator) BinarySDNode(Opcode, DL.getIROrder(),
 
5422
                                           DL.getDebugLoc(), VTList, Ops[0],
 
5423
                                           Ops[1]);
 
5424
    } else if (NumOps == 3) {
 
5425
      N = new (NodeAllocator) TernarySDNode(Opcode, DL.getIROrder(),
 
5426
                                            DL.getDebugLoc(), VTList, Ops[0],
 
5427
                                            Ops[1], Ops[2]);
 
5428
    } else {
 
5429
      N = new (NodeAllocator) SDNode(Opcode, DL.getIROrder(), DL.getDebugLoc(),
 
5430
                                     VTList, Ops);
 
5431
    }
 
5432
    CSEMap.InsertNode(N, IP);
 
5433
  } else {
 
5434
    if (NumOps == 1) {
 
5435
      N = new (NodeAllocator) UnarySDNode(Opcode, DL.getIROrder(),
 
5436
                                          DL.getDebugLoc(), VTList, Ops[0]);
 
5437
    } else if (NumOps == 2) {
 
5438
      N = new (NodeAllocator) BinarySDNode(Opcode, DL.getIROrder(),
 
5439
                                           DL.getDebugLoc(), VTList, Ops[0],
 
5440
                                           Ops[1]);
 
5441
    } else if (NumOps == 3) {
 
5442
      N = new (NodeAllocator) TernarySDNode(Opcode, DL.getIROrder(),
 
5443
                                            DL.getDebugLoc(), VTList, Ops[0],
 
5444
                                            Ops[1], Ops[2]);
 
5445
    } else {
 
5446
      N = new (NodeAllocator) SDNode(Opcode, DL.getIROrder(), DL.getDebugLoc(),
 
5447
                                     VTList, Ops);
 
5448
    }
 
5449
  }
 
5450
  InsertNode(N);
 
5451
  return SDValue(N, 0);
 
5452
}
 
5453
 
 
5454
SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, SDVTList VTList) {
 
5455
  return getNode(Opcode, DL, VTList, None);
 
5456
}
 
5457
 
 
5458
SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, SDVTList VTList,
 
5459
                              SDValue N1) {
 
5460
  SDValue Ops[] = { N1 };
 
5461
  return getNode(Opcode, DL, VTList, Ops);
 
5462
}
 
5463
 
 
5464
SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, SDVTList VTList,
 
5465
                              SDValue N1, SDValue N2) {
 
5466
  SDValue Ops[] = { N1, N2 };
 
5467
  return getNode(Opcode, DL, VTList, Ops);
 
5468
}
 
5469
 
 
5470
SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, SDVTList VTList,
 
5471
                              SDValue N1, SDValue N2, SDValue N3) {
 
5472
  SDValue Ops[] = { N1, N2, N3 };
 
5473
  return getNode(Opcode, DL, VTList, Ops);
 
5474
}
 
5475
 
 
5476
SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, SDVTList VTList,
 
5477
                              SDValue N1, SDValue N2, SDValue N3,
 
5478
                              SDValue N4) {
 
5479
  SDValue Ops[] = { N1, N2, N3, N4 };
 
5480
  return getNode(Opcode, DL, VTList, Ops);
 
5481
}
 
5482
 
 
5483
SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, SDVTList VTList,
 
5484
                              SDValue N1, SDValue N2, SDValue N3,
 
5485
                              SDValue N4, SDValue N5) {
 
5486
  SDValue Ops[] = { N1, N2, N3, N4, N5 };
 
5487
  return getNode(Opcode, DL, VTList, Ops);
 
5488
}
 
5489
 
 
5490
SDVTList SelectionDAG::getVTList(EVT VT) {
 
5491
  return makeVTList(SDNode::getValueTypeList(VT), 1);
 
5492
}
 
5493
 
 
5494
SDVTList SelectionDAG::getVTList(EVT VT1, EVT VT2) {
 
5495
  FoldingSetNodeID ID;
 
5496
  ID.AddInteger(2U);
 
5497
  ID.AddInteger(VT1.getRawBits());
 
5498
  ID.AddInteger(VT2.getRawBits());
 
5499
 
 
5500
  void *IP = nullptr;
 
5501
  SDVTListNode *Result = VTListMap.FindNodeOrInsertPos(ID, IP);
 
5502
  if (!Result) {
 
5503
    EVT *Array = Allocator.Allocate<EVT>(2);
 
5504
    Array[0] = VT1;
 
5505
    Array[1] = VT2;
 
5506
    Result = new (Allocator) SDVTListNode(ID.Intern(Allocator), Array, 2);
 
5507
    VTListMap.InsertNode(Result, IP);
 
5508
  }
 
5509
  return Result->getSDVTList();
 
5510
}
 
5511
 
 
5512
SDVTList SelectionDAG::getVTList(EVT VT1, EVT VT2, EVT VT3) {
 
5513
  FoldingSetNodeID ID;
 
5514
  ID.AddInteger(3U);
 
5515
  ID.AddInteger(VT1.getRawBits());
 
5516
  ID.AddInteger(VT2.getRawBits());
 
5517
  ID.AddInteger(VT3.getRawBits());
 
5518
 
 
5519
  void *IP = nullptr;
 
5520
  SDVTListNode *Result = VTListMap.FindNodeOrInsertPos(ID, IP);
 
5521
  if (!Result) {
 
5522
    EVT *Array = Allocator.Allocate<EVT>(3);
 
5523
    Array[0] = VT1;
 
5524
    Array[1] = VT2;
 
5525
    Array[2] = VT3;
 
5526
    Result = new (Allocator) SDVTListNode(ID.Intern(Allocator), Array, 3);
 
5527
    VTListMap.InsertNode(Result, IP);
 
5528
  }
 
5529
  return Result->getSDVTList();
 
5530
}
 
5531
 
 
5532
SDVTList SelectionDAG::getVTList(EVT VT1, EVT VT2, EVT VT3, EVT VT4) {
 
5533
  FoldingSetNodeID ID;
 
5534
  ID.AddInteger(4U);
 
5535
  ID.AddInteger(VT1.getRawBits());
 
5536
  ID.AddInteger(VT2.getRawBits());
 
5537
  ID.AddInteger(VT3.getRawBits());
 
5538
  ID.AddInteger(VT4.getRawBits());
 
5539
 
 
5540
  void *IP = nullptr;
 
5541
  SDVTListNode *Result = VTListMap.FindNodeOrInsertPos(ID, IP);
 
5542
  if (!Result) {
 
5543
    EVT *Array = Allocator.Allocate<EVT>(4);
 
5544
    Array[0] = VT1;
 
5545
    Array[1] = VT2;
 
5546
    Array[2] = VT3;
 
5547
    Array[3] = VT4;
 
5548
    Result = new (Allocator) SDVTListNode(ID.Intern(Allocator), Array, 4);
 
5549
    VTListMap.InsertNode(Result, IP);
 
5550
  }
 
5551
  return Result->getSDVTList();
 
5552
}
 
5553
 
 
5554
SDVTList SelectionDAG::getVTList(ArrayRef<EVT> VTs) {
 
5555
  unsigned NumVTs = VTs.size();
 
5556
  FoldingSetNodeID ID;
 
5557
  ID.AddInteger(NumVTs);
 
5558
  for (unsigned index = 0; index < NumVTs; index++) {
 
5559
    ID.AddInteger(VTs[index].getRawBits());
 
5560
  }
 
5561
 
 
5562
  void *IP = nullptr;
 
5563
  SDVTListNode *Result = VTListMap.FindNodeOrInsertPos(ID, IP);
 
5564
  if (!Result) {
 
5565
    EVT *Array = Allocator.Allocate<EVT>(NumVTs);
 
5566
    std::copy(VTs.begin(), VTs.end(), Array);
 
5567
    Result = new (Allocator) SDVTListNode(ID.Intern(Allocator), Array, NumVTs);
 
5568
    VTListMap.InsertNode(Result, IP);
 
5569
  }
 
5570
  return Result->getSDVTList();
 
5571
}
 
5572
 
 
5573
 
 
5574
/// UpdateNodeOperands - *Mutate* the specified node in-place to have the
 
5575
/// specified operands.  If the resultant node already exists in the DAG,
 
5576
/// this does not modify the specified node, instead it returns the node that
 
5577
/// already exists.  If the resultant node does not exist in the DAG, the
 
5578
/// input node is returned.  As a degenerate case, if you specify the same
 
5579
/// input operands as the node already has, the input node is returned.
 
5580
SDNode *SelectionDAG::UpdateNodeOperands(SDNode *N, SDValue Op) {
 
5581
  assert(N->getNumOperands() == 1 && "Update with wrong number of operands");
 
5582
 
 
5583
  // Check to see if there is no change.
 
5584
  if (Op == N->getOperand(0)) return N;
 
5585
 
 
5586
  // See if the modified node already exists.
 
5587
  void *InsertPos = nullptr;
 
5588
  if (SDNode *Existing = FindModifiedNodeSlot(N, Op, InsertPos))
 
5589
    return Existing;
 
5590
 
 
5591
  // Nope it doesn't.  Remove the node from its current place in the maps.
 
5592
  if (InsertPos)
 
5593
    if (!RemoveNodeFromCSEMaps(N))
 
5594
      InsertPos = nullptr;
 
5595
 
 
5596
  // Now we update the operands.
 
5597
  N->OperandList[0].set(Op);
 
5598
 
 
5599
  // If this gets put into a CSE map, add it.
 
5600
  if (InsertPos) CSEMap.InsertNode(N, InsertPos);
 
5601
  return N;
 
5602
}
 
5603
 
 
5604
SDNode *SelectionDAG::UpdateNodeOperands(SDNode *N, SDValue Op1, SDValue Op2) {
 
5605
  assert(N->getNumOperands() == 2 && "Update with wrong number of operands");
 
5606
 
 
5607
  // Check to see if there is no change.
 
5608
  if (Op1 == N->getOperand(0) && Op2 == N->getOperand(1))
 
5609
    return N;   // No operands changed, just return the input node.
 
5610
 
 
5611
  // See if the modified node already exists.
 
5612
  void *InsertPos = nullptr;
 
5613
  if (SDNode *Existing = FindModifiedNodeSlot(N, Op1, Op2, InsertPos))
 
5614
    return Existing;
 
5615
 
 
5616
  // Nope it doesn't.  Remove the node from its current place in the maps.
 
5617
  if (InsertPos)
 
5618
    if (!RemoveNodeFromCSEMaps(N))
 
5619
      InsertPos = nullptr;
 
5620
 
 
5621
  // Now we update the operands.
 
5622
  if (N->OperandList[0] != Op1)
 
5623
    N->OperandList[0].set(Op1);
 
5624
  if (N->OperandList[1] != Op2)
 
5625
    N->OperandList[1].set(Op2);
 
5626
 
 
5627
  // If this gets put into a CSE map, add it.
 
5628
  if (InsertPos) CSEMap.InsertNode(N, InsertPos);
 
5629
  return N;
 
5630
}
 
5631
 
 
5632
SDNode *SelectionDAG::
 
5633
UpdateNodeOperands(SDNode *N, SDValue Op1, SDValue Op2, SDValue Op3) {
 
5634
  SDValue Ops[] = { Op1, Op2, Op3 };
 
5635
  return UpdateNodeOperands(N, Ops);
 
5636
}
 
5637
 
 
5638
SDNode *SelectionDAG::
 
5639
UpdateNodeOperands(SDNode *N, SDValue Op1, SDValue Op2,
 
5640
                   SDValue Op3, SDValue Op4) {
 
5641
  SDValue Ops[] = { Op1, Op2, Op3, Op4 };
 
5642
  return UpdateNodeOperands(N, Ops);
 
5643
}
 
5644
 
 
5645
SDNode *SelectionDAG::
 
5646
UpdateNodeOperands(SDNode *N, SDValue Op1, SDValue Op2,
 
5647
                   SDValue Op3, SDValue Op4, SDValue Op5) {
 
5648
  SDValue Ops[] = { Op1, Op2, Op3, Op4, Op5 };
 
5649
  return UpdateNodeOperands(N, Ops);
 
5650
}
 
5651
 
 
5652
SDNode *SelectionDAG::
 
5653
UpdateNodeOperands(SDNode *N, ArrayRef<SDValue> Ops) {
 
5654
  unsigned NumOps = Ops.size();
 
5655
  assert(N->getNumOperands() == NumOps &&
 
5656
         "Update with wrong number of operands");
 
5657
 
 
5658
  // If no operands changed just return the input node.
 
5659
  if (Ops.empty() || std::equal(Ops.begin(), Ops.end(), N->op_begin()))
 
5660
    return N;
 
5661
 
 
5662
  // See if the modified node already exists.
 
5663
  void *InsertPos = nullptr;
 
5664
  if (SDNode *Existing = FindModifiedNodeSlot(N, Ops, InsertPos))
 
5665
    return Existing;
 
5666
 
 
5667
  // Nope it doesn't.  Remove the node from its current place in the maps.
 
5668
  if (InsertPos)
 
5669
    if (!RemoveNodeFromCSEMaps(N))
 
5670
      InsertPos = nullptr;
 
5671
 
 
5672
  // Now we update the operands.
 
5673
  for (unsigned i = 0; i != NumOps; ++i)
 
5674
    if (N->OperandList[i] != Ops[i])
 
5675
      N->OperandList[i].set(Ops[i]);
 
5676
 
 
5677
  // If this gets put into a CSE map, add it.
 
5678
  if (InsertPos) CSEMap.InsertNode(N, InsertPos);
 
5679
  return N;
 
5680
}
 
5681
 
 
5682
/// DropOperands - Release the operands and set this node to have
 
5683
/// zero operands.
 
5684
void SDNode::DropOperands() {
 
5685
  // Unlike the code in MorphNodeTo that does this, we don't need to
 
5686
  // watch for dead nodes here.
 
5687
  for (op_iterator I = op_begin(), E = op_end(); I != E; ) {
 
5688
    SDUse &Use = *I++;
 
5689
    Use.set(SDValue());
 
5690
  }
 
5691
}
 
5692
 
 
5693
/// SelectNodeTo - These are wrappers around MorphNodeTo that accept a
 
5694
/// machine opcode.
 
5695
///
 
5696
SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
 
5697
                                   EVT VT) {
 
5698
  SDVTList VTs = getVTList(VT);
 
5699
  return SelectNodeTo(N, MachineOpc, VTs, None);
 
5700
}
 
5701
 
 
5702
SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
 
5703
                                   EVT VT, SDValue Op1) {
 
5704
  SDVTList VTs = getVTList(VT);
 
5705
  SDValue Ops[] = { Op1 };
 
5706
  return SelectNodeTo(N, MachineOpc, VTs, Ops);
 
5707
}
 
5708
 
 
5709
SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
 
5710
                                   EVT VT, SDValue Op1,
 
5711
                                   SDValue Op2) {
 
5712
  SDVTList VTs = getVTList(VT);
 
5713
  SDValue Ops[] = { Op1, Op2 };
 
5714
  return SelectNodeTo(N, MachineOpc, VTs, Ops);
 
5715
}
 
5716
 
 
5717
SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
 
5718
                                   EVT VT, SDValue Op1,
 
5719
                                   SDValue Op2, SDValue Op3) {
 
5720
  SDVTList VTs = getVTList(VT);
 
5721
  SDValue Ops[] = { Op1, Op2, Op3 };
 
5722
  return SelectNodeTo(N, MachineOpc, VTs, Ops);
 
5723
}
 
5724
 
 
5725
SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
 
5726
                                   EVT VT, ArrayRef<SDValue> Ops) {
 
5727
  SDVTList VTs = getVTList(VT);
 
5728
  return SelectNodeTo(N, MachineOpc, VTs, Ops);
 
5729
}
 
5730
 
 
5731
SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
 
5732
                                   EVT VT1, EVT VT2, ArrayRef<SDValue> Ops) {
 
5733
  SDVTList VTs = getVTList(VT1, VT2);
 
5734
  return SelectNodeTo(N, MachineOpc, VTs, Ops);
 
5735
}
 
5736
 
 
5737
SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
 
5738
                                   EVT VT1, EVT VT2) {
 
5739
  SDVTList VTs = getVTList(VT1, VT2);
 
5740
  return SelectNodeTo(N, MachineOpc, VTs, None);
 
5741
}
 
5742
 
 
5743
SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
 
5744
                                   EVT VT1, EVT VT2, EVT VT3,
 
5745
                                   ArrayRef<SDValue> Ops) {
 
5746
  SDVTList VTs = getVTList(VT1, VT2, VT3);
 
5747
  return SelectNodeTo(N, MachineOpc, VTs, Ops);
 
5748
}
 
5749
 
 
5750
SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
 
5751
                                   EVT VT1, EVT VT2, EVT VT3, EVT VT4,
 
5752
                                   ArrayRef<SDValue> Ops) {
 
5753
  SDVTList VTs = getVTList(VT1, VT2, VT3, VT4);
 
5754
  return SelectNodeTo(N, MachineOpc, VTs, Ops);
 
5755
}
 
5756
 
 
5757
SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
 
5758
                                   EVT VT1, EVT VT2,
 
5759
                                   SDValue Op1) {
 
5760
  SDVTList VTs = getVTList(VT1, VT2);
 
5761
  SDValue Ops[] = { Op1 };
 
5762
  return SelectNodeTo(N, MachineOpc, VTs, Ops);
 
5763
}
 
5764
 
 
5765
SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
 
5766
                                   EVT VT1, EVT VT2,
 
5767
                                   SDValue Op1, SDValue Op2) {
 
5768
  SDVTList VTs = getVTList(VT1, VT2);
 
5769
  SDValue Ops[] = { Op1, Op2 };
 
5770
  return SelectNodeTo(N, MachineOpc, VTs, Ops);
 
5771
}
 
5772
 
 
5773
SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
 
5774
                                   EVT VT1, EVT VT2,
 
5775
                                   SDValue Op1, SDValue Op2,
 
5776
                                   SDValue Op3) {
 
5777
  SDVTList VTs = getVTList(VT1, VT2);
 
5778
  SDValue Ops[] = { Op1, Op2, Op3 };
 
5779
  return SelectNodeTo(N, MachineOpc, VTs, Ops);
 
5780
}
 
5781
 
 
5782
SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
 
5783
                                   EVT VT1, EVT VT2, EVT VT3,
 
5784
                                   SDValue Op1, SDValue Op2,
 
5785
                                   SDValue Op3) {
 
5786
  SDVTList VTs = getVTList(VT1, VT2, VT3);
 
5787
  SDValue Ops[] = { Op1, Op2, Op3 };
 
5788
  return SelectNodeTo(N, MachineOpc, VTs, Ops);
 
5789
}
 
5790
 
 
5791
SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
 
5792
                                   SDVTList VTs,ArrayRef<SDValue> Ops) {
 
5793
  N = MorphNodeTo(N, ~MachineOpc, VTs, Ops);
 
5794
  // Reset the NodeID to -1.
 
5795
  N->setNodeId(-1);
 
5796
  return N;
 
5797
}
 
5798
 
 
5799
/// UpdadeSDLocOnMergedSDNode - If the opt level is -O0 then it throws away
 
5800
/// the line number information on the merged node since it is not possible to
 
5801
/// preserve the information that operation is associated with multiple lines.
 
5802
/// This will make the debugger working better at -O0, were there is a higher
 
5803
/// probability having other instructions associated with that line.
 
5804
///
 
5805
/// For IROrder, we keep the smaller of the two
 
5806
SDNode *SelectionDAG::UpdadeSDLocOnMergedSDNode(SDNode *N, SDLoc OLoc) {
 
5807
  DebugLoc NLoc = N->getDebugLoc();
 
5808
  if (NLoc && OptLevel == CodeGenOpt::None && OLoc.getDebugLoc() != NLoc) {
 
5809
    N->setDebugLoc(DebugLoc());
 
5810
  }
 
5811
  unsigned Order = std::min(N->getIROrder(), OLoc.getIROrder());
 
5812
  N->setIROrder(Order);
 
5813
  return N;
 
5814
}
 
5815
 
 
5816
/// MorphNodeTo - This *mutates* the specified node to have the specified
 
5817
/// return type, opcode, and operands.
 
5818
///
 
5819
/// Note that MorphNodeTo returns the resultant node.  If there is already a
 
5820
/// node of the specified opcode and operands, it returns that node instead of
 
5821
/// the current one.  Note that the SDLoc need not be the same.
 
5822
///
 
5823
/// Using MorphNodeTo is faster than creating a new node and swapping it in
 
5824
/// with ReplaceAllUsesWith both because it often avoids allocating a new
 
5825
/// node, and because it doesn't require CSE recalculation for any of
 
5826
/// the node's users.
 
5827
///
 
5828
/// However, note that MorphNodeTo recursively deletes dead nodes from the DAG.
 
5829
/// As a consequence it isn't appropriate to use from within the DAG combiner or
 
5830
/// the legalizer which maintain worklists that would need to be updated when
 
5831
/// deleting things.
 
5832
SDNode *SelectionDAG::MorphNodeTo(SDNode *N, unsigned Opc,
 
5833
                                  SDVTList VTs, ArrayRef<SDValue> Ops) {
 
5834
  unsigned NumOps = Ops.size();
 
5835
  // If an identical node already exists, use it.
 
5836
  void *IP = nullptr;
 
5837
  if (VTs.VTs[VTs.NumVTs-1] != MVT::Glue) {
 
5838
    FoldingSetNodeID ID;
 
5839
    AddNodeIDNode(ID, Opc, VTs, Ops);
 
5840
    if (SDNode *ON = FindNodeOrInsertPos(ID, N->getDebugLoc(), IP))
 
5841
      return UpdadeSDLocOnMergedSDNode(ON, SDLoc(N));
 
5842
  }
 
5843
 
 
5844
  if (!RemoveNodeFromCSEMaps(N))
 
5845
    IP = nullptr;
 
5846
 
 
5847
  // Start the morphing.
 
5848
  N->NodeType = Opc;
 
5849
  N->ValueList = VTs.VTs;
 
5850
  N->NumValues = VTs.NumVTs;
 
5851
 
 
5852
  // Clear the operands list, updating used nodes to remove this from their
 
5853
  // use list.  Keep track of any operands that become dead as a result.
 
5854
  SmallPtrSet<SDNode*, 16> DeadNodeSet;
 
5855
  for (SDNode::op_iterator I = N->op_begin(), E = N->op_end(); I != E; ) {
 
5856
    SDUse &Use = *I++;
 
5857
    SDNode *Used = Use.getNode();
 
5858
    Use.set(SDValue());
 
5859
    if (Used->use_empty())
 
5860
      DeadNodeSet.insert(Used);
 
5861
  }
 
5862
 
 
5863
  if (MachineSDNode *MN = dyn_cast<MachineSDNode>(N)) {
 
5864
    // Initialize the memory references information.
 
5865
    MN->setMemRefs(nullptr, nullptr);
 
5866
    // If NumOps is larger than the # of operands we can have in a
 
5867
    // MachineSDNode, reallocate the operand list.
 
5868
    if (NumOps > MN->NumOperands || !MN->OperandsNeedDelete) {
 
5869
      if (MN->OperandsNeedDelete)
 
5870
        delete[] MN->OperandList;
 
5871
      if (NumOps > array_lengthof(MN->LocalOperands))
 
5872
        // We're creating a final node that will live unmorphed for the
 
5873
        // remainder of the current SelectionDAG iteration, so we can allocate
 
5874
        // the operands directly out of a pool with no recycling metadata.
 
5875
        MN->InitOperands(OperandAllocator.Allocate<SDUse>(NumOps),
 
5876
                         Ops.data(), NumOps);
 
5877
      else
 
5878
        MN->InitOperands(MN->LocalOperands, Ops.data(), NumOps);
 
5879
      MN->OperandsNeedDelete = false;
 
5880
    } else
 
5881
      MN->InitOperands(MN->OperandList, Ops.data(), NumOps);
 
5882
  } else {
 
5883
    // If NumOps is larger than the # of operands we currently have, reallocate
 
5884
    // the operand list.
 
5885
    if (NumOps > N->NumOperands) {
 
5886
      if (N->OperandsNeedDelete)
 
5887
        delete[] N->OperandList;
 
5888
      N->InitOperands(new SDUse[NumOps], Ops.data(), NumOps);
 
5889
      N->OperandsNeedDelete = true;
 
5890
    } else
 
5891
      N->InitOperands(N->OperandList, Ops.data(), NumOps);
 
5892
  }
 
5893
 
 
5894
  // Delete any nodes that are still dead after adding the uses for the
 
5895
  // new operands.
 
5896
  if (!DeadNodeSet.empty()) {
 
5897
    SmallVector<SDNode *, 16> DeadNodes;
 
5898
    for (SDNode *N : DeadNodeSet)
 
5899
      if (N->use_empty())
 
5900
        DeadNodes.push_back(N);
 
5901
    RemoveDeadNodes(DeadNodes);
 
5902
  }
 
5903
 
 
5904
  if (IP)
 
5905
    CSEMap.InsertNode(N, IP);   // Memoize the new node.
 
5906
  return N;
 
5907
}
 
5908
 
 
5909
 
 
5910
/// getMachineNode - These are used for target selectors to create a new node
 
5911
/// with specified return type(s), MachineInstr opcode, and operands.
 
5912
///
 
5913
/// Note that getMachineNode returns the resultant node.  If there is already a
 
5914
/// node of the specified opcode and operands, it returns that node instead of
 
5915
/// the current one.
 
5916
MachineSDNode *
 
5917
SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl, EVT VT) {
 
5918
  SDVTList VTs = getVTList(VT);
 
5919
  return getMachineNode(Opcode, dl, VTs, None);
 
5920
}
 
5921
 
 
5922
MachineSDNode *
 
5923
SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl, EVT VT, SDValue Op1) {
 
5924
  SDVTList VTs = getVTList(VT);
 
5925
  SDValue Ops[] = { Op1 };
 
5926
  return getMachineNode(Opcode, dl, VTs, Ops);
 
5927
}
 
5928
 
 
5929
MachineSDNode *
 
5930
SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl, EVT VT,
 
5931
                             SDValue Op1, SDValue Op2) {
 
5932
  SDVTList VTs = getVTList(VT);
 
5933
  SDValue Ops[] = { Op1, Op2 };
 
5934
  return getMachineNode(Opcode, dl, VTs, Ops);
 
5935
}
 
5936
 
 
5937
MachineSDNode *
 
5938
SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl, EVT VT,
 
5939
                             SDValue Op1, SDValue Op2, SDValue Op3) {
 
5940
  SDVTList VTs = getVTList(VT);
 
5941
  SDValue Ops[] = { Op1, Op2, Op3 };
 
5942
  return getMachineNode(Opcode, dl, VTs, Ops);
 
5943
}
 
5944
 
 
5945
MachineSDNode *
 
5946
SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl, EVT VT,
 
5947
                             ArrayRef<SDValue> Ops) {
 
5948
  SDVTList VTs = getVTList(VT);
 
5949
  return getMachineNode(Opcode, dl, VTs, Ops);
 
5950
}
 
5951
 
 
5952
MachineSDNode *
 
5953
SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl, EVT VT1, EVT VT2) {
 
5954
  SDVTList VTs = getVTList(VT1, VT2);
 
5955
  return getMachineNode(Opcode, dl, VTs, None);
 
5956
}
 
5957
 
 
5958
MachineSDNode *
 
5959
SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl,
 
5960
                             EVT VT1, EVT VT2, SDValue Op1) {
 
5961
  SDVTList VTs = getVTList(VT1, VT2);
 
5962
  SDValue Ops[] = { Op1 };
 
5963
  return getMachineNode(Opcode, dl, VTs, Ops);
 
5964
}
 
5965
 
 
5966
MachineSDNode *
 
5967
SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl,
 
5968
                             EVT VT1, EVT VT2, SDValue Op1, SDValue Op2) {
 
5969
  SDVTList VTs = getVTList(VT1, VT2);
 
5970
  SDValue Ops[] = { Op1, Op2 };
 
5971
  return getMachineNode(Opcode, dl, VTs, Ops);
 
5972
}
 
5973
 
 
5974
MachineSDNode *
 
5975
SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl,
 
5976
                             EVT VT1, EVT VT2, SDValue Op1,
 
5977
                             SDValue Op2, SDValue Op3) {
 
5978
  SDVTList VTs = getVTList(VT1, VT2);
 
5979
  SDValue Ops[] = { Op1, Op2, Op3 };
 
5980
  return getMachineNode(Opcode, dl, VTs, Ops);
 
5981
}
 
5982
 
 
5983
MachineSDNode *
 
5984
SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl,
 
5985
                             EVT VT1, EVT VT2,
 
5986
                             ArrayRef<SDValue> Ops) {
 
5987
  SDVTList VTs = getVTList(VT1, VT2);
 
5988
  return getMachineNode(Opcode, dl, VTs, Ops);
 
5989
}
 
5990
 
 
5991
MachineSDNode *
 
5992
SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl,
 
5993
                             EVT VT1, EVT VT2, EVT VT3,
 
5994
                             SDValue Op1, SDValue Op2) {
 
5995
  SDVTList VTs = getVTList(VT1, VT2, VT3);
 
5996
  SDValue Ops[] = { Op1, Op2 };
 
5997
  return getMachineNode(Opcode, dl, VTs, Ops);
 
5998
}
 
5999
 
 
6000
MachineSDNode *
 
6001
SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl,
 
6002
                             EVT VT1, EVT VT2, EVT VT3,
 
6003
                             SDValue Op1, SDValue Op2, SDValue Op3) {
 
6004
  SDVTList VTs = getVTList(VT1, VT2, VT3);
 
6005
  SDValue Ops[] = { Op1, Op2, Op3 };
 
6006
  return getMachineNode(Opcode, dl, VTs, Ops);
 
6007
}
 
6008
 
 
6009
MachineSDNode *
 
6010
SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl,
 
6011
                             EVT VT1, EVT VT2, EVT VT3,
 
6012
                             ArrayRef<SDValue> Ops) {
 
6013
  SDVTList VTs = getVTList(VT1, VT2, VT3);
 
6014
  return getMachineNode(Opcode, dl, VTs, Ops);
 
6015
}
 
6016
 
 
6017
MachineSDNode *
 
6018
SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl, EVT VT1,
 
6019
                             EVT VT2, EVT VT3, EVT VT4,
 
6020
                             ArrayRef<SDValue> Ops) {
 
6021
  SDVTList VTs = getVTList(VT1, VT2, VT3, VT4);
 
6022
  return getMachineNode(Opcode, dl, VTs, Ops);
 
6023
}
 
6024
 
 
6025
MachineSDNode *
 
6026
SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl,
 
6027
                             ArrayRef<EVT> ResultTys,
 
6028
                             ArrayRef<SDValue> Ops) {
 
6029
  SDVTList VTs = getVTList(ResultTys);
 
6030
  return getMachineNode(Opcode, dl, VTs, Ops);
 
6031
}
 
6032
 
 
6033
MachineSDNode *
 
6034
SelectionDAG::getMachineNode(unsigned Opcode, SDLoc DL, SDVTList VTs,
 
6035
                             ArrayRef<SDValue> OpsArray) {
 
6036
  bool DoCSE = VTs.VTs[VTs.NumVTs-1] != MVT::Glue;
 
6037
  MachineSDNode *N;
 
6038
  void *IP = nullptr;
 
6039
  const SDValue *Ops = OpsArray.data();
 
6040
  unsigned NumOps = OpsArray.size();
 
6041
 
 
6042
  if (DoCSE) {
 
6043
    FoldingSetNodeID ID;
 
6044
    AddNodeIDNode(ID, ~Opcode, VTs, OpsArray);
 
6045
    IP = nullptr;
 
6046
    if (SDNode *E = FindNodeOrInsertPos(ID, DL.getDebugLoc(), IP)) {
 
6047
      return cast<MachineSDNode>(UpdadeSDLocOnMergedSDNode(E, DL));
 
6048
    }
 
6049
  }
 
6050
 
 
6051
  // Allocate a new MachineSDNode.
 
6052
  N = new (NodeAllocator) MachineSDNode(~Opcode, DL.getIROrder(),
 
6053
                                        DL.getDebugLoc(), VTs);
 
6054
 
 
6055
  // Initialize the operands list.
 
6056
  if (NumOps > array_lengthof(N->LocalOperands))
 
6057
    // We're creating a final node that will live unmorphed for the
 
6058
    // remainder of the current SelectionDAG iteration, so we can allocate
 
6059
    // the operands directly out of a pool with no recycling metadata.
 
6060
    N->InitOperands(OperandAllocator.Allocate<SDUse>(NumOps),
 
6061
                    Ops, NumOps);
 
6062
  else
 
6063
    N->InitOperands(N->LocalOperands, Ops, NumOps);
 
6064
  N->OperandsNeedDelete = false;
 
6065
 
 
6066
  if (DoCSE)
 
6067
    CSEMap.InsertNode(N, IP);
 
6068
 
 
6069
  InsertNode(N);
 
6070
  return N;
 
6071
}
 
6072
 
 
6073
/// getTargetExtractSubreg - A convenience function for creating
 
6074
/// TargetOpcode::EXTRACT_SUBREG nodes.
 
6075
SDValue
 
6076
SelectionDAG::getTargetExtractSubreg(int SRIdx, SDLoc DL, EVT VT,
 
6077
                                     SDValue Operand) {
 
6078
  SDValue SRIdxVal = getTargetConstant(SRIdx, DL, MVT::i32);
 
6079
  SDNode *Subreg = getMachineNode(TargetOpcode::EXTRACT_SUBREG, DL,
 
6080
                                  VT, Operand, SRIdxVal);
 
6081
  return SDValue(Subreg, 0);
 
6082
}
 
6083
 
 
6084
/// getTargetInsertSubreg - A convenience function for creating
 
6085
/// TargetOpcode::INSERT_SUBREG nodes.
 
6086
SDValue
 
6087
SelectionDAG::getTargetInsertSubreg(int SRIdx, SDLoc DL, EVT VT,
 
6088
                                    SDValue Operand, SDValue Subreg) {
 
6089
  SDValue SRIdxVal = getTargetConstant(SRIdx, DL, MVT::i32);
 
6090
  SDNode *Result = getMachineNode(TargetOpcode::INSERT_SUBREG, DL,
 
6091
                                  VT, Operand, Subreg, SRIdxVal);
 
6092
  return SDValue(Result, 0);
 
6093
}
 
6094
 
 
6095
/// getNodeIfExists - Get the specified node if it's already available, or
 
6096
/// else return NULL.
 
6097
SDNode *SelectionDAG::getNodeIfExists(unsigned Opcode, SDVTList VTList,
 
6098
                                      ArrayRef<SDValue> Ops,
 
6099
                                      const SDNodeFlags *Flags) {
 
6100
  if (VTList.VTs[VTList.NumVTs - 1] != MVT::Glue) {
 
6101
    FoldingSetNodeID ID;
 
6102
    AddNodeIDNode(ID, Opcode, VTList, Ops);
 
6103
    AddNodeIDFlags(ID, Opcode, Flags);
 
6104
    void *IP = nullptr;
 
6105
    if (SDNode *E = FindNodeOrInsertPos(ID, DebugLoc(), IP))
 
6106
      return E;
 
6107
  }
 
6108
  return nullptr;
 
6109
}
 
6110
 
 
6111
/// getDbgValue - Creates a SDDbgValue node.
 
6112
///
 
6113
/// SDNode
 
6114
SDDbgValue *SelectionDAG::getDbgValue(MDNode *Var, MDNode *Expr, SDNode *N,
 
6115
                                      unsigned R, bool IsIndirect, uint64_t Off,
 
6116
                                      DebugLoc DL, unsigned O) {
 
6117
  assert(cast<DILocalVariable>(Var)->isValidLocationForIntrinsic(DL) &&
 
6118
         "Expected inlined-at fields to agree");
 
6119
  return new (DbgInfo->getAlloc())
 
6120
      SDDbgValue(Var, Expr, N, R, IsIndirect, Off, DL, O);
 
6121
}
 
6122
 
 
6123
/// Constant
 
6124
SDDbgValue *SelectionDAG::getConstantDbgValue(MDNode *Var, MDNode *Expr,
 
6125
                                              const Value *C, uint64_t Off,
 
6126
                                              DebugLoc DL, unsigned O) {
 
6127
  assert(cast<DILocalVariable>(Var)->isValidLocationForIntrinsic(DL) &&
 
6128
         "Expected inlined-at fields to agree");
 
6129
  return new (DbgInfo->getAlloc()) SDDbgValue(Var, Expr, C, Off, DL, O);
 
6130
}
 
6131
 
 
6132
/// FrameIndex
 
6133
SDDbgValue *SelectionDAG::getFrameIndexDbgValue(MDNode *Var, MDNode *Expr,
 
6134
                                                unsigned FI, uint64_t Off,
 
6135
                                                DebugLoc DL, unsigned O) {
 
6136
  assert(cast<DILocalVariable>(Var)->isValidLocationForIntrinsic(DL) &&
 
6137
         "Expected inlined-at fields to agree");
 
6138
  return new (DbgInfo->getAlloc()) SDDbgValue(Var, Expr, FI, Off, DL, O);
 
6139
}
 
6140
 
 
6141
namespace {
 
6142
 
 
6143
/// RAUWUpdateListener - Helper for ReplaceAllUsesWith - When the node
 
6144
/// pointed to by a use iterator is deleted, increment the use iterator
 
6145
/// so that it doesn't dangle.
 
6146
///
 
6147
class RAUWUpdateListener : public SelectionDAG::DAGUpdateListener {
 
6148
  SDNode::use_iterator &UI;
 
6149
  SDNode::use_iterator &UE;
 
6150
 
 
6151
  void NodeDeleted(SDNode *N, SDNode *E) override {
 
6152
    // Increment the iterator as needed.
 
6153
    while (UI != UE && N == *UI)
 
6154
      ++UI;
 
6155
  }
 
6156
 
 
6157
public:
 
6158
  RAUWUpdateListener(SelectionDAG &d,
 
6159
                     SDNode::use_iterator &ui,
 
6160
                     SDNode::use_iterator &ue)
 
6161
    : SelectionDAG::DAGUpdateListener(d), UI(ui), UE(ue) {}
 
6162
};
 
6163
 
 
6164
}
 
6165
 
 
6166
/// ReplaceAllUsesWith - Modify anything using 'From' to use 'To' instead.
 
6167
/// This can cause recursive merging of nodes in the DAG.
 
6168
///
 
6169
/// This version assumes From has a single result value.
 
6170
///
 
6171
void SelectionDAG::ReplaceAllUsesWith(SDValue FromN, SDValue To) {
 
6172
  SDNode *From = FromN.getNode();
 
6173
  assert(From->getNumValues() == 1 && FromN.getResNo() == 0 &&
 
6174
         "Cannot replace with this method!");
 
6175
  assert(From != To.getNode() && "Cannot replace uses of with self");
 
6176
 
 
6177
  // Iterate over all the existing uses of From. New uses will be added
 
6178
  // to the beginning of the use list, which we avoid visiting.
 
6179
  // This specifically avoids visiting uses of From that arise while the
 
6180
  // replacement is happening, because any such uses would be the result
 
6181
  // of CSE: If an existing node looks like From after one of its operands
 
6182
  // is replaced by To, we don't want to replace of all its users with To
 
6183
  // too. See PR3018 for more info.
 
6184
  SDNode::use_iterator UI = From->use_begin(), UE = From->use_end();
 
6185
  RAUWUpdateListener Listener(*this, UI, UE);
 
6186
  while (UI != UE) {
 
6187
    SDNode *User = *UI;
 
6188
 
 
6189
    // This node is about to morph, remove its old self from the CSE maps.
 
6190
    RemoveNodeFromCSEMaps(User);
 
6191
 
 
6192
    // A user can appear in a use list multiple times, and when this
 
6193
    // happens the uses are usually next to each other in the list.
 
6194
    // To help reduce the number of CSE recomputations, process all
 
6195
    // the uses of this user that we can find this way.
 
6196
    do {
 
6197
      SDUse &Use = UI.getUse();
 
6198
      ++UI;
 
6199
      Use.set(To);
 
6200
    } while (UI != UE && *UI == User);
 
6201
 
 
6202
    // Now that we have modified User, add it back to the CSE maps.  If it
 
6203
    // already exists there, recursively merge the results together.
 
6204
    AddModifiedNodeToCSEMaps(User);
 
6205
  }
 
6206
 
 
6207
  // If we just RAUW'd the root, take note.
 
6208
  if (FromN == getRoot())
 
6209
    setRoot(To);
 
6210
}
 
6211
 
 
6212
/// ReplaceAllUsesWith - Modify anything using 'From' to use 'To' instead.
 
6213
/// This can cause recursive merging of nodes in the DAG.
 
6214
///
 
6215
/// This version assumes that for each value of From, there is a
 
6216
/// corresponding value in To in the same position with the same type.
 
6217
///
 
6218
void SelectionDAG::ReplaceAllUsesWith(SDNode *From, SDNode *To) {
 
6219
#ifndef NDEBUG
 
6220
  for (unsigned i = 0, e = From->getNumValues(); i != e; ++i)
 
6221
    assert((!From->hasAnyUseOfValue(i) ||
 
6222
            From->getValueType(i) == To->getValueType(i)) &&
 
6223
           "Cannot use this version of ReplaceAllUsesWith!");
 
6224
#endif
 
6225
 
 
6226
  // Handle the trivial case.
 
6227
  if (From == To)
 
6228
    return;
 
6229
 
 
6230
  // Iterate over just the existing users of From. See the comments in
 
6231
  // the ReplaceAllUsesWith above.
 
6232
  SDNode::use_iterator UI = From->use_begin(), UE = From->use_end();
 
6233
  RAUWUpdateListener Listener(*this, UI, UE);
 
6234
  while (UI != UE) {
 
6235
    SDNode *User = *UI;
 
6236
 
 
6237
    // This node is about to morph, remove its old self from the CSE maps.
 
6238
    RemoveNodeFromCSEMaps(User);
 
6239
 
 
6240
    // A user can appear in a use list multiple times, and when this
 
6241
    // happens the uses are usually next to each other in the list.
 
6242
    // To help reduce the number of CSE recomputations, process all
 
6243
    // the uses of this user that we can find this way.
 
6244
    do {
 
6245
      SDUse &Use = UI.getUse();
 
6246
      ++UI;
 
6247
      Use.setNode(To);
 
6248
    } while (UI != UE && *UI == User);
 
6249
 
 
6250
    // Now that we have modified User, add it back to the CSE maps.  If it
 
6251
    // already exists there, recursively merge the results together.
 
6252
    AddModifiedNodeToCSEMaps(User);
 
6253
  }
 
6254
 
 
6255
  // If we just RAUW'd the root, take note.
 
6256
  if (From == getRoot().getNode())
 
6257
    setRoot(SDValue(To, getRoot().getResNo()));
 
6258
}
 
6259
 
 
6260
/// ReplaceAllUsesWith - Modify anything using 'From' to use 'To' instead.
 
6261
/// This can cause recursive merging of nodes in the DAG.
 
6262
///
 
6263
/// This version can replace From with any result values.  To must match the
 
6264
/// number and types of values returned by From.
 
6265
void SelectionDAG::ReplaceAllUsesWith(SDNode *From, const SDValue *To) {
 
6266
  if (From->getNumValues() == 1)  // Handle the simple case efficiently.
 
6267
    return ReplaceAllUsesWith(SDValue(From, 0), To[0]);
 
6268
 
 
6269
  // Iterate over just the existing users of From. See the comments in
 
6270
  // the ReplaceAllUsesWith above.
 
6271
  SDNode::use_iterator UI = From->use_begin(), UE = From->use_end();
 
6272
  RAUWUpdateListener Listener(*this, UI, UE);
 
6273
  while (UI != UE) {
 
6274
    SDNode *User = *UI;
 
6275
 
 
6276
    // This node is about to morph, remove its old self from the CSE maps.
 
6277
    RemoveNodeFromCSEMaps(User);
 
6278
 
 
6279
    // A user can appear in a use list multiple times, and when this
 
6280
    // happens the uses are usually next to each other in the list.
 
6281
    // To help reduce the number of CSE recomputations, process all
 
6282
    // the uses of this user that we can find this way.
 
6283
    do {
 
6284
      SDUse &Use = UI.getUse();
 
6285
      const SDValue &ToOp = To[Use.getResNo()];
 
6286
      ++UI;
 
6287
      Use.set(ToOp);
 
6288
    } while (UI != UE && *UI == User);
 
6289
 
 
6290
    // Now that we have modified User, add it back to the CSE maps.  If it
 
6291
    // already exists there, recursively merge the results together.
 
6292
    AddModifiedNodeToCSEMaps(User);
 
6293
  }
 
6294
 
 
6295
  // If we just RAUW'd the root, take note.
 
6296
  if (From == getRoot().getNode())
 
6297
    setRoot(SDValue(To[getRoot().getResNo()]));
 
6298
}
 
6299
 
 
6300
/// ReplaceAllUsesOfValueWith - Replace any uses of From with To, leaving
 
6301
/// uses of other values produced by From.getNode() alone.  The Deleted
 
6302
/// vector is handled the same way as for ReplaceAllUsesWith.
 
6303
void SelectionDAG::ReplaceAllUsesOfValueWith(SDValue From, SDValue To){
 
6304
  // Handle the really simple, really trivial case efficiently.
 
6305
  if (From == To) return;
 
6306
 
 
6307
  // Handle the simple, trivial, case efficiently.
 
6308
  if (From.getNode()->getNumValues() == 1) {
 
6309
    ReplaceAllUsesWith(From, To);
 
6310
    return;
 
6311
  }
 
6312
 
 
6313
  // Iterate over just the existing users of From. See the comments in
 
6314
  // the ReplaceAllUsesWith above.
 
6315
  SDNode::use_iterator UI = From.getNode()->use_begin(),
 
6316
                       UE = From.getNode()->use_end();
 
6317
  RAUWUpdateListener Listener(*this, UI, UE);
 
6318
  while (UI != UE) {
 
6319
    SDNode *User = *UI;
 
6320
    bool UserRemovedFromCSEMaps = false;
 
6321
 
 
6322
    // A user can appear in a use list multiple times, and when this
 
6323
    // happens the uses are usually next to each other in the list.
 
6324
    // To help reduce the number of CSE recomputations, process all
 
6325
    // the uses of this user that we can find this way.
 
6326
    do {
 
6327
      SDUse &Use = UI.getUse();
 
6328
 
 
6329
      // Skip uses of different values from the same node.
 
6330
      if (Use.getResNo() != From.getResNo()) {
 
6331
        ++UI;
 
6332
        continue;
 
6333
      }
 
6334
 
 
6335
      // If this node hasn't been modified yet, it's still in the CSE maps,
 
6336
      // so remove its old self from the CSE maps.
 
6337
      if (!UserRemovedFromCSEMaps) {
 
6338
        RemoveNodeFromCSEMaps(User);
 
6339
        UserRemovedFromCSEMaps = true;
 
6340
      }
 
6341
 
 
6342
      ++UI;
 
6343
      Use.set(To);
 
6344
    } while (UI != UE && *UI == User);
 
6345
 
 
6346
    // We are iterating over all uses of the From node, so if a use
 
6347
    // doesn't use the specific value, no changes are made.
 
6348
    if (!UserRemovedFromCSEMaps)
 
6349
      continue;
 
6350
 
 
6351
    // Now that we have modified User, add it back to the CSE maps.  If it
 
6352
    // already exists there, recursively merge the results together.
 
6353
    AddModifiedNodeToCSEMaps(User);
 
6354
  }
 
6355
 
 
6356
  // If we just RAUW'd the root, take note.
 
6357
  if (From == getRoot())
 
6358
    setRoot(To);
 
6359
}
 
6360
 
 
6361
namespace {
 
6362
  /// UseMemo - This class is used by SelectionDAG::ReplaceAllUsesOfValuesWith
 
6363
  /// to record information about a use.
 
6364
  struct UseMemo {
 
6365
    SDNode *User;
 
6366
    unsigned Index;
 
6367
    SDUse *Use;
 
6368
  };
 
6369
 
 
6370
  /// operator< - Sort Memos by User.
 
6371
  bool operator<(const UseMemo &L, const UseMemo &R) {
 
6372
    return (intptr_t)L.User < (intptr_t)R.User;
 
6373
  }
 
6374
}
 
6375
 
 
6376
/// ReplaceAllUsesOfValuesWith - Replace any uses of From with To, leaving
 
6377
/// uses of other values produced by From.getNode() alone.  The same value
 
6378
/// may appear in both the From and To list.  The Deleted vector is
 
6379
/// handled the same way as for ReplaceAllUsesWith.
 
6380
void SelectionDAG::ReplaceAllUsesOfValuesWith(const SDValue *From,
 
6381
                                              const SDValue *To,
 
6382
                                              unsigned Num){
 
6383
  // Handle the simple, trivial case efficiently.
 
6384
  if (Num == 1)
 
6385
    return ReplaceAllUsesOfValueWith(*From, *To);
 
6386
 
 
6387
  // Read up all the uses and make records of them. This helps
 
6388
  // processing new uses that are introduced during the
 
6389
  // replacement process.
 
6390
  SmallVector<UseMemo, 4> Uses;
 
6391
  for (unsigned i = 0; i != Num; ++i) {
 
6392
    unsigned FromResNo = From[i].getResNo();
 
6393
    SDNode *FromNode = From[i].getNode();
 
6394
    for (SDNode::use_iterator UI = FromNode->use_begin(),
 
6395
         E = FromNode->use_end(); UI != E; ++UI) {
 
6396
      SDUse &Use = UI.getUse();
 
6397
      if (Use.getResNo() == FromResNo) {
 
6398
        UseMemo Memo = { *UI, i, &Use };
 
6399
        Uses.push_back(Memo);
 
6400
      }
 
6401
    }
 
6402
  }
 
6403
 
 
6404
  // Sort the uses, so that all the uses from a given User are together.
 
6405
  std::sort(Uses.begin(), Uses.end());
 
6406
 
 
6407
  for (unsigned UseIndex = 0, UseIndexEnd = Uses.size();
 
6408
       UseIndex != UseIndexEnd; ) {
 
6409
    // We know that this user uses some value of From.  If it is the right
 
6410
    // value, update it.
 
6411
    SDNode *User = Uses[UseIndex].User;
 
6412
 
 
6413
    // This node is about to morph, remove its old self from the CSE maps.
 
6414
    RemoveNodeFromCSEMaps(User);
 
6415
 
 
6416
    // The Uses array is sorted, so all the uses for a given User
 
6417
    // are next to each other in the list.
 
6418
    // To help reduce the number of CSE recomputations, process all
 
6419
    // the uses of this user that we can find this way.
 
6420
    do {
 
6421
      unsigned i = Uses[UseIndex].Index;
 
6422
      SDUse &Use = *Uses[UseIndex].Use;
 
6423
      ++UseIndex;
 
6424
 
 
6425
      Use.set(To[i]);
 
6426
    } while (UseIndex != UseIndexEnd && Uses[UseIndex].User == User);
 
6427
 
 
6428
    // Now that we have modified User, add it back to the CSE maps.  If it
 
6429
    // already exists there, recursively merge the results together.
 
6430
    AddModifiedNodeToCSEMaps(User);
 
6431
  }
 
6432
}
 
6433
 
 
6434
/// AssignTopologicalOrder - Assign a unique node id for each node in the DAG
 
6435
/// based on their topological order. It returns the maximum id and a vector
 
6436
/// of the SDNodes* in assigned order by reference.
 
6437
unsigned SelectionDAG::AssignTopologicalOrder() {
 
6438
 
 
6439
  unsigned DAGSize = 0;
 
6440
 
 
6441
  // SortedPos tracks the progress of the algorithm. Nodes before it are
 
6442
  // sorted, nodes after it are unsorted. When the algorithm completes
 
6443
  // it is at the end of the list.
 
6444
  allnodes_iterator SortedPos = allnodes_begin();
 
6445
 
 
6446
  // Visit all the nodes. Move nodes with no operands to the front of
 
6447
  // the list immediately. Annotate nodes that do have operands with their
 
6448
  // operand count. Before we do this, the Node Id fields of the nodes
 
6449
  // may contain arbitrary values. After, the Node Id fields for nodes
 
6450
  // before SortedPos will contain the topological sort index, and the
 
6451
  // Node Id fields for nodes At SortedPos and after will contain the
 
6452
  // count of outstanding operands.
 
6453
  for (allnodes_iterator I = allnodes_begin(),E = allnodes_end(); I != E; ) {
 
6454
    SDNode *N = I++;
 
6455
    checkForCycles(N, this);
 
6456
    unsigned Degree = N->getNumOperands();
 
6457
    if (Degree == 0) {
 
6458
      // A node with no uses, add it to the result array immediately.
 
6459
      N->setNodeId(DAGSize++);
 
6460
      allnodes_iterator Q = N;
 
6461
      if (Q != SortedPos)
 
6462
        SortedPos = AllNodes.insert(SortedPos, AllNodes.remove(Q));
 
6463
      assert(SortedPos != AllNodes.end() && "Overran node list");
 
6464
      ++SortedPos;
 
6465
    } else {
 
6466
      // Temporarily use the Node Id as scratch space for the degree count.
 
6467
      N->setNodeId(Degree);
 
6468
    }
 
6469
  }
 
6470
 
 
6471
  // Visit all the nodes. As we iterate, move nodes into sorted order,
 
6472
  // such that by the time the end is reached all nodes will be sorted.
 
6473
  for (allnodes_iterator I = allnodes_begin(),E = allnodes_end(); I != E; ++I) {
 
6474
    SDNode *N = I;
 
6475
    checkForCycles(N, this);
 
6476
    // N is in sorted position, so all its uses have one less operand
 
6477
    // that needs to be sorted.
 
6478
    for (SDNode::use_iterator UI = N->use_begin(), UE = N->use_end();
 
6479
         UI != UE; ++UI) {
 
6480
      SDNode *P = *UI;
 
6481
      unsigned Degree = P->getNodeId();
 
6482
      assert(Degree != 0 && "Invalid node degree");
 
6483
      --Degree;
 
6484
      if (Degree == 0) {
 
6485
        // All of P's operands are sorted, so P may sorted now.
 
6486
        P->setNodeId(DAGSize++);
 
6487
        if (P != SortedPos)
 
6488
          SortedPos = AllNodes.insert(SortedPos, AllNodes.remove(P));
 
6489
        assert(SortedPos != AllNodes.end() && "Overran node list");
 
6490
        ++SortedPos;
 
6491
      } else {
 
6492
        // Update P's outstanding operand count.
 
6493
        P->setNodeId(Degree);
 
6494
      }
 
6495
    }
 
6496
    if (I == SortedPos) {
 
6497
#ifndef NDEBUG
 
6498
      SDNode *S = ++I;
 
6499
      dbgs() << "Overran sorted position:\n";
 
6500
      S->dumprFull(this); dbgs() << "\n";
 
6501
      dbgs() << "Checking if this is due to cycles\n";
 
6502
      checkForCycles(this, true);
 
6503
#endif
 
6504
      llvm_unreachable(nullptr);
 
6505
    }
 
6506
  }
 
6507
 
 
6508
  assert(SortedPos == AllNodes.end() &&
 
6509
         "Topological sort incomplete!");
 
6510
  assert(AllNodes.front().getOpcode() == ISD::EntryToken &&
 
6511
         "First node in topological sort is not the entry token!");
 
6512
  assert(AllNodes.front().getNodeId() == 0 &&
 
6513
         "First node in topological sort has non-zero id!");
 
6514
  assert(AllNodes.front().getNumOperands() == 0 &&
 
6515
         "First node in topological sort has operands!");
 
6516
  assert(AllNodes.back().getNodeId() == (int)DAGSize-1 &&
 
6517
         "Last node in topologic sort has unexpected id!");
 
6518
  assert(AllNodes.back().use_empty() &&
 
6519
         "Last node in topologic sort has users!");
 
6520
  assert(DAGSize == allnodes_size() && "Node count mismatch!");
 
6521
  return DAGSize;
 
6522
}
 
6523
 
 
6524
/// AddDbgValue - Add a dbg_value SDNode. If SD is non-null that means the
 
6525
/// value is produced by SD.
 
6526
void SelectionDAG::AddDbgValue(SDDbgValue *DB, SDNode *SD, bool isParameter) {
 
6527
  if (SD) {
 
6528
    assert(DbgInfo->getSDDbgValues(SD).empty() || SD->getHasDebugValue());
 
6529
    SD->setHasDebugValue(true);
 
6530
  }
 
6531
  DbgInfo->add(DB, SD, isParameter);
 
6532
}
 
6533
 
 
6534
/// TransferDbgValues - Transfer SDDbgValues.
 
6535
void SelectionDAG::TransferDbgValues(SDValue From, SDValue To) {
 
6536
  if (From == To || !From.getNode()->getHasDebugValue())
 
6537
    return;
 
6538
  SDNode *FromNode = From.getNode();
 
6539
  SDNode *ToNode = To.getNode();
 
6540
  ArrayRef<SDDbgValue *> DVs = GetDbgValues(FromNode);
 
6541
  SmallVector<SDDbgValue *, 2> ClonedDVs;
 
6542
  for (ArrayRef<SDDbgValue *>::iterator I = DVs.begin(), E = DVs.end();
 
6543
       I != E; ++I) {
 
6544
    SDDbgValue *Dbg = *I;
 
6545
    if (Dbg->getKind() == SDDbgValue::SDNODE) {
 
6546
      SDDbgValue *Clone =
 
6547
          getDbgValue(Dbg->getVariable(), Dbg->getExpression(), ToNode,
 
6548
                      To.getResNo(), Dbg->isIndirect(), Dbg->getOffset(),
 
6549
                      Dbg->getDebugLoc(), Dbg->getOrder());
 
6550
      ClonedDVs.push_back(Clone);
 
6551
    }
 
6552
  }
 
6553
  for (SmallVectorImpl<SDDbgValue *>::iterator I = ClonedDVs.begin(),
 
6554
         E = ClonedDVs.end(); I != E; ++I)
 
6555
    AddDbgValue(*I, ToNode, false);
 
6556
}
 
6557
 
 
6558
//===----------------------------------------------------------------------===//
 
6559
//                              SDNode Class
 
6560
//===----------------------------------------------------------------------===//
 
6561
 
 
6562
HandleSDNode::~HandleSDNode() {
 
6563
  DropOperands();
 
6564
}
 
6565
 
 
6566
GlobalAddressSDNode::GlobalAddressSDNode(unsigned Opc, unsigned Order,
 
6567
                                         DebugLoc DL, const GlobalValue *GA,
 
6568
                                         EVT VT, int64_t o, unsigned char TF)
 
6569
  : SDNode(Opc, Order, DL, getSDVTList(VT)), Offset(o), TargetFlags(TF) {
 
6570
  TheGlobal = GA;
 
6571
}
 
6572
 
 
6573
AddrSpaceCastSDNode::AddrSpaceCastSDNode(unsigned Order, DebugLoc dl, EVT VT,
 
6574
                                         SDValue X, unsigned SrcAS,
 
6575
                                         unsigned DestAS)
 
6576
 : UnarySDNode(ISD::ADDRSPACECAST, Order, dl, getSDVTList(VT), X),
 
6577
   SrcAddrSpace(SrcAS), DestAddrSpace(DestAS) {}
 
6578
 
 
6579
MemSDNode::MemSDNode(unsigned Opc, unsigned Order, DebugLoc dl, SDVTList VTs,
 
6580
                     EVT memvt, MachineMemOperand *mmo)
 
6581
 : SDNode(Opc, Order, dl, VTs), MemoryVT(memvt), MMO(mmo) {
 
6582
  SubclassData = encodeMemSDNodeFlags(0, ISD::UNINDEXED, MMO->isVolatile(),
 
6583
                                      MMO->isNonTemporal(), MMO->isInvariant());
 
6584
  assert(isVolatile() == MMO->isVolatile() && "Volatile encoding error!");
 
6585
  assert(isNonTemporal() == MMO->isNonTemporal() &&
 
6586
         "Non-temporal encoding error!");
 
6587
  // We check here that the size of the memory operand fits within the size of
 
6588
  // the MMO. This is because the MMO might indicate only a possible address
 
6589
  // range instead of specifying the affected memory addresses precisely.
 
6590
  assert(memvt.getStoreSize() <= MMO->getSize() && "Size mismatch!");
 
6591
}
 
6592
 
 
6593
MemSDNode::MemSDNode(unsigned Opc, unsigned Order, DebugLoc dl, SDVTList VTs,
 
6594
                     ArrayRef<SDValue> Ops, EVT memvt, MachineMemOperand *mmo)
 
6595
   : SDNode(Opc, Order, dl, VTs, Ops),
 
6596
     MemoryVT(memvt), MMO(mmo) {
 
6597
  SubclassData = encodeMemSDNodeFlags(0, ISD::UNINDEXED, MMO->isVolatile(),
 
6598
                                      MMO->isNonTemporal(), MMO->isInvariant());
 
6599
  assert(isVolatile() == MMO->isVolatile() && "Volatile encoding error!");
 
6600
  assert(memvt.getStoreSize() <= MMO->getSize() && "Size mismatch!");
 
6601
}
 
6602
 
 
6603
/// Profile - Gather unique data for the node.
 
6604
///
 
6605
void SDNode::Profile(FoldingSetNodeID &ID) const {
 
6606
  AddNodeIDNode(ID, this);
 
6607
}
 
6608
 
 
6609
namespace {
 
6610
  struct EVTArray {
 
6611
    std::vector<EVT> VTs;
 
6612
 
 
6613
    EVTArray() {
 
6614
      VTs.reserve(MVT::LAST_VALUETYPE);
 
6615
      for (unsigned i = 0; i < MVT::LAST_VALUETYPE; ++i)
 
6616
        VTs.push_back(MVT((MVT::SimpleValueType)i));
 
6617
    }
 
6618
  };
 
6619
}
 
6620
 
 
6621
static ManagedStatic<std::set<EVT, EVT::compareRawBits> > EVTs;
 
6622
static ManagedStatic<EVTArray> SimpleVTArray;
 
6623
static ManagedStatic<sys::SmartMutex<true> > VTMutex;
 
6624
 
 
6625
/// getValueTypeList - Return a pointer to the specified value type.
 
6626
///
 
6627
const EVT *SDNode::getValueTypeList(EVT VT) {
 
6628
  if (VT.isExtended()) {
 
6629
    sys::SmartScopedLock<true> Lock(*VTMutex);
 
6630
    return &(*EVTs->insert(VT).first);
 
6631
  } else {
 
6632
    assert(VT.getSimpleVT() < MVT::LAST_VALUETYPE &&
 
6633
           "Value type out of range!");
 
6634
    return &SimpleVTArray->VTs[VT.getSimpleVT().SimpleTy];
 
6635
  }
 
6636
}
 
6637
 
 
6638
/// hasNUsesOfValue - Return true if there are exactly NUSES uses of the
 
6639
/// indicated value.  This method ignores uses of other values defined by this
 
6640
/// operation.
 
6641
bool SDNode::hasNUsesOfValue(unsigned NUses, unsigned Value) const {
 
6642
  assert(Value < getNumValues() && "Bad value!");
 
6643
 
 
6644
  // TODO: Only iterate over uses of a given value of the node
 
6645
  for (SDNode::use_iterator UI = use_begin(), E = use_end(); UI != E; ++UI) {
 
6646
    if (UI.getUse().getResNo() == Value) {
 
6647
      if (NUses == 0)
 
6648
        return false;
 
6649
      --NUses;
 
6650
    }
 
6651
  }
 
6652
 
 
6653
  // Found exactly the right number of uses?
 
6654
  return NUses == 0;
 
6655
}
 
6656
 
 
6657
 
 
6658
/// hasAnyUseOfValue - Return true if there are any use of the indicated
 
6659
/// value. This method ignores uses of other values defined by this operation.
 
6660
bool SDNode::hasAnyUseOfValue(unsigned Value) const {
 
6661
  assert(Value < getNumValues() && "Bad value!");
 
6662
 
 
6663
  for (SDNode::use_iterator UI = use_begin(), E = use_end(); UI != E; ++UI)
 
6664
    if (UI.getUse().getResNo() == Value)
 
6665
      return true;
 
6666
 
 
6667
  return false;
 
6668
}
 
6669
 
 
6670
 
 
6671
/// isOnlyUserOf - Return true if this node is the only use of N.
 
6672
///
 
6673
bool SDNode::isOnlyUserOf(const SDNode *N) const {
 
6674
  bool Seen = false;
 
6675
  for (SDNode::use_iterator I = N->use_begin(), E = N->use_end(); I != E; ++I) {
 
6676
    SDNode *User = *I;
 
6677
    if (User == this)
 
6678
      Seen = true;
 
6679
    else
 
6680
      return false;
 
6681
  }
 
6682
 
 
6683
  return Seen;
 
6684
}
 
6685
 
 
6686
/// isOperand - Return true if this node is an operand of N.
 
6687
///
 
6688
bool SDValue::isOperandOf(const SDNode *N) const {
 
6689
  for (const SDValue &Op : N->op_values())
 
6690
    if (*this == Op)
 
6691
      return true;
 
6692
  return false;
 
6693
}
 
6694
 
 
6695
bool SDNode::isOperandOf(const SDNode *N) const {
 
6696
  for (const SDValue &Op : N->op_values())
 
6697
    if (this == Op.getNode())
 
6698
      return true;
 
6699
  return false;
 
6700
}
 
6701
 
 
6702
/// reachesChainWithoutSideEffects - Return true if this operand (which must
 
6703
/// be a chain) reaches the specified operand without crossing any
 
6704
/// side-effecting instructions on any chain path.  In practice, this looks
 
6705
/// through token factors and non-volatile loads.  In order to remain efficient,
 
6706
/// this only looks a couple of nodes in, it does not do an exhaustive search.
 
6707
bool SDValue::reachesChainWithoutSideEffects(SDValue Dest,
 
6708
                                               unsigned Depth) const {
 
6709
  if (*this == Dest) return true;
 
6710
 
 
6711
  // Don't search too deeply, we just want to be able to see through
 
6712
  // TokenFactor's etc.
 
6713
  if (Depth == 0) return false;
 
6714
 
 
6715
  // If this is a token factor, all inputs to the TF happen in parallel.  If any
 
6716
  // of the operands of the TF does not reach dest, then we cannot do the xform.
 
6717
  if (getOpcode() == ISD::TokenFactor) {
 
6718
    for (unsigned i = 0, e = getNumOperands(); i != e; ++i)
 
6719
      if (!getOperand(i).reachesChainWithoutSideEffects(Dest, Depth-1))
 
6720
        return false;
 
6721
    return true;
 
6722
  }
 
6723
 
 
6724
  // Loads don't have side effects, look through them.
 
6725
  if (LoadSDNode *Ld = dyn_cast<LoadSDNode>(*this)) {
 
6726
    if (!Ld->isVolatile())
 
6727
      return Ld->getChain().reachesChainWithoutSideEffects(Dest, Depth-1);
 
6728
  }
 
6729
  return false;
 
6730
}
 
6731
 
 
6732
/// hasPredecessor - Return true if N is a predecessor of this node.
 
6733
/// N is either an operand of this node, or can be reached by recursively
 
6734
/// traversing up the operands.
 
6735
/// NOTE: This is an expensive method. Use it carefully.
 
6736
bool SDNode::hasPredecessor(const SDNode *N) const {
 
6737
  SmallPtrSet<const SDNode *, 32> Visited;
 
6738
  SmallVector<const SDNode *, 16> Worklist;
 
6739
  return hasPredecessorHelper(N, Visited, Worklist);
 
6740
}
 
6741
 
 
6742
bool
 
6743
SDNode::hasPredecessorHelper(const SDNode *N,
 
6744
                             SmallPtrSetImpl<const SDNode *> &Visited,
 
6745
                             SmallVectorImpl<const SDNode *> &Worklist) const {
 
6746
  if (Visited.empty()) {
 
6747
    Worklist.push_back(this);
 
6748
  } else {
 
6749
    // Take a look in the visited set. If we've already encountered this node
 
6750
    // we needn't search further.
 
6751
    if (Visited.count(N))
 
6752
      return true;
 
6753
  }
 
6754
 
 
6755
  // Haven't visited N yet. Continue the search.
 
6756
  while (!Worklist.empty()) {
 
6757
    const SDNode *M = Worklist.pop_back_val();
 
6758
    for (const SDValue &OpV : M->op_values()) {
 
6759
      SDNode *Op = OpV.getNode();
 
6760
      if (Visited.insert(Op).second)
 
6761
        Worklist.push_back(Op);
 
6762
      if (Op == N)
 
6763
        return true;
 
6764
    }
 
6765
  }
 
6766
 
 
6767
  return false;
 
6768
}
 
6769
 
 
6770
uint64_t SDNode::getConstantOperandVal(unsigned Num) const {
 
6771
  assert(Num < NumOperands && "Invalid child # of SDNode!");
 
6772
  return cast<ConstantSDNode>(OperandList[Num])->getZExtValue();
 
6773
}
 
6774
 
 
6775
SDValue SelectionDAG::UnrollVectorOp(SDNode *N, unsigned ResNE) {
 
6776
  assert(N->getNumValues() == 1 &&
 
6777
         "Can't unroll a vector with multiple results!");
 
6778
 
 
6779
  EVT VT = N->getValueType(0);
 
6780
  unsigned NE = VT.getVectorNumElements();
 
6781
  EVT EltVT = VT.getVectorElementType();
 
6782
  SDLoc dl(N);
 
6783
 
 
6784
  SmallVector<SDValue, 8> Scalars;
 
6785
  SmallVector<SDValue, 4> Operands(N->getNumOperands());
 
6786
 
 
6787
  // If ResNE is 0, fully unroll the vector op.
 
6788
  if (ResNE == 0)
 
6789
    ResNE = NE;
 
6790
  else if (NE > ResNE)
 
6791
    NE = ResNE;
 
6792
 
 
6793
  unsigned i;
 
6794
  for (i= 0; i != NE; ++i) {
 
6795
    for (unsigned j = 0, e = N->getNumOperands(); j != e; ++j) {
 
6796
      SDValue Operand = N->getOperand(j);
 
6797
      EVT OperandVT = Operand.getValueType();
 
6798
      if (OperandVT.isVector()) {
 
6799
        // A vector operand; extract a single element.
 
6800
        EVT OperandEltVT = OperandVT.getVectorElementType();
 
6801
        Operands[j] =
 
6802
            getNode(ISD::EXTRACT_VECTOR_ELT, dl, OperandEltVT, Operand,
 
6803
                    getConstant(i, dl, TLI->getVectorIdxTy(getDataLayout())));
 
6804
      } else {
 
6805
        // A scalar operand; just use it as is.
 
6806
        Operands[j] = Operand;
 
6807
      }
 
6808
    }
 
6809
 
 
6810
    switch (N->getOpcode()) {
 
6811
    default:
 
6812
      Scalars.push_back(getNode(N->getOpcode(), dl, EltVT, Operands));
 
6813
      break;
 
6814
    case ISD::VSELECT:
 
6815
      Scalars.push_back(getNode(ISD::SELECT, dl, EltVT, Operands));
 
6816
      break;
 
6817
    case ISD::SHL:
 
6818
    case ISD::SRA:
 
6819
    case ISD::SRL:
 
6820
    case ISD::ROTL:
 
6821
    case ISD::ROTR:
 
6822
      Scalars.push_back(getNode(N->getOpcode(), dl, EltVT, Operands[0],
 
6823
                               getShiftAmountOperand(Operands[0].getValueType(),
 
6824
                                                     Operands[1])));
 
6825
      break;
 
6826
    case ISD::SIGN_EXTEND_INREG:
 
6827
    case ISD::FP_ROUND_INREG: {
 
6828
      EVT ExtVT = cast<VTSDNode>(Operands[1])->getVT().getVectorElementType();
 
6829
      Scalars.push_back(getNode(N->getOpcode(), dl, EltVT,
 
6830
                                Operands[0],
 
6831
                                getValueType(ExtVT)));
 
6832
    }
 
6833
    }
 
6834
  }
 
6835
 
 
6836
  for (; i < ResNE; ++i)
 
6837
    Scalars.push_back(getUNDEF(EltVT));
 
6838
 
 
6839
  return getNode(ISD::BUILD_VECTOR, dl,
 
6840
                 EVT::getVectorVT(*getContext(), EltVT, ResNE), Scalars);
 
6841
}
 
6842
 
 
6843
 
 
6844
/// isConsecutiveLoad - Return true if LD is loading 'Bytes' bytes from a
 
6845
/// location that is 'Dist' units away from the location that the 'Base' load
 
6846
/// is loading from.
 
6847
bool SelectionDAG::isConsecutiveLoad(LoadSDNode *LD, LoadSDNode *Base,
 
6848
                                     unsigned Bytes, int Dist) const {
 
6849
  if (LD->getChain() != Base->getChain())
 
6850
    return false;
 
6851
  EVT VT = LD->getValueType(0);
 
6852
  if (VT.getSizeInBits() / 8 != Bytes)
 
6853
    return false;
 
6854
 
 
6855
  SDValue Loc = LD->getOperand(1);
 
6856
  SDValue BaseLoc = Base->getOperand(1);
 
6857
  if (Loc.getOpcode() == ISD::FrameIndex) {
 
6858
    if (BaseLoc.getOpcode() != ISD::FrameIndex)
 
6859
      return false;
 
6860
    const MachineFrameInfo *MFI = getMachineFunction().getFrameInfo();
 
6861
    int FI  = cast<FrameIndexSDNode>(Loc)->getIndex();
 
6862
    int BFI = cast<FrameIndexSDNode>(BaseLoc)->getIndex();
 
6863
    int FS  = MFI->getObjectSize(FI);
 
6864
    int BFS = MFI->getObjectSize(BFI);
 
6865
    if (FS != BFS || FS != (int)Bytes) return false;
 
6866
    return MFI->getObjectOffset(FI) == (MFI->getObjectOffset(BFI) + Dist*Bytes);
 
6867
  }
 
6868
 
 
6869
  // Handle X + C.
 
6870
  if (isBaseWithConstantOffset(Loc)) {
 
6871
    int64_t LocOffset = cast<ConstantSDNode>(Loc.getOperand(1))->getSExtValue();
 
6872
    if (Loc.getOperand(0) == BaseLoc) {
 
6873
      // If the base location is a simple address with no offset itself, then
 
6874
      // the second load's first add operand should be the base address.
 
6875
      if (LocOffset == Dist * (int)Bytes)
 
6876
        return true;
 
6877
    } else if (isBaseWithConstantOffset(BaseLoc)) {
 
6878
      // The base location itself has an offset, so subtract that value from the
 
6879
      // second load's offset before comparing to distance * size.
 
6880
      int64_t BOffset =
 
6881
        cast<ConstantSDNode>(BaseLoc.getOperand(1))->getSExtValue();
 
6882
      if (Loc.getOperand(0) == BaseLoc.getOperand(0)) {
 
6883
        if ((LocOffset - BOffset) == Dist * (int)Bytes)
 
6884
          return true;
 
6885
      }
 
6886
    }
 
6887
  }
 
6888
  const GlobalValue *GV1 = nullptr;
 
6889
  const GlobalValue *GV2 = nullptr;
 
6890
  int64_t Offset1 = 0;
 
6891
  int64_t Offset2 = 0;
 
6892
  bool isGA1 = TLI->isGAPlusOffset(Loc.getNode(), GV1, Offset1);
 
6893
  bool isGA2 = TLI->isGAPlusOffset(BaseLoc.getNode(), GV2, Offset2);
 
6894
  if (isGA1 && isGA2 && GV1 == GV2)
 
6895
    return Offset1 == (Offset2 + Dist*Bytes);
 
6896
  return false;
 
6897
}
 
6898
 
 
6899
 
 
6900
/// InferPtrAlignment - Infer alignment of a load / store address. Return 0 if
 
6901
/// it cannot be inferred.
 
6902
unsigned SelectionDAG::InferPtrAlignment(SDValue Ptr) const {
 
6903
  // If this is a GlobalAddress + cst, return the alignment.
 
6904
  const GlobalValue *GV;
 
6905
  int64_t GVOffset = 0;
 
6906
  if (TLI->isGAPlusOffset(Ptr.getNode(), GV, GVOffset)) {
 
6907
    unsigned PtrWidth = getDataLayout().getPointerTypeSizeInBits(GV->getType());
 
6908
    APInt KnownZero(PtrWidth, 0), KnownOne(PtrWidth, 0);
 
6909
    llvm::computeKnownBits(const_cast<GlobalValue *>(GV), KnownZero, KnownOne,
 
6910
                           getDataLayout());
 
6911
    unsigned AlignBits = KnownZero.countTrailingOnes();
 
6912
    unsigned Align = AlignBits ? 1 << std::min(31U, AlignBits) : 0;
 
6913
    if (Align)
 
6914
      return MinAlign(Align, GVOffset);
 
6915
  }
 
6916
 
 
6917
  // If this is a direct reference to a stack slot, use information about the
 
6918
  // stack slot's alignment.
 
6919
  int FrameIdx = 1 << 31;
 
6920
  int64_t FrameOffset = 0;
 
6921
  if (FrameIndexSDNode *FI = dyn_cast<FrameIndexSDNode>(Ptr)) {
 
6922
    FrameIdx = FI->getIndex();
 
6923
  } else if (isBaseWithConstantOffset(Ptr) &&
 
6924
             isa<FrameIndexSDNode>(Ptr.getOperand(0))) {
 
6925
    // Handle FI+Cst
 
6926
    FrameIdx = cast<FrameIndexSDNode>(Ptr.getOperand(0))->getIndex();
 
6927
    FrameOffset = Ptr.getConstantOperandVal(1);
 
6928
  }
 
6929
 
 
6930
  if (FrameIdx != (1 << 31)) {
 
6931
    const MachineFrameInfo &MFI = *getMachineFunction().getFrameInfo();
 
6932
    unsigned FIInfoAlign = MinAlign(MFI.getObjectAlignment(FrameIdx),
 
6933
                                    FrameOffset);
 
6934
    return FIInfoAlign;
 
6935
  }
 
6936
 
 
6937
  return 0;
 
6938
}
 
6939
 
 
6940
/// GetSplitDestVTs - Compute the VTs needed for the low/hi parts of a type
 
6941
/// which is split (or expanded) into two not necessarily identical pieces.
 
6942
std::pair<EVT, EVT> SelectionDAG::GetSplitDestVTs(const EVT &VT) const {
 
6943
  // Currently all types are split in half.
 
6944
  EVT LoVT, HiVT;
 
6945
  if (!VT.isVector()) {
 
6946
    LoVT = HiVT = TLI->getTypeToTransformTo(*getContext(), VT);
 
6947
  } else {
 
6948
    unsigned NumElements = VT.getVectorNumElements();
 
6949
    assert(!(NumElements & 1) && "Splitting vector, but not in half!");
 
6950
    LoVT = HiVT = EVT::getVectorVT(*getContext(), VT.getVectorElementType(),
 
6951
                                   NumElements/2);
 
6952
  }
 
6953
  return std::make_pair(LoVT, HiVT);
 
6954
}
 
6955
 
 
6956
/// SplitVector - Split the vector with EXTRACT_SUBVECTOR and return the
 
6957
/// low/high part.
 
6958
std::pair<SDValue, SDValue>
 
6959
SelectionDAG::SplitVector(const SDValue &N, const SDLoc &DL, const EVT &LoVT,
 
6960
                          const EVT &HiVT) {
 
6961
  assert(LoVT.getVectorNumElements() + HiVT.getVectorNumElements() <=
 
6962
         N.getValueType().getVectorNumElements() &&
 
6963
         "More vector elements requested than available!");
 
6964
  SDValue Lo, Hi;
 
6965
  Lo = getNode(ISD::EXTRACT_SUBVECTOR, DL, LoVT, N,
 
6966
               getConstant(0, DL, TLI->getVectorIdxTy(getDataLayout())));
 
6967
  Hi = getNode(ISD::EXTRACT_SUBVECTOR, DL, HiVT, N,
 
6968
               getConstant(LoVT.getVectorNumElements(), DL,
 
6969
                           TLI->getVectorIdxTy(getDataLayout())));
 
6970
  return std::make_pair(Lo, Hi);
 
6971
}
 
6972
 
 
6973
void SelectionDAG::ExtractVectorElements(SDValue Op,
 
6974
                                         SmallVectorImpl<SDValue> &Args,
 
6975
                                         unsigned Start, unsigned Count) {
 
6976
  EVT VT = Op.getValueType();
 
6977
  if (Count == 0)
 
6978
    Count = VT.getVectorNumElements();
 
6979
 
 
6980
  EVT EltVT = VT.getVectorElementType();
 
6981
  EVT IdxTy = TLI->getVectorIdxTy(getDataLayout());
 
6982
  SDLoc SL(Op);
 
6983
  for (unsigned i = Start, e = Start + Count; i != e; ++i) {
 
6984
    Args.push_back(getNode(ISD::EXTRACT_VECTOR_ELT, SL, EltVT,
 
6985
                           Op, getConstant(i, SL, IdxTy)));
 
6986
  }
 
6987
}
 
6988
 
 
6989
// getAddressSpace - Return the address space this GlobalAddress belongs to.
 
6990
unsigned GlobalAddressSDNode::getAddressSpace() const {
 
6991
  return getGlobal()->getType()->getAddressSpace();
 
6992
}
 
6993
 
 
6994
 
 
6995
Type *ConstantPoolSDNode::getType() const {
 
6996
  if (isMachineConstantPoolEntry())
 
6997
    return Val.MachineCPVal->getType();
 
6998
  return Val.ConstVal->getType();
 
6999
}
 
7000
 
 
7001
bool BuildVectorSDNode::isConstantSplat(APInt &SplatValue,
 
7002
                                        APInt &SplatUndef,
 
7003
                                        unsigned &SplatBitSize,
 
7004
                                        bool &HasAnyUndefs,
 
7005
                                        unsigned MinSplatBits,
 
7006
                                        bool isBigEndian) const {
 
7007
  EVT VT = getValueType(0);
 
7008
  assert(VT.isVector() && "Expected a vector type");
 
7009
  unsigned sz = VT.getSizeInBits();
 
7010
  if (MinSplatBits > sz)
 
7011
    return false;
 
7012
 
 
7013
  SplatValue = APInt(sz, 0);
 
7014
  SplatUndef = APInt(sz, 0);
 
7015
 
 
7016
  // Get the bits.  Bits with undefined values (when the corresponding element
 
7017
  // of the vector is an ISD::UNDEF value) are set in SplatUndef and cleared
 
7018
  // in SplatValue.  If any of the values are not constant, give up and return
 
7019
  // false.
 
7020
  unsigned int nOps = getNumOperands();
 
7021
  assert(nOps > 0 && "isConstantSplat has 0-size build vector");
 
7022
  unsigned EltBitSize = VT.getVectorElementType().getSizeInBits();
 
7023
 
 
7024
  for (unsigned j = 0; j < nOps; ++j) {
 
7025
    unsigned i = isBigEndian ? nOps-1-j : j;
 
7026
    SDValue OpVal = getOperand(i);
 
7027
    unsigned BitPos = j * EltBitSize;
 
7028
 
 
7029
    if (OpVal.getOpcode() == ISD::UNDEF)
 
7030
      SplatUndef |= APInt::getBitsSet(sz, BitPos, BitPos + EltBitSize);
 
7031
    else if (ConstantSDNode *CN = dyn_cast<ConstantSDNode>(OpVal))
 
7032
      SplatValue |= CN->getAPIntValue().zextOrTrunc(EltBitSize).
 
7033
                    zextOrTrunc(sz) << BitPos;
 
7034
    else if (ConstantFPSDNode *CN = dyn_cast<ConstantFPSDNode>(OpVal))
 
7035
      SplatValue |= CN->getValueAPF().bitcastToAPInt().zextOrTrunc(sz) <<BitPos;
 
7036
     else
 
7037
      return false;
 
7038
  }
 
7039
 
 
7040
  // The build_vector is all constants or undefs.  Find the smallest element
 
7041
  // size that splats the vector.
 
7042
 
 
7043
  HasAnyUndefs = (SplatUndef != 0);
 
7044
  while (sz > 8) {
 
7045
 
 
7046
    unsigned HalfSize = sz / 2;
 
7047
    APInt HighValue = SplatValue.lshr(HalfSize).trunc(HalfSize);
 
7048
    APInt LowValue = SplatValue.trunc(HalfSize);
 
7049
    APInt HighUndef = SplatUndef.lshr(HalfSize).trunc(HalfSize);
 
7050
    APInt LowUndef = SplatUndef.trunc(HalfSize);
 
7051
 
 
7052
    // If the two halves do not match (ignoring undef bits), stop here.
 
7053
    if ((HighValue & ~LowUndef) != (LowValue & ~HighUndef) ||
 
7054
        MinSplatBits > HalfSize)
 
7055
      break;
 
7056
 
 
7057
    SplatValue = HighValue | LowValue;
 
7058
    SplatUndef = HighUndef & LowUndef;
 
7059
 
 
7060
    sz = HalfSize;
 
7061
  }
 
7062
 
 
7063
  SplatBitSize = sz;
 
7064
  return true;
 
7065
}
 
7066
 
 
7067
SDValue BuildVectorSDNode::getSplatValue(BitVector *UndefElements) const {
 
7068
  if (UndefElements) {
 
7069
    UndefElements->clear();
 
7070
    UndefElements->resize(getNumOperands());
 
7071
  }
 
7072
  SDValue Splatted;
 
7073
  for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
 
7074
    SDValue Op = getOperand(i);
 
7075
    if (Op.getOpcode() == ISD::UNDEF) {
 
7076
      if (UndefElements)
 
7077
        (*UndefElements)[i] = true;
 
7078
    } else if (!Splatted) {
 
7079
      Splatted = Op;
 
7080
    } else if (Splatted != Op) {
 
7081
      return SDValue();
 
7082
    }
 
7083
  }
 
7084
 
 
7085
  if (!Splatted) {
 
7086
    assert(getOperand(0).getOpcode() == ISD::UNDEF &&
 
7087
           "Can only have a splat without a constant for all undefs.");
 
7088
    return getOperand(0);
 
7089
  }
 
7090
 
 
7091
  return Splatted;
 
7092
}
 
7093
 
 
7094
ConstantSDNode *
 
7095
BuildVectorSDNode::getConstantSplatNode(BitVector *UndefElements) const {
 
7096
  return dyn_cast_or_null<ConstantSDNode>(getSplatValue(UndefElements));
 
7097
}
 
7098
 
 
7099
ConstantFPSDNode *
 
7100
BuildVectorSDNode::getConstantFPSplatNode(BitVector *UndefElements) const {
 
7101
  return dyn_cast_or_null<ConstantFPSDNode>(getSplatValue(UndefElements));
 
7102
}
 
7103
 
 
7104
bool BuildVectorSDNode::isConstant() const {
 
7105
  for (const SDValue &Op : op_values()) {
 
7106
    unsigned Opc = Op.getOpcode();
 
7107
    if (Opc != ISD::UNDEF && Opc != ISD::Constant && Opc != ISD::ConstantFP)
 
7108
      return false;
 
7109
  }
 
7110
  return true;
 
7111
}
 
7112
 
 
7113
bool ShuffleVectorSDNode::isSplatMask(const int *Mask, EVT VT) {
 
7114
  // Find the first non-undef value in the shuffle mask.
 
7115
  unsigned i, e;
 
7116
  for (i = 0, e = VT.getVectorNumElements(); i != e && Mask[i] < 0; ++i)
 
7117
    /* search */;
 
7118
 
 
7119
  assert(i != e && "VECTOR_SHUFFLE node with all undef indices!");
 
7120
 
 
7121
  // Make sure all remaining elements are either undef or the same as the first
 
7122
  // non-undef value.
 
7123
  for (int Idx = Mask[i]; i != e; ++i)
 
7124
    if (Mask[i] >= 0 && Mask[i] != Idx)
 
7125
      return false;
 
7126
  return true;
 
7127
}
 
7128
 
 
7129
#ifndef NDEBUG
 
7130
static void checkForCyclesHelper(const SDNode *N,
 
7131
                                 SmallPtrSetImpl<const SDNode*> &Visited,
 
7132
                                 SmallPtrSetImpl<const SDNode*> &Checked,
 
7133
                                 const llvm::SelectionDAG *DAG) {
 
7134
  // If this node has already been checked, don't check it again.
 
7135
  if (Checked.count(N))
 
7136
    return;
 
7137
 
 
7138
  // If a node has already been visited on this depth-first walk, reject it as
 
7139
  // a cycle.
 
7140
  if (!Visited.insert(N).second) {
 
7141
    errs() << "Detected cycle in SelectionDAG\n";
 
7142
    dbgs() << "Offending node:\n";
 
7143
    N->dumprFull(DAG); dbgs() << "\n";
 
7144
    abort();
 
7145
  }
 
7146
 
 
7147
  for (const SDValue &Op : N->op_values())
 
7148
    checkForCyclesHelper(Op.getNode(), Visited, Checked, DAG);
 
7149
 
 
7150
  Checked.insert(N);
 
7151
  Visited.erase(N);
 
7152
}
 
7153
#endif
 
7154
 
 
7155
void llvm::checkForCycles(const llvm::SDNode *N,
 
7156
                          const llvm::SelectionDAG *DAG,
 
7157
                          bool force) {
 
7158
#ifndef NDEBUG
 
7159
  bool check = force;
 
7160
#ifdef XDEBUG
 
7161
  check = true;
 
7162
#endif  // XDEBUG
 
7163
  if (check) {
 
7164
    assert(N && "Checking nonexistent SDNode");
 
7165
    SmallPtrSet<const SDNode*, 32> visited;
 
7166
    SmallPtrSet<const SDNode*, 32> checked;
 
7167
    checkForCyclesHelper(N, visited, checked, DAG);
 
7168
  }
 
7169
#endif  // !NDEBUG
 
7170
}
 
7171
 
 
7172
void llvm::checkForCycles(const llvm::SelectionDAG *DAG, bool force) {
 
7173
  checkForCycles(DAG->getRoot().getNode(), DAG, force);
 
7174
}