https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117081
--- Comment #15 from H.J. Lu <hjl.tools at gmail dot com> --- r15-7400-gd3ff498c478ace gave $ cat x.c int f (int); int advance (int dz) { if (dz > 0) return (dz + dz) * dz; else return dz * f (dz); } [hjl@gnu-tgl-3 pr111673]$ make x.o /export/build/gnu/tools-build/gcc-gitlab-debug/build-x86_64-linux/gcc/xgcc -B/export/build/gnu/tools-build/gcc-gitlab-debug/build-x86_64-linux/gcc/ -O2 -c -o x.o x.c $ objdump -dw x.o x.o: file format elf64-x86-64 Disassembly of section .text: 0000000000000000 <advance>: 0: 85 ff test %edi,%edi 2: 7e 0c jle 10 <advance+0x10> 4: 0f af ff imul %edi,%edi 7: 8d 04 3f lea (%rdi,%rdi,1),%eax a: c3 ret b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) 10: 53 push %rbx 11: 89 fb mov %edi,%ebx 13: e8 00 00 00 00 call 18 <advance+0x18> 18: 0f af c3 imul %ebx,%eax 1b: 5b pop %rbx 1c: c3 ret $ Does it look OK?