Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(36)

Side by Side Diff: src/IceDefs.h

Issue 205613002: Initial skeleton of Subzero. (Closed) Base URL: https://gerrit.chromium.org/gerrit/p/native_client/pnacl-subzero.git@master
Patch Set: Introduce IceGlobalContext, and rearrange other things around that Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 //===- subzero/src/IceDefs.h - Common Subzero declaraions -------*- C++ -*-===//
2 //
3 // The Subzero Code Generator
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 various useful types and classes that have
11 // widespread use across Subzero. Every Subzero source file is
12 // expected to include IceDefs.h.
13 //
14 //===----------------------------------------------------------------------===//
15
16 #ifndef SUBZERO_SRC_ICEDEFS_H
17 #define SUBZERO_SRC_ICEDEFS_H
18
19 #include <assert.h>
20 #include <stdint.h>
21 #include <stdio.h> // sprintf
JF 2014/04/16 01:27:32 Since this is a new code base I'd go with the <c*>
Jim Stichnoth 2014/04/21 20:26:40 Done for <cassert> and <cstdio>. stdint.h seems r
JF 2014/04/23 03:51:28 What are the issues? I assume something newlib+lib
Jim Stichnoth 2014/04/26 15:02:11 It looks like <cstdint> is C++11, at least accordi
JF 2014/04/26 20:20:56 Hah, I did not know that.
22
23 #include <list>
24 #include <map>
25 #include <set>
26 #include <string>
27 #include <vector>
28
29 #include "llvm/ADT/BitVector.h"
30 #include "llvm/ADT/SmallBitVector.h"
31 #include "llvm/Support/Casting.h"
32 #include "llvm/Support/raw_ostream.h"
33 #include "llvm/Support/Timer.h"
34
JF 2014/04/16 01:27:32 It would be nicer to put everything in a namespace
Jim Stichnoth 2014/04/21 20:26:40 Done. Used the "Ice" namespace. In some cases, I
35 class IceCfg;
36 class IceCfgNode;
37 class IceConstant;
38 class IceGlobalContext;
39 class IceInst;
40 class IceInstPhi;
41 class IceInstTarget;
42 class IceOperand;
43 class IceVariable;
44
45 // TODO: Switch over to LLVM's ADT container classes.
46 // http://llvm.org/docs/ProgrammersManual.html#picking-the-right-data-structure- for-a-task
47 typedef std::string IceString;
48 typedef std::list<IceInst *> IceInstList;
49 typedef std::list<IceInstPhi *> IcePhiList;
50 typedef std::vector<IceOperand *> IceOpList;
51 typedef std::vector<IceVariable *> IceVarList;
52 typedef std::vector<IceCfgNode *> IceNodeList;
53
54 // This is a convenience templated class that provides a mapping
55 // between a parameterized type and small unsigned integers.
56 template <typename T> class IceValueTranslation {
57 public:
58 typedef typename std::map<const T, uint32_t> ContainerType;
59 IceValueTranslation() {}
JF 2014/04/16 01:27:32 dtor, copy ctor, assign?
Jim Stichnoth 2014/04/21 20:26:40 Done. No dtor for this simple wrapper class.
60 void clear() { Entries.clear(); }
61 uint32_t translate(const T &Value) {
62 typename ContainerType::const_iterator Iter = Entries.find(Value);
63 if (Iter != Entries.end())
64 return Iter->second;
65 uint32_t Index = Entries.size();
66 Entries[Value] = Index;
67 return Index;
68 }
69
70 private:
71 ContainerType Entries;
72 };
73
74 enum IceVerbose {
75 IceV_None = 0,
76 IceV_Instructions = 1 << 0,
77 IceV_Deleted = 1 << 1,
78 IceV_InstNumbers = 1 << 2,
79 IceV_Preds = 1 << 3,
80 IceV_Succs = 1 << 4,
81 IceV_Liveness = 1 << 5,
82 IceV_RegManager = 1 << 6,
83 IceV_RegOrigins = 1 << 7,
84 IceV_LinearScan = 1 << 8,
85 IceV_Frame = 1 << 9,
86 IceV_Timing = 1 << 10,
87 IceV_All = ~IceV_None
88 };
89 typedef uint32_t IceVerboseMask;
JF 2014/04/16 01:27:32 Why typedef this to uint32_t instead of just using
Jim Stichnoth 2014/04/21 20:26:40 IceVerboseMask is a bitmask of IceVerbose values.
90
91 // The IceOstream class wraps an output stream and an IceCfg pointer,
92 // so that dump routines have access to the IceCfg object and can
93 // print labels and variable names.
94
95 class IceOstream {
96 public:
97 IceOstream(llvm::raw_ostream *Stream) : Stream(Stream) {}
98
99 llvm::raw_ostream *Stream;
JF 2014/04/16 01:27:32 dtor, copy ctor, assign.
Jim Stichnoth 2014/04/21 20:26:40 Done. No dtor for this simple wrapper class.
100 };
101
102 template <typename T>
103 inline IceOstream &operator<<(IceOstream &Str, const T &Val) {
104 if (Str.Stream)
105 (*Str.Stream) << Val;
106 return Str;
107 }
108
109 class IceTimer {
JF 2014/04/16 01:27:32 Can you put a TODO to use std::chrono when we sync
Jim Stichnoth 2014/04/21 20:26:40 Done.
110 public:
111 IceTimer() : Start(llvm::TimeRecord::getCurrentTime(false)) {}
112 uint64_t getElapsedNs() const { return getElapsedSec() * 1000 * 1000 * 1000; }
113 uint64_t getElapsedUs() const { return getElapsedSec() * 1000 * 1000; }
114 uint64_t getElapsedMs() const { return getElapsedSec() * 1000; }
115 double getElapsedSec() const {
116 llvm::TimeRecord End = llvm::TimeRecord::getCurrentTime(false);
117 return End.getWallTime() - Start.getWallTime();
118 }
119 void printElapsedUs(IceGlobalContext *Ctx, const IceString &Tag) const;
120
121 private:
122 const llvm::TimeRecord Start;
123 };
124
125 #endif // SUBZERO_SRC_ICEDEFS_H
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698