https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117310
Bug ID: 117310 Summary: Unnecessary zero-extension for tailcall Product: gcc Version: 15.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: hjl.tools at gmail dot com CC: crazylht at gmail dot com Target Milestone: --- [hjl@gnu-tgl-3 tailcall-1]$ cat x.c extern int baz (char c1); int foo (char c1) { return baz (c1); } [hjl@gnu-tgl-3 tailcall-1]$ make CC=gcc gcc -O2 -S x.c [hjl@gnu-tgl-3 tailcall-1]$ cat x.s .file "x.c" .text .p2align 4 .globl foo .type foo, @function foo: .LFB0: .cfi_startproc movsbl %dil, %edi <<<< This isn't needed. jmp baz .cfi_endproc .LFE0: .size foo, .-foo .ident "GCC: (GNU) 14.2.1 20240912 (Red Hat 14.2.1-3)" .section .note.GNU-stack,"",@progbits [hjl@gnu-tgl-3 tailcall-1]$ movsbl isn't needed regardless if baz is compiled by GCC nor non-GCC.