OSDN Git Service

Add a new PseudoSourceValue class, which will be used to help track
authorDan Gohman <gohman@apple.com>
Wed, 30 Jan 2008 16:35:31 +0000 (16:35 +0000)
committerDan Gohman <gohman@apple.com>
Wed, 30 Jan 2008 16:35:31 +0000 (16:35 +0000)
memory reference information in the backend. Most of this was written by
Florian Brander, cleanup and updating to TOT by me.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@46556 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/CodeGen/PseudoSourceValue.h [new file with mode: 0644]
include/llvm/Value.h
lib/CodeGen/PseudoSourceValue.cpp [new file with mode: 0644]

diff --git a/include/llvm/CodeGen/PseudoSourceValue.h b/include/llvm/CodeGen/PseudoSourceValue.h
new file mode 100644 (file)
index 0000000..bae7e23
--- /dev/null
@@ -0,0 +1,62 @@
+//===-- llvm/CodeGen/PseudoSourceValue.h ------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file contains the declaration of the PseudoSourceValue class.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CODEGEN_PSEUDOSOURCEVALUE_H
+#define LLVM_CODEGEN_PSEUDOSOURCEVALUE_H
+
+#include "llvm/Value.h"
+
+namespace llvm {
+  /// PseudoSourceValue - Special value supplied for machine level alias
+  /// analysis. It indicates that the a memory access references the functions
+  /// stack frame (e.g., a spill slot), below the stack frame (e.g., argument
+  /// space), or constant pool.
+  class PseudoSourceValue : public Value {
+    const char *name;
+  public:
+    explicit PseudoSourceValue(const char *_name);
+
+    virtual void print(std::ostream &OS) const;
+
+    /// classof - Methods for support type inquiry through isa, cast, and
+    /// dyn_cast:
+    ///
+    static inline bool classof(const PseudoSourceValue *) { return true; }
+    static inline bool classof(const Value *V) {
+      return V->getValueID() == PseudoSourceValueVal;
+    }
+
+    /// A pseudo source value referencing to the stack frame of a function,
+    /// e.g., a spill slot.
+    static const PseudoSourceValue FPRel;
+
+    /// A source value referencing the area below the stack frame of a function,
+    /// e.g., the argument space.
+    static const PseudoSourceValue SPRel;
+
+    /// A source value referencing the global offset table (or something the
+    /// like).
+    static const PseudoSourceValue GPRel;
+
+    /// A source value relative to some kind of thread id/pointer.
+    static const PseudoSourceValue TPRel;
+
+    /// A SV referencing the constant pool
+    static const PseudoSourceValue CPRel;
+
+    /// A SV referencing the jump table
+    static const PseudoSourceValue JTRel;
+  };
+} // End llvm namespace
+
+#endif
index fc1cf48..e1cc6f2 100644 (file)
@@ -188,6 +188,7 @@ public:
     ConstantPointerNullVal,   // This is an instance of ConstantPointerNull
     InlineAsmVal,             // This is an instance of InlineAsm
     InstructionVal,           // This is an instance of Instruction
+    PseudoSourceValueVal,     // This is an instance of PseudoSourceValue
     
     // Markers:
     ConstantFirstVal = FunctionVal,
diff --git a/lib/CodeGen/PseudoSourceValue.cpp b/lib/CodeGen/PseudoSourceValue.cpp
new file mode 100644 (file)
index 0000000..da9af49
--- /dev/null
@@ -0,0 +1,33 @@
+//===-- llvm/CodeGen/PseudoSourceValue.cpp ----------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file implements the PseudoSourceValue class.
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/CodeGen/PseudoSourceValue.h"
+#include "llvm/DerivedTypes.h"
+
+namespace llvm {
+  const PseudoSourceValue PseudoSourceValue::FPRel("FPRel");
+  const PseudoSourceValue PseudoSourceValue::SPRel("SPRel");
+  const PseudoSourceValue PseudoSourceValue::GPRel("GPRel");
+  const PseudoSourceValue PseudoSourceValue::TPRel("TPRel");
+  const PseudoSourceValue PseudoSourceValue::CPRel("CPRel");
+  const PseudoSourceValue PseudoSourceValue::JTRel("JTRel");
+
+  PseudoSourceValue::PseudoSourceValue(const char *_name) :
+    Value(PointerType::getUnqual(Type::Int8Ty), PseudoSourceValueVal),
+          name(_name) {
+  }
+
+  void PseudoSourceValue::print(std::ostream &OS) const {
+    OS << name;
+  }
+}