Change theme
Help
Press space for more information.
Show links for this issue (Shortcut: i, l)
Copy issue ID
Previous Issue (Shortcut: k)
Next Issue (Shortcut: j)
Sign in to use full features.
Vote: I am impacted
Notification menu
Refresh (Shortcut: Shift+r)
Go home (Shortcut: u)
Pending code changes (auto-populated)
Maintained by go/gitwatcher - Please do not modify manually [ID: 530458]
Maintained by go/gitwatcher - Please do not modify manually [ID: 530406]
View issue level access limits(Press Alt + Right arrow for more information)
Request for new functionality
View staffing
Description
We currently 'flatten' all conditional branches, executing both edges even when all SIMD lanes are active/inactive. We can instead perform a jump in these cases.
A heuristic should determine whether it's worth making a potentially badly predictable jump, or whether flattening is still preferable, per conditional branch.
Basic blocks which are skipped when all SIMD lanes are inactive can omit run-time tests such as the one introduced for b/153380916 .
For loops which aren't unrolled we should also always jump when all lanes are inactive, since otherwise there is often an additional iteration as described in b/153380916 , and there's an exit jump anyway so we don't need a heuristic for avoiding misprediction in this case.