SDNodeOrdering.h revision e264f62ca09a8f65c87a46d562a4d0f9ec5d457e
1//===-- llvm/CodeGen/SDNodeOrdering.h - SDNode Ordering ---------*- C++ -*-===// 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 file declares the SDNodeOrdering class. 11// 12//===----------------------------------------------------------------------===// 13 14#ifndef LLVM_CODEGEN_SDNODEORDERING_H 15#define LLVM_CODEGEN_SDNODEORDERING_H 16 17#include "llvm/ADT/DenseMap.h" 18 19namespace llvm { 20 21class SDNode; 22 23/// SDNodeOrdering - Maps a unique (monotonically increasing) value to each 24/// SDNode that roughly corresponds to the ordering of the original LLVM 25/// instruction. This is used for turning off scheduling, because we'll forgo 26/// the normal scheduling algorithms and output the instructions according to 27/// this ordering. 28class SDNodeOrdering { 29 DenseMap<const SDNode*, unsigned> OrderMap; 30 31 void operator=(const SDNodeOrdering&); // Do not implement. 32 SDNodeOrdering(const SDNodeOrdering&); // Do not implement. 33public: 34 SDNodeOrdering() {} 35 36 void add(const SDNode *Node, unsigned O) { 37 OrderMap[Node] = O; 38 } 39 void remove(const SDNode *Node) { 40 DenseMap<const SDNode*, unsigned>::iterator Itr = OrderMap.find(Node); 41 if (Itr != OrderMap.end()) 42 OrderMap.erase(Itr); 43 } 44 void clear() { 45 OrderMap.clear(); 46 } 47 unsigned getOrder(const SDNode *Node) { 48 return OrderMap[Node]; 49 } 50}; 51 52} // end llvm namespace 53 54#endif 55