On Fri, 19 Dec 2025 09:02:38 GMT, Marc Chevalier <[email protected]> wrote:

>> I was suggesting that we should do what mainline does if 
>> `!InlineTypePassFieldsAsArgs`, would that make sense?
>> 
>> I.e. do `store_check(masm, dst.base(), dst);`
>
> That is the else-branch, right? Right now we have
> 
> if (tmp3 != noreg) {
>   __ mov(tmp3, dst.base());
>   store_check(masm, tmp3, dst);
> } else {
>   // It's OK to corrupt the dst.base() register.
>   store_check(masm, dst.base(), dst);
> }
> 
> If I understand well, you're suggesting to write
> 
> if (InlineTypePassFieldsAsArgs) {
>   if (tmp3 != noreg) {
>     __ mov(tmp3, dst.base());
>     store_check(masm, tmp3, dst);
>   } else {
>     // It's OK to corrupt the dst.base() register.
>     store_check(masm, dst.base(), dst);
>   }
> } else {
>   // as mainline
>   store_check(masm, dst.base(), dst);
> }
> 
> but to me, it looks equivalent to
> 
> 
> if (InlineTypePassFieldsAsArgs && tmp3 != noreg) {
>   __ mov(tmp3, dst.base());
>   store_check(masm, tmp3, dst);
> } else {
>   // It's OK to corrupt the dst.base() register.
>   store_check(masm, dst.base(), dst);
> }
> 
> since both else-branch are identical.
> 
> And this, I experimentally found that it's failing quite a lot, with 
> backtraces as I mentioned. Is there an obvious mistake in my logic I'm 
> missing?

Ah, you are right. I missed the outer `if (tmp3 != noreg) {` which is Valhalla 
specific. As we discussed off-thread, it would be good to get a better 
understanding of why this fails in Valhalla. Thanks a lot!

-------------

PR Review Comment: 
https://git.openjdk.org/valhalla/pull/1824#discussion_r2634372893

Reply via email to