https://bugs.llvm.org/show_bug.cgi?id=43572
Bug ID: 43572
Summary: Missed opportunity for loop unswitching - indirect
calls (h264)
Product: libraries
Version: trunk
Hardware: PC
OS: Linux
Status: NEW
Severity: enhancement
Priority: P
Component: Loop Optimizer
Assignee: unassignedb...@nondot.org
Reporter: david.bolvan...@gmail.com
CC: llvm-bugs@lists.llvm.org
Seen in the hot code of h264.
PelYline_11 is a static global pointer to a function.
...
for (pos = 0; pos < max_pos; pos++) {
//if (pos > 1) abort();
abs_y = offset_y + spiral_search_y[pos];
abs_x = offset_x + spiral_search_x[pos];
if (range_partly_outside) {
if (abs_y >= 0 && abs_y <= max_height && abs_x >= 0 &&
abs_x <= max_width) {
PelYline_11 = FastLine16Y_11;
} else {
PelYline_11 = UMVLine16Y_11;
}
}
orgptr = orig_blocks;
bindex = 0;
for (blky = 0; blky < 4; blky++) {
LineSadBlk0 = LineSadBlk1 = LineSadBlk2 = LineSadBlk3 = 0;
for (y = 0; y < 4; y++) {
refptr = PelYline_11(ref_pic, abs_y++, abs_x, img_height, img_width);
...
With LTO and unswitched loop, we could fully inline FastLine16Y_11 and/or
UMVLine16Y_11, which could help a lot here since FastLine16Y_11 is a very small
function; see:
pel_t *FastLine16Y_11 (pel_t *Pic, int y, int x, int height, int width)
{
return &Pic [y*width+x];
}
UMVLine16Y_11 is a bit bigger function.
--
You are receiving this mail because:
You are on the CC list for the bug.
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs