[cfe-commits] r64323 - /cfe/trunk/lib/CodeGen/CGObjCMac.cpp

Fariborz Jahanian fjahanian at apple.com
Wed Feb 11 12:51:18 PST 2009


Author: fjahanian
Date: Wed Feb 11 14:51:17 2009
New Revision: 64323

URL: http://llvm.org/viewvc/llvm-project?rev=64323&view=rev
Log:
ir-gen for objc's @selector expression in nonfragile abi mode.

Modified:
    cfe/trunk/lib/CodeGen/CGObjCMac.cpp

Modified: cfe/trunk/lib/CodeGen/CGObjCMac.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGObjCMac.cpp?rev=64323&r1=64322&r2=64323&view=diff

==============================================================================
--- cfe/trunk/lib/CodeGen/CGObjCMac.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGObjCMac.cpp Wed Feb 11 14:51:17 2009
@@ -680,6 +680,10 @@
                               const NamedDecl *IDName,
                               const ObjCIvarDecl *Ivar);
   
+  /// EmitSelector - Return a Value*, of type ObjCTypes.SelectorPtrTy,
+  /// for the given selector.
+  llvm::Value *EmitSelector(CGBuilderTy &Builder, Selector Sel);
+  
 public:
   CGObjCNonFragileABIMac(CodeGen::CodeGenModule &cgm);
   // FIXME. All stubs for now!
@@ -705,7 +709,7 @@
                                 const ObjCInterfaceDecl *ID);
   
   virtual llvm::Value *GetSelector(CGBuilderTy &Builder, Selector Sel)
-    { return 0; }
+    { return EmitSelector(Builder, Sel); }
   
   virtual void GenerateCategory(const ObjCCategoryImplDecl *CMD);
   
@@ -4578,6 +4582,27 @@
                          ObjCSuper, ObjCTypes.SuperPtrCTy,
                          true, CallArgs);
 }
+
+llvm::Value *CGObjCNonFragileABIMac::EmitSelector(CGBuilderTy &Builder, 
+                                                  Selector Sel) {
+  llvm::GlobalVariable *&Entry = SelectorReferences[Sel];
+  
+  if (!Entry) {
+    llvm::Constant *Casted = 
+    llvm::ConstantExpr::getBitCast(GetMethodVarName(Sel),
+                                   ObjCTypes.SelectorPtrTy);
+    Entry = 
+    new llvm::GlobalVariable(ObjCTypes.SelectorPtrTy, false,
+                             llvm::GlobalValue::InternalLinkage,
+                             Casted, "\01L_OBJC_SELECTOR_REFERENCES_",
+                             &CGM.getModule());
+    Entry->setSection("__DATA,__objc_selrefs,literal_pointers,no_dead_strip");
+    UsedGlobals.push_back(Entry);
+  }
+  
+  return Builder.CreateLoad(Entry, false, "tmp");
+}
+
 /* *** */
 
 CodeGen::CGObjCRuntime *





More information about the cfe-commits mailing list