diff options
author | Chris Lattner <sabre@nondot.org> | 2008-06-26 04:24:57 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2008-06-26 04:24:57 +0000 |
commit | 3aba07c84f12f244283ebfa94095a49810e00c2f (patch) | |
tree | 632eae26ecc30ba5fd8690dccee462f1ff0986d7 /lib/CodeGen | |
parent | dce1406f1c1f572cfd61c494546572d63461c741 (diff) |
improve indentation, avoid thrashing on maps and recalculating strings as much.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@52757 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen')
-rw-r--r-- | lib/CodeGen/CGObjCGNU.cpp | 53 | ||||
-rw-r--r-- | lib/CodeGen/CGObjCRuntime.h | 4 |
2 files changed, 24 insertions, 33 deletions
diff --git a/lib/CodeGen/CGObjCGNU.cpp b/lib/CodeGen/CGObjCGNU.cpp index 7d9a6aa21e..2b8f7edc05 100644 --- a/lib/CodeGen/CGObjCGNU.cpp +++ b/lib/CodeGen/CGObjCGNU.cpp @@ -222,62 +222,53 @@ llvm::Value *CGObjCGNU::LookupClass(llvm::IRBuilder &Builder, /// Looks up the selector for the specified name / type pair. // FIXME: Selectors should be statically cached, not looked up on every call. llvm::Value *CGObjCGNU::GetSelector(llvm::IRBuilder &Builder, - llvm::Value *SelName, - llvm::Value *SelTypes) { + llvm::Value *SelName, + llvm::Value *SelTypes) { // For static selectors, we return an alias for now then store them all in a // list that the runtime will initialise later. if (llvm::Constant *CName = dyn_cast<llvm::Constant>(SelName)) { // Untyped selector if (SelTypes == 0) { // If it's already cached, return it. - if (UntypedSelectors[getStringValue(CName)]) { - // FIXME: Volatility - return Builder.CreateLoad(UntypedSelectors[getStringValue(CName)]); + llvm::GlobalAlias *&US = UntypedSelectors[getStringValue(CName)]; + if (US == 0) { + // If it isn't, cache it. + US = new llvm::GlobalAlias(llvm::PointerType::getUnqual(SelectorTy), + llvm::GlobalValue::InternalLinkage, + ".objc_untyped_selector_alias", + NULL, &TheModule); } - // If it isn't, cache it. - llvm::GlobalAlias *Sel = new llvm::GlobalAlias( - llvm::PointerType::getUnqual(SelectorTy), - llvm::GlobalValue::InternalLinkage, ".objc_untyped_selector_alias", - NULL, &TheModule); - UntypedSelectors[getStringValue(CName)] = Sel; - // FIXME: Volatility - return Builder.CreateLoad(Sel); + return Builder.CreateLoad(US); } // Typed selectors if (llvm::Constant *CTypes = dyn_cast<llvm::Constant>(SelTypes)) { TypedSelector Selector = TypedSelector(getStringValue(CName), getStringValue(CTypes)); // If it's already cached, return it. - if (TypedSelectors[Selector]) { - // FIXME: Volatility - return Builder.CreateLoad(TypedSelectors[Selector]); + llvm::GlobalAlias *&TS = TypedSelectors[Selector]; + if (TS == 0) { + // If it isn't, cache it. + TS = new llvm::GlobalAlias(llvm::PointerType::getUnqual(SelectorTy), + llvm::GlobalValue::InternalLinkage, + ".objc_typed_selector_alias", + NULL, &TheModule); } - // If it isn't, cache it. - llvm::GlobalAlias *Sel = new llvm::GlobalAlias( - llvm::PointerType::getUnqual(SelectorTy), - llvm::GlobalValue::InternalLinkage, ".objc_typed_selector_alias", - NULL, &TheModule); - TypedSelectors[Selector] = Sel; - // FIXME: Volatility - return Builder.CreateLoad(Sel); + return Builder.CreateLoad(TS); } } // Dynamically look up selectors from non-constant sources llvm::Value *cmd; if (SelTypes == 0) { llvm::Constant *SelFunction = TheModule.getOrInsertFunction("sel_get_uid", - SelectorTy, - PtrToInt8Ty, - NULL); + SelectorTy, + PtrToInt8Ty, + NULL); cmd = Builder.CreateCall(SelFunction, SelName); } else { llvm::Constant *SelFunction = TheModule.getOrInsertFunction("sel_get_typed_uid", - SelectorTy, - PtrToInt8Ty, - PtrToInt8Ty, - NULL); + SelectorTy, PtrToInt8Ty, PtrToInt8Ty, NULL); cmd = Builder.CreateCall2(SelFunction, SelName, SelTypes); } return cmd; diff --git a/lib/CodeGen/CGObjCRuntime.h b/lib/CodeGen/CGObjCRuntime.h index 53753695fc..cc33982e47 100644 --- a/lib/CodeGen/CGObjCRuntime.h +++ b/lib/CodeGen/CGObjCRuntime.h @@ -52,8 +52,8 @@ public: virtual llvm::Function *ModuleInitFunction() =0; /// Get a selector for the specified name and type values virtual llvm::Value *GetSelector(llvm::IRBuilder &Builder, - llvm::Value *SelName, - llvm::Value *SelTypes) =0; + llvm::Value *SelName, + llvm::Value *SelTypes) = 0; /// Generate a constant string object virtual llvm::Constant *GenerateConstantString(const char *String, const size_t length) =0; |