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.

Reply via email to