; This testcase comes from this C fragment:
;
; void test(unsigned Num, int *Array) {
;  unsigned i, j, k;
;
;  for (i = 0; i != Num; ++i)
;    for (j = 0; j != Num; ++j)
;      for (k = 0; k != Num; ++k)
;        printf("%d\n", i+k+j);    /* Reassociate to (i+j)+k */
;}
;
; In this case, we want to reassociate the specified expr so that i+j can be
; hoisted out of the inner most loop.
;
; RUN: opt < %s -reassociate -S | grep 115 | not grep 117
; END.
@.LC0 = internal global [4 x i8] c"%d\0A\00"		; <[4 x i8]*> [#uses=1]

declare i32 @printf(i8*, ...)

; FIXME: No longer works.
define void @test(i32 %Num, i32* %Array) {
bb0:
	%cond221 = icmp eq i32 0, %Num		; <i1> [#uses=3]
	br i1 %cond221, label %bb7, label %bb2
bb2:		; preds = %bb6, %bb0
	%reg115 = phi i32 [ %reg120, %bb6 ], [ 0, %bb0 ]		; <i32> [#uses=2]
	br i1 %cond221, label %bb6, label %bb3
bb3:		; preds = %bb5, %bb2
	%reg116 = phi i32 [ %reg119, %bb5 ], [ 0, %bb2 ]		; <i32> [#uses=2]
	br i1 %cond221, label %bb5, label %bb4
bb4:		; preds = %bb4, %bb3
	%reg117 = phi i32 [ %reg118, %bb4 ], [ 0, %bb3 ]		; <i32> [#uses=2]
	%reg113 = add i32 %reg115, %reg117		; <i32> [#uses=1]
	%reg114 = add i32 %reg113, %reg116		; <i32> [#uses=1]
	%cast227 = getelementptr [4 x i8], [4 x i8]* @.LC0, i64 0, i64 0		; <i8*> [#uses=1]
	call i32 (i8*, ...) @printf( i8* %cast227, i32 %reg114 )		; <i32>:0 [#uses=0]
	%reg118 = add i32 %reg117, 1		; <i32> [#uses=2]
	%cond224 = icmp ne i32 %reg118, %Num		; <i1> [#uses=1]
	br i1 %cond224, label %bb4, label %bb5
bb5:		; preds = %bb4, %bb3
	%reg119 = add i32 %reg116, 1		; <i32> [#uses=2]
	%cond225 = icmp ne i32 %reg119, %Num		; <i1> [#uses=1]
	br i1 %cond225, label %bb3, label %bb6
bb6:		; preds = %bb5, %bb2
	%reg120 = add i32 %reg115, 1		; <i32> [#uses=2]
	%cond226 = icmp ne i32 %reg120, %Num		; <i1> [#uses=1]
	br i1 %cond226, label %bb2, label %bb7
bb7:		; preds = %bb6, %bb0
	ret void
}
