1*9adbb5cbSArthur Eubanks; RUN: opt < %s -disable-output "-passes=print<scalar-evolution>" 2>&1 | FileCheck %s 2272eac85SRoman Shirokiy 3272eac85SRoman Shirokiy; Check that isImpliedViaMerge wouldn't crash when trying to prove 4272eac85SRoman Shirokiy; SCEVUnknown and AddRec with phi having many inputs 5272eac85SRoman Shirokiy; CHECK: @foo 6272eac85SRoman Shirokiy 7272eac85SRoman Shirokiydefine void @foo(i1 %cond) { 8272eac85SRoman Shirokiyosr.type.merge79: 9272eac85SRoman Shirokiy br label %bci_329 10272eac85SRoman Shirokiy 11272eac85SRoman Shirokiybci_329: ; preds = %bci_337, %bci_326, %osr.type.merge79 12272eac85SRoman Shirokiy %local_7_ = phi i32 [ 0, %osr.type.merge79 ], [ %local_7_113, %bci_326 ], [ %local_7_, %bci_337 ] 13272eac85SRoman Shirokiy br i1 %cond, label %bci_360, label %bci_337 14272eac85SRoman Shirokiy 15272eac85SRoman Shirokiybci_360: ; preds = %bci_329 16272eac85SRoman Shirokiy %0 = phi i32 [ %local_7_, %bci_329 ] 17272eac85SRoman Shirokiy %1 = icmp sge i32 %0, 451 18272eac85SRoman Shirokiy br i1 %1, label %bci_371, label %bci_326 19272eac85SRoman Shirokiy 20272eac85SRoman Shirokiybci_371: ; preds = %bci_304, %bci_360 21272eac85SRoman Shirokiy %local_2_132 = phi i32 [ 0, %bci_360 ], [ %local_2_188, %bci_304 ] 22272eac85SRoman Shirokiy %local_7_137 = phi i32 [ 0, %bci_360 ], [ %local_7_217, %bci_304 ] 23272eac85SRoman Shirokiy %local_8_138 = phi i32 [ 0, %bci_360 ], [ %local_8_194, %bci_304 ] 24272eac85SRoman Shirokiy %local_11_141 = phi i32 [ 0, %bci_360 ], [ %local_11_197, %bci_304 ] 25272eac85SRoman Shirokiy %2 = phi i1 [ %1, %bci_360 ], [ false, %bci_304 ] 26272eac85SRoman Shirokiy br i1 %2, label %bci_562, label %never_deopt 27272eac85SRoman Shirokiy 28272eac85SRoman Shirokiybci_562: ; preds = %done437, %done405, %done395, %bci_407, %not_zero322, %bci_221, %bci_371 29272eac85SRoman Shirokiy %local_2_164 = phi i32 [ %local_2_132, %bci_371 ], [ %9, %not_zero322 ], [ %local_2_188, %bci_407 ], [ %result396, %done395 ], [ %local_2_188, %bci_221 ], [ %local_2_188, %done405 ], [ %local_2_188, %done437 ] 30272eac85SRoman Shirokiy %local_7_169 = phi i32 [ %local_7_137, %bci_371 ], [ %local_7_217, %not_zero322 ], [ %local_7_217, %bci_407 ], [ %local_7_217, %done395 ], [ %local_7_217, %bci_221 ], [ %local_7_217, %done405 ], [ %local_7_217, %done437 ] 31272eac85SRoman Shirokiy %local_8_170 = phi i32 [ %local_8_138, %bci_371 ], [ %local_8_194, %not_zero322 ], [ %local_8_194, %bci_407 ], [ %local_8_194, %done395 ], [ %local_8_194, %bci_221 ], [ %local_8_194, %done405 ], [ %local_8_194, %done437 ] 32272eac85SRoman Shirokiy %local_11_173 = phi i32 [ %local_11_141, %bci_371 ], [ %local_11_197, %not_zero322 ], [ %local_11_197, %bci_407 ], [ %local_11_197, %done395 ], [ %local_11_197, %bci_221 ], [ %local_11_197, %done405 ], [ %local_11_197, %done437 ] 33272eac85SRoman Shirokiy br label %bci_604 34272eac85SRoman Shirokiy 35272eac85SRoman Shirokiybci_604: ; preds = %not_subtype, %bci_565, %bci_562 36272eac85SRoman Shirokiy %local_2_188 = phi i32 [ %local_2_164, %bci_562 ], [ %9, %bci_565 ], [ %9, %not_subtype ] 37272eac85SRoman Shirokiy %local_7_193 = phi i32 [ %local_7_169, %bci_562 ], [ %local_7_217, %bci_565 ], [ %local_7_217, %not_subtype ] 38272eac85SRoman Shirokiy %local_8_194 = phi i32 [ %local_8_170, %bci_562 ], [ %local_8_194, %bci_565 ], [ %local_8_194, %not_subtype ] 39272eac85SRoman Shirokiy %local_11_197 = phi i32 [ %local_11_173, %bci_562 ], [ %local_11_197, %bci_565 ], [ %local_11_197, %not_subtype ] 40272eac85SRoman Shirokiy %3 = add i32 1, %local_7_193 41272eac85SRoman Shirokiy br label %bci_199 42272eac85SRoman Shirokiy 43272eac85SRoman Shirokiybci_199: ; preds = %bci_591, %bci_604 44272eac85SRoman Shirokiy %local_7_217 = phi i32 [ %3, %bci_604 ], [ %6, %bci_591 ] 45272eac85SRoman Shirokiy %4 = mul i32 %local_2_188, %local_8_194 46272eac85SRoman Shirokiy %5 = icmp sge i32 %local_7_217, %4 47272eac85SRoman Shirokiy br i1 %5, label %bci_610, label %bci_216 48272eac85SRoman Shirokiy 49272eac85SRoman Shirokiybci_610: ; preds = %bci_199 50272eac85SRoman Shirokiy ret void 51272eac85SRoman Shirokiy 52272eac85SRoman Shirokiybci_216: ; preds = %bci_199 53272eac85SRoman Shirokiy br i1 %cond, label %bci_591, label %bci_221 54272eac85SRoman Shirokiy 55272eac85SRoman Shirokiybci_591: ; preds = %bci_216 56272eac85SRoman Shirokiy %6 = add i32 1, %local_7_217 57272eac85SRoman Shirokiy br label %bci_199 58272eac85SRoman Shirokiy 59272eac85SRoman Shirokiybci_221: ; preds = %bci_216 60272eac85SRoman Shirokiy %7 = srem i32 %local_7_217, 6 61272eac85SRoman Shirokiy %8 = add i32 %7, 114 62272eac85SRoman Shirokiy switch i32 %8, label %done405 [ 63272eac85SRoman Shirokiy i32 114, label %bci_562 64272eac85SRoman Shirokiy i32 116, label %bci_304 65272eac85SRoman Shirokiy i32 117, label %bci_395 66272eac85SRoman Shirokiy i32 118, label %bci_407 67272eac85SRoman Shirokiy i32 119, label %bci_419 68272eac85SRoman Shirokiy ] 69272eac85SRoman Shirokiy 70272eac85SRoman Shirokiybci_419: ; preds = %bci_221 71272eac85SRoman Shirokiy %9 = sub i32 %local_2_188, %local_11_197 72272eac85SRoman Shirokiy br label %bci_435 73272eac85SRoman Shirokiy 74272eac85SRoman Shirokiybci_435: ; preds = %not_zero322, %bci_419 75272eac85SRoman Shirokiy br i1 %cond, label %not_zero265, label %never_deopt 76272eac85SRoman Shirokiy 77272eac85SRoman Shirokiynot_zero265: ; preds = %bci_435 78272eac85SRoman Shirokiy br i1 %cond, label %in_bounds, label %out_of_bounds 79272eac85SRoman Shirokiy 80272eac85SRoman Shirokiyin_bounds: ; preds = %not_zero265 81272eac85SRoman Shirokiy br i1 %cond, label %not_zero322, label %never_deopt 82272eac85SRoman Shirokiy 83272eac85SRoman Shirokiynot_zero322: ; preds = %in_bounds 84272eac85SRoman Shirokiy br i1 %cond, label %bci_562, label %bci_435 85272eac85SRoman Shirokiy 86272eac85SRoman Shirokiybci_407: ; preds = %bci_221 87272eac85SRoman Shirokiy br label %bci_562 88272eac85SRoman Shirokiy 89272eac85SRoman Shirokiybci_395: ; preds = %bci_221 90272eac85SRoman Shirokiy br i1 %cond, label %done395, label %general_case394 91272eac85SRoman Shirokiy 92272eac85SRoman Shirokiygeneral_case394: ; preds = %bci_395 93272eac85SRoman Shirokiy %10 = srem i32 %local_2_188, 0 94272eac85SRoman Shirokiy br label %done395 95272eac85SRoman Shirokiy 96272eac85SRoman Shirokiydone395: ; preds = %general_case394, %bci_395 97272eac85SRoman Shirokiy %result396 = phi i32 [ %10, %general_case394 ], [ 0, %bci_395 ] 98272eac85SRoman Shirokiy br label %bci_562 99272eac85SRoman Shirokiy 100272eac85SRoman Shirokiybci_304: ; preds = %bci_221 101272eac85SRoman Shirokiy br i1 %cond, label %bci_371, label %bci_326 102272eac85SRoman Shirokiy 103272eac85SRoman Shirokiydone405: ; preds = %bci_221 104272eac85SRoman Shirokiy br i1 %cond, label %bci_562, label %done437 105272eac85SRoman Shirokiy 106272eac85SRoman Shirokiydone437: ; preds = %done405 107272eac85SRoman Shirokiy br label %bci_562 108272eac85SRoman Shirokiy 109272eac85SRoman Shirokiybci_326: ; preds = %bci_304, %bci_360 110272eac85SRoman Shirokiy %local_7_113 = phi i32 [ %local_7_, %bci_360 ], [ %local_7_217, %bci_304 ] 111272eac85SRoman Shirokiy br label %bci_329 112272eac85SRoman Shirokiy 113272eac85SRoman Shirokiybci_337: ; preds = %bci_329 114272eac85SRoman Shirokiy br label %bci_329 115272eac85SRoman Shirokiy 116272eac85SRoman Shirokiynever_deopt: ; preds = %in_bounds, %bci_435, %bci_371 117272eac85SRoman Shirokiy ret void 118272eac85SRoman Shirokiy 119272eac85SRoman Shirokiyout_of_bounds: ; preds = %not_zero265 120272eac85SRoman Shirokiy br i1 %cond, label %bci_565, label %not_subtype 121272eac85SRoman Shirokiy 122272eac85SRoman Shirokiybci_565: ; preds = %out_of_bounds 123272eac85SRoman Shirokiy br label %bci_604 124272eac85SRoman Shirokiy 125272eac85SRoman Shirokiynot_subtype: ; preds = %out_of_bounds 126272eac85SRoman Shirokiy br label %bci_604 127272eac85SRoman Shirokiy} 128