https://llvm.org/bugs/show_bug.cgi?id=31930
Bug ID: 31930 Summary: Optimization of loop via loop peeling does not occur for float and double Product: new-bugs Version: trunk Hardware: PC OS: Linux Status: NEW Severity: normal Priority: P Component: new bugs Assignee: unassignedb...@nondot.org Reporter: drr...@gmail.com CC: llvm-bugs@lists.llvm.org Classification: Unclassified Consider: float f(float x[]) { float p = 1.0; for (int i = 0; i < 960; i++) p += 1; return p; } When compiled with -march=core-avx2 -O3 -ffast-math the assembly loops round adding until it gets to 961. However: int f(int x[]) { int p = 1; for (int i = 0; i < 960; i++) p += 1; return p; } gives: f: # @f mov eax, 961 ret I don't know how hard it would be to add the same optimization for floats and double. As a side note, there are in fact a number of interesting details with the first (float) loop. First, if we reduce the i < 960 limit to i < 959 the loop is optimized out. Second if we change the type to 'double' this upper limit goes down to i < 479. My guess is that this corresponds to an unpeeling cost model that is incorporated into the compiler. -- You are receiving this mail because: You are on the CC list for the bug.
_______________________________________________ llvm-bugs mailing list llvm-bugs@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs