diff options
| author | Akira Hatanaka <ahatanaka@apple.com> | 2017-04-17 15:21:55 +0000 |
|---|---|---|
| committer | Akira Hatanaka <ahatanaka@apple.com> | 2017-04-17 15:21:55 +0000 |
| commit | b5d1ea44af9717584fbbdf4f4a687dea57b9b461 (patch) | |
| tree | 24128c463fccec53caa027daa9e74df55e565933 /clang/lib | |
| parent | 7205f3c2e481b58856b3a3186e71aec87261fbd3 (diff) | |
| download | bcm5719-llvm-b5d1ea44af9717584fbbdf4f4a687dea57b9b461.tar.gz bcm5719-llvm-b5d1ea44af9717584fbbdf4f4a687dea57b9b461.zip | |
[ObjC] Mark loads from __NSArray0 and __NSDictionary0 as invariant.load.
Also, simplify code by calling MakeNaturalAlignAddrLValue.
This is a follow-up to r300396.
llvm-svn: 300454
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/CodeGen/CGObjC.cpp | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/clang/lib/CodeGen/CGObjC.cpp b/clang/lib/CodeGen/CGObjC.cpp index 3a09a15dbc1..357d1ab818c 100644 --- a/clang/lib/CodeGen/CGObjC.cpp +++ b/clang/lib/CodeGen/CGObjC.cpp @@ -126,10 +126,12 @@ llvm::Value *CodeGenFunction::EmitObjCCollectionLiteral(const Expr *E, QualType IdTy(CGM.getContext().getObjCIdType()); llvm::Constant *Constant = CGM.CreateRuntimeVariable(ConvertType(IdTy), ConstantName); - Address Addr(Constant, Context.getTypeAlignInChars(IdTy)); - LValue LV = MakeAddrLValue(Addr, IdTy); - return Builder.CreateBitCast(EmitLoadOfScalar(LV, E->getLocStart()), - ConvertType(E->getType())); + LValue LV = MakeNaturalAlignAddrLValue(Constant, IdTy); + llvm::Value *Ptr = EmitLoadOfScalar(LV, E->getLocStart()); + cast<llvm::LoadInst>(Ptr)->setMetadata( + CGM.getModule().getMDKindID("invariant.load"), + llvm::MDNode::get(getLLVMContext(), None)); + return Builder.CreateBitCast(Ptr, ConvertType(E->getType())); } // Compute the type of the array we're initializing. |

