[cfe-commits] r67439 - in /cfe/trunk/lib/CodeGen: CodeGenModule.cpp CodeGenModule.h

Chris Lattner sabre at nondot.org
Sat Mar 21 01:03:49 PDT 2009


Author: lattner
Date: Sat Mar 21 03:03:33 2009
New Revision: 67439

URL: http://llvm.org/viewvc/llvm-project?rev=67439&view=rev
Log:
simplify some more code.

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=67439&r1=67438&r2=67439&view=diff

==============================================================================
--- cfe/trunk/lib/CodeGen/CodeGenModule.cpp (original)
+++ cfe/trunk/lib/CodeGen/CodeGenModule.cpp Sat Mar 21 03:03:33 2009
@@ -535,11 +535,12 @@
     if (FD->getAttr<ConstructorAttr>() || FD->getAttr<DestructorAttr>())
       return false;
 
+    // FIXME: What about inline, and/or extern inline?
     if (FD->getStorageClass() != FunctionDecl::Static)
       return false;
   } else {
     const VarDecl *VD = cast<VarDecl>(Global);
-    assert(VD->isFileVarDecl() && "Invalid decl.");
+    assert(VD->isFileVarDecl() && "Invalid decl");
 
     if (VD->getStorageClass() != VarDecl::Static)
       return false;
@@ -594,42 +595,46 @@
 
   QualType ASTTy = D->getType();
   const llvm::Type *Ty = getTypes().ConvertTypeForMem(ASTTy);
-  const llvm::Type *PTy = llvm::PointerType::get(Ty, ASTTy.getAddressSpace());
 
   // Lookup the entry, lazily creating it if necessary.
   llvm::GlobalValue *&Entry = GlobalDeclMap[getMangledName(D)];
-  if (!Entry) {
-    llvm::GlobalVariable *GV = 
-      new llvm::GlobalVariable(Ty, false, 
-                               llvm::GlobalValue::ExternalLinkage,
-                               0, getMangledName(D), &getModule(), 
-                               0, ASTTy.getAddressSpace());
-    Entry = GV;
+  if (Entry) {
+    const llvm::Type *PTy = llvm::PointerType::get(Ty, ASTTy.getAddressSpace());
+    
+    // Make sure the result is of the correct type.
+    if (Entry->getType() != PTy)
+      return llvm::ConstantExpr::getBitCast(Entry, PTy);
+    return Entry;
+  }
+   
+  llvm::GlobalVariable *GV = 
+    new llvm::GlobalVariable(Ty, false, 
+                             llvm::GlobalValue::ExternalLinkage,
+                             0, getMangledName(D), &getModule(), 
+                             0, ASTTy.getAddressSpace());
 
-    // Handle things which are present even on external declarations.
+  // Handle things which are present even on external declarations.
 
-    // FIXME: This code is overly simple and should be merged with
-    // other global handling.
+  // FIXME: This code is overly simple and should be merged with
+  // other global handling.
 
-    GV->setConstant(D->getType().isConstant(Context));
+  GV->setConstant(D->getType().isConstant(Context));
 
-    // FIXME: Merge with other attribute handling code.
+  // FIXME: Merge with other attribute handling code.
 
-    if (D->getStorageClass() == VarDecl::PrivateExtern)
-      setGlobalVisibility(GV, VisibilityAttr::HiddenVisibility);
+  if (D->getStorageClass() == VarDecl::PrivateExtern)
+    setGlobalVisibility(GV, VisibilityAttr::HiddenVisibility);
 
-    if (D->getAttr<WeakAttr>() || D->getAttr<WeakImportAttr>())
-      GV->setLinkage(llvm::GlobalValue::ExternalWeakLinkage);
+  if (D->getAttr<WeakAttr>() || D->getAttr<WeakImportAttr>())
+    GV->setLinkage(llvm::GlobalValue::ExternalWeakLinkage);
 
-    if (const AsmLabelAttr *ALA = D->getAttr<AsmLabelAttr>()) {
-      // Prefaced with special LLVM marker to indicate that the name
-      // should not be munged.
-      GV->setName("\01" + ALA->getLabel());
-    }  
+  // FIXME: This should be handled by the mangler!
+  if (const AsmLabelAttr *ALA = D->getAttr<AsmLabelAttr>()) {
+    // Prefaced with special LLVM marker to indicate that the name
+    // should not be munged.
+    GV->setName("\01" + ALA->getLabel());
   }
-  
-  // Make sure the result is of the correct type.
-  return llvm::ConstantExpr::getBitCast(Entry, PTy);
+  return Entry = GV;
 }
 
 void CodeGenModule::EmitGlobalVarDefinition(const VarDecl *D) {
@@ -826,7 +831,7 @@
   // Lookup the entry, lazily creating it if necessary.
   llvm::GlobalValue *&Entry = GlobalDeclMap[getMangledName(D)];
   if (!Entry)
-    Entry = EmitForwardFunctionDefinition(D, 0);
+    return Entry = EmitForwardFunctionDefinition(D, 0);
 
   if (Entry->getType() != PTy)
     return llvm::ConstantExpr::getBitCast(Entry, PTy);

Modified: cfe/trunk/lib/CodeGen/CodeGenModule.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenModule.h?rev=67439&r1=67438&r2=67439&view=diff

==============================================================================
--- cfe/trunk/lib/CodeGen/CodeGenModule.h (original)
+++ cfe/trunk/lib/CodeGen/CodeGenModule.h Sat Mar 21 03:03:33 2009
@@ -86,7 +86,7 @@
   /// protected from introducing conflicts. These globals should be
   /// created unnamed, we will name them and patch up conflicts when
   /// we release the module.
-  std::vector< std::pair<llvm::GlobalValue*, std::string> > RuntimeGlobals;
+  std::vector<std::pair<llvm::GlobalValue*, std::string> > RuntimeGlobals;
 
   /// GlobalDeclMap - Mapping of decl names (represented as unique
   /// character pointers from either the identifier table or the set





More information about the cfe-commits mailing list