https://llvm.org/bugs/show_bug.cgi?id=27308
Bug ID: 27308 Summary: r210828 (GVN: Enable value forwarding for calloc) can cause absurdly long compile times Product: new-bugs Version: trunk Hardware: PC OS: All Status: NEW Severity: normal Priority: P Component: new bugs Assignee: unassignedb...@nondot.org Reporter: dimi...@andric.com CC: llvm-bugs@lists.llvm.org Classification: Unclassified Created attachment 16199 --> https://llvm.org/bugs/attachment.cgi?id=16199&action=edit Test case for r210828 regression in compile time A recent Mesa update in FreeBSD caused a seemingly hanging instance of clang for me, when it was compiling a rather large generated .c file (generated by https://cgit.freedesktop.org/mesa/mesa/tree/src/mapi/glapi/gen/gl_gentable.py). After waiting long enough, the hang turned out to be just an extremely slow compilation. This extreme slowdown turned out to be introduced somewhere between clang 3.4 and 3.5, and after bisecting I ended up at http://reviews.llvm.org/rL210828 ("GVN: Enable value forwarding for calloc"). Timings of the test case on a Xeon E5-2630 v3 @ 2.40GHz, with clang r210827: 7.98 real 7.86 user 0.12 sys Same test case, with clang r210828: 215.30 real 207.70 user 7.59 sys E.g., roughly a factor 27 slowdown! It appears both targeting i386, -mdisable-fp-elim and -O2 are essential in the command line for the test case: clang -cc1 -triple i386 -mdisable-fp-elim -O2 -w glapi-long-compile.c With regards to the test case itself, the 'meat' is a large generated function _glapi_create_table_from_handle(), which basically consists of a very large number of blocks like: if(!disp->CallList) { void ** procp = (void **) &disp->CallList; snprintf(symboln, sizeof(symboln), "%sCallList", symbol_prefix); *procp = dlsym(handle, symboln); } Strangely, though r210828 is apparently about calloc, the only calloc is at the start of that function: struct _glapi_table * _glapi_create_table_from_handle(void *handle, const char *symbol_prefix) { struct _glapi_table *disp = calloc(_glapi_get_dispatch_table_size(), sizeof(_glapi_proc)); char symboln[512]; if(!disp) return ((void *)0); [...] -- 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