[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