[llvm] r296770 - The patch turns on epilogue unroll for loops with constant recurency start.
Davide Italiano via llvm-commits
llvm-commits at lists.llvm.org
Fri Jul 21 18:04:31 PDT 2017
On Fri, Jul 21, 2017 at 6:00 PM, Davide Italiano <davide at freebsd.org> wrote:
> On Thu, Mar 2, 2017 at 9:38 AM, Evgeny Stupachenko via llvm-commits
> <llvm-commits at lists.llvm.org> wrote:
>> Author: evstupac
>> Date: Thu Mar 2 11:38:46 2017
>> New Revision: 296770
>>
>
> Hi Evgeny,
> sorry for being late, but this patch triggers a misoptimization at LTO
> time in some of our internal code.
>
> The optimized bitcode reverting the change is:
>
> define i32 @main() local_unnamed_addr #0 {
> fib.exit17:
> %0 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5
> x i8], [5 x i8]* @.str, i64
> 0, i64 0), double 0x3FF9E4129E4129E4)
> ret i32 0
> }
>
>
> while ToT looks like:
>
> define i32 @main() local_unnamed_addr #0 {
> br label %1
>
> ; <label>:1: ; preds = %1, %0
> %2 = phi i32 [ %5, %1 ], [ 34, %0 ]
> %3 = phi i32 [ %2, %1 ], [ 21, %0 ]
> %4 = phi i32 [ %6, %1 ], [ 2, %0 ]
> %5 = add nsw i32 %2, %3
> %6 = add nsw i32 %4, -1
> %7 = icmp eq i32 %6, 0
> br i1 %7, label %fib.exit, label %1, !llvm.loop !2
>
> fib.exit: ; preds = %1
> %8 = sitofp i32 %5 to double
> %9 = fdiv double %8, 5.500000e+01
> %10 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds
> ([5 x i8], [5 x i8]* @.str, i64
> 0, i64 0), double %9)
> ret i32 0
> }
>
> I'll open a PR with the details on how to reproduce.
>
> Thanks,
>
> --
> Davide
We can continue the discussion here https://bugs.llvm.org/show_bug.cgi?id=33885
--
Davide
"There are no solved problems; there are only problems that are more
or less solved" -- Henri Poincare
More information about the llvm-commits
mailing list