[llvm-commits] [llvm] r172288 - in /llvm/trunk: lib/Transforms/Scalar/ObjCARC.cpp test/Transforms/ObjCARC/tail-call-invariant-enforcement.ll
Michael Gottesman
mgottesman at apple.com
Fri Jan 11 17:25:19 PST 2013
Author: mgottesman
Date: Fri Jan 11 19:25:19 2013
New Revision: 172288
URL: http://llvm.org/viewvc/llvm-project?rev=172288&view=rev
Log:
Fixed bug in ObjCARC where we were changing a call from objc_autoreleaseRV => objc_autorelease but were not updating the InstructionClass to IC_Autorelease.
Modified:
llvm/trunk/lib/Transforms/Scalar/ObjCARC.cpp
llvm/trunk/test/Transforms/ObjCARC/tail-call-invariant-enforcement.ll
Modified: llvm/trunk/lib/Transforms/Scalar/ObjCARC.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/ObjCARC.cpp?rev=172288&r1=172287&r2=172288&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/ObjCARC.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/ObjCARC.cpp Fri Jan 11 19:25:19 2013
@@ -1716,7 +1716,8 @@
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 @@
/// 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 @@
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 @@
continue;
break;
case IC_AutoreleaseRV:
- OptimizeAutoreleaseRVCall(F, Inst);
+ OptimizeAutoreleaseRVCall(F, Inst, Class);
break;
}
Modified: llvm/trunk/test/Transforms/ObjCARC/tail-call-invariant-enforcement.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/ObjCARC/tail-call-invariant-enforcement.ll?rev=172288&r1=172287&r2=172288&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/ObjCARC/tail-call-invariant-enforcement.ll (original)
+++ llvm/trunk/test/Transforms/ObjCARC/tail-call-invariant-enforcement.ll Fri Jan 11 19:25:19 2013
@@ -67,7 +67,7 @@
; @objc_autorelease, ensure that the tail call is removed.
define i8* @test5(i8* %x) {
entry:
- ; TMP: %tmp0 = call i8* @objc_autorelease(i8* %x)
+ ; CHECK: %tmp0 = call i8* @objc_autorelease(i8* %x)
%tmp0 = tail call i8* @objc_autoreleaseReturnValue(i8* %x)
ret i8* %tmp0
}
More information about the llvm-commits
mailing list