[llvm-commits] [llvm-gcc-4.2] r134710 - in /llvm-gcc-4.2/trunk/gcc: llvm-abi-default.cpp llvm-types.cpp
Chris Lattner
sabre at nondot.org
Fri Jul 8 11:12:50 PDT 2011
Author: lattner
Date: Fri Jul 8 13:12:50 2011
New Revision: 134710
URL: http://llvm.org/viewvc/llvm-project?rev=134710&view=rev
Log:
greatly simplify the llvm.pch.types logic, eliminating the need to apply names to all the types.
This also eliminates use of TypeSymbolTable.h which is going away.
Modified:
llvm-gcc-4.2/trunk/gcc/llvm-abi-default.cpp
llvm-gcc-4.2/trunk/gcc/llvm-types.cpp
Modified: llvm-gcc-4.2/trunk/gcc/llvm-abi-default.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-abi-default.cpp?rev=134710&r1=134709&r2=134710&view=diff
==============================================================================
--- llvm-gcc-4.2/trunk/gcc/llvm-abi-default.cpp (original)
+++ llvm-gcc-4.2/trunk/gcc/llvm-abi-default.cpp Fri Jul 8 13:12:50 2011
@@ -73,8 +73,8 @@
// not include variable sized fields here.
std::vector<const Type*> Elts;
if (Ty->isVoidTy()) {
- // Handle void explicitly as an opaque type.
- const Type *OpTy = OpaqueType::get(getGlobalContext());
+ // Handle void explicitly as a {} type.
+ const Type *OpTy = StructType::get(getGlobalContext());
C.HandleScalarArgument(OpTy, type);
ScalarElts.push_back(OpTy);
} else if (isPassedByInvisibleReference(type)) { // variable size -> by-ref.
Modified: llvm-gcc-4.2/trunk/gcc/llvm-types.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-types.cpp?rev=134710&r1=134709&r2=134710&view=diff
==============================================================================
--- llvm-gcc-4.2/trunk/gcc/llvm-types.cpp (original)
+++ llvm-gcc-4.2/trunk/gcc/llvm-types.cpp Fri Jul 8 13:12:50 2011
@@ -29,7 +29,6 @@
#include "llvm/Constants.h"
#include "llvm/DerivedTypes.h"
#include "llvm/Module.h"
-#include "llvm/TypeSymbolTable.h"
#include "llvm/Target/TargetData.h"
#include "llvm/Target/TargetMachine.h"
#include "llvm/Assembly/Writer.h"
@@ -122,94 +121,44 @@
// Erase type from LTypes vector
static void llvmEraseLType(const Type *Ty) {
-
LTypesMapTy::iterator I = LTypesMap.find(Ty);
if (I != LTypesMap.end()) {
// It is OK to clear this entry instead of removing this entry
// to avoid re-indexing of other entries.
- LTypes[ LTypesMap[Ty] - 1] = NULL;
+ LTypes[LTypesMap[Ty] - 1] = NULL;
LTypesMap.erase(I);
}
}
// Read LLVM Types string table
void readLLVMTypesStringTable() {
-
GlobalValue *V = TheModule->getNamedGlobal("llvm.pch.types");
if (!V)
return;
- // Value *GV = TheModule->getValueSymbolTable().lookup("llvm.pch.types");
- GlobalVariable *GV = cast<GlobalVariable>(V);
- ConstantStruct *LTypesNames = cast<ConstantStruct>(GV->getOperand(0));
-
- for (unsigned i = 0; i < LTypesNames->getNumOperands(); ++i) {
- const Type *Ty = NULL;
-
- if (ConstantArray *CA =
- dyn_cast<ConstantArray>(LTypesNames->getOperand(i))) {
- std::string Str = CA->getAsString();
- Ty = TheModule->getTypeByName(Str);
- assert (Ty != NULL && "Invalid Type in LTypes string table");
- }
- // If V is not a string then it is empty. Insert NULL to represent
- // empty entries.
- LTypes.push_back(Ty);
- }
+ const StructType *STy = cast<StructType>(V->getType()->getElementType());
+ LTypes.insert(LTypes.end(), STy->subtype_begin(), STy->subtype_end());
+
// Now, llvm.pch.types value is not required so remove it from the symbol
// table.
- GV->eraseFromParent();
+ V->eraseFromParent();
}
// GCC tree's uses LTypes vector's index to reach LLVM types.
-// Create a string table to hold these LLVM types' names. This string
-// table will be used to recreate LTypes vector after loading PCH.
+// Create a global variable with struct type that contains each of these.
void writeLLVMTypesStringTable() {
-
if (LTypes.empty())
return;
- std::vector<Constant *> LTypesNames;
- std::map < const Type *, std::string > TypeNameMap;
-
- // Collect Type Names in advance.
- const TypeSymbolTable &ST = TheModule->getTypeSymbolTable();
- TypeSymbolTable::const_iterator TI = ST.begin();
- for (; TI != ST.end(); ++TI) {
- TypeNameMap[TI->second] = TI->first;
- }
-
- // Populate LTypesNames vector.
- for (std::vector<const Type *>::iterator I = LTypes.begin(),
- E = LTypes.end(); I != E; ++I) {
- const Type *Ty = *I;
-
- // Give names to nameless types.
- if (Ty && TypeNameMap[Ty].empty()) {
- std::string NewName =
- TheModule->getTypeSymbolTable().getUniqueName("llvm.fe.ty");
- TheModule->addTypeName(NewName, Ty);
- TypeNameMap[*I] = NewName;
- }
-
- const std::string &TypeName = TypeNameMap[*I];
- LTypesNames.push_back(ConstantArray::get(Context, TypeName, false));
- }
-
- // Create string table.
- Constant *LTypesNameTable =
- ConstantStruct::getAnon(Context, LTypesNames, false);
-
+ const StructType *AggregateTy = StructType::get(Context, LTypes);
+
// Create variable to hold this string table.
- GlobalVariable *GV = new GlobalVariable(*TheModule,
- LTypesNameTable->getType(), true,
- GlobalValue::ExternalLinkage,
- LTypesNameTable,
- "llvm.pch.types");
- GV->setUnnamedAddr(true);
+ (void)new GlobalVariable(*TheModule, AggregateTy, true,
+ GlobalValue::ExternalLinkage,
+ /*noinit*/0, "llvm.pch.types");
}
//===----------------------------------------------------------------------===//
More information about the llvm-commits
mailing list