https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78098
--- Comment #14 from H.J. Lu <hjl.tools at gmail dot com> --- (In reply to Martin Liška from comment #13) > (In reply to H.J. Lu from comment #12) > > (In reply to Martin Liška from comment #10) > > > (In reply to H.J. Lu from comment #9) > > > > (In reply to Richard Biener from comment #6) > > > > > Why would we be not able to tailcall in an interupt handler? > > > > > > > > We need to verify that the only instruction in an interrupt handler > > > > is a tail call to another interrupt handler. On the other hand, > > > > this interrupt handler isn't really needed at all. > > > > > > That can be vefief by fact that the symbol should have only one call (tail > > > call) and set node->icf_merged == true. > > > > Another issue with ICF tail call: > > > > ;; Function foo1 (foo1, funcdef_no=3, decl_uid=1443, cgraph_uid=0, > > symbol_order=0) > > > > foo1 (void * p) > > { > > ;; basic block 2, loop depth 0 > > ;; pred: ENTRY > > foo2 (p_2(D)); [tail call] > > ^^^^^^^^^^^^^^^^^^^^^^^^^^^ This isn't the same as sibcall. > > return; > > ^^^^^^ Here is a return statement. > > ;; succ: EXIT > > > > } > > If I remember correctly, this is gimple representation of the tail-call. If > you look at the generated binary, you'll see really just the jump > instruction: > > foo2: > .LFB1: > .cfi_startproc > movl $4276093056, %eax > movl $0, (%rax) > ret > .cfi_endproc > .LFE1: > .size foo2, .-foo2 > .p2align 4,,15 > .globl foo1 > .type foo1, @function > foo1: > .LFB3: > .cfi_startproc > jmp foo2 > .cfi_endproc Not with interrupt handler which needs different epilogue and prologue.