| Bill Wendling | dc17270 | 2013-08-05 23:43:18 +0000 | [diff] [blame] | 1 | ; RUN: opt < %s -analyze -scalar-evolution | FileCheck %s | 
| Dan Gohman | 53efeb0 | 2009-06-22 23:28:56 +0000 | [diff] [blame] | 2 |  | 
|  | 3 | target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128" | 
|  | 4 |  | 
| Bill Wendling | dc17270 | 2013-08-05 23:43:18 +0000 | [diff] [blame] | 5 | ; CHECK: Loop %bb7.i: Unpredictable backedge-taken count. | 
|  | 6 |  | 
| Dan Gohman | 53efeb0 | 2009-06-22 23:28:56 +0000 | [diff] [blame] | 7 | %struct.complex = type { float, float } | 
|  | 8 | %struct.element = type { i32, i32 } | 
|  | 9 | %struct.node = type { %struct.node*, %struct.node*, i32 } | 
|  | 10 | @seed = external global i64		; <i64*> [#uses=0] | 
|  | 11 | @_2E_str = external constant [18 x i8], align 1		; <[18 x i8]*> [#uses=0] | 
|  | 12 | @_2E_str1 = external constant [4 x i8], align 1		; <[4 x i8]*> [#uses=0] | 
|  | 13 | @value = external global float		; <float*> [#uses=0] | 
|  | 14 | @fixed = external global float		; <float*> [#uses=0] | 
|  | 15 | @floated = external global float		; <float*> [#uses=0] | 
|  | 16 | @permarray = external global [11 x i32], align 32		; <[11 x i32]*> [#uses=0] | 
|  | 17 | @pctr = external global i32		; <i32*> [#uses=0] | 
|  | 18 | @tree = external global %struct.node*		; <%struct.node**> [#uses=0] | 
|  | 19 | @stack = external global [4 x i32], align 16		; <[4 x i32]*> [#uses=0] | 
|  | 20 | @cellspace = external global [19 x %struct.element], align 32		; <[19 x %struct.element]*> [#uses=0] | 
|  | 21 | @freelist = external global i32		; <i32*> [#uses=0] | 
|  | 22 | @movesdone = external global i32		; <i32*> [#uses=0] | 
|  | 23 | @ima = external global [41 x [41 x i32]], align 32		; <[41 x [41 x i32]]*> [#uses=0] | 
|  | 24 | @imb = external global [41 x [41 x i32]], align 32		; <[41 x [41 x i32]]*> [#uses=0] | 
|  | 25 | @imr = external global [41 x [41 x i32]], align 32		; <[41 x [41 x i32]]*> [#uses=0] | 
|  | 26 | @rma = external global [41 x [41 x float]], align 32		; <[41 x [41 x float]]*> [#uses=0] | 
|  | 27 | @rmb = external global [41 x [41 x float]], align 32		; <[41 x [41 x float]]*> [#uses=0] | 
|  | 28 | @rmr = external global [41 x [41 x float]], align 32		; <[41 x [41 x float]]*> [#uses=0] | 
|  | 29 | @piececount = external global [4 x i32], align 16		; <[4 x i32]*> [#uses=0] | 
|  | 30 | @class = external global [13 x i32], align 32		; <[13 x i32]*> [#uses=0] | 
|  | 31 | @piecemax = external global [13 x i32], align 32		; <[13 x i32]*> [#uses=0] | 
|  | 32 | @puzzl = external global [512 x i32], align 32		; <[512 x i32]*> [#uses=0] | 
|  | 33 | @p = external global [13 x [512 x i32]], align 32		; <[13 x [512 x i32]]*> [#uses=0] | 
|  | 34 | @n = external global i32		; <i32*> [#uses=0] | 
|  | 35 | @kount = external global i32		; <i32*> [#uses=0] | 
|  | 36 | @sortlist = external global [5001 x i32], align 32		; <[5001 x i32]*> [#uses=0] | 
|  | 37 | @biggest = external global i32		; <i32*> [#uses=0] | 
|  | 38 | @littlest = external global i32		; <i32*> [#uses=0] | 
|  | 39 | @top = external global i32		; <i32*> [#uses=0] | 
|  | 40 | @z = external global [257 x %struct.complex], align 32		; <[257 x %struct.complex]*> [#uses=0] | 
|  | 41 | @w = external global [257 x %struct.complex], align 32		; <[257 x %struct.complex]*> [#uses=0] | 
|  | 42 | @e = external global [130 x %struct.complex], align 32		; <[130 x %struct.complex]*> [#uses=0] | 
|  | 43 | @zr = external global float		; <float*> [#uses=0] | 
|  | 44 | @zi = external global float		; <float*> [#uses=0] | 
|  | 45 |  | 
|  | 46 | declare void @Initrand() nounwind | 
|  | 47 |  | 
|  | 48 | declare i32 @Rand() nounwind | 
|  | 49 |  | 
|  | 50 | declare void @Try(i32, i32*, i32*, i32*, i32*, i32*) nounwind | 
|  | 51 |  | 
|  | 52 | declare i32 @puts(i8* nocapture) nounwind | 
|  | 53 |  | 
|  | 54 | declare void @Queens(i32) nounwind | 
|  | 55 |  | 
|  | 56 | declare i32 @printf(i8* nocapture, ...) nounwind | 
|  | 57 |  | 
|  | 58 | declare i32 @main() nounwind | 
|  | 59 |  | 
|  | 60 | declare void @Doit() nounwind | 
|  | 61 |  | 
|  | 62 | declare void @Doit_bb7([15 x i32]*, [17 x i32]*, [9 x i32]*) nounwind | 
|  | 63 |  | 
|  | 64 | define void @Doit_bb7_2E_i([9 x i32]* %x1, [15 x i32]* %c, [17 x i32]* %b, [9 x i32]* %a, i32* %q, i32* %x1.sub, i32* %b9, i32* %a10, i32* %c11) nounwind { | 
|  | 65 | newFuncRoot: | 
|  | 66 | br label %bb7.i | 
|  | 67 |  | 
|  | 68 | Try.exit.exitStub:		; preds = %bb7.i | 
|  | 69 | ret void | 
|  | 70 |  | 
|  | 71 | bb.i:		; preds = %bb7.i | 
|  | 72 | %tmp = add i32 %j.0.i, 1		; <i32> [#uses=5] | 
|  | 73 | store i32 0, i32* %q, align 4 | 
|  | 74 | %tmp1 = sext i32 %tmp to i64		; <i64> [#uses=1] | 
|  | 75 | %tmp2 = getelementptr [9 x i32]* %a, i64 0, i64 %tmp1		; <i32*> [#uses=1] | 
|  | 76 | %tmp3 = load i32* %tmp2, align 4		; <i32> [#uses=1] | 
|  | 77 | %tmp4 = icmp eq i32 %tmp3, 0		; <i1> [#uses=1] | 
|  | 78 | br i1 %tmp4, label %bb.i.bb7.i.backedge_crit_edge, label %bb1.i | 
|  | 79 |  | 
|  | 80 | bb1.i:		; preds = %bb.i | 
|  | 81 | %tmp5 = add i32 %j.0.i, 2		; <i32> [#uses=1] | 
|  | 82 | %tmp6 = sext i32 %tmp5 to i64		; <i64> [#uses=1] | 
|  | 83 | %tmp7 = getelementptr [17 x i32]* %b, i64 0, i64 %tmp6		; <i32*> [#uses=1] | 
|  | 84 | %tmp8 = load i32* %tmp7, align 4		; <i32> [#uses=1] | 
|  | 85 | %tmp9 = icmp eq i32 %tmp8, 0		; <i1> [#uses=1] | 
|  | 86 | br i1 %tmp9, label %bb1.i.bb7.i.backedge_crit_edge, label %bb2.i | 
|  | 87 |  | 
|  | 88 | bb2.i:		; preds = %bb1.i | 
|  | 89 | %tmp10 = sub i32 7, %j.0.i		; <i32> [#uses=1] | 
|  | 90 | %tmp11 = sext i32 %tmp10 to i64		; <i64> [#uses=1] | 
|  | 91 | %tmp12 = getelementptr [15 x i32]* %c, i64 0, i64 %tmp11		; <i32*> [#uses=1] | 
|  | 92 | %tmp13 = load i32* %tmp12, align 4		; <i32> [#uses=1] | 
|  | 93 | %tmp14 = icmp eq i32 %tmp13, 0		; <i1> [#uses=1] | 
|  | 94 | br i1 %tmp14, label %bb2.i.bb7.i.backedge_crit_edge, label %bb3.i | 
|  | 95 |  | 
|  | 96 | bb3.i:		; preds = %bb2.i | 
|  | 97 | %tmp15 = getelementptr [9 x i32]* %x1, i64 0, i64 1		; <i32*> [#uses=1] | 
|  | 98 | store i32 %tmp, i32* %tmp15, align 4 | 
|  | 99 | %tmp16 = sext i32 %tmp to i64		; <i64> [#uses=1] | 
|  | 100 | %tmp17 = getelementptr [9 x i32]* %a, i64 0, i64 %tmp16		; <i32*> [#uses=1] | 
|  | 101 | store i32 0, i32* %tmp17, align 4 | 
|  | 102 | %tmp18 = add i32 %j.0.i, 2		; <i32> [#uses=1] | 
|  | 103 | %tmp19 = sext i32 %tmp18 to i64		; <i64> [#uses=1] | 
|  | 104 | %tmp20 = getelementptr [17 x i32]* %b, i64 0, i64 %tmp19		; <i32*> [#uses=1] | 
|  | 105 | store i32 0, i32* %tmp20, align 4 | 
|  | 106 | %tmp21 = sub i32 7, %j.0.i		; <i32> [#uses=1] | 
|  | 107 | %tmp22 = sext i32 %tmp21 to i64		; <i64> [#uses=1] | 
|  | 108 | %tmp23 = getelementptr [15 x i32]* %c, i64 0, i64 %tmp22		; <i32*> [#uses=1] | 
|  | 109 | store i32 0, i32* %tmp23, align 4 | 
|  | 110 | call void @Try(i32 2, i32* %q, i32* %b9, i32* %a10, i32* %c11, i32* %x1.sub) nounwind | 
|  | 111 | %tmp24 = load i32* %q, align 4		; <i32> [#uses=1] | 
|  | 112 | %tmp25 = icmp eq i32 %tmp24, 0		; <i1> [#uses=1] | 
|  | 113 | br i1 %tmp25, label %bb5.i, label %bb3.i.bb7.i.backedge_crit_edge | 
|  | 114 |  | 
|  | 115 | bb5.i:		; preds = %bb3.i | 
|  | 116 | %tmp26 = sext i32 %tmp to i64		; <i64> [#uses=1] | 
|  | 117 | %tmp27 = getelementptr [9 x i32]* %a, i64 0, i64 %tmp26		; <i32*> [#uses=1] | 
|  | 118 | store i32 1, i32* %tmp27, align 4 | 
|  | 119 | %tmp28 = add i32 %j.0.i, 2		; <i32> [#uses=1] | 
|  | 120 | %tmp29 = sext i32 %tmp28 to i64		; <i64> [#uses=1] | 
|  | 121 | %tmp30 = getelementptr [17 x i32]* %b, i64 0, i64 %tmp29		; <i32*> [#uses=1] | 
|  | 122 | store i32 1, i32* %tmp30, align 4 | 
|  | 123 | %tmp31 = sub i32 7, %j.0.i		; <i32> [#uses=1] | 
|  | 124 | %tmp32 = sext i32 %tmp31 to i64		; <i64> [#uses=1] | 
|  | 125 | %tmp33 = getelementptr [15 x i32]* %c, i64 0, i64 %tmp32		; <i32*> [#uses=1] | 
|  | 126 | store i32 1, i32* %tmp33, align 4 | 
|  | 127 | br label %bb7.i.backedge | 
|  | 128 |  | 
|  | 129 | bb7.i.backedge:		; preds = %bb3.i.bb7.i.backedge_crit_edge, %bb2.i.bb7.i.backedge_crit_edge, %bb1.i.bb7.i.backedge_crit_edge, %bb.i.bb7.i.backedge_crit_edge, %bb5.i | 
|  | 130 | br label %bb7.i | 
|  | 131 |  | 
|  | 132 | bb7.i:		; preds = %bb7.i.backedge, %newFuncRoot | 
|  | 133 | %j.0.i = phi i32 [ 0, %newFuncRoot ], [ %tmp, %bb7.i.backedge ]		; <i32> [#uses=8] | 
|  | 134 | %tmp34 = load i32* %q, align 4		; <i32> [#uses=1] | 
|  | 135 | %tmp35 = icmp eq i32 %tmp34, 0		; <i1> [#uses=1] | 
|  | 136 | %tmp36 = icmp ne i32 %j.0.i, 8		; <i1> [#uses=1] | 
|  | 137 | %tmp37 = and i1 %tmp35, %tmp36		; <i1> [#uses=1] | 
|  | 138 | br i1 %tmp37, label %bb.i, label %Try.exit.exitStub | 
|  | 139 |  | 
|  | 140 | bb.i.bb7.i.backedge_crit_edge:		; preds = %bb.i | 
|  | 141 | br label %bb7.i.backedge | 
|  | 142 |  | 
|  | 143 | bb1.i.bb7.i.backedge_crit_edge:		; preds = %bb1.i | 
|  | 144 | br label %bb7.i.backedge | 
|  | 145 |  | 
|  | 146 | bb2.i.bb7.i.backedge_crit_edge:		; preds = %bb2.i | 
|  | 147 | br label %bb7.i.backedge | 
|  | 148 |  | 
|  | 149 | bb3.i.bb7.i.backedge_crit_edge:		; preds = %bb3.i | 
|  | 150 | br label %bb7.i.backedge | 
|  | 151 | } |