aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/llvm/Target/TargetCacheInfo.h67
1 files changed, 67 insertions, 0 deletions
diff --git a/include/llvm/Target/TargetCacheInfo.h b/include/llvm/Target/TargetCacheInfo.h
new file mode 100644
index 0000000000..67b549caa1
--- /dev/null
+++ b/include/llvm/Target/TargetCacheInfo.h
@@ -0,0 +1,67 @@
+// $Id$ -*-c++-*-
+//***************************************************************************
+// File:
+// MachineCacheInfo.h
+//
+// Purpose:
+// Describes properties of the target cache architecture.
+//**************************************************************************/
+
+#ifndef LLVM_TARGET_MACHINECACHEINFO_H
+#define LLVM_TARGET_MACHINECACHEINFO_H
+
+#include "llvm/Target/TargetMachine.h"
+#include "llvm/Support/DataTypes.h"
+#include <vector>
+
+
+//---------------------------------------------------------------------------
+// class MachineCacheInfo
+//
+// Purpose:
+// Describes properties of the target cache architecture.
+//---------------------------------------------------------------------------
+
+class MachineCacheInfo : public NonCopyableV {
+public:
+ const TargetMachine& target;
+
+protected:
+ unsigned int numLevels;
+ vector<unsigned short> cacheLineSizes;
+ vector<unsigned int> cacheSizes;
+ vector<unsigned short> cacheAssoc;
+
+public:
+ /*ctor*/ MachineCacheInfo (const TargetMachine& tgt);
+ /*dtor*/ virtual ~MachineCacheInfo () {}
+
+ // Default parameters are:
+ // NumLevels = 2
+ // L1: LineSize 16, Cache Size 32KB, Direct-mapped (assoc = 1)
+ // L2: LineSize 32, Cache Size 1 MB, 4-way associative
+ // NOTE: Cache levels are numbered from 1 as above, not from 0.
+ //
+ virtual void Initialize (); // subclass to override defaults
+
+ unsigned int getNumCacheLevels () const {
+ return numLevels;
+ }
+ unsigned short getCacheLineSize (unsigned level) const {
+ assert(level <= cacheLineSizes.size() && "Invalid cache level");
+ return cacheLineSizes[level-1];
+ }
+ unsigned int getCacheSize (unsigned level) const {
+ assert(level <= cacheSizes.size() && "Invalid cache level");
+ return cacheSizes[level-1];
+ }
+ unsigned short getCacheAssoc (unsigned level) const {
+ assert(level <= cacheAssoc.size() && "Invalid cache level");
+ return cacheAssoc[level];
+ }
+};
+
+
+//---------------------------------------------------------------------------
+
+#endif