|  | //===-- llvm/CodeGen/SDNodeOrdering.h - SDNode Ordering ---------*- C++ -*-===// | 
|  | // | 
|  | //                     The LLVM Compiler Infrastructure | 
|  | // | 
|  | // This file is distributed under the University of Illinois Open Source | 
|  | // License. See LICENSE.TXT for details. | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  | // | 
|  | // This file declares the SDNodeOrdering class. | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  |  | 
|  | #ifndef LLVM_CODEGEN_SDNODEORDERING_H | 
|  | #define LLVM_CODEGEN_SDNODEORDERING_H | 
|  |  | 
|  | #include "llvm/ADT/DenseMap.h" | 
|  |  | 
|  | namespace llvm { | 
|  |  | 
|  | class SDNode; | 
|  |  | 
|  | /// SDNodeOrdering - Maps a unique (monotonically increasing) value to each | 
|  | /// SDNode that roughly corresponds to the ordering of the original LLVM | 
|  | /// instruction. This is used for turning off scheduling, because we'll forgo | 
|  | /// the normal scheduling algorithms and output the instructions according to | 
|  | /// this ordering. | 
|  | class SDNodeOrdering { | 
|  | DenseMap<const SDNode*, unsigned> OrderMap; | 
|  |  | 
|  | void operator=(const SDNodeOrdering&);   // Do not implement. | 
|  | SDNodeOrdering(const SDNodeOrdering&);   // Do not implement. | 
|  | public: | 
|  | SDNodeOrdering() {} | 
|  |  | 
|  | void add(const SDNode *Node, unsigned O) { | 
|  | OrderMap[Node] = O; | 
|  | } | 
|  | void remove(const SDNode *Node) { | 
|  | DenseMap<const SDNode*, unsigned>::iterator Itr = OrderMap.find(Node); | 
|  | if (Itr != OrderMap.end()) | 
|  | OrderMap.erase(Itr); | 
|  | } | 
|  | void clear() { | 
|  | OrderMap.clear(); | 
|  | } | 
|  | unsigned getOrder(const SDNode *Node) { | 
|  | return OrderMap[Node]; | 
|  | } | 
|  | }; | 
|  |  | 
|  | } // end llvm namespace | 
|  |  | 
|  | #endif |