+
+
+%struct.ListNode = type { %struct.ListNode*, i32 }
+
+@node5 = internal constant { %struct.ListNode*, i32, [4 x i8] } { %struct.ListNode* bitcast ({ %struct.ListNode*, i32, [4 x i8] }* @node4 to %struct.ListNode*), i32 4, [4 x i8] undef }, align 8
+@node4 = internal constant { %struct.ListNode*, i32, [4 x i8] } { %struct.ListNode* bitcast ({ %struct.ListNode*, i32, [4 x i8] }* @node3 to %struct.ListNode*), i32 3, [4 x i8] undef }, align 8
+@node3 = internal constant { %struct.ListNode*, i32, [4 x i8] } { %struct.ListNode* bitcast ({ %struct.ListNode*, i32, [4 x i8] }* @node2 to %struct.ListNode*), i32 2, [4 x i8] undef }, align 8
+@node2 = internal constant { %struct.ListNode*, i32, [4 x i8] } { %struct.ListNode* bitcast ({ %struct.ListNode*, i32, [4 x i8] }* @node1 to %struct.ListNode*), i32 1, [4 x i8] undef }, align 8
+@node1 = internal constant { %struct.ListNode*, i32, [4 x i8] } { %struct.ListNode* null, i32 0, [4 x i8] undef }, align 8
+
+define i32 @test2() nounwind uwtable readonly {
+; CHECK: test2
+entry:
+ br label %for.body
+
+for.body: ; preds = %entry, %for.body
+ %sum.02 = phi i32 [ 0, %entry ], [ %add, %for.body ]
+; CHECK: --> %sum.02{{ *}}Exits: 10
+ %n.01 = phi %struct.ListNode* [ bitcast ({ %struct.ListNode*, i32, [4 x i8] }* @node5 to %struct.ListNode*), %entry ], [ %1, %for.body ]
+; CHECK: --> %n.01{{ *}}Exits: @node1
+ %i = getelementptr inbounds %struct.ListNode* %n.01, i64 0, i32 1
+ %0 = load i32* %i, align 4
+ %add = add nsw i32 %0, %sum.02
+ %next = getelementptr inbounds %struct.ListNode* %n.01, i64 0, i32 0
+ %1 = load %struct.ListNode** %next, align 8
+; CHECK: --> %1{{ *}}Exits: 0
+ %cmp = icmp eq %struct.ListNode* %1, null
+ br i1 %cmp, label %for.end, label %for.body
+
+for.end: ; preds = %for.body
+ ret i32 %add
+}