r254195 - [x86] Exclusion of incorrect include headers paths for MCU target
Andrey Bokhanko via cfe-commits
cfe-commits at lists.llvm.org
Wed Dec 16 03:11:30 PST 2015
Reid, Hal,
I'm really sorry for this -- indeed what I committed (by a mistake) is
still WIP.
Yours,
Andrey
On Sat, Dec 5, 2015 at 4:56 AM, Reid Kleckner <rnk at google.com> wrote:
> It looks like the wrong patch got committed with the original description of
> D14954. I reverted it in r254823.
>
> Feel free to commit the header change, it looks fine.
>
> On Fri, Nov 27, 2015 at 5:57 AM, Hal Finkel via cfe-commits
> <cfe-commits at lists.llvm.org> wrote:
>>
>> Hi Andrey,
>>
>> This commit does not seem to match the description. What is it doing?
>>
>> Thanks again,
>> Hal
>>
>> ----- Original Message -----
>> > From: "Andrey Bokhanko via cfe-commits" <cfe-commits at lists.llvm.org>
>> > To: cfe-commits at lists.llvm.org
>> > Sent: Friday, November 27, 2015 6:18:23 AM
>> > Subject: r254195 - [x86] Exclusion of incorrect include headers paths
>> > for MCU target
>> >
>> > Author: asbokhan
>> > Date: Fri Nov 27 06:18:22 2015
>> > New Revision: 254195
>> >
>> > URL: http://llvm.org/viewvc/llvm-project?rev=254195&view=rev
>> > Log:
>> > [x86] Exclusion of incorrect include headers paths for MCU target
>> >
>> > Exclusion of /usr/include and /usr/local/include headers paths for
>> > MCU target.
>> >
>> > Differential Revision: http://reviews.llvm.org/D14954
>> >
>> > Modified:
>> > cfe/trunk/lib/CodeGen/CodeGenModule.cpp
>> > cfe/trunk/lib/CodeGen/CodeGenModule.h
>> >
>> > Modified: cfe/trunk/lib/CodeGen/CodeGenModule.cpp
>> > URL:
>> >
>> > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenModule.cpp?rev=254195&r1=254194&r2=254195&view=diff
>> >
>> > ==============================================================================
>> > --- cfe/trunk/lib/CodeGen/CodeGenModule.cpp (original)
>> > +++ cfe/trunk/lib/CodeGen/CodeGenModule.cpp Fri Nov 27 06:18:22 2015
>> > @@ -1178,12 +1178,7 @@ void CodeGenModule::EmitDeferred() {
>> > // to get GlobalValue with exactly the type we need, not
>> > something that
>> > // might had been created for another decl with the same mangled
>> > name but
>> > // different type.
>> > - // FIXME: Support for variables is not implemented yet.
>> > - if (isa<FunctionDecl>(D.getDecl()))
>> > - GV = cast<llvm::GlobalValue>(GetAddrOfGlobal(D,
>> > /*IsForDefinition=*/true));
>> > - else
>> > - if (!GV)
>> > - GV = GetGlobalValue(getMangledName(D));
>> > + GV = cast<llvm::GlobalValue>(GetAddrOfGlobal(D,
>> > /*IsForDefinition=*/true));
>> >
>> > // Check to see if we've already emitted this. This is
>> > necessary
>> > // for a couple of reasons: first, decls can end up in the
>> > @@ -1693,8 +1688,8 @@ CodeGenModule::GetOrCreateLLVMFunction(S
>> > // error.
>> > if (IsForDefinition && !Entry->isDeclaration()) {
>> > GlobalDecl OtherGD;
>> > - // Check that GD is not yet in ExplicitDefinitions is required
>> > to make
>> > - // sure that we issue an error only once.
>> > + // Check that GD is not yet in DiagnosedConflictingDefinitions
>> > is required
>> > + // to make sure that we issue an error only once.
>> > if (lookupRepresentativeDecl(MangledName, OtherGD) &&
>> > (GD.getCanonicalDecl().getDecl() !=
>> > OtherGD.getCanonicalDecl().getDecl()) &&
>> > @@ -1904,7 +1899,8 @@ bool CodeGenModule::isTypeConstant(QualT
>> > llvm::Constant *
>> > CodeGenModule::GetOrCreateLLVMGlobal(StringRef MangledName,
>> > llvm::PointerType *Ty,
>> > - const VarDecl *D) {
>> > + const VarDecl *D,
>> > + bool IsForDefinition) {
>> > // Lookup the entry, lazily creating it if necessary.
>> > llvm::GlobalValue *Entry = GetGlobalValue(MangledName);
>> > if (Entry) {
>> > @@ -1920,11 +1916,31 @@ CodeGenModule::GetOrCreateLLVMGlobal(Str
>> > if (Entry->getType() == Ty)
>> > return Entry;
>> >
>> > + // If there are two attempts to define the same mangled name,
>> > issue an
>> > + // error.
>> > + if (IsForDefinition && !Entry->isDeclaration()) {
>> > + GlobalDecl OtherGD;
>> > + // Check that D is not yet in DiagnosedConflictingDefinitions
>> > is required
>> > + // to make sure that we issue an error only once.
>> > + if (lookupRepresentativeDecl(MangledName, OtherGD) &&
>> > + (D->getCanonicalDecl() !=
>> > OtherGD.getCanonicalDecl().getDecl()) &&
>> > + DiagnosedConflictingDefinitions.insert(D).second) {
>> > + getDiags().Report(D->getLocation(),
>> > + diag::err_duplicate_mangled_name);
>> > + getDiags().Report(OtherGD.getDecl()->getLocation(),
>> > + diag::note_previous_definition);
>> > + }
>> > + }
>> > +
>> > // Make sure the result is of the correct type.
>> > if (Entry->getType()->getAddressSpace() !=
>> > Ty->getAddressSpace())
>> > return llvm::ConstantExpr::getAddrSpaceCast(Entry, Ty);
>> >
>> > - return llvm::ConstantExpr::getBitCast(Entry, Ty);
>> > + // Make sure the result is of the correct type.
>> > + // (If global is requested for a definition, we always need to
>> > create a new
>> > + // global, not just return a bitcast.)
>> > + if (!IsForDefinition)
>> > + return llvm::ConstantExpr::getBitCast(Entry, Ty);
>> > }
>> >
>> > unsigned AddrSpace = GetGlobalVarAddressSpace(D,
>> > Ty->getAddressSpace());
>> > @@ -1933,6 +1949,20 @@ CodeGenModule::GetOrCreateLLVMGlobal(Str
>> > llvm::GlobalValue::ExternalLinkage, nullptr, MangledName,
>> > nullptr,
>> > llvm::GlobalVariable::NotThreadLocal, AddrSpace);
>> >
>> > + // If we already created a global with the same mangled name (but
>> > different
>> > + // type) before, take its name and remove it from its parent.
>> > + if (Entry) {
>> > + GV->takeName(Entry);
>> > +
>> > + if (!Entry->use_empty()) {
>> > + llvm::Constant *NewPtrForOldDecl =
>> > + llvm::ConstantExpr::getBitCast(GV, Entry->getType());
>> > + Entry->replaceAllUsesWith(NewPtrForOldDecl);
>> > + }
>> > +
>> > + Entry->eraseFromParent();
>> > + }
>> > +
>> > // This is the first use or definition of a mangled name. If
>> > there is a
>> > // deferred decl with this name, remember that we need to emit it
>> > at the end
>> > // of the file.
>> > @@ -2005,7 +2035,8 @@ CodeGenModule::GetAddrOfGlobal(GlobalDec
>> > return GetAddrOfFunction(GD, Ty, /*ForVTable=*/false,
>> > /*DontDefer=*/false,
>> > IsForDefinition);
>> > } else
>> > - return GetAddrOfGlobalVar(cast<VarDecl>(GD.getDecl()));
>> > + return GetAddrOfGlobalVar(cast<VarDecl>(GD.getDecl()),
>> > /*Ty=*/nullptr,
>> > + IsForDefinition);
>> > }
>> >
>> > llvm::GlobalVariable *
>> > @@ -2055,7 +2086,8 @@ CodeGenModule::CreateOrReplaceCXXRuntime
>> > /// then it will be created with the specified type instead of
>> > whatever the
>> > /// normal requested type would be.
>> > llvm::Constant *CodeGenModule::GetAddrOfGlobalVar(const VarDecl *D,
>> > - llvm::Type *Ty) {
>> > + llvm::Type *Ty,
>> > + bool
>> > IsForDefinition) {
>> > assert(D->hasGlobalStorage() && "Not a global variable");
>> > QualType ASTTy = D->getType();
>> > if (!Ty)
>> > @@ -2065,7 +2097,7 @@ llvm::Constant *CodeGenModule::GetAddrOf
>> > llvm::PointerType::get(Ty,
>> > getContext().getTargetAddressSpace(ASTTy));
>> >
>> > StringRef MangledName = getMangledName(D);
>> > - return GetOrCreateLLVMGlobal(MangledName, PTy, D);
>> > + return GetOrCreateLLVMGlobal(MangledName, PTy, D,
>> > IsForDefinition);
>> > }
>> >
>> > /// CreateRuntimeVariable - Create a new runtime global variable
>> > with the
>> > @@ -2091,7 +2123,7 @@ void CodeGenModule::EmitTentativeDefinit
>> > }
>> >
>> > // The tentative definition is the only definition.
>> > - EmitGlobalVarDefinition(D);
>> > + EmitGlobalVarDefinition(D, true);
>> > }
>> >
>> > CharUnits CodeGenModule::GetTargetTypeStoreSize(llvm::Type *Ty)
>> > const {
>> > @@ -2178,7 +2210,8 @@ void CodeGenModule::maybeSetTrivialComda
>> > GO.setComdat(TheModule.getOrInsertComdat(GO.getName()));
>> > }
>> >
>> > -void CodeGenModule::EmitGlobalVarDefinition(const VarDecl *D) {
>> > +void CodeGenModule::EmitGlobalVarDefinition(const VarDecl *D,
>> > + bool IsTentative) {
>> > llvm::Constant *Init = nullptr;
>> > QualType ASTTy = D->getType();
>> > CXXRecordDecl *RD =
>> > ASTTy->getBaseElementTypeUnsafe()->getAsCXXRecordDecl();
>> > @@ -2237,7 +2270,8 @@ void CodeGenModule::EmitGlobalVarDefinit
>> > }
>> >
>> > llvm::Type* InitType = Init->getType();
>> > - llvm::Constant *Entry = GetAddrOfGlobalVar(D, InitType);
>> > + llvm::Constant *Entry =
>> > + GetAddrOfGlobalVar(D, InitType,
>> > /*IsForDefinition=*/!IsTentative);
>> >
>> > // Strip off a bitcast if we got one back.
>> > if (auto *CE = dyn_cast<llvm::ConstantExpr>(Entry)) {
>> > @@ -2269,7 +2303,8 @@ void CodeGenModule::EmitGlobalVarDefinit
>> > Entry->setName(StringRef());
>> >
>> > // Make a new global with the correct type, this is now
>> > guaranteed to work.
>> > - GV = cast<llvm::GlobalVariable>(GetAddrOfGlobalVar(D,
>> > InitType));
>> > + GV = cast<llvm::GlobalVariable>(
>> > + GetAddrOfGlobalVar(D, InitType,
>> > /*IsForDefinition=*/!IsTentative));
>> >
>> > // Replace all uses of the old global with the new global
>> > llvm::Constant *NewPtrForOldDecl =
>> >
>> > Modified: cfe/trunk/lib/CodeGen/CodeGenModule.h
>> > URL:
>> >
>> > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenModule.h?rev=254195&r1=254194&r2=254195&view=diff
>> >
>> > ==============================================================================
>> > --- cfe/trunk/lib/CodeGen/CodeGenModule.h (original)
>> > +++ cfe/trunk/lib/CodeGen/CodeGenModule.h Fri Nov 27 06:18:22 2015
>> > @@ -701,7 +701,8 @@ public:
>> > /// with the specified type instead of whatever the normal
>> > requested type
>> > /// would be.
>> > llvm::Constant *GetAddrOfGlobalVar(const VarDecl *D,
>> > - llvm::Type *Ty = nullptr);
>> > + llvm::Type *Ty = nullptr,
>> > + bool IsForDefinition = false);
>> >
>> > /// Return the address of the given function. If Ty is non-null,
>> > then this
>> > /// function will use the specified type if it has to create it.
>> > @@ -1130,7 +1131,8 @@ private:
>> >
>> > llvm::Constant *GetOrCreateLLVMGlobal(StringRef MangledName,
>> > llvm::PointerType *PTy,
>> > - const VarDecl *D);
>> > + const VarDecl *D,
>> > + bool IsForDefinition =
>> > false);
>> >
>> > void setNonAliasAttributes(const Decl *D, llvm::GlobalObject *GO);
>> >
>> > @@ -1141,7 +1143,7 @@ private:
>> > void EmitGlobalDefinition(GlobalDecl D, llvm::GlobalValue *GV =
>> > nullptr);
>> >
>> > void EmitGlobalFunctionDefinition(GlobalDecl GD, llvm::GlobalValue
>> > *GV);
>> > - void EmitGlobalVarDefinition(const VarDecl *D);
>> > + void EmitGlobalVarDefinition(const VarDecl *D, bool IsTentative =
>> > false);
>> > void EmitAliasDefinition(GlobalDecl GD);
>> > void EmitObjCPropertyImplementations(const ObjCImplementationDecl
>> > *D);
>> > void EmitObjCIvarInitializations(ObjCImplementationDecl *D);
>> >
>> >
>> > _______________________________________________
>> > cfe-commits mailing list
>> > cfe-commits at lists.llvm.org
>> > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>> >
>>
>> --
>> Hal Finkel
>> Assistant Computational Scientist
>> Leadership Computing Facility
>> Argonne National Laboratory
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
>
More information about the cfe-commits
mailing list