[llvm-commits] CVS: llvm/include/llvm/Function.h GlobalValue.h GlobalVariable.h Module.h Value.h ValueSymbolTable.h
Evan Cheng
evan.cheng at apple.com
Wed Apr 25 09:38:54 PDT 2007
Hi Anton,
You forgot to check in GlobalAlias.h.
Evan
On Apr 25, 2007, at 7:28 AM, Anton Korobeynikov wrote:
>
>
> Changes in directory llvm/include/llvm:
>
> Function.h updated: 1.81 -> 1.82
> GlobalValue.h updated: 1.38 -> 1.39
> GlobalVariable.h updated: 1.44 -> 1.45
> Module.h updated: 1.88 -> 1.89
> Value.h updated: 1.100 -> 1.101
> ValueSymbolTable.h updated: 1.12 -> 1.13
> ---
> Log message:
>
> Implement aliases. This fixes PR1017: http://llvm.org/PR1017 and
> it's dependent bugs. CFE part
> will follow.
>
>
> ---
> Diffs of the changes: (+94 -16)
>
> Function.h | 4 +-
> GlobalValue.h | 13 +++++++-
> GlobalVariable.h | 4 +-
> Module.h | 81 +++++++++++++++++++++++++++++++++++++++++
> +++++-------
> Value.h | 7 +++-
> ValueSymbolTable.h | 1
> 6 files changed, 94 insertions(+), 16 deletions(-)
>
>
> Index: llvm/include/llvm/Function.h
> diff -u llvm/include/llvm/Function.h:1.81 llvm/include/llvm/
> Function.h:1.82
> --- llvm/include/llvm/Function.h:1.81 Sun Apr 22 12:28:03 2007
> +++ llvm/include/llvm/Function.h Wed Apr 25 09:27:10 2007
> @@ -141,12 +141,12 @@
> /// removeFromParent - This method unlinks 'this' from the
> containing module,
> /// but does not delete it.
> ///
> - void removeFromParent();
> + virtual void removeFromParent();
>
> /// eraseFromParent - This method unlinks 'this' from the
> containing module
> /// and deletes it.
> ///
> - void eraseFromParent();
> + virtual void eraseFromParent();
>
>
> /// Get the underlying elements of the Function... the basic
> block list is
>
>
> Index: llvm/include/llvm/GlobalValue.h
> diff -u llvm/include/llvm/GlobalValue.h:1.38 llvm/include/llvm/
> GlobalValue.h:1.39
> --- llvm/include/llvm/GlobalValue.h:1.38 Sun Apr 22 10:11:24 2007
> +++ llvm/include/llvm/GlobalValue.h Wed Apr 25 09:27:10 2007
> @@ -121,6 +121,16 @@
> /// value is outside of the current translation unit...
> virtual bool isDeclaration() const = 0;
>
> + /// removeFromParent - This method unlinks 'this' from the
> containing module,
> + /// but does not delete it.
> + ///
> + virtual void removeFromParent() = 0;
> +
> + /// eraseFromParent - This method unlinks 'this' from the
> containing module
> + /// and deletes it.
> + ///
> + virtual void eraseFromParent() = 0;
> +
> /// getParent - Get the module that this global value is
> contained inside
> /// of...
> inline Module *getParent() { return Parent; }
> @@ -136,7 +146,8 @@
> static inline bool classof(const GlobalValue *) { return true; }
> static inline bool classof(const Value *V) {
> return V->getValueID() == Value::FunctionVal ||
> - V->getValueID() == Value::GlobalVariableVal;
> + V->getValueID() == Value::GlobalVariableVal ||
> + V->getValueID() == Value::GlobalAliasVal;
> }
> };
>
>
>
> Index: llvm/include/llvm/GlobalVariable.h
> diff -u llvm/include/llvm/GlobalVariable.h:1.44 llvm/include/llvm/
> GlobalVariable.h:1.45
> --- llvm/include/llvm/GlobalVariable.h:1.44 Tue Apr 17 13:30:41 2007
> +++ llvm/include/llvm/GlobalVariable.h Wed Apr 25 09:27:10 2007
> @@ -107,12 +107,12 @@
> /// removeFromParent - This method unlinks 'this' from the
> containing module,
> /// but does not delete it.
> ///
> - void removeFromParent();
> + virtual void removeFromParent();
>
> /// eraseFromParent - This method unlinks 'this' from the
> containing module
> /// and deletes it.
> ///
> - void eraseFromParent();
> + virtual void eraseFromParent();
>
> /// Override Constant's implementation of this method so we can
> /// replace constant initializers.
>
>
> Index: llvm/include/llvm/Module.h
> diff -u llvm/include/llvm/Module.h:1.88 llvm/include/llvm/Module.h:
> 1.89
> --- llvm/include/llvm/Module.h:1.88 Tue Apr 17 00:33:04 2007
> +++ llvm/include/llvm/Module.h Wed Apr 25 09:27:10 2007
> @@ -16,12 +16,12 @@
>
> #include "llvm/Function.h"
> #include "llvm/GlobalVariable.h"
> +#include "llvm/GlobalAlias.h"
> #include "llvm/Support/DataTypes.h"
> #include <vector>
>
> namespace llvm {
>
> -class GlobalVariable;
> class GlobalValueRefMap; // Used by ConstantVals.cpp
> class FunctionType;
>
> @@ -43,6 +43,15 @@
> static inline ValueSymbolTable *getSymTab(Module *M);
> static int getListOffset();
> };
> +template<> struct ilist_traits<GlobalAlias>
> + : public SymbolTableListTraits<GlobalAlias, Module> {
> + // createSentinel is used to create a node that marks the end of
> the list.
> + static GlobalAlias *createSentinel();
> + static void destroySentinel(GlobalAlias *GA) { delete GA; }
> + static iplist<GlobalAlias> &getList(Module *M);
> + static inline ValueSymbolTable *getSymTab(Module *M);
> + static int getListOffset();
> +};
>
> /// A Module instance is used to store all the information related
> to an
> /// LLVM module. Modules are the top level container of all other
> LLVM
> @@ -63,6 +72,8 @@
> typedef iplist<GlobalVariable> GlobalListType;
> /// The type for the list of functions.
> typedef iplist<Function> FunctionListType;
> + /// The type for the list of aliases.
> + typedef iplist<GlobalAlias> AliasListType;
>
> /// The type for the list of dependent libraries.
> typedef std::vector<std::string> LibraryListType;
> @@ -77,6 +88,11 @@
> /// The Function constant iterator
> typedef FunctionListType::const_iterator
> const_iterator;
>
> + /// The Global Alias iterators.
> + typedef AliasListType::iterator
> alias_iterator;
> + /// The Global Alias constant iterator
> + typedef AliasListType::const_iterator
> const_alias_iterator;
> +
> /// The Library list iterator.
> typedef LibraryListType::const_iterator lib_iterator;
>
> @@ -92,6 +108,7 @@
> private:
> GlobalListType GlobalList; ///< The Global Variables in the
> module
> FunctionListType FunctionList; ///< The Functions in the module
> + AliasListType AliasList; ///< The Aliases in the module
> LibraryListType LibraryList; ///< The Libraries needed by the
> module
> std::string GlobalScopeAsm; ///< Inline Asm at global scope.
> ValueSymbolTable *ValSymTab; ///< Symbol table for values
> @@ -175,10 +192,10 @@
> /// getOrInsertFunction - Look up the specified function in the
> module symbol
> /// table. If it does not exist, add a prototype for the
> function and return
> /// it. This function guarantees to return a constant of
> pointer to the
> - /// specified function type or a ConstantExpr BitCast of that
> type if the
> - /// named /// function has a different type. This version of
> the method
> - /// takes a null terminated list of function arguments, which
> makes it
> - /// easier for clients to use.
> + /// specified function type or a ConstantExpr BitCast of that
> type if the
> + /// named function has a different type. This version of the
> method takes a
> + /// null terminated list of function arguments, which makes it
> easier for
> + /// clients to use.
> Constant *getOrInsertFunction(const std::string &Name, const
> Type *RetTy,...)
> END_WITH_NULL;
>
> @@ -205,6 +222,15 @@
> GlobalVariable *getNamedGlobal(const std::string &Name) const {
> return getGlobalVariable(Name, true);
> }
> +
> +/// @}
> +/// @name Global Variable Accessors
> +/// @{
> +public:
> + /// getNamedGlobal - Return the first global alias in the module
> with the
> + /// specified name, of arbitrary type. This method returns null
> if a global
> + /// with the specified name is not found.
> + GlobalAlias *getNamedAlias(const std::string &Name) const;
>
> /// @}
> /// @name Type Accessors
> @@ -235,14 +261,18 @@
> const FunctionListType &getFunctionList() const { return
> FunctionList; }
> /// Get the Module's list of functions.
> FunctionListType &getFunctionList() { return
> FunctionList; }
> + /// Get the Module's list of aliases (constant).
> + const AliasListType &getAliasList() const { return
> AliasList; }
> + /// Get the Module's list of aliases.
> + AliasListType &getAliasList() { return
> AliasList; }
> /// Get the symbol table of global variable and function
> identifiers
> const ValueSymbolTable &getValueSymbolTable() const { return
> *ValSymTab; }
> /// Get the Module's symbol table of global variable and
> function identifiers.
> ValueSymbolTable &getValueSymbolTable() { return
> *ValSymTab; }
> /// Get the symbol table of types
> - const TypeSymbolTable &getTypeSymbolTable() const { return
> *TypeSymTab; }
> + const TypeSymbolTable &getTypeSymbolTable() const { return
> *TypeSymTab; }
> /// Get the Module's symbol table of types
> - TypeSymbolTable &getTypeSymbolTable() { return
> *TypeSymTab; }
> + TypeSymbolTable &getTypeSymbolTable() { return
> *TypeSymTab; }
>
> /// @}
> /// @name Global Variable Iteration
> @@ -272,7 +302,7 @@
> /// Get a constant iterator to the last function.
> const_iterator end () const { return FunctionList.end
> (); }
> /// Determine how many functions are in the Module's list of
> functions.
> - size_t size() const { return FunctionList.size
> (); }
> + size_t size() const { return FunctionList.size
> (); }
> /// Determine if the list of functions is empty.
> bool empty() const { return FunctionList.empty
> (); }
>
> @@ -283,9 +313,9 @@
> /// @brief Get a constant iterator to beginning of dependent
> library list.
> inline lib_iterator lib_begin() const { return LibraryList.begin
> (); }
> /// @brief Get a constant iterator to end of dependent library
> list.
> - inline lib_iterator lib_end() const { return LibraryList.end(); }
> + inline lib_iterator lib_end() const { return LibraryList.end
> (); }
> /// @brief Returns the number of items in the list of libraries.
> - inline size_t lib_size() const { return LibraryList.size(); }
> + inline size_t lib_size() const { return LibraryList.size
> (); }
> /// @brief Add a library to the list of dependent libraries
> void addLibrary(const std::string& Lib);
> /// @brief Remove a library from the list of dependent libraries
> @@ -294,6 +324,23 @@
> inline const LibraryListType& getLibraries() const { return
> LibraryList; }
>
> /// @}
> +/// @name Alias Iteration
> +/// @{
> +public:
> + /// Get an iterator to the first alias.
> + alias_iterator alias_begin() { return
> AliasList.begin(); }
> + /// Get a constant iterator to the first alias.
> + const_alias_iterator alias_begin() const { return
> AliasList.begin(); }
> + /// Get an iterator to the last alias.
> + alias_iterator alias_end () { return
> AliasList.end(); }
> + /// Get a constant iterator to the last alias.
> + const_alias_iterator alias_end () const { return
> AliasList.end(); }
> + /// Determine how many functions are in the Module's list of
> aliases.
> + size_t alias_size () const { return
> AliasList.size(); }
> + /// Determine if the list of aliases is empty.
> + bool alias_empty() const { return
> AliasList.empty(); }
> +
> +/// @}
> /// @name Utility functions for printing and dumping Module objects
> /// @{
> public:
> @@ -324,6 +371,10 @@
> Module *Obj = 0;
> return unsigned(reinterpret_cast<uintptr_t>(&Obj->GlobalList));
> }
> + static unsigned getAliasListOffset() {
> + Module *Obj = 0;
> + return unsigned(reinterpret_cast<uintptr_t>(&Obj->AliasList));
> + }
> };
>
> /// An iostream inserter for modules.
> @@ -342,6 +393,11 @@
> return M ? &M->getValueSymbolTable() : 0;
> }
>
> +inline ValueSymbolTable *
> +ilist_traits<GlobalAlias>::getSymTab(Module *M) {
> + return M ? &M->getValueSymbolTable() : 0;
> +}
> +
> inline int
> ilist_traits<Function>::getListOffset() {
> return Module::getFunctionListOffset();
> @@ -352,6 +408,11 @@
> return Module::getGlobalVariableListOffset();
> }
>
> +inline int
> +ilist_traits<GlobalAlias>::getListOffset() {
> + return Module::getAliasListOffset();
> +}
> +
> } // End llvm namespace
>
> #endif
>
>
> Index: llvm/include/llvm/Value.h
> diff -u llvm/include/llvm/Value.h:1.100 llvm/include/llvm/Value.h:
> 1.101
> --- llvm/include/llvm/Value.h:1.100 Fri Apr 13 13:12:09 2007
> +++ llvm/include/llvm/Value.h Wed Apr 25 09:27:10 2007
> @@ -30,6 +30,7 @@
> class GlobalValue;
> class Function;
> class GlobalVariable;
> +class GlobalAlias;
> class InlineAsm;
> class ValueSymbolTable;
> class TypeSymbolTable;
> @@ -160,6 +161,7 @@
> ArgumentVal, // This is an instance of Argument
> BasicBlockVal, // This is an instance of BasicBlock
> FunctionVal, // This is an instance of Function
> + GlobalAliasVal, // This is an instance of GlobalAlias
> GlobalVariableVal, // This is an instance of
> GlobalVariable
> UndefValueVal, // This is an instance of UndefValue
> ConstantExprVal, // This is an instance of ConstantExpr
> @@ -248,8 +250,11 @@
> template <> inline bool isa_impl<GlobalVariable, Value>(const
> Value &Val) {
> return Val.getValueID() == Value::GlobalVariableVal;
> }
> +template <> inline bool isa_impl<GlobalAlias, Value>(const Value
> &Val) {
> + return Val.getValueID() == Value::GlobalAliasVal;
> +}
> template <> inline bool isa_impl<GlobalValue, Value>(const Value
> &Val) {
> - return isa<GlobalVariable>(Val) || isa<Function>(Val);
> + return isa<GlobalVariable>(Val) || isa<Function>(Val) ||
> isa<GlobalAlias>(Val);
> }
>
> } // End llvm namespace
>
>
> Index: llvm/include/llvm/ValueSymbolTable.h
> diff -u llvm/include/llvm/ValueSymbolTable.h:1.12 llvm/include/llvm/
> ValueSymbolTable.h:1.13
> --- llvm/include/llvm/ValueSymbolTable.h:1.12 Mon Apr 16 22:26:42 2007
> +++ llvm/include/llvm/ValueSymbolTable.h Wed Apr 25 09:27:10 2007
> @@ -35,6 +35,7 @@
> friend class SymbolTableListTraits<Instruction, BasicBlock>;
> friend class SymbolTableListTraits<Function, Module>;
> friend class SymbolTableListTraits<GlobalVariable, Module>;
> + friend class SymbolTableListTraits<GlobalAlias, Module>;
> /// @name Types
> /// @{
> public:
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list