[llvm-commits] [llvm-gcc-4.2] r134710 - in /llvm-gcc-4.2/trunk/gcc: llvm-abi-default.cpp llvm-types.cpp
Chris Lattner
clattner at apple.com
Fri Jul 8 13:08:13 PDT 2011
On Jul 8, 2011, at 11:47 AM, Eric Christopher wrote:
> The buildbots seem a bit unhappy with this?
I see one failure on llvm-gcc-x86_64-darwin10-cross-i686-linux which should be fixed with a follow-on patch, are there other failures?
-Chris
>
> -eric
>
> On Jul 8, 2011, at 11:12 AM, Chris Lattner wrote:
>
>> 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");
>> }
>>
>> //===----------------------------------------------------------------------===//
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
> _______________________________________________
> 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