remove the old getSelector implementation, which removes some

calls to getStringValue

llvm-svn: 52761
This commit is contained in:
Chris Lattner 2008-06-26 04:44:19 +00:00
parent 6cfec78e48
commit d9b98863c4
2 changed files with 2 additions and 64 deletions

View File

@ -119,9 +119,6 @@ public:
virtual llvm::Value *LookupClass(llvm::IRBuilder &Builder,
llvm::Value *ClassName);
virtual llvm::Value *GetSelector(llvm::IRBuilder &Builder, Selector Sel);
virtual llvm::Value *GetSelector(llvm::IRBuilder &Builder,
llvm::Value *SelName,
llvm::Value *SelTypes);
virtual llvm::Function *MethodPreamble(
const std::string &ClassName,
@ -235,64 +232,8 @@ llvm::Value *CGObjCGNU::GetSelector(llvm::IRBuilder &Builder, Selector Sel) {
}
/// 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) {
// 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.
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);
}
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.
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);
}
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);
cmd = Builder.CreateCall(SelFunction, SelName);
}
else {
llvm::Constant *SelFunction =
TheModule.getOrInsertFunction("sel_get_typed_uid",
SelectorTy, PtrToInt8Ty, PtrToInt8Ty, NULL);
cmd = Builder.CreateCall2(SelFunction, SelName, SelTypes);
}
return cmd;
}
llvm::Constant *CGObjCGNU::MakeConstantString(const std::string &Str, const
std::string &Name) {
llvm::Constant *CGObjCGNU::MakeConstantString(const std::string &Str,
const std::string &Name) {
llvm::Constant * ConstStr = llvm::ConstantArray::get(Str);
ConstStr = new llvm::GlobalVariable(ConstStr->getType(), true,
llvm::GlobalValue::InternalLinkage,

View File

@ -54,9 +54,6 @@ public:
virtual llvm::Function *ModuleInitFunction() =0;
/// Get a selector for the specified name and type values
virtual llvm::Value *GetSelector(llvm::IRBuilder &Builder, Selector Sel) = 0;
virtual llvm::Value *GetSelector(llvm::IRBuilder &Builder,
llvm::Value *SelName,
llvm::Value *SelTypes) = 0;
/// Generate a constant string object
virtual llvm::Constant *GenerateConstantString(const char *String,
const size_t Length) = 0;