[llvm-commits] [llvm-gcc-4.0] r41748 - in /llvm-gcc-4.0/trunk/gcc: llvm-backend.cpp llvm-convert.cpp llvm-internal.h
Chris Lattner
clattner at apple.com
Fri Sep 7 11:29:33 PDT 2007
> URL: http://llvm.org/viewvc/llvm-project?rev=41748&view=rev
> Log:
> Replace GV from AttributeUsedGlobals list.
Hey Devang,
There is a problem with this patch: this will build the llvm.used
global in nondeterministic order based on how the addresses of the
GV's hash in the smallptrset. To avoid this problem, you should use
a SetVector or something like it.
-Chris
> Modified:
> llvm-gcc-4.0/trunk/gcc/llvm-backend.cpp
> llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp
> llvm-gcc-4.0/trunk/gcc/llvm-internal.h
>
> Modified: llvm-gcc-4.0/trunk/gcc/llvm-backend.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.0/trunk/gcc/
> llvm-backend.cpp?rev=41748&r1=41747&r2=41748&view=diff
>
> ======================================================================
> ========
> --- llvm-gcc-4.0/trunk/gcc/llvm-backend.cpp (original)
> +++ llvm-gcc-4.0/trunk/gcc/llvm-backend.cpp Thu Sep 6 14:00:20 2007
> @@ -84,7 +84,7 @@
> static cl::opt<bool> DisableLLVMOptimizations("disable-llvm-optzns");
>
> std::vector<std::pair<Function*, int> > StaticCtors, StaticDtors;
> -std::vector<Constant*> AttributeUsedGlobals;
> +SmallPtrSet<Constant*, 32> AttributeUsedGlobals;
> std::vector<Constant*> AttributeNoinlineFunctions;
> std::vector<Constant*> AttributeAnnotateGlobals;
>
> @@ -439,6 +439,7 @@
>
> createOptimizationPasses();
>
> + AttributeUsedGlobals.clear();
> timevar_pop(TV_LLVM_INIT);
> }
>
> @@ -479,9 +480,15 @@
> CreateStructorsList(StaticDtors, "llvm.global_dtors");
>
> if (!AttributeUsedGlobals.empty()) {
> - const Type *SBP = PointerType::get(Type::Int8Ty);
> - ArrayType *AT = ArrayType::get(SBP, AttributeUsedGlobals.size());
> - Constant *Init = ConstantArray::get(AT, AttributeUsedGlobals);
> + std::vector<Constant *> AUGs;
> + const Type *SBP= PointerType::get(Type::Int8Ty);
> + for (SmallPtrSet<Constant *,32>::iterator AI =
> AttributeUsedGlobals.begin(),
> + AE = AttributeUsedGlobals.end(); AI != AE; ++AI) {
> + Constant *C = *AI;
> + AUGs.push_back(ConstantExpr::getBitCast(C, SBP));
> + }
> + ArrayType *AT = ArrayType::get(SBP, AUGs.size());
> + Constant *Init = ConstantArray::get(AT, AUGs);
> GlobalValue* gv = new GlobalVariable(AT, false,
> GlobalValue::AppendingLinkage, Init,
> "llvm.used", TheModule);
> @@ -796,6 +803,10 @@
>
> GlobalValue::ExternalLinkage, 0,
> GV->getName(),
> TheModule);
> GV->replaceAllUsesWith(ConstantExpr::getBitCast(NGV, GV-
> >getType()));
> + if (AttributeUsedGlobals.count(GV)) {
> + AttributeUsedGlobals.erase(GV);
> + AttributeUsedGlobals.insert(NGV);
> + }
> delete GV;
> SET_DECL_LLVM(decl, NGV);
> GV = NGV;
> @@ -853,10 +864,8 @@
> }
>
> // Handle used decls
> - if (DECL_PRESERVE_P (decl)) {
> - const Type *SBP= PointerType::get(Type::Int8Ty);
> - AttributeUsedGlobals.push_back(ConstantExpr::getBitCast(GV,
> SBP));
> - }
> + if (DECL_PRESERVE_P (decl))
> + AttributeUsedGlobals.insert(GV);
>
> // Add annotate attributes for globals
> if (DECL_ATTRIBUTES(decl))
>
> Modified: llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.0/trunk/gcc/
> llvm-convert.cpp?rev=41748&r1=41747&r2=41748&view=diff
>
> ======================================================================
> ========
> --- llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp (original)
> +++ llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp Thu Sep 6 14:00:20 2007
> @@ -594,10 +594,8 @@
> Fn->setSection(TREE_STRING_POINTER(DECL_SECTION_NAME(FnDecl)));
>
> // Handle used Functions
> - if (DECL_PRESERVE_P (FnDecl)) {
> - const Type *SBP= PointerType::get(Type::Int8Ty);
> - AttributeUsedGlobals.push_back(ConstantExpr::getBitCast(Fn,SBP));
> - }
> + if (DECL_PRESERVE_P (FnDecl))
> + AttributeUsedGlobals.insert(Fn);
>
> // Handle noinline Functions
> if (lookup_attribute ("noinline", DECL_ATTRIBUTES (FnDecl))) {
>
> Modified: llvm-gcc-4.0/trunk/gcc/llvm-internal.h
> URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.0/trunk/gcc/
> llvm-internal.h?rev=41748&r1=41747&r2=41748&view=diff
>
> ======================================================================
> ========
> --- llvm-gcc-4.0/trunk/gcc/llvm-internal.h (original)
> +++ llvm-gcc-4.0/trunk/gcc/llvm-internal.h Thu Sep 6 14:00:20 2007
> @@ -34,6 +34,7 @@
> #include <string>
> #include "llvm/Intrinsics.h"
> #include "llvm/ADT/SmallVector.h"
> +#include "llvm/ADT/SmallPtrSet.h"
> #include "llvm/Support/DataTypes.h"
> #include "llvm/Support/LLVMBuilder.h"
> #include "llvm/Support/Streams.h"
> @@ -86,7 +87,7 @@
> extern std::vector<std::pair<Function*, int> > StaticCtors,
> StaticDtors;
>
> /// AttributeUsedGlobals - The list of globals that are marked
> attribute(used).
> -extern std::vector<Constant*> AttributeUsedGlobals;
> +extern SmallPtrSet<Constant *,32> AttributeUsedGlobals;
>
> /// AttributeNoinlineFunctions - The list of functions that are
> /// marked attribute(noinline)
>
>
> _______________________________________________
> 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