brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.2 KiB · bca1d50 Raw
140 lines · plain
1; RUN: opt %s -passes=always-inline | opt -passes='print<scalar-evolution>'2; There was optimization bug in ScalarEvolution, that causes too long3; compute time and stack overflow crash.4 5declare void @body(i32)6declare void @llvm.assume(i1)7 8define available_externally void @assume1(i64 %i.ext, i64 %a) alwaysinline {9  %cmp0 = icmp ne i64 %i.ext, %a10  call void @llvm.assume(i1 %cmp0)11 12  %a1 = add i64 %a, 113  %cmp1 = icmp ne i64 %i.ext, %a114  call void @llvm.assume(i1 %cmp1)15 16  %a2 = add i64 %a1, 117  %cmp2 = icmp ne i64 %i.ext, %a218  call void @llvm.assume(i1 %cmp2)19 20  %a3 = add i64 %a2, 121  %cmp3 = icmp ne i64 %i.ext, %a322  call void @llvm.assume(i1 %cmp3)23 24  %a4 = add i64 %a3, 125  %cmp4 = icmp ne i64 %i.ext, %a426  call void @llvm.assume(i1 %cmp4)27 28  ret void29}30 31define available_externally void @assume2(i64 %i.ext, i64 %a) alwaysinline {32  call void @assume1(i64 %i.ext, i64 %a)33 34  %a1 = add i64 %a, 535  %cmp1 = icmp ne i64 %i.ext, %a136  call void @assume1(i64 %i.ext, i64 %a1)37 38  %a2 = add i64 %a1, 539  %cmp2 = icmp ne i64 %i.ext, %a240  call void @assume1(i64 %i.ext, i64 %a2)41 42  %a3 = add i64 %a2, 543  %cmp3 = icmp ne i64 %i.ext, %a344  call void @assume1(i64 %i.ext, i64 %a3)45 46  %a4 = add i64 %a3, 547  %cmp4 = icmp ne i64 %i.ext, %a448  call void @assume1(i64 %i.ext, i64 %a4)49 50  ret void51}52 53define available_externally void @assume3(i64 %i.ext, i64 %a) alwaysinline {54  call void @assume2(i64 %i.ext, i64 %a)55 56  %a1 = add i64 %a, 2557  %cmp1 = icmp ne i64 %i.ext, %a158  call void @assume2(i64 %i.ext, i64 %a1)59 60  %a2 = add i64 %a1, 2561  %cmp2 = icmp ne i64 %i.ext, %a262  call void @assume2(i64 %i.ext, i64 %a2)63 64  %a3 = add i64 %a2, 2565  %cmp3 = icmp ne i64 %i.ext, %a366  call void @assume2(i64 %i.ext, i64 %a3)67 68  %a4 = add i64 %a3, 2569  %cmp4 = icmp ne i64 %i.ext, %a470  call void @assume2(i64 %i.ext, i64 %a4)71 72  ret void73}74 75define available_externally void @assume4(i64 %i.ext, i64 %a) alwaysinline {76  call void @assume3(i64 %i.ext, i64 %a)77 78  %a1 = add i64 %a, 12579  %cmp1 = icmp ne i64 %i.ext, %a180  call void @assume3(i64 %i.ext, i64 %a1)81 82  %a2 = add i64 %a1, 12583  %cmp2 = icmp ne i64 %i.ext, %a284  call void @assume3(i64 %i.ext, i64 %a2)85 86  %a3 = add i64 %a2, 12587  %cmp3 = icmp ne i64 %i.ext, %a388  call void @assume3(i64 %i.ext, i64 %a3)89 90  %a4 = add i64 %a3, 12591  %cmp4 = icmp ne i64 %i.ext, %a492  call void @assume3(i64 %i.ext, i64 %a4)93 94  ret void95}96 97define available_externally void @assume5(i64 %i.ext, i64 %a) alwaysinline {98  call void @assume4(i64 %i.ext, i64 %a)99 100  %a1 = add i64 %a, 625101  %cmp1 = icmp ne i64 %i.ext, %a1102  call void @assume4(i64 %i.ext, i64 %a1)103 104  %a2 = add i64 %a1, 625105  %cmp2 = icmp ne i64 %i.ext, %a2106  call void @assume4(i64 %i.ext, i64 %a2)107 108  %a3 = add i64 %a2, 625109  %cmp3 = icmp ne i64 %i.ext, %a3110  call void @assume4(i64 %i.ext, i64 %a3)111 112  %a4 = add i64 %a3, 625113  %cmp4 = icmp ne i64 %i.ext, %a4114  call void @assume4(i64 %i.ext, i64 %a4)115 116  ret void117}118 119define void @fn(i32 %init) {120entry:121  br label %loop122 123loop:124  %i = phi i32 [%init, %entry], [%next, %loop]125  call void @body(i32 %i)126 127  %i.ext = zext i32 %i to i64128 129  call void @assume5(i64 %i.ext, i64 500000000)130 131  %i.next = add i64 %i.ext, 1132  %next = trunc i64 %i.next to i32133  %done = icmp eq i32 %i, 500000000134 135  br i1 %done, label %exit, label %loop136 137exit:138  ret void139}140