https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59521
--- Comment #11 from Martin Liška <marxin at gcc dot gnu.org> --- (In reply to Yuri Gribov from comment #10) > (In reply to Martin Liška from comment #9) > > The patch works for me for the described case, but does not for PGO, which > > should do the same based on real numbers: > > Problem here is that we optimize only very_likely edges. They requires > 99.95% probability whereas in your testcase we only get 90%. Changing mods > to "% 10000" and "% 1000000" results in desired asm: > > cmpl $1, %eax > je .L3 > cmpl $10, %eax > je .L4 > cmpl $100, %eax > je .L5 Maybe I miss something, but I would expect to sort all branches in emit_case_decision_tree as either predictors can sort branches, or one have a profile feedback. Having a chain of equal comparisons, that should be always beneficial, or? > > > Just a small note, Honza's planning to rewrite switch expansion to happen on > > tree level. Maybe (hopefully) such transformations > > will be easier on tree level? > > Thanks, that's important to consider. I'll send patch for review and Cc him > to maybe comment. Probly I'll just rebase when his work is in. Actually he was convincing me to rewrite it, but I still have more unfinished tasks from history which I should start with ;)