diff options
| author | Michael Gottesman <mgottesman@apple.com> | 2013-01-12 01:25:19 +0000 |
|---|---|---|
| committer | Michael Gottesman <mgottesman@apple.com> | 2013-01-12 01:25:19 +0000 |
| commit | 556ff61122bec0d0093c5fdd608c54876173dbf9 (patch) | |
| tree | ecfd9c22cba91f533bbca174a78c7c6238010345 /llvm/lib/Transforms | |
| parent | c9656faf1e73998b0ca0f0aff6652fec69c02c64 (diff) | |
| download | bcm5719-llvm-556ff61122bec0d0093c5fdd608c54876173dbf9.tar.gz bcm5719-llvm-556ff61122bec0d0093c5fdd608c54876173dbf9.zip | |
Fixed bug in ObjCARC where we were changing a call from objc_autoreleaseRV => objc_autorelease but were not updating the InstructionClass to IC_Autorelease.
llvm-svn: 172288
Diffstat (limited to 'llvm/lib/Transforms')
| -rw-r--r-- | llvm/lib/Transforms/Scalar/ObjCARC.cpp | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/llvm/lib/Transforms/Scalar/ObjCARC.cpp b/llvm/lib/Transforms/Scalar/ObjCARC.cpp index 1607e8e80a5..a982c35c748 100644 --- a/llvm/lib/Transforms/Scalar/ObjCARC.cpp +++ b/llvm/lib/Transforms/Scalar/ObjCARC.cpp @@ -1716,7 +1716,8 @@ namespace { void OptimizeRetainCall(Function &F, Instruction *Retain); bool OptimizeRetainRVCall(Function &F, Instruction *RetainRV); - void OptimizeAutoreleaseRVCall(Function &F, Instruction *AutoreleaseRV); + void OptimizeAutoreleaseRVCall(Function &F, Instruction *AutoreleaseRV, + InstructionClass &Class); void OptimizeIndividualCalls(Function &F); void CheckForCFGHazards(const BasicBlock *BB, @@ -2289,7 +2290,8 @@ ObjCARCOpt::OptimizeRetainRVCall(Function &F, Instruction *RetainRV) { /// OptimizeAutoreleaseRVCall - Turn objc_autoreleaseReturnValue into /// objc_autorelease if the result is not used as a return value. void -ObjCARCOpt::OptimizeAutoreleaseRVCall(Function &F, Instruction *AutoreleaseRV) { +ObjCARCOpt::OptimizeAutoreleaseRVCall(Function &F, Instruction *AutoreleaseRV, + InstructionClass &Class) { // Check for a return of the pointer value. const Value *Ptr = GetObjCArg(AutoreleaseRV); SmallVector<const Value *, 2> Users; @@ -2320,6 +2322,7 @@ ObjCARCOpt::OptimizeAutoreleaseRVCall(Function &F, Instruction *AutoreleaseRV) { AutoreleaseRVCI-> setCalledFunction(getAutoreleaseCallee(F.getParent())); AutoreleaseRVCI->setTailCall(false); // Never tail call objc_autorelease. + Class = IC_Autorelease; DEBUG(dbgs() << " New: " << *AutoreleaseRV << "\n"); @@ -2417,7 +2420,7 @@ void ObjCARCOpt::OptimizeIndividualCalls(Function &F) { continue; break; case IC_AutoreleaseRV: - OptimizeAutoreleaseRVCall(F, Inst); + OptimizeAutoreleaseRVCall(F, Inst, Class); break; } |

