[llvm] r188122 - [objc-arc] Track if we encountered an additive overflow while computing {TopDown, BottomUp}PathCounts and do nothing if it occurred.
Michael Gottesman
mgottesman at apple.com
Fri Aug 9 17:18:25 PDT 2013
Sorry if I was unclear. I am saying that I think it is reduced enough and that we need enough branches in order to trigger the additive overflow which is why I have so much text. I could perhaps come up with a synthetic example that triggers it by using a ton of diamonds. Let me see what I can come up with. It will still be relatively large though.
Michael
On Aug 9, 2013, at 5:14 PM, Michael Gottesman <mgottesman at apple.com> wrote:
> I already reduced it from ~10,000 lines. The test needs to have enough branches in it to trigger the additive overflow.
>
> Michael
>
> On Aug 9, 2013, at 5:09 PM, Rafael EspĂndola <rafael.espindola at gmail.com> wrote:
>
>> This is a really large test. Can't it be reduced?
>>
>> On 9 August 2013 19:22, Michael Gottesman <mgottesman at apple.com> wrote:
>>> Author: mgottesman
>>> Date: Fri Aug 9 18:22:27 2013
>>> New Revision: 188122
>>>
>>> URL: http://llvm.org/viewvc/llvm-project?rev=188122&view=rev
>>> Log:
>>> [objc-arc] Track if we encountered an additive overflow while computing {TopDown,BottomUp}PathCounts and do nothing if it occurred.
>>>
>>> I fixed the aforementioned problems that came up on some of the linux boxes.
>>> Major thanks to Nick Lewycky for his help debugging!
>>>
>>> rdar://14590914
>>>
>>> Modified:
>>> llvm/trunk/lib/Transforms/ObjCARC/ObjCARCOpts.cpp
>>> llvm/trunk/test/Transforms/ObjCARC/path-overflow.ll
>>>
>>> Modified: llvm/trunk/lib/Transforms/ObjCARC/ObjCARCOpts.cpp
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/ObjCARC/ObjCARCOpts.cpp?rev=188122&r1=188121&r2=188122&view=diff
>>> ==============================================================================
>>> --- llvm/trunk/lib/Transforms/ObjCARC/ObjCARCOpts.cpp (original)
>>> +++ llvm/trunk/lib/Transforms/ObjCARC/ObjCARCOpts.cpp Fri Aug 9 18:22:27 2013
>>> @@ -674,7 +674,9 @@ namespace {
>>> SmallVector<BasicBlock *, 2> 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
>>> /// 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 &O
>>> /// 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(DenseM
>>> // 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(DenseM
>>> // 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(DenseM
>>> // 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(DenseM
>>> // 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;
>>> }
>>>
>>> Modified: llvm/trunk/test/Transforms/ObjCARC/path-overflow.ll
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/ObjCARC/path-overflow.ll?rev=188122&r1=188121&r2=188122&view=diff
>>> ==============================================================================
>>> --- llvm/trunk/test/Transforms/ObjCARC/path-overflow.ll (original)
>>> +++ llvm/trunk/test/Transforms/ObjCARC/path-overflow.ll Fri Aug 9 18:22:27 2013
>>> @@ -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 }
>>>
>>> - at _unnamed_cfstring_591 = external constant %struct.NSConstantString.11.33.55.77.99.121.143.332.1130.1340.2768, section "__DATA,__cfstring"
>>> + at _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:
>>> 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:
>>> 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 !{}
>>>
>>>
>>> _______________________________________________
>>> llvm-commits mailing list
>>> llvm-commits at cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20130809/d4c28473/attachment.html>
More information about the llvm-commits
mailing list