summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen/CGObjCGNU.cpp
diff options
context:
space:
mode:
authorAndrew Trick <atrick@apple.com>2011-03-23 19:43:59 +0000
committerAndrew Trick <atrick@apple.com>2011-03-23 19:43:59 +0000
commit4a3ee93447d01284425b5fd9c11234586068a6d8 (patch)
tree62fd82b2bd79e033f75f79834f0b6e1f8e0c405b /clang/lib/CodeGen/CGObjCGNU.cpp
parentf1a38cf32dc010ab3cf2d23aeb3d50c9a8944dc8 (diff)
downloadbcm5719-llvm-4a3ee93447d01284425b5fd9c11234586068a6d8.tar.gz
bcm5719-llvm-4a3ee93447d01284425b5fd9c11234586068a6d8.zip
Revert r128156 because of CodeGenObjC/messages.m and Coverage/codegen-gnu.m.
llvm-svn: 128157
Diffstat (limited to 'clang/lib/CodeGen/CGObjCGNU.cpp')
-rw-r--r--clang/lib/CodeGen/CGObjCGNU.cpp19
1 files changed, 10 insertions, 9 deletions
diff --git a/clang/lib/CodeGen/CGObjCGNU.cpp b/clang/lib/CodeGen/CGObjCGNU.cpp
index 99132d6967c..dc91ec764ca 100644
--- a/clang/lib/CodeGen/CGObjCGNU.cpp
+++ b/clang/lib/CodeGen/CGObjCGNU.cpp
@@ -521,12 +521,9 @@ llvm::Value *CGObjCGNU::GetSelector(CGBuilderTy &Builder, Selector Sel,
Types.push_back(TypedSelector(TypeEncoding, SelValue));
}
- if (lval) {
- llvm::Value *tmp = Builder.CreateAlloca(SelValue->getType());
- Builder.CreateStore(SelValue, tmp);
- return tmp;
- }
- return SelValue;
+ if (lval)
+ return SelValue;
+ return Builder.CreateLoad(SelValue);
}
llvm::Value *CGObjCGNU::GetSelector(CGBuilderTy &Builder, Selector Sel,
@@ -1909,12 +1906,16 @@ llvm::Function *CGObjCGNU::ModuleInitFunction() {
llvm::Constant *Idxs[] = {Zeros[0],
llvm::ConstantInt::get(llvm::Type::getInt32Ty(VMContext), i), Zeros[0]};
// FIXME: We're generating redundant loads and stores here!
- llvm::Constant *SelPtr = llvm::ConstantExpr::getGetElementPtr(SelectorList,
- Idxs, 2);
+ llvm::Constant *SelPtr = new llvm::GlobalVariable(TheModule, SelStructPtrTy,
+ true, llvm::GlobalValue::InternalLinkage,
+ llvm::ConstantExpr::getGetElementPtr(SelectorList, Idxs, 2),
+ ".objc_sel_ptr");
// If selectors are defined as an opaque type, cast the pointer to this
// type.
- SelPtr = llvm::ConstantExpr::getBitCast(SelPtr,
+ if (isSelOpaque) {
+ SelPtr = llvm::ConstantExpr::getBitCast(SelPtr,
llvm::PointerType::getUnqual(SelectorTy));
+ }
SelectorAliases[i]->replaceAllUsesWith(SelPtr);
SelectorAliases[i]->eraseFromParent();
}
OpenPOWER on IntegriCloud