Lines Matching defs:SDNode
95 void SelectionDAG::DAGUpdateListener::NodeDeleted(SDNode*, SDNode*) {}
96 void SelectionDAG::DAGUpdateListener::NodeUpdated(SDNode*) {}
97 void SelectionDAG::DAGUpdateListener::NodeInserted(SDNode *) {}
145 bool ISD::isConstantSplatVector(const SDNode *N, APInt &SplatVal) {
180 bool ISD::isConstantSplatVectorAllOnes(const SDNode *N, bool BuildVectorOnly) {
229 bool ISD::isConstantSplatVectorAllZeros(const SDNode *N, bool BuildVectorOnly) {
271 bool ISD::isBuildVectorAllOnes(const SDNode *N) {
275 bool ISD::isBuildVectorAllZeros(const SDNode *N) {
279 bool ISD::isBuildVectorOfConstantSDNodes(const SDNode *N) {
292 bool ISD::isBuildVectorOfConstantFPSDNodes(const SDNode *N) {
305 bool ISD::isVectorShrinkable(const SDNode *N, unsigned NewEltSize,
342 bool ISD::allOperandsUndef(const SDNode *N) {
351 bool ISD::isFreezeUndef(const SDNode *N) {
678 // SDNode Profile Support
717 /// If this is an SDNode with special info, add this info to the NodeID data.
718 static void AddNodeIDCustom(FoldingSetNodeID &ID, const SDNode *N) {
951 static void AddNodeIDNode(FoldingSetNodeID &ID, const SDNode *N) {
958 // Handle SDNode leafs with special info.
967 static bool doNotCSE(SDNode *N) {
993 SmallVector<SDNode*, 128> DeadNodes;
996 for (SDNode &Node : allnodes())
1008 void SelectionDAG::RemoveDeadNodes(SmallVectorImpl<SDNode *> &DeadNodes) {
1013 SDNode *N = DeadNodes.pop_back_val();
1028 for (SDNode::op_iterator I = N->op_begin(), E = N->op_end(); I != E; ) {
1030 SDNode *Operand = Use.getNode();
1042 void SelectionDAG::RemoveDeadNode(SDNode *N){
1043 SmallVector<SDNode*, 16> DeadNodes(1, N);
1053 void SelectionDAG::DeleteNode(SDNode *N) {
1062 void SelectionDAG::DeleteNodeNotInCSEMaps(SDNode *N) {
1079 for (const SDNode *Node : V->getSDNodes())
1084 void SDDbgInfo::erase(const SDNode *Node) {
1093 void SelectionDAG::DeallocateNode(SDNode *N) {
1106 // If any of the SDDbgValue nodes refer to this SDNode, invalidate
1115 /// VerifySDNode - Check the given SDNode. Aborts if it is invalid.
1116 static void VerifySDNode(SDNode *N, const TargetLowering *TLI) {
1160 void SelectionDAG::InsertNode(SDNode *N) {
1174 bool SelectionDAG::RemoveNodeFromCSEMaps(SDNode *N) {
1234 SelectionDAG::AddModifiedNodeToCSEMaps(SDNode *N) {
1238 SDNode *Existing = CSEMap.GetOrInsertNode(N);
1263 SDNode *SelectionDAG::FindModifiedNodeSlot(SDNode *N, SDValue Op,
1272 SDNode *Node = FindNodeOrInsertPos(ID, SDLoc(N), InsertPos);
1282 SDNode *SelectionDAG::FindModifiedNodeSlot(SDNode *N,
1292 SDNode *Node = FindNodeOrInsertPos(ID, SDLoc(N), InsertPos);
1302 SDNode *SelectionDAG::FindModifiedNodeSlot(SDNode *N, ArrayRef<SDValue> Ops,
1310 SDNode *Node = FindNodeOrInsertPos(ID, SDLoc(N), InsertPos);
1373 SDNode *SelectionDAG::FindNodeOrInsertPos(const FoldingSetNodeID &ID,
1375 SDNode *N = CSEMap.FindNodeOrInsertPos(ID, InsertPos);
1388 SDNode *SelectionDAG::FindNodeOrInsertPos(const FoldingSetNodeID &ID,
1390 SDNode *N = CSEMap.FindNodeOrInsertPos(ID, InsertPos);
1732 SDNode *N = nullptr;
1793 SDNode *N = nullptr;
1853 if (SDNode *E = FindNodeOrInsertPos(ID, DL, IP))
1870 if (SDNode *E = FindNodeOrInsertPos(ID, IP))
1890 if (SDNode *E = FindNodeOrInsertPos(ID, IP))
1924 if (SDNode *E = FindNodeOrInsertPos(ID, IP))
1952 if (SDNode *E = FindNodeOrInsertPos(ID, IP))
1967 if (SDNode *E = FindNodeOrInsertPos(ID, IP))
1981 SDNode *&N = VT.isExtended() ?
1991 SDNode *&N = ExternalSymbols[Sym];
1999 SDNode *&N = MCSymbols[Sym];
2009 SDNode *&N =
2236 if (SDNode *E = FindNodeOrInsertPos(ID, dl, IP))
2240 // SDNode doesn't have access to it. This memory will be "leaked" when
2272 if (SDNode *E = FindNodeOrInsertPos(ID, IP))
2287 if (SDNode *E = FindNodeOrInsertPos(ID, IP))
2308 if (SDNode *E = FindNodeOrInsertPos(ID, IP))
2332 if (SDNode *E = FindNodeOrInsertPos(ID, IP))
2347 if (SDNode *E = FindNodeOrInsertPos(ID, IP))
2362 if (SDNode *E = FindNodeOrInsertPos(ID, IP))
2388 if (SDNode *E = FindNodeOrInsertPos(ID, dl, IP))
2414 SDValue SelectionDAG::expandVAArg(SDNode *Node) {
2448 SDValue SelectionDAG::expandVACopy(SDNode *Node) {
5045 // If we are looking at the loaded value of the SDNode.
5886 if (SDNode *E = FindNodeOrInsertPos(ID, DL, IP))
5889 auto *N = newSDNode<SDNode>(Opcode, DL.getIROrder(), DL.getDebugLoc(), VTs);
6225 SDNode *N;
6232 if (SDNode *E = FindNodeOrInsertPos(ID, DL, IP)) {
6237 N = newSDNode<SDNode>(Opcode, DL.getIROrder(), DL.getDebugLoc(), VTs);
6242 N = newSDNode<SDNode>(Opcode, DL.getIROrder(), DL.getDebugLoc(), VTs);
6329 const SDNode *N2) {
6850 if (SDNode *E = FindNodeOrInsertPos(ID, DL, IP))
6880 SDNode *N1C = isConstantIntBuildVectorOrConstantInt(N1);
6881 SDNode *N2C = isConstantIntBuildVectorOrConstantInt(N2);
6882 SDNode *N1CFP = isConstantFPBuildVectorOrConstantFP(N1);
6883 SDNode *N2CFP = isConstantFPBuildVectorOrConstantFP(N2);
7380 SDNode *N;
7387 if (SDNode *E = FindNodeOrInsertPos(ID, DL, IP)) {
7392 N = newSDNode<SDNode>(Opcode, DL.getIROrder(), DL.getDebugLoc(), VTs);
7397 N = newSDNode<SDNode>(Opcode, DL.getIROrder(), DL.getDebugLoc(), VTs);
7578 SDNode *N;
7585 if (SDNode *E = FindNodeOrInsertPos(ID, DL, IP)) {
7590 N = newSDNode<SDNode>(Opcode, DL.getIROrder(), DL.getDebugLoc(), VTs);
7595 N = newSDNode<SDNode>(Opcode, DL.getIROrder(), DL.getDebugLoc(), VTs);
7629 for (SDNode *U : getEntryNode().getNode()->uses())
8644 if (SDNode *E = FindNodeOrInsertPos(ID, dl, IP)) {
8761 if (SDNode *E = FindNodeOrInsertPos(ID, dl, IP)) {
8799 if (SDNode *E = FindNodeOrInsertPos(ID, dl, IP))
8823 if (SDNode *E = FindNodeOrInsertPos(ID, Dl, IP))
8934 if (SDNode *E = FindNodeOrInsertPos(ID, dl, IP)) {
9035 if (SDNode *E = FindNodeOrInsertPos(ID, dl, IP)) {
9102 if (SDNode *E = FindNodeOrInsertPos(ID, dl, IP)) {
9131 if (SDNode *E = FindNodeOrInsertPos(ID, dl, IP))
9189 if (SDNode *E = FindNodeOrInsertPos(ID, dl, IP)) {
9282 if (SDNode *E = FindNodeOrInsertPos(ID, dl, IP)) {
9353 if (SDNode *E = FindNodeOrInsertPos(ID, dl, IP)) {
9384 if (SDNode *E = FindNodeOrInsertPos(ID, dl, IP))
9417 if (SDNode *E = FindNodeOrInsertPos(ID, DL, IP)) {
9472 if (SDNode *E = FindNodeOrInsertPos(ID, DL, IP)) {
9521 if (SDNode *E = FindNodeOrInsertPos(ID, DL, IP)) {
9550 if (SDNode *E = FindNodeOrInsertPos(ID, dl, IP)) {
9594 if (SDNode *E = FindNodeOrInsertPos(ID, dl, IP)) {
9644 if (SDNode *E = FindNodeOrInsertPos(ID, dl, IP)) {
9692 if (SDNode *E = FindNodeOrInsertPos(ID, dl, IP)) {
9734 if (SDNode *E = FindNodeOrInsertPos(ID, dl, IP)) {
9781 if (SDNode *E = FindNodeOrInsertPos(ID, dl, IP)) {
9826 if (SDNode *E = FindNodeOrInsertPos(ID, dl, IP)) {
9863 if (SDNode *E = FindNodeOrInsertPos(ID, dl, IP))
9890 if (SDNode *E = FindNodeOrInsertPos(ID, dl, IP))
10122 SDNode *N;
10130 if (SDNode *E = FindNodeOrInsertPos(ID, DL, IP))
10133 N = newSDNode<SDNode>(Opcode, DL.getIROrder(), DL.getDebugLoc(), VTs);
10138 N = newSDNode<SDNode>(Opcode, DL.getIROrder(), DL.getDebugLoc(), VTs);
10331 SDNode *N;
10336 if (SDNode *E = FindNodeOrInsertPos(ID, DL, IP))
10339 N = newSDNode<SDNode>(Opcode, DL.getIROrder(), DL.getDebugLoc(), VTList);
10343 N = newSDNode<SDNode>(Opcode, DL.getIROrder(), DL.getDebugLoc(), VTList);
10391 return makeVTList(SDNode::getValueTypeList(VT), 1);
10480 SDNode *SelectionDAG::UpdateNodeOperands(SDNode *N, SDValue Op) {
10488 if (SDNode *Existing = FindModifiedNodeSlot(N, Op, InsertPos))
10505 SDNode *SelectionDAG::UpdateNodeOperands(SDNode *N, SDValue Op1, SDValue Op2) {
10514 if (SDNode *Existing = FindModifiedNodeSlot(N, Op1, Op2, InsertPos))
10534 SDNode *SelectionDAG::
10535 UpdateNodeOperands(SDNode *N, SDValue Op1, SDValue Op2, SDValue Op3) {
10540 SDNode *SelectionDAG::
10541 UpdateNodeOperands(SDNode *N, SDValue Op1, SDValue Op2,
10547 SDNode *SelectionDAG::
10548 UpdateNodeOperands(SDNode *N, SDValue Op1, SDValue Op2,
10554 SDNode *SelectionDAG::
10555 UpdateNodeOperands(SDNode *N, ArrayRef<SDValue> Ops) {
10566 if (SDNode *Existing = FindModifiedNodeSlot(N, Ops, InsertPos))
10587 void SDNode::DropOperands() {
10620 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
10626 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
10633 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
10641 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
10649 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
10655 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
10661 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
10667 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
10674 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
10682 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
10684 SDNode *New = MorphNodeTo(N, ~MachineOpc, VTs, Ops);
10701 SDNode *SelectionDAG::UpdateSDLocOnMergeSDNode(SDNode *N, const SDLoc &OLoc) {
10727 SDNode *SelectionDAG::MorphNodeTo(SDNode *N, unsigned Opc,
10734 if (SDNode *ON = FindNodeOrInsertPos(ID, SDLoc(N), IP))
10748 SmallPtrSet<SDNode*, 16> DeadNodeSet;
10749 for (SDNode::op_iterator I = N->op_begin(), E = N->op_end(); I != E; ) {
10751 SDNode *Used = Use.getNode();
10768 SmallVector<SDNode *, 16> DeadNodes;
10769 for (SDNode *N : DeadNodeSet)
10780 SDNode* SelectionDAG::mutateStrictFPToFP(SDNode *Node) {
10805 SDNode *Res = MorphNodeTo(Node, NewOpc, VTs, Ops);
10927 if (SDNode *E = FindNodeOrInsertPos(ID, DL, IP)) {
10949 SDNode *Subreg = getMachineNode(TargetOpcode::EXTRACT_SUBREG, DL,
10959 SDNode *Result = getMachineNode(TargetOpcode::INSERT_SUBREG, DL,
10966 SDNode *SelectionDAG::getNodeIfExists(unsigned Opcode, SDVTList VTList,
10974 SDNode *SelectionDAG::getNodeIfExists(unsigned Opcode, SDVTList VTList,
10981 if (SDNode *E = FindNodeOrInsertPos(ID, SDLoc(), IP)) {
11004 /// SDNode
11006 SDNode *N, unsigned R, bool IsIndirect,
11043 ArrayRef<SDNode *> Dependencies,
11069 ArrayRef<SDNode *> Dependencies,
11082 SDNode *FromNode = From.getNode();
11083 SDNode *ToNode = To.getNode();
11156 "Transferred DbgValues should depend on the new SDNode");
11161 void SelectionDAG::salvageDebugInfo(SDNode &N) {
11279 "Salvaged DbgValue should depend on a new SDNode");
11299 SDNode::use_iterator &UI;
11300 SDNode::use_iterator &UE;
11302 void NodeDeleted(SDNode *N, SDNode *E) override {
11310 SDNode::use_iterator &ui,
11311 SDNode::use_iterator &ue)
11323 SDNode *From = FromN.getNode();
11340 SDNode::use_iterator UI = From->use_begin(), UE = From->use_end();
11343 SDNode *User = *UI;
11375 void SelectionDAG::ReplaceAllUsesWith(SDNode *From, SDNode *To) {
11398 SDNode::use_iterator UI = From->use_begin(), UE = From->use_end();
11401 SDNode *User = *UI;
11433 void SelectionDAG::ReplaceAllUsesWith(SDNode *From, const SDValue *To) {
11446 SDNode::use_iterator UI = From->use_begin(), UE = From->use_end();
11449 SDNode *User = *UI;
11499 SDNode::use_iterator UI = From.getNode()->use_begin(),
11503 SDNode *User = *UI;
11551 SDNode *User;
11567 void NodeDeleted(SDNode *N, SDNode *E) override {
11580 bool SelectionDAG::calculateDivergence(SDNode *N) {
11595 void SelectionDAG::updateDivergence(SDNode *N) {
11596 SmallVector<SDNode *, 16> Worklist(1, N);
11607 void SelectionDAG::CreateTopologicalOrder(std::vector<SDNode *> &Order) {
11608 DenseMap<SDNode *, unsigned> Degree;
11617 SDNode *N = Order[I];
11628 std::vector<SDNode *> TopoOrder;
11657 SDNode *FromNode = From[i].getNode();
11658 for (SDNode::use_iterator UI = FromNode->use_begin(),
11676 SDNode *User = Uses[UseIndex].User;
11723 for (SDNode &N : llvm::make_early_inc_range(allnodes())) {
11742 for (SDNode &Node : allnodes()) {
11743 SDNode *N = &Node;
11747 for (SDNode *P : N->uses()) {
11766 SDNode *S = &*++I;
11792 /// AddDbgValue - Add a dbg_value SDNode. If SD is non-null that means the
11795 for (SDNode *SD : DB->getSDNodes()) {
11856 // SDNode Class
12087 : SDNode(Opc, Order, dl, VTs), MemoryVT(memvt), MMO(mmo) {
12104 void SDNode::Profile(FoldingSetNodeID &ID) const {
12124 const EVT *SDNode::getValueTypeList(EVT VT) {
12140 bool SDNode::hasNUsesOfValue(unsigned NUses, unsigned Value) const {
12144 for (SDNode::use_iterator UI = use_begin(), E = use_end(); UI != E; ++UI) {
12158 bool SDNode::hasAnyUseOfValue(unsigned Value) const {
12161 for (SDNode::use_iterator UI = use_begin(), E = use_end(); UI != E; ++UI)
12169 bool SDNode::isOnlyUserOf(const SDNode *N) const {
12171 for (const SDNode *User : N->uses()) {
12182 bool SDNode::areOnlyUsersOf(ArrayRef<const SDNode *> Nodes, const SDNode *N) {
12184 for (const SDNode *User : N->uses()) {
12195 bool SDValue::isOperandOf(const SDNode *N) const {
12199 bool SDNode::isOperandOf(const SDNode *N) const {
12252 bool SDNode::hasPredecessor(const SDNode *N) const {
12253 SmallPtrSet<const SDNode *, 32> Visited;
12254 SmallVector<const SDNode *, 16> Worklist;
12259 void SDNode::intersectFlagsWith(const SDNodeFlags Flags) {
12264 SelectionDAG::matchBinOpReduction(SDNode *Extract, ISD::NodeType &BinOp,
12380 SDValue SelectionDAG::UnrollVectorOp(SDNode *N, unsigned ResNE) {
12478 SDNode *N, unsigned ResNE) {
13082 // Returns the SDNode if it is a constant integer BuildVector
13084 SDNode *SelectionDAG::isConstantIntBuildVectorOrConstantInt(SDValue N) const {
13101 // Returns the SDNode if it is a constant float BuildVector
13103 SDNode *SelectionDAG::isConstantFPBuildVectorOrConstantFP(SDValue N) const {
13117 void SelectionDAG::createOperands(SDNode *Node, ArrayRef<SDValue> Vals) {
13119 assert(SDNode::getMaxNumOperands() >= Vals.size() &&
13120 "too many operands to fit into SDNode");
13142 size_t Limit = SDNode::getMaxNumOperands();
13235 void SelectionDAG::copyExtraInfo(SDNode *From, SDNode *To) {
13236 assert(From && To && "Invalid SDNode; empty source SDValue?");
13265 SmallVector<const SDNode *> Leafs{From}; // Leafs reachable with VisitFrom.
13266 DenseSet<const SDNode *> FromReach; // The set of nodes reachable from From.
13267 auto VisitFrom = [&](auto &&Self, const SDNode *N, int MaxDepth) {
13281 SmallPtrSet<const SDNode *, 8> Visited;
13282 auto DeepCopyTo = [&](auto &&Self, const SDNode *N) {
13308 SmallVector<const SDNode *> StartFrom;
13310 for (const SDNode *N : StartFrom)
13330 static void checkForCyclesHelper(const SDNode *N,
13331 SmallPtrSetImpl<const SDNode*> &Visited,
13332 SmallPtrSetImpl<const SDNode*> &Checked,
13355 void llvm::checkForCycles(const llvm::SDNode *N,
13364 assert(N && "Checking nonexistent SDNode");
13365 SmallPtrSet<const SDNode*, 32> visited;
13366 SmallPtrSet<const SDNode*, 32> checked;