[Bug target/86952] Avoid jump table for switch statement with -mindirect-branch=thunk
marxin at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Fri Nov 23 15:02:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86952
--- Comment #6 from Martin Liška <marxin at gcc dot gnu.org> ---
(In reply to H.J. Lu from comment #5)
> (In reply to Martin Liška from comment #4)
> > (In reply to H.J. Lu from comment #3)
> > > (In reply to Martin Liška from comment #2)
> > > > H.J. I can write a patch for it. Do you expect more expensive costs when
> > > > retpolines are enabled?
> > >
> > > retpoline is more expensive than 4 branches.
> >
> > Can you please make a microbenchmark that will expose how exactly is that
> > expensive? Based on that I can tune current costs.
>
> Is there a testcase where GCC generates a jump table for a five-entry
> switch statement?
$ cat jt.c
int global;
int foo3 (int x)
{
switch (x) {
case 0:
return 11;
case 1:
return 123;
case 2:
global += 1;
return 3;
case 3:
return 44;
case 4:
return 444;
default:
return 0;
}
}
$ gcc jt.c -O2 -S -o/dev/stdout
.file "jt.c"
.text
.p2align 4,,15
.globl foo3
.type foo3, @function
foo3:
.LFB0:
.cfi_startproc
cmpl $4, %edi
ja .L2
movl %edi, %edi
jmp *.L4(,%rdi,8)
.section .rodata
.align 8
.align 4
.L4:
.quad .L9
.quad .L7
.quad .L6
.quad .L5
.quad .L3
.text
.p2align 4,,10
.p2align 3
...
More information about the Gcc-bugs
mailing list