; RUN: opt < %s -loop-rotate -verify-dom-info -verify-loop-info -S | FileCheck %s
; CHECK-NOT: [ {{.}}tmp224

target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64"

	%struct.FILE = type { i8*, i32, i32, i16, i16, %struct.__sbuf, i32, i8*, i32 (i8*)*, i32 (i8*, i8*, i32)*, i64 (i8*, i64, i32)*, i32 (i8*, i8*, i32)*, %struct.__sbuf, %struct.__sFILEX*, i32, [3 x i8], [1 x i8], %struct.__sbuf, i32, i64 }
	%struct.Index_Map = type { i32, %struct.item_set** }
	%struct.Item = type { [4 x i16], %struct.rule* }
	%struct.__sFILEX = type opaque
	%struct.__sbuf = type { i8*, i32 }
	%struct.dimension = type { i16*, %struct.Index_Map, %struct.mapping*, i32, %struct.plankMap* }
	%struct.item_set = type { i32, i32, %struct.operator*, [2 x %struct.item_set*], %struct.item_set*, i16*, %struct.Item*, %struct.Item* }
	%struct.list = type { i8*, %struct.list* }
	%struct.mapping = type { %struct.list**, i32, i32, i32, %struct.item_set** }
	%struct.nonterminal = type { i8*, i32, i32, i32, %struct.plankMap*, %struct.rule* }
	%struct.operator = type { i8*, i8, i32, i32, i32, i32, %struct.table* }
	%struct.pattern = type { %struct.nonterminal*, %struct.operator*, [2 x %struct.nonterminal*] }
	%struct.plank = type { i8*, %struct.list*, i32 }
	%struct.plankMap = type { %struct.list*, i32, %struct.stateMap* }
	%struct.rule = type { [4 x i16], i32, i32, i32, %struct.nonterminal*, %struct.pattern*, i8 }
	%struct.stateMap = type { i8*, %struct.plank*, i32, i16* }
	%struct.table = type { %struct.operator*, %struct.list*, i16*, [2 x %struct.dimension*], %struct.item_set** }
@outfile = external global %struct.FILE*		; <%struct.FILE**> [#uses=1]
@str1 = external constant [11 x i8]		; <[11 x i8]*> [#uses=1]
@operators = weak global %struct.list* null		; <%struct.list**> [#uses=1]



define i32 @opsOfArity(i32 %arity) {
entry:
	%arity_addr = alloca i32		; <i32*> [#uses=2]
	%retval = alloca i32, align 4		; <i32*> [#uses=2]
	%tmp = alloca i32, align 4		; <i32*> [#uses=2]
	%c = alloca i32, align 4		; <i32*> [#uses=4]
	%l = alloca %struct.list*, align 4		; <%struct.list**> [#uses=5]
	%op = alloca %struct.operator*, align 4		; <%struct.operator**> [#uses=3]
	store i32 %arity, i32* %arity_addr
	store i32 0, i32* %c
	%tmp1 = load %struct.list** @operators		; <%struct.list*> [#uses=1]
	store %struct.list* %tmp1, %struct.list** %l
	br label %bb21

bb:		; preds = %bb21
	%tmp3 = getelementptr %struct.list* %tmp22, i32 0, i32 0		; <i8**> [#uses=1]
	%tmp4 = load i8** %tmp3		; <i8*> [#uses=1]
	%tmp45 = bitcast i8* %tmp4 to %struct.operator*		; <%struct.operator*> [#uses=1]
	store %struct.operator* %tmp45, %struct.operator** %op
	%tmp6 = load %struct.operator** %op		; <%struct.operator*> [#uses=1]
	%tmp7 = getelementptr %struct.operator* %tmp6, i32 0, i32 5		; <i32*> [#uses=1]
	%tmp8 = load i32* %tmp7		; <i32> [#uses=1]
	%tmp9 = load i32* %arity_addr		; <i32> [#uses=1]
	icmp eq i32 %tmp8, %tmp9		; <i1>:0 [#uses=1]
	zext i1 %0 to i8		; <i8>:1 [#uses=1]
	icmp ne i8 %1, 0		; <i1>:2 [#uses=1]
	br i1 %2, label %cond_true, label %cond_next

cond_true:		; preds = %bb
	%tmp10 = load %struct.operator** %op		; <%struct.operator*> [#uses=1]
	%tmp11 = getelementptr %struct.operator* %tmp10, i32 0, i32 2		; <i32*> [#uses=1]
	%tmp12 = load i32* %tmp11		; <i32> [#uses=1]
	%tmp13 = load %struct.FILE** @outfile		; <%struct.FILE*> [#uses=1]
	%tmp14 = getelementptr [11 x i8]* @str1, i32 0, i32 0		; <i8*> [#uses=1]
	%tmp15 = call i32 (%struct.FILE*, i8*, ...)* @fprintf( %struct.FILE* %tmp13, i8* %tmp14, i32 %tmp12 )		; <i32> [#uses=0]
	%tmp16 = load i32* %c		; <i32> [#uses=1]
	%tmp17 = add i32 %tmp16, 1		; <i32> [#uses=1]
	store i32 %tmp17, i32* %c
	br label %cond_next

cond_next:		; preds = %cond_true, %bb
	%tmp19 = getelementptr %struct.list* %tmp22, i32 0, i32 1		; <%struct.list**> [#uses=1]
	%tmp20 = load %struct.list** %tmp19		; <%struct.list*> [#uses=1]
	store %struct.list* %tmp20, %struct.list** %l
	br label %bb21

bb21:		; preds = %cond_next, %entry
        %l.in = phi %struct.list** [ @operators, %entry ], [ %tmp19, %cond_next ]
	%tmp22 = load %struct.list** %l.in		; <%struct.list*> [#uses=1]
	icmp ne %struct.list* %tmp22, null		; <i1>:3 [#uses=1]
	zext i1 %3 to i8		; <i8>:4 [#uses=1]
	icmp ne i8 %4, 0		; <i1>:5 [#uses=1]
	br i1 %5, label %bb, label %bb23

bb23:		; preds = %bb21
	%tmp24 = load i32* %c		; <i32> [#uses=1]
	store i32 %tmp24, i32* %tmp
	%tmp25 = load i32* %tmp		; <i32> [#uses=1]
	store i32 %tmp25, i32* %retval
	br label %return

return:		; preds = %bb23
	%retval26 = load i32* %retval		; <i32> [#uses=1]
	ret i32 %retval26
}

declare i32 @fprintf(%struct.FILE*, i8*, ...)
