[PATCH] D108731: [TwoAddressInstructionPass] Improve the SrcRegMap and DstRegMap computation
Craig Topper via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Sep 22 09:38:00 PDT 2021
craig.topper added inline comments.
================
Comment at: llvm/test/CodeGen/X86/hhvm-cc.ll:106
; CHECK-NEXT: {{^#.*}}
+; CHECK-NEXT: pushq %r12
+; CHECK-NEXT: pushq %rax
----------------
Carrot wrote:
> craig.topper wrote:
> > This looks worse
> The code before TwoAddress pass is:
>
> bb.0.entry:
> liveins: $rbx, $r12, $rbp
> %2:gr64 = COPY killed $rbp
> %1:gr64 = COPY killed $r12
> %0:gr64 = COPY killed $rbx
> ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
> %3:gr64 = MOV32ri64 42
> $rbx = COPY killed %0:gr64
> $r12 = COPY %1:gr64
> $rbp = COPY killed %2:gr64
> $r15 = COPY killed %3:gr64
> CALL64pcrel32 target-flags(x86-plt) @php_short, <regmask $r12 $r12b $r12bh $r12d $r12w $r12wh>, implicit $rsp, implicit $ssp, implicit killed $rbx, implicit killed $r12, implicit killed $rbp, implicit killed $r15, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rbx, implicit-def $rbp
> ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
> %5:gr64 = COPY killed $rbp
> %6:gr64 = ADD64rr killed %5:gr64(tied-def 0), killed %1:gr64, implicit-def dead $eflags
> $rbx = COPY killed %6:gr64
> RET 0, killed $rbx
>
> In function call to php_short, $r12 is clobbered, with my patch, the map SrcRegMap[%1] = $r12 is cleared, it causes the following ADD instruction commuted. And later different registers are passed to isProfitableToConv3Addr, so different result is returned, and different lea/add instruction is generated.
>
> I'm also surprised by the RA result, the live range of %1 crosses the function call, $r12 is killed and clobbered by the function call, why does $r12 still allocated to %1? The direct usage of $r12 after the function call looks wrong to me.
>
The regmask for the function says r12 is preserved. All other registers are clobbered.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D108731/new/
https://reviews.llvm.org/D108731
More information about the llvm-commits
mailing list