diff --git a/lib/Transforms/ObjCARC/ObjCARCOpts.cpp b/lib/Transforms/ObjCARC/ObjCARCOpts.cpp index 6d4ff659b40..0385de5095e 100644 --- a/lib/Transforms/ObjCARC/ObjCARCOpts.cpp +++ b/lib/Transforms/ObjCARC/ObjCARCOpts.cpp @@ -674,7 +674,9 @@ namespace { SmallVector Succs; public: - BBState() : TopDownPathCount(0), BottomUpPathCount(0) {} + static const unsigned OverflowOccurredValue; + + BBState() : TopDownPathCount(0), BottomUpPathCount(0) { } typedef MapTy::iterator ptr_iterator; typedef MapTy::const_iterator ptr_const_iterator; @@ -745,13 +747,15 @@ namespace { /// Returns true if overflow occured. Returns false if overflow did not /// occur. bool GetAllPathCountWithOverflow(unsigned &PathCount) const { - assert(TopDownPathCount != 0); - assert(BottomUpPathCount != 0); + if (TopDownPathCount == OverflowOccurredValue || + BottomUpPathCount == OverflowOccurredValue) + return true; unsigned long long Product = (unsigned long long)TopDownPathCount*BottomUpPathCount; - PathCount = Product; - // Overflow occured if any of the upper bits of Product are set. - return Product >> 32; + // Overflow occured if any of the upper bits of Product are set or if all + // the lower bits of Product are all set. + return (Product >> 32) || + ((PathCount = Product) == OverflowOccurredValue); } // Specialized CFG utilities. @@ -766,6 +770,8 @@ namespace { bool isExit() const { return Succs.empty(); } }; + + const unsigned BBState::OverflowOccurredValue = 0xffffffff; } void BBState::InitFromPred(const BBState &Other) { @@ -781,13 +787,25 @@ void BBState::InitFromSucc(const BBState &Other) { /// The top-down traversal uses this to merge information about predecessors to /// form the initial state for a new block. void BBState::MergePred(const BBState &Other) { + if (TopDownPathCount == OverflowOccurredValue) + return; + // Other.TopDownPathCount can be 0, in which case it is either dead or a // loop backedge. Loop backedges are special. TopDownPathCount += Other.TopDownPathCount; + // In order to be consistent, we clear the top down pointers when by adding + // TopDownPathCount becomes OverflowOccurredValue even though "true" overflow + // has not occured. + if (TopDownPathCount == OverflowOccurredValue) { + clearTopDownPointers(); + return; + } + // Check for overflow. If we have overflow, fall back to conservative // behavior. if (TopDownPathCount < Other.TopDownPathCount) { + TopDownPathCount = OverflowOccurredValue; clearTopDownPointers(); return; } @@ -813,13 +831,25 @@ void BBState::MergePred(const BBState &Other) { /// The bottom-up traversal uses this to merge information about successors to /// form the initial state for a new block. void BBState::MergeSucc(const BBState &Other) { + if (BottomUpPathCount == OverflowOccurredValue) + return; + // Other.BottomUpPathCount can be 0, in which case it is either dead or a // loop backedge. Loop backedges are special. BottomUpPathCount += Other.BottomUpPathCount; + // In order to be consistent, we clear the top down pointers when by adding + // BottomUpPathCount becomes OverflowOccurredValue even though "true" overflow + // has not occured. + if (BottomUpPathCount == OverflowOccurredValue) { + clearBottomUpPointers(); + return; + } + // Check for overflow. If we have overflow, fall back to conservative // behavior. if (BottomUpPathCount < Other.BottomUpPathCount) { + BottomUpPathCount = OverflowOccurredValue; clearBottomUpPointers(); return; } @@ -2526,9 +2556,12 @@ ObjCARCOpt::ConnectTDBUTraversals(DenseMap // If we overflow when we compute the path count, don't remove/move // anything. const BBState &NRRBBState = BBStates[NewRetainRelease->getParent()]; - unsigned PathCount; + unsigned PathCount = BBState::OverflowOccurredValue; if (NRRBBState.GetAllPathCountWithOverflow(PathCount)) return false; + assert(PathCount != BBState::OverflowOccurredValue && + "PathCount at this point can not be " + "OverflowOccurredValue."); OldDelta -= PathCount; // Merge the ReleaseMetadata and IsTailCallRelease values. @@ -2558,8 +2591,12 @@ ObjCARCOpt::ConnectTDBUTraversals(DenseMap // If we overflow when we compute the path count, don't // remove/move anything. const BBState &RIPBBState = BBStates[RIP->getParent()]; + PathCount = BBState::OverflowOccurredValue; if (RIPBBState.GetAllPathCountWithOverflow(PathCount)) return false; + assert(PathCount != BBState::OverflowOccurredValue && + "PathCount at this point can not be " + "OverflowOccurredValue."); NewDelta -= PathCount; } } @@ -2595,9 +2632,12 @@ ObjCARCOpt::ConnectTDBUTraversals(DenseMap // If we overflow when we compute the path count, don't remove/move // anything. const BBState &NRRBBState = BBStates[NewReleaseRetain->getParent()]; - unsigned PathCount; + unsigned PathCount = BBState::OverflowOccurredValue; if (NRRBBState.GetAllPathCountWithOverflow(PathCount)) return false; + assert(PathCount != BBState::OverflowOccurredValue && + "PathCount at this point can not be " + "OverflowOccurredValue."); OldDelta += PathCount; OldCount += PathCount; @@ -2612,8 +2652,13 @@ ObjCARCOpt::ConnectTDBUTraversals(DenseMap // If we overflow when we compute the path count, don't // remove/move anything. const BBState &RIPBBState = BBStates[RIP->getParent()]; + + PathCount = BBState::OverflowOccurredValue; if (RIPBBState.GetAllPathCountWithOverflow(PathCount)) return false; + assert(PathCount != BBState::OverflowOccurredValue && + "PathCount at this point can not be " + "OverflowOccurredValue."); NewDelta += PathCount; NewCount += PathCount; } diff --git a/test/Transforms/ObjCARC/path-overflow.ll b/test/Transforms/ObjCARC/path-overflow.ll index 605e8605897..e62a70da20a 100644 --- a/test/Transforms/ObjCARC/path-overflow.ll +++ b/test/Transforms/ObjCARC/path-overflow.ll @@ -1,6 +1,7 @@ ; RUN: opt -objc-arc -S < %s ; rdar://12277446 ; rdar://12480535 +; rdar://14590914 ; The total number of paths grows exponentially with the number of branches, and a ; computation of this number can overflow any reasonable fixed-sized @@ -10,14 +11,20 @@ target datalayout = "e-p:32:32:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:32:64-v128:32:128-a0:0:32-n32-S32" target triple = "thumbv7-apple-ios5.0.0" -%struct.NSConstantString.11.33.55.77.99.121.143.332.1130.1340.2768 = type { i32*, i32, i8*, i32 } +%struct.NSConstantString = type { i32*, i32, i8*, i32 } +%struct.CGPoint = type { float, float } -@_unnamed_cfstring_591 = external constant %struct.NSConstantString.11.33.55.77.99.121.143.332.1130.1340.2768, section "__DATA,__cfstring" +@_unnamed_cfstring = external constant %struct.NSConstantString, section "__DATA,__cfstring" declare i8* @objc_retain(i8*) nonlazybind declare i8* @objc_retainAutoreleasedReturnValue(i8*) nonlazybind declare void @objc_release(i8*) nonlazybind declare i8* @returner() +declare i8* @objc_msgSend(i8*, i8*, ...) nonlazybind +declare void @NSLog(i8*, ...) +declare void @objc_msgSend_stret(i8*, i8*, ...) +declare i32 @__gxx_personality_sj0(...) + define hidden void @test1() { entry: @@ -30,7 +37,7 @@ msgSend.nullinit: ; preds = %entry br label %msgSend.cont msgSend.cont: ; preds = %msgSend.nullinit, %msgSend.call - %0 = bitcast %struct.NSConstantString.11.33.55.77.99.121.143.332.1130.1340.2768* @_unnamed_cfstring_591 to i8* + %0 = bitcast %struct.NSConstantString* @_unnamed_cfstring to i8* %1 = call i8* @objc_retain(i8* %0) nounwind br i1 undef, label %msgSend.nullinit33, label %msgSend.call32 @@ -853,5 +860,1058 @@ bb222: ; preds = %bb20, %bb19 ret void } +; Function Attrs: ssp +define void @test3() #1 { +entry: + %call2 = invoke i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*, i8*)*)(i8* undef, i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont unwind label %lpad + +invoke.cont: ; preds = %entry + %call5 = invoke signext i8 bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8 (i8*, i8*)*)(i8* undef, i8* undef) + to label %invoke.cont4 unwind label %lpad3 + +invoke.cont4: ; preds = %invoke.cont + br i1 undef, label %land.end, label %land.rhs + +land.rhs: ; preds = %invoke.cont4 + %call7 = invoke i32 bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i32 (i8*, i8*)*)(i8* undef, i8* undef) + to label %land.end unwind label %lpad3 + +land.end: ; preds = %land.rhs, %invoke.cont4 + invoke void (i8*, ...)* @NSLog(i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*), i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont.i unwind label %lpad.i + +invoke.cont.i: ; preds = %land.end + br i1 undef, label %invoke.cont8, label %if.then.i + +if.then.i: ; preds = %invoke.cont.i + br label %invoke.cont8 + +lpad.i: ; preds = %land.end + %tmp13 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +invoke.cont8: ; preds = %if.then.i, %invoke.cont.i + %call18 = invoke i8* (i8*, i8*, i8*, ...)* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*, i8*, ...)*)(i8* undef, i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*), i8* undef) + to label %invoke.cont17 unwind label %lpad16 + +invoke.cont17: ; preds = %invoke.cont8 + %call22 = invoke signext i8 bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8 (i8*, i8*, i8*)*)(i8* undef, i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont21 unwind label %lpad20 + +invoke.cont21: ; preds = %invoke.cont17 + invoke void (i8*, ...)* @NSLog(i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*), i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont.i1980 unwind label %lpad.i1982 + +invoke.cont.i1980: ; preds = %invoke.cont21 + br i1 undef, label %invoke.cont24, label %if.then.i1981 + +if.then.i1981: ; preds = %invoke.cont.i1980 + br label %invoke.cont24 + +lpad.i1982: ; preds = %invoke.cont21 + %tmp28 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +invoke.cont24: ; preds = %if.then.i1981, %invoke.cont.i1980 + %call37 = invoke signext i8 bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8 (i8*, i8*)*)(i8* undef, i8* undef) + to label %invoke.cont36 unwind label %lpad35 + +invoke.cont36: ; preds = %invoke.cont24 + br i1 undef, label %land.end43, label %land.rhs39 + +land.rhs39: ; preds = %invoke.cont36 + %call41 = invoke signext i8 bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8 (i8*, i8*, i8*)*)(i8* undef, i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %land.end43 unwind label %lpad35 + +land.end43: ; preds = %land.rhs39, %invoke.cont36 + invoke void (i8*, ...)* @NSLog(i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*), i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont.i1986 unwind label %lpad.i1988 + +invoke.cont.i1986: ; preds = %land.end43 + br i1 undef, label %invoke.cont44, label %if.then.i1987 + +if.then.i1987: ; preds = %invoke.cont.i1986 + br label %invoke.cont44 + +lpad.i1988: ; preds = %land.end43 + %tmp42 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +invoke.cont44: ; preds = %if.then.i1987, %invoke.cont.i1986 + %call53 = invoke i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*, i8*)*)(i8* undef, i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont52 unwind label %lpad51 + +invoke.cont52: ; preds = %invoke.cont44 + br i1 undef, label %land.end70, label %land.rhs58 + +land.rhs58: ; preds = %invoke.cont52 + %call63 = invoke i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*, i32)*)(i8* undef, i8* undef, i32 42) + to label %invoke.cont62 unwind label %lpad61 + +invoke.cont62: ; preds = %land.rhs58 + %call68 = invoke signext i8 bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8 (i8*, i8*, i8*)*)(i8* undef, i8* undef, i8* undef) + to label %land.end70 unwind label %lpad66.body.thread + +land.end70: ; preds = %invoke.cont62, %invoke.cont52 + invoke void (i8*, ...)* @NSLog(i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*), i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont.i1992 unwind label %lpad66.body + +invoke.cont.i1992: ; preds = %land.end70 + br i1 undef, label %invoke.cont71, label %if.then.i1993 + +if.then.i1993: ; preds = %invoke.cont.i1992 + br label %invoke.cont71 + +invoke.cont71: ; preds = %if.then.i1993, %invoke.cont.i1992 + invoke void (i8*, ...)* @NSLog(i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*), i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont.i1998 unwind label %lpad.i2000 + +invoke.cont.i1998: ; preds = %invoke.cont71 + br i1 undef, label %invoke.cont91, label %if.then.i1999 + +if.then.i1999: ; preds = %invoke.cont.i1998 + br label %invoke.cont91 + +lpad.i2000: ; preds = %invoke.cont71 + %tmp74 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + br label %ehcleanup102 + +invoke.cont91: ; preds = %if.then.i1999, %invoke.cont.i1998 + %call96 = invoke i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* undef, i8* undef) + to label %invoke.cont95 unwind label %lpad94 + +invoke.cont95: ; preds = %invoke.cont91 + %call98 = invoke signext i8 bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8 (i8*, i8*, i8*)*)(i8* undef, i8* undef, i8* %call96) + to label %invoke.cont97 unwind label %lpad94 + +invoke.cont97: ; preds = %invoke.cont95 + invoke void (i8*, ...)* @NSLog(i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*), i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont.i2004 unwind label %lpad.i2006 + +invoke.cont.i2004: ; preds = %invoke.cont97 + br i1 undef, label %invoke.cont100, label %if.then.i2005 + +if.then.i2005: ; preds = %invoke.cont.i2004 + br label %invoke.cont100 + +lpad.i2006: ; preds = %invoke.cont97 + %tmp82 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +invoke.cont100: ; preds = %if.then.i2005, %invoke.cont.i2004 + invoke void bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to void (i8*, i8*, i8*, i8*)*)(i8* undef, i8* undef, i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont110 unwind label %lpad109 + +invoke.cont110: ; preds = %invoke.cont100 + invoke void (i8*, ...)* @NSLog(i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*), i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont.i2010 unwind label %lpad.i2012 + +invoke.cont.i2010: ; preds = %invoke.cont110 + br i1 undef, label %invoke.cont117, label %if.then.i2011 + +if.then.i2011: ; preds = %invoke.cont.i2010 + br label %invoke.cont117 + +lpad.i2012: ; preds = %invoke.cont110 + %tmp98 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +invoke.cont117: ; preds = %if.then.i2011, %invoke.cont.i2010 + invoke void (i8*, ...)* @NSLog(i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*), i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont.i2022 unwind label %lpad156.body + +lpad: ; preds = %entry + %tmp118 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + br label %ehcleanup + +lpad3: ; preds = %land.rhs, %invoke.cont + %tmp119 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + br label %ehcleanup + +ehcleanup: ; preds = %lpad3, %lpad + unreachable + +lpad16: ; preds = %invoke.cont8 + %tmp121 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + br label %ehcleanup26 + +lpad20: ; preds = %invoke.cont17 + %tmp122 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + br label %ehcleanup26 + +ehcleanup26: ; preds = %lpad20, %lpad16 + unreachable + +lpad35: ; preds = %land.rhs39, %invoke.cont24 + %tmp124 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +lpad51: ; preds = %invoke.cont44 + %tmp125 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +lpad61: ; preds = %land.rhs58 + %tmp127 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +lpad66.body.thread: ; preds = %invoke.cont62 + %tmp128 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +lpad66.body: ; preds = %land.end70 + %tmp129 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +lpad94: ; preds = %invoke.cont95, %invoke.cont91 + %tmp133 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + br label %ehcleanup102 + +ehcleanup102: ; preds = %lpad94, %lpad.i2000 + unreachable + +lpad109: ; preds = %invoke.cont100 + %tmp134 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +invoke.cont.i2022: ; preds = %invoke.cont117 + br i1 undef, label %invoke.cont157, label %if.then.i2023 + +if.then.i2023: ; preds = %invoke.cont.i2022 + br label %invoke.cont157 + +invoke.cont157: ; preds = %if.then.i2023, %invoke.cont.i2022 + invoke void (i8*, ...)* @NSLog(i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*), i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont.i2028 unwind label %lpad164.body + +invoke.cont.i2028: ; preds = %invoke.cont157 + br i1 undef, label %invoke.cont165, label %if.then.i2029 + +if.then.i2029: ; preds = %invoke.cont.i2028 + br label %invoke.cont165 + +invoke.cont165: ; preds = %if.then.i2029, %invoke.cont.i2028 + invoke void bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to void (i8*, i8*, void (i8*, i8*)*)*)(i8* undef, i8* undef, void (i8*, i8*)* undef) + to label %invoke.cont184 unwind label %lpad183 + +invoke.cont184: ; preds = %invoke.cont165 + %call186 = invoke i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*, i8*)*)(i8* undef, i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont185 unwind label %lpad183 + +invoke.cont185: ; preds = %invoke.cont184 + invoke void (i8*, ...)* @NSLog(i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*), i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont.i2034 unwind label %lpad.i2036 + +invoke.cont.i2034: ; preds = %invoke.cont185 + br i1 undef, label %invoke.cont190, label %if.then.i2035 + +if.then.i2035: ; preds = %invoke.cont.i2034 + br label %invoke.cont190 + +lpad.i2036: ; preds = %invoke.cont185 + %tmp168 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + br label %lpad183.body + +invoke.cont190: ; preds = %if.then.i2035, %invoke.cont.i2034 + invoke void bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to void (i8*, i8*, i8*, i8*)*)(i8* undef, i8* undef, i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont197 unwind label %lpad196 + +invoke.cont197: ; preds = %invoke.cont190 + %call202 = invoke i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*, i8*)*)(i8* undef, i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont201 unwind label %lpad200 + +invoke.cont201: ; preds = %invoke.cont197 + %call205 = invoke signext i8 bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8 (i8*, i8*, i8*)*)(i8* undef, i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont204 unwind label %lpad203 + +invoke.cont204: ; preds = %invoke.cont201 + invoke void (i8*, ...)* @NSLog(i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*), i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont.i2040 unwind label %lpad.i2042 + +invoke.cont.i2040: ; preds = %invoke.cont204 + br i1 undef, label %invoke.cont207, label %if.then.i2041 + +if.then.i2041: ; preds = %invoke.cont.i2040 + br label %invoke.cont207 + +lpad.i2042: ; preds = %invoke.cont204 + %tmp181 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +invoke.cont207: ; preds = %if.then.i2041, %invoke.cont.i2040 + %call209 = invoke i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* undef, i8* undef) + to label %invoke.cont208 unwind label %lpad203 + +invoke.cont208: ; preds = %invoke.cont207 + invoke void (i8*, ...)* @NSLog(i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*), i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont.i2046 unwind label %lpad212.body + +invoke.cont.i2046: ; preds = %invoke.cont208 + br i1 undef, label %invoke.cont213, label %if.then.i2047 + +if.then.i2047: ; preds = %invoke.cont.i2046 + br label %invoke.cont213 + +invoke.cont213: ; preds = %if.then.i2047, %invoke.cont.i2046 + invoke void bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to void (i8*, i8*, i8*, i8*)*)(i8* undef, i8* undef, i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont221 unwind label %lpad220 + +invoke.cont221: ; preds = %invoke.cont213 + %call229 = invoke signext i8 bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8 (i8*, i8*, i8*)*)(i8* undef, i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont228 unwind label %lpad227 + +invoke.cont228: ; preds = %invoke.cont221 + invoke void (i8*, ...)* @NSLog(i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*), i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont.i2052 unwind label %lpad.i2054 + +invoke.cont.i2052: ; preds = %invoke.cont228 + br i1 undef, label %invoke.cont231, label %if.then.i2053 + +if.then.i2053: ; preds = %invoke.cont.i2052 + br label %invoke.cont231 + +lpad.i2054: ; preds = %invoke.cont228 + %tmp198 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +invoke.cont231: ; preds = %if.then.i2053, %invoke.cont.i2052 + %call233 = invoke i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* undef, i8* undef) + to label %invoke.cont232 unwind label %lpad227 + +invoke.cont232: ; preds = %invoke.cont231 + invoke void (i8*, ...)* @NSLog(i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*), i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont.i2058 unwind label %lpad236.body + +invoke.cont.i2058: ; preds = %invoke.cont232 + br i1 undef, label %invoke.cont237, label %if.then.i2059 + +if.then.i2059: ; preds = %invoke.cont.i2058 + br label %invoke.cont237 + +invoke.cont237: ; preds = %if.then.i2059, %invoke.cont.i2058 + %call246 = invoke i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*, i8*)*)(i8* undef, i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont245 unwind label %lpad244 + +invoke.cont245: ; preds = %invoke.cont237 + %call248 = invoke i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*, i32)*)(i8* undef, i8* undef, i32 13) + to label %invoke.cont247 unwind label %lpad244 + +invoke.cont247: ; preds = %invoke.cont245 + %call251 = invoke i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*, i32)*)(i8* undef, i8* undef, i32 2) + to label %invoke.cont250 unwind label %lpad249 + +invoke.cont250: ; preds = %invoke.cont247 + %call254 = invoke i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*, i32)*)(i8* undef, i8* undef, i32 7) + to label %invoke.cont253 unwind label %lpad252 + +invoke.cont253: ; preds = %invoke.cont250 + %call257 = invoke i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*, i8**, i32)*)(i8* undef, i8* undef, i8** undef, i32 3) + to label %invoke.cont256 unwind label %lpad255 + +invoke.cont256: ; preds = %invoke.cont253 + %call260 = invoke i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*, i8*, i8*)*)(i8* undef, i8* undef, i8* undef, i8* undef) + to label %invoke.cont259 unwind label %lpad258 + +invoke.cont259: ; preds = %invoke.cont256 + %call267 = invoke i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*, i8*)*)(i8* undef, i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont266 unwind label %lpad265 + +invoke.cont266: ; preds = %invoke.cont259 + %call275 = invoke i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*, i8*)*)(i8* undef, i8* undef, i8* undef) + to label %invoke.cont274 unwind label %lpad273 + +invoke.cont274: ; preds = %invoke.cont266 + %call279 = invoke i32 bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i32 (i8*, i8*)*)(i8* undef, i8* undef) + to label %invoke.cont278 unwind label %lpad277 + +invoke.cont278: ; preds = %invoke.cont274 + invoke void (i8*, ...)* @NSLog(i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*), i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont.i2064 unwind label %lpad.i2066 + +invoke.cont.i2064: ; preds = %invoke.cont278 + br i1 undef, label %invoke.cont281, label %if.then.i2065 + +if.then.i2065: ; preds = %invoke.cont.i2064 + br label %invoke.cont281 + +lpad.i2066: ; preds = %invoke.cont278 + %tmp253 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +invoke.cont281: ; preds = %if.then.i2065, %invoke.cont.i2064 + %call291 = invoke i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*, i8*)*)(i8* undef, i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont290 unwind label %lpad289 + +invoke.cont290: ; preds = %invoke.cont281 + %call303 = invoke i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*, i32)*)(i8* undef, i8* undef, i32 8) + to label %invoke.cont302 unwind label %lpad301 + +invoke.cont302: ; preds = %invoke.cont290 + %call310 = invoke i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*, double)*)(i8* undef, i8* undef, double 5.000000e-01) + to label %invoke.cont309 unwind label %lpad308 + +invoke.cont309: ; preds = %invoke.cont302 + %call313 = invoke i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*, i32)*)(i8* undef, i8* undef, i32 42) + to label %invoke.cont312 unwind label %lpad311 + +invoke.cont312: ; preds = %invoke.cont309 + %call316 = invoke i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*, i8**, i8**, i32)*)(i8* undef, i8* undef, i8** undef, i8** undef, i32 2) + to label %invoke.cont315 unwind label %lpad314 + +invoke.cont315: ; preds = %invoke.cont312 + %call322 = invoke i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*, i8*)*)(i8* undef, i8* undef, i8* undef) + to label %invoke.cont321 unwind label %lpad320 + +invoke.cont321: ; preds = %invoke.cont315 + br i1 undef, label %land.end344, label %land.rhs335 + +land.rhs335: ; preds = %invoke.cont321 + %call342 = invoke signext i8 bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8 (i8*, i8*, i8*)*)(i8* undef, i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %land.end344 unwind label %lpad340.body.thread + +land.end344: ; preds = %land.rhs335, %invoke.cont321 + invoke void (i8*, ...)* @NSLog(i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*), i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont.i2070 unwind label %lpad340.body + +invoke.cont.i2070: ; preds = %land.end344 + br i1 undef, label %invoke.cont345, label %if.then.i2071 + +if.then.i2071: ; preds = %invoke.cont.i2070 + br label %invoke.cont345 + +invoke.cont345: ; preds = %if.then.i2071, %invoke.cont.i2070 + %call362 = invoke i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*, i8*)*)(i8* undef, i8* undef, i8* undef) + to label %invoke.cont361 unwind label %lpad360 + +invoke.cont361: ; preds = %invoke.cont345 + %call365 = invoke i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*, i8*)*)(i8* undef, i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont364 unwind label %lpad363 + +invoke.cont364: ; preds = %invoke.cont361 + %call371 = invoke i32 bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i32 (i8*, i8*)*)(i8* undef, i8* undef) + to label %invoke.cont370 unwind label %lpad369 + +invoke.cont370: ; preds = %invoke.cont364 + invoke void (i8*, ...)* @NSLog(i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*), i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont.i2076 unwind label %lpad.i2078 + +invoke.cont.i2076: ; preds = %invoke.cont370 + br i1 undef, label %invoke.cont373, label %if.then.i2077 + +if.then.i2077: ; preds = %invoke.cont.i2076 + br label %invoke.cont373 + +lpad.i2078: ; preds = %invoke.cont370 + %tmp340 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +invoke.cont373: ; preds = %if.then.i2077, %invoke.cont.i2076 + %call377 = invoke i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*, i32, i8*)*)(i8* undef, i8* undef, i32 42, i8* undef) + to label %invoke.cont376 unwind label %lpad363 + +invoke.cont376: ; preds = %invoke.cont373 + invoke void bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to void (i8*, i8*, i8*, i32)*)(i8* undef, i8* undef, i8* undef, i32 5) + to label %invoke.cont382 unwind label %lpad381 + +invoke.cont382: ; preds = %invoke.cont376 + %call384 = invoke i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*, i8*)*)(i8* undef, i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont383 unwind label %lpad381 + +invoke.cont383: ; preds = %invoke.cont382 + invoke void (i8*, ...)* @NSLog(i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*), i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont.i2082 unwind label %lpad.i2084 + +invoke.cont.i2082: ; preds = %invoke.cont383 + br i1 undef, label %invoke.cont392, label %if.then.i2083 + +if.then.i2083: ; preds = %invoke.cont.i2082 + br label %invoke.cont392 + +lpad.i2084: ; preds = %invoke.cont383 + %tmp360 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +invoke.cont392: ; preds = %if.then.i2083, %invoke.cont.i2082 + invoke void bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to void (i8*, i8*, i8*, i32)*)(i8* undef, i8* undef, i8* undef, i32 -2) + to label %invoke.cont395 unwind label %lpad381 + +invoke.cont395: ; preds = %invoke.cont392 + %call397 = invoke i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*, i8*)*)(i8* undef, i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont396 unwind label %lpad381 + +invoke.cont396: ; preds = %invoke.cont395 + %call400 = invoke i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* undef, i8* undef) + to label %invoke.cont399 unwind label %lpad398 + +invoke.cont399: ; preds = %invoke.cont396 + %call403 = invoke i32 bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i32 (i8*, i8*)*)(i8* undef, i8* undef) + to label %invoke.cont402 unwind label %lpad401 + +invoke.cont402: ; preds = %invoke.cont399 + invoke void (i8*, ...)* @NSLog(i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*), i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont.i2088 unwind label %lpad.i2090 + +invoke.cont.i2088: ; preds = %invoke.cont402 + br i1 undef, label %invoke.cont405, label %if.then.i2089 + +if.then.i2089: ; preds = %invoke.cont.i2088 + br label %invoke.cont405 + +lpad.i2090: ; preds = %invoke.cont402 + %tmp370 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +invoke.cont405: ; preds = %if.then.i2089, %invoke.cont.i2088 + invoke void bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to void (i8*, i8*, i8*, i32)*)(i8* undef, i8* undef, i8* undef, i32 -1) + to label %invoke.cont408 unwind label %lpad381 + +invoke.cont408: ; preds = %invoke.cont405 + %call410 = invoke i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*, i8*)*)(i8* undef, i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont409 unwind label %lpad381 + +invoke.cont409: ; preds = %invoke.cont408 + %call413 = invoke i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* undef, i8* undef) + to label %invoke.cont412 unwind label %lpad411 + +invoke.cont412: ; preds = %invoke.cont409 + invoke void (i8*, ...)* @NSLog(i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*), i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont.i2094 unwind label %lpad.i2096 + +invoke.cont.i2094: ; preds = %invoke.cont412 + br i1 undef, label %invoke.cont418, label %if.then.i2095 + +if.then.i2095: ; preds = %invoke.cont.i2094 + br label %invoke.cont418 + +lpad.i2096: ; preds = %invoke.cont412 + %tmp380 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +invoke.cont418: ; preds = %if.then.i2095, %invoke.cont.i2094 + invoke void bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to void (i8*, i8*, i8*, i32)*)(i8* undef, i8* undef, i8* undef, i32 0) + to label %invoke.cont422 unwind label %lpad381 + +invoke.cont422: ; preds = %invoke.cont418 + %call424 = invoke i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*, i8*)*)(i8* undef, i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont423 unwind label %lpad381 + +invoke.cont423: ; preds = %invoke.cont422 + %call427 = invoke i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* undef, i8* undef) + to label %invoke.cont426 unwind label %lpad425 + +invoke.cont426: ; preds = %invoke.cont423 + %call430 = invoke i32 bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i32 (i8*, i8*)*)(i8* undef, i8* undef) + to label %invoke.cont429 unwind label %lpad428 + +invoke.cont429: ; preds = %invoke.cont426 + invoke void (i8*, ...)* @NSLog(i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*), i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont.i2100 unwind label %lpad.i2102 + +invoke.cont.i2100: ; preds = %invoke.cont429 + br i1 undef, label %invoke.cont432, label %if.then.i2101 + +if.then.i2101: ; preds = %invoke.cont.i2100 + br label %invoke.cont432 + +lpad.i2102: ; preds = %invoke.cont429 + %tmp390 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +invoke.cont432: ; preds = %if.then.i2101, %invoke.cont.i2100 + %call436 = invoke i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*, i32)*)(i8* undef, i8* undef, i32 0) + to label %invoke.cont435 unwind label %lpad381 + +invoke.cont435: ; preds = %invoke.cont432 + invoke void (i8*, ...)* @NSLog(i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*), i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont.i2106 unwind label %lpad.i2108 + +invoke.cont.i2106: ; preds = %invoke.cont435 + %call444 = invoke i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*, i32)*)(i8* undef, i8* undef, i32 5) + to label %invoke.cont443 unwind label %lpad381 + +lpad.i2108: ; preds = %invoke.cont435 + %tmp396 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +invoke.cont443: ; preds = %invoke.cont.i2106 + invoke void (i8*, ...)* @NSLog(i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*), i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont.i2112 unwind label %lpad.i2114 + +invoke.cont.i2112: ; preds = %invoke.cont443 + br i1 undef, label %invoke.cont449, label %if.then.i2113 + +if.then.i2113: ; preds = %invoke.cont.i2112 + br label %invoke.cont449 + +lpad.i2114: ; preds = %invoke.cont443 + %tmp402 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +invoke.cont449: ; preds = %if.then.i2113, %invoke.cont.i2112 + %call453 = invoke i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*, i32)*)(i8* undef, i8* undef, i32 -2) + to label %invoke.cont452 unwind label %lpad381 + +invoke.cont452: ; preds = %invoke.cont449 + %call456 = invoke i32 bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i32 (i8*, i8*)*)(i8* undef, i8* undef) + to label %invoke.cont455 unwind label %lpad454 + +invoke.cont455: ; preds = %invoke.cont452 + invoke void (i8*, ...)* @NSLog(i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*), i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont.i2118 unwind label %lpad.i2120 + +invoke.cont.i2118: ; preds = %invoke.cont455 + br i1 undef, label %invoke.cont458, label %if.then.i2119 + +if.then.i2119: ; preds = %invoke.cont.i2118 + br label %invoke.cont458 + +lpad.i2120: ; preds = %invoke.cont455 + %tmp408 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +invoke.cont458: ; preds = %if.then.i2119, %invoke.cont.i2118 + %call461 = invoke i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*, i32)*)(i8* undef, i8* undef, i32 -1) + to label %invoke.cont460 unwind label %lpad381 + +invoke.cont460: ; preds = %invoke.cont458 + invoke void (i8*, ...)* @NSLog(i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*), i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont.i2124 unwind label %lpad.i2126 + +invoke.cont.i2124: ; preds = %invoke.cont460 + br i1 undef, label %invoke.cont466, label %if.then.i2125 + +if.then.i2125: ; preds = %invoke.cont.i2124 + br label %invoke.cont466 + +lpad.i2126: ; preds = %invoke.cont460 + %tmp414 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + br label %ehcleanup477 + +invoke.cont466: ; preds = %if.then.i2125, %invoke.cont.i2124 + %call470 = invoke i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*, i32)*)(i8* undef, i8* undef, i32 0) + to label %invoke.cont469 unwind label %lpad381 + +invoke.cont469: ; preds = %invoke.cont466 + invoke void (i8*, ...)* @NSLog(i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*), i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont.i2130 unwind label %lpad.i2132 + +invoke.cont.i2130: ; preds = %invoke.cont469 + br i1 undef, label %invoke.cont475, label %if.then.i2131 + +if.then.i2131: ; preds = %invoke.cont.i2130 + br label %invoke.cont475 + +lpad.i2132: ; preds = %invoke.cont469 + %tmp420 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + br label %ehcleanup477 + +invoke.cont475: ; preds = %if.then.i2131, %invoke.cont.i2130 + %call491 = invoke i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*, i32)*)(i8* undef, i8* undef, i32 1) + to label %invoke.cont490 unwind label %lpad489 + +invoke.cont490: ; preds = %invoke.cont475 + invoke void bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to void (i8*, i8*, i8*, i8*)*)(i8* undef, i8* undef, i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont499 unwind label %lpad498 + +invoke.cont499: ; preds = %invoke.cont490 + %call504 = invoke i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*, i8*)*)(i8* undef, i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont503 unwind label %lpad489 + +invoke.cont503: ; preds = %invoke.cont499 + %call507 = invoke i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*, i32)*)(i8* undef, i8* undef, i32 3) + to label %invoke.cont506 unwind label %lpad505 + +invoke.cont506: ; preds = %invoke.cont503 + invoke void bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to void (i8*, i8*, i8*, i8*)*)(i8* undef, i8* undef, i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont509 unwind label %lpad508 + +invoke.cont509: ; preds = %invoke.cont506 + %call513 = invoke i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*, i8*)*)(i8* undef, i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont512 unwind label %lpad489 + +invoke.cont512: ; preds = %invoke.cont509 + br i1 undef, label %msgSend.null-receiver, label %msgSend.call + +msgSend.call: ; preds = %invoke.cont512 + invoke void bitcast (void (i8*, i8*, ...)* @objc_msgSend_stret to void (%struct.CGPoint*, i8*, i8*)*)(%struct.CGPoint* sret undef, i8* undef, i8* undef) + to label %msgSend.cont unwind label %lpad514 + +msgSend.null-receiver: ; preds = %invoke.cont512 + br label %msgSend.cont + +msgSend.cont: ; preds = %msgSend.null-receiver, %msgSend.call + invoke void (i8*, ...)* @NSLog(i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*), i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont.i2136 unwind label %lpad.i2138 + +invoke.cont.i2136: ; preds = %msgSend.cont + br i1 undef, label %invoke.cont521, label %if.then.i2137 + +if.then.i2137: ; preds = %invoke.cont.i2136 + br label %invoke.cont521 + +lpad.i2138: ; preds = %msgSend.cont + %tmp468 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +invoke.cont521: ; preds = %if.then.i2137, %invoke.cont.i2136 + invoke void bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to void (i8*, i8*, i8*, i8*)*)(i8* undef, i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*), i8* undef) + to label %invoke.cont528 unwind label %lpad527 + +invoke.cont528: ; preds = %invoke.cont521 + %call532 = invoke i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*, i8*)*)(i8* undef, i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont531 unwind label %lpad489 + +invoke.cont531: ; preds = %invoke.cont528 + %call535 = invoke i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* undef, i8* undef) + to label %invoke.cont534 unwind label %lpad533 + +invoke.cont534: ; preds = %invoke.cont531 + invoke void (i8*, ...)* @NSLog(i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*), i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont.i2142 unwind label %lpad.i2144 + +invoke.cont.i2142: ; preds = %invoke.cont534 + br i1 undef, label %invoke.cont540, label %if.then.i2143 + +if.then.i2143: ; preds = %invoke.cont.i2142 + br label %invoke.cont540 + +lpad.i2144: ; preds = %invoke.cont534 + %tmp486 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +invoke.cont540: ; preds = %if.then.i2143, %invoke.cont.i2142 + %call544 = invoke i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*, i32)*)(i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*), i8* undef, i32 3) + to label %invoke.cont543 unwind label %lpad489 + +invoke.cont543: ; preds = %invoke.cont540 + invoke void bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to void (i8*, i8*, i8*, i8*)*)(i8* undef, i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*), i8* undef) + to label %invoke.cont546 unwind label %lpad545 + +invoke.cont546: ; preds = %invoke.cont543 + %call549 = invoke i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*, i8*)*)(i8* undef, i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont548 unwind label %lpad489 + +invoke.cont548: ; preds = %invoke.cont546 + %call555 = invoke signext i8 bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8 (i8*, i8*, i8*)*)(i8* undef, i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont554 unwind label %lpad553 + +invoke.cont554: ; preds = %invoke.cont548 + %tmp499 = call i8* @objc_retain(i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) #3 + invoke void (i8*, ...)* @NSLog(i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*), i8* %tmp499, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont.i2148 unwind label %lpad.i2150 + +invoke.cont.i2148: ; preds = %invoke.cont554 + call void @objc_release(i8* %tmp499) #3, !clang.imprecise_release !0 + invoke void bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to void (i8*, i8*, i8*, i8*)*)(i8* undef, i8* undef, i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont566 unwind label %lpad565 + +lpad.i2150: ; preds = %invoke.cont554 + %tmp500 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + call void @objc_release(i8* %tmp499) #3, !clang.imprecise_release !0 + unreachable + +invoke.cont566: ; preds = %invoke.cont.i2148 + invoke void bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to void (i8*, i8*, i8*, i8*)*)(i8* undef, i8* undef, i8* undef, i8* bitcast (%struct.NSConstantString* @_unnamed_cfstring to i8*)) + to label %invoke.cont572 unwind label %lpad571 + +invoke.cont572: ; preds = %invoke.cont566 + %call582 = invoke i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* undef, i8* undef) + to label %invoke.cont581 unwind label %lpad580 + +invoke.cont581: ; preds = %invoke.cont572 + unreachable + +lpad156.body: ; preds = %invoke.cont117 + %tmp1157 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +lpad164.body: ; preds = %invoke.cont157 + %tmp1158 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +lpad183: ; preds = %invoke.cont184, %invoke.cont165 + %tmp1159 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + br label %lpad183.body + +lpad183.body: ; preds = %lpad183, %lpad.i2036 + unreachable + +lpad196: ; preds = %invoke.cont190 + %tmp1160 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +lpad200: ; preds = %invoke.cont197 + %tmp1161 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +lpad203: ; preds = %invoke.cont207, %invoke.cont201 + %tmp1162 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +lpad212.body: ; preds = %invoke.cont208 + %tmp1163 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +lpad220: ; preds = %invoke.cont213 + %tmp1164 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + br label %eh.resume + +lpad227: ; preds = %invoke.cont231, %invoke.cont221 + %tmp1166 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + br label %ehcleanup239 + +lpad236.body: ; preds = %invoke.cont232 + %tmp1167 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + br label %ehcleanup239 + +ehcleanup239: ; preds = %lpad236.body, %lpad227 + unreachable + +lpad244: ; preds = %invoke.cont245, %invoke.cont237 + %tmp1168 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +lpad249: ; preds = %invoke.cont247 + %tmp1169 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +lpad252: ; preds = %invoke.cont250 + %tmp1170 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + br label %ehcleanup263 + +lpad255: ; preds = %invoke.cont253 + %tmp1171 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + br label %ehcleanup263 + +lpad258: ; preds = %invoke.cont256 + %tmp1172 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +ehcleanup263: ; preds = %lpad255, %lpad252 + unreachable + +lpad265: ; preds = %invoke.cont259 + %tmp1173 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +lpad273: ; preds = %invoke.cont266 + %tmp1175 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +lpad277: ; preds = %invoke.cont274 + %tmp1176 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +lpad289: ; preds = %invoke.cont281 + %tmp1177 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +lpad301: ; preds = %invoke.cont290 + %tmp1180 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +lpad308: ; preds = %invoke.cont302 + %tmp1182 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +lpad311: ; preds = %invoke.cont309 + %tmp1183 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +lpad314: ; preds = %invoke.cont312 + %tmp1184 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +lpad320: ; preds = %invoke.cont315 + %tmp1186 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +lpad340.body.thread: ; preds = %land.rhs335 + %tmp1188 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +lpad340.body: ; preds = %land.end344 + %tmp1189 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +lpad360: ; preds = %invoke.cont345 + %tmp1191 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + br label %eh.resume + +lpad363: ; preds = %invoke.cont373, %invoke.cont361 + %tmp1192 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +lpad369: ; preds = %invoke.cont364 + %tmp1194 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +lpad381: ; preds = %invoke.cont466, %invoke.cont458, %invoke.cont449, %invoke.cont.i2106, %invoke.cont432, %invoke.cont422, %invoke.cont418, %invoke.cont408, %invoke.cont405, %invoke.cont395, %invoke.cont392, %invoke.cont382, %invoke.cont376 + %tmp1196 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + br label %ehcleanup477 + +lpad398: ; preds = %invoke.cont396 + %tmp1199 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +lpad401: ; preds = %invoke.cont399 + %tmp1200 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +lpad411: ; preds = %invoke.cont409 + %tmp1201 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +lpad425: ; preds = %invoke.cont423 + %tmp1203 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + br label %ehcleanup477 + +lpad428: ; preds = %invoke.cont426 + %tmp1204 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +lpad454: ; preds = %invoke.cont452 + %tmp1207 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +ehcleanup477: ; preds = %lpad425, %lpad381, %lpad.i2132, %lpad.i2126 + unreachable + +lpad489: ; preds = %invoke.cont546, %invoke.cont540, %invoke.cont528, %invoke.cont509, %invoke.cont499, %invoke.cont475 + %tmp1211 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + br label %ehcleanup560 + +lpad498: ; preds = %invoke.cont490 + %tmp1214 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +lpad505: ; preds = %invoke.cont503 + %tmp1215 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +lpad508: ; preds = %invoke.cont506 + %tmp1216 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +lpad514: ; preds = %msgSend.call + %tmp1217 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +lpad527: ; preds = %invoke.cont521 + %tmp1219 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + br label %ehcleanup560 + +lpad533: ; preds = %invoke.cont531 + %tmp1220 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +lpad545: ; preds = %invoke.cont543 + %tmp1222 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +lpad553: ; preds = %invoke.cont548 + %tmp1224 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +ehcleanup560: ; preds = %lpad527, %lpad489 + br label %eh.resume + +lpad565: ; preds = %invoke.cont.i2148 + %tmp1225 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +lpad571: ; preds = %invoke.cont566 + %tmp1227 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + unreachable + +lpad580: ; preds = %invoke.cont572 + %tmp1228 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) + cleanup + br label %eh.resume + +eh.resume: ; preds = %lpad580, %ehcleanup560, %lpad360, %lpad220 + resume { i8*, i32 } undef +} !0 = metadata !{}