forked from OSchip/llvm-project
				
			Add some comments, add new getGlobalVariable method
llvm-svn: 10671
This commit is contained in:
		
							parent
							
								
									e501af83b4
								
							
						
					
					
						commit
						09bd1a06c1
					
				| 
						 | 
					@ -23,6 +23,10 @@
 | 
				
			||||||
#include <map>
 | 
					#include <map>
 | 
				
			||||||
using namespace llvm;
 | 
					using namespace llvm;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//===----------------------------------------------------------------------===//
 | 
				
			||||||
 | 
					// Stuff to implement the globals and functions lists.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Function *ilist_traits<Function>::createNode() {
 | 
					Function *ilist_traits<Function>::createNode() {
 | 
				
			||||||
  FunctionType *FTy =
 | 
					  FunctionType *FTy =
 | 
				
			||||||
    FunctionType::get(Type::VoidTy, std::vector<const Type*>(), false);
 | 
					    FunctionType::get(Type::VoidTy, std::vector<const Type*>(), false);
 | 
				
			||||||
| 
						 | 
					@ -62,6 +66,9 @@ namespace llvm {
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//===----------------------------------------------------------------------===//
 | 
				
			||||||
 | 
					// Primitive Module methods.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Module::Module(const std::string &MID)
 | 
					Module::Module(const std::string &MID)
 | 
				
			||||||
  : ModuleID(MID), Endian(AnyEndianness), PtrSize(AnyPointerSize) {
 | 
					  : ModuleID(MID), Endian(AnyEndianness), PtrSize(AnyPointerSize) {
 | 
				
			||||||
| 
						 | 
					@ -87,6 +94,10 @@ void Module::dump() const {
 | 
				
			||||||
  print(std::cerr);
 | 
					  print(std::cerr);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//===----------------------------------------------------------------------===//
 | 
				
			||||||
 | 
					// Methods for easy access to the functions in the module.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// getOrInsertFunction - Look up the specified function in the module symbol
 | 
					// getOrInsertFunction - Look up the specified function in the module symbol
 | 
				
			||||||
// table.  If it does not exist, add a prototype for the function and return
 | 
					// table.  If it does not exist, add a prototype for the function and return
 | 
				
			||||||
// it.  This is nice because it allows most passes to get away with not handling
 | 
					// it.  This is nice because it allows most passes to get away with not handling
 | 
				
			||||||
| 
						 | 
					@ -128,7 +139,6 @@ Function *Module::getOrInsertFunction(const std::string &Name,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
// getFunction - Look up the specified function in the module symbol table.
 | 
					// getFunction - Look up the specified function in the module symbol table.
 | 
				
			||||||
// If it does not exist, return null.
 | 
					// If it does not exist, return null.
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
| 
						 | 
					@ -201,6 +211,33 @@ Function *Module::getNamedFunction(const std::string &Name) {
 | 
				
			||||||
  return Found; // Non-external function not found...
 | 
					  return Found; // Non-external function not found...
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//===----------------------------------------------------------------------===//
 | 
				
			||||||
 | 
					// Methods for easy access to the global variables in the module.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// getGlobalVariable - Look up the specified global variable in the module
 | 
				
			||||||
 | 
					/// symbol table.  If it does not exist, return null.  Note that this only
 | 
				
			||||||
 | 
					/// returns a global variable if it does not have internal linkage.  The type
 | 
				
			||||||
 | 
					/// argument should be the underlying type of the global, ie, it should not
 | 
				
			||||||
 | 
					/// have the top-level PointerType, which represents the address of the
 | 
				
			||||||
 | 
					/// global.
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					GlobalVariable *Module::getGlobalVariable(const std::string &Name, 
 | 
				
			||||||
 | 
					                                          const Type *Ty) {
 | 
				
			||||||
 | 
					  if (Value *V = getSymbolTable().lookup(PointerType::get(Ty), Name)) {
 | 
				
			||||||
 | 
					    GlobalVariable *Result = cast<GlobalVariable>(V);
 | 
				
			||||||
 | 
					    if (!Result->hasInternalLinkage())
 | 
				
			||||||
 | 
					      return Result;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//===----------------------------------------------------------------------===//
 | 
				
			||||||
 | 
					// Methods for easy access to the types in the module.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// addTypeName - Insert an entry in the symbol table mapping Str to Type.  If
 | 
					// addTypeName - Insert an entry in the symbol table mapping Str to Type.  If
 | 
				
			||||||
// there is already an entry for this name, true is returned and the symbol
 | 
					// there is already an entry for this name, true is returned and the symbol
 | 
				
			||||||
| 
						 | 
					@ -245,6 +282,11 @@ std::string Module::getTypeName(const Type *Ty) const {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//===----------------------------------------------------------------------===//
 | 
				
			||||||
 | 
					// Other module related stuff.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// dropAllReferences() - This function causes all the subelementss to "let go"
 | 
					// dropAllReferences() - This function causes all the subelementss to "let go"
 | 
				
			||||||
// of all references that they are maintaining.  This allows one to 'delete' a
 | 
					// of all references that they are maintaining.  This allows one to 'delete' a
 | 
				
			||||||
// whole module at a time, even though there may be circular references... first
 | 
					// whole module at a time, even though there may be circular references... first
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue