https://gcc.gnu.org/bugzilla/show_bug.cgi?id=127420
--- Comment #7 from Haochen Jiang <haochen.jiang at intel dot com> ---
(In reply to H.J. Lu from comment #6)
> (In reply to Haochen Jiang from comment #4)
> > (In reply to Hongtao Liu from comment #3)
> > > (In reply to Richard Biener from comment #2)
> > > > With profile information (autofdo lbr) we might know the most likely
> > > > target,
> > > > we also know whether this is a computed goto which is the only case
> > > > where we
> > > > can easily re-order blocks to have the destination follow the branch.
> > > > In the
> > > > computed goto case we should have an abnormal edge to it, possibly
> > > > annotated
> > > > with a frequency.
> > > >
> > > > I wonder if we can measure how many cases we slow down by emitting UD2?
> > >
> > > Interesting, we can do some investigation with SPEC to see how many
> > > indirect
> > > jump target it's fallthru instruction.
> >
> > Assisted by AI, I tried with taking samples for SPEC run to see how many of
> > them. The ratio compiler generated indirect jump actually turning out to be
> > "FALLTHRU" effect sampled versus compiler generated indirect jump.
> >
> > For SPEC2017, it is about 7.77%. For SPEC2026, it is 2.91%. But it varies a
> > lot between benchmarks. The largest benchmarks based on ratio is 735.gem5_r
> > and 734.vpr_r, with 26.70% and 23.47%. All >5% benchmarks are shown below:
> >
>
> What are typical cases? Are they C++ programs?
All SPEC2026 cases are CXX + C or CXX. For SPEC2017, 511 is CXX + C, the
remaining for mentioned is C only.
For 735, the case is a 20-case switch in a loop:
c3c090: inc %rdx
c3c093: mov %ecx,(%rax)
c3c095: movq $0x0,0x8(%rax)
c3c09d: cmp %rsi,%rdx
c3c0a0: jae c3c118
c3c0a2: cmp $0x13,%edx
c3c0a5: ja c3c2ff
c3c0ab: mov %edx,%ecx
c3c0ad: jmp *0x1021900(,%rcx,8) # 20-entry tablejump <- 7
bytes
c3c0b4: nopl 0x0(%rax)
c3c0b8: xor %ecx,%ecx # <-- 932,626 hits land here
c3c0ba: add $0x10,%rax
c3c0be: jmp c3c090
The 84% c3c0ad indirect jmp FALLTHRU to c3c0b8, leading to total 26.7% for 735.