[PATCH] D143248: Emit CFI directives in epilogue and enable CFIFixup pass for RISC-V.
Varun Kumar E via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Sun Apr 16 19:36:46 PDT 2023
varunkumare99 added a comment.
In D143248#4238207 <https://reviews.llvm.org/D143248#4238207>, @shiva0217 wrote:
> In D143248#4177761 <https://reviews.llvm.org/D143248#4177761>, @varunkumare99 wrote:
>
>> In D143248#4131555 <https://reviews.llvm.org/D143248#4131555>, @shiva0217 wrote:
>>
>>> Hi Varun,
>>>
>>> It might be good to have a simple case to illustrate that cfi_remember_state and cfi_restore_state can be generated properly with epilogue CFI.
>>> For examle, could the following case generated with cfi_remember_state and cfi_restore_state as GCC?
>>>
>>> extern void foo(void);
>>> void f(int *i) {
>>> if (*i == 0) {
>>> *i = 1;
>>> foo();
>>> return;
>>> } else {
>>> __builtin_printf("Hi");
>>> *i=0;
>>> }
>>> }
>>
>> Hi Shiva, the following is the assembly emitted.
>>
>> f:
>> .Lfunc_begin0:
>> .loc 0 2 0
>> .cfi_startproc
>> addi sp, sp, -16
>> .cfi_def_cfa_offset 16
>> sd ra, 8(sp)
>> sd s0, 0(sp)
>> .cfi_offset ra, -8
>> .cfi_offset s0, -16
>> .cfi_remember_state
>> mv s0, a0
>> .Ltmp0:
>> .loc 0 3 6 prologue_end
>> lw a0, 0(a0)
>> .Ltmp1:
>> .loc 0 3 6 is_stmt 0
>> beqz a0, .LBB0_2
>> .Ltmp2:
>> .loc 0 8 3 is_stmt 1
>> lui a0, %hi(.L.str)
>> addi a0, a0, %lo(.L.str)
>> call printf
>> .Ltmp3:
>> .loc 0 9 5
>> sw zero, 0(s0)
>> .Ltmp4:
>> .loc 0 11 1
>> ld ra, 8(sp)
>> ld s0, 0(sp)
>> .Ltmp5:
>> .cfi_restore ra
>> .cfi_restore s0
>> .loc 0 11 1 epilogue_begin is_stmt 0
>> addi sp, sp, 16
>> .cfi_def_cfa_offset 0
>> ret
>> .LBB0_2:
>> .cfi_restore_state
>> .Ltmp6:
>> .loc 0 0 1
>> li a0, 1
>> .Ltmp7:
>> .loc 0 4 6 is_stmt 1
>> sw a0, 0(s0)
>> .loc 0 5 3
>> ld ra, 8(sp)
>> ld s0, 0(sp)
>> .Ltmp8:
>> .cfi_restore ra
>> .cfi_restore s0
>> .loc 0 5 3 epilogue_begin is_stmt 0
>> addi sp, sp, 16
>> .cfi_def_cfa_offset 0
>> .Ltmp9:
>> tail foo
>> .Ltmp10:
>> .Lfunc_end0:
>> .size f, .Lfunc_end0-f
>> .cfi_endproc
>
> Hi Varun,
>
> Could you add the case as a unit test?
> Shouldn't all the epilogue CFI guard by EmitCFI?
>
> The content of epilogue looks good to me.
> Please wait for Maskray and Kito's comments.
Hi Shiva,
I have updated that changes.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D143248/new/
https://reviews.llvm.org/D143248
More information about the llvm-commits
mailing list