RFR: 8343685: C2 SuperWord: refactor VPointer with MemPointer [v6]

Christian Hagedorn chagedorn at openjdk.org
Thu Jan 16 15:48:06 UTC 2025


On Thu, 16 Jan 2025 08:34:13 GMT, Emanuel Peter <epeter at openjdk.org> wrote:

>> I think I would rather not do that, because it would be too verbose. With the `TraceAlignVector` `ALIGN_VECTOR` flag we do this printing here, which should be on one line:
>> 
>> `solution for pack:         m * q(2) + r(0) - invar / (iv_scale(4) * pre_stride) [- init / pre_stride], mem_ref[1047]`
>> 
>> And the `invar` is already printed earlier, so it is known from the context:
>> 
>>   invar = SUM(invar_summands), invar_summands:
>>    4 * [101 LoadI] ->   101  LoadI  === _ 7 100  [[ 1083 226 235 280 372 458 ]]  @java/lang/Class (java/io/Serializable,java/lang/constant/Constable,java/lang/reflect/AnnotatedElement,java/lang/invoke/TypeDescriptor,java/lang/reflect/GenericDeclaration,java/lang/reflect/Type,java/lang/invoke/TypeDescriptor$OfField):exact+144 *, name=zero, idx=5; #int !orig=[225] !jvms: Test::test00001 @ bci:10 (line 94)
>>   invar_factor = 4
>> 
>> 
>> This is the fuller context:
>> 
>>  vector mem_ref: 1047  StoreI  === 1119 1117 1056 1048  [[ 1021 1023 1029 ]]  @int[int:>=0] (java/lang/Cloneable,java/io/Serializable):exact+any *, idx=6;  Memory: @int[int:>=0] (java/lang/Cloneable,java/io/Serializable):NotNull:exact+any *, idx=6; !orig=902,764,625,185,650 !jvms: Test::test00001 @ bci:24 (line 94)
>>   VPointer: VPointer[size:  4, object, base(37 CastPP) + con( 16) + iv_scale(  4) * iv + invar(4 * [101 LoadI])]
>>   vector_width = 64
>>   aw = alignment_width = min(vector_width(64), ObjectAlignmentInBytes(8)) = 8
>>   invar = SUM(invar_summands), invar_summands:
>>    4 * [101 LoadI] ->   101  LoadI  === _ 7 100  [[ 1083 226 235 280 372 458 ]]  @java/lang/Class (java/io/Serializable,java/lang/constant/Constable,java/lang/reflect/AnnotatedElement,java/lang/invoke/TypeDescriptor,java/lang/reflect/GenericDeclaration,java/lang/reflect/Type,java/lang/invoke/TypeDescriptor$OfField):exact+144 *, name=zero, idx=5; #int !orig=[225] !jvms: Test::test00001 @ bci:10 (line 94)
>>   invar_factor = 4
>>   iv = init(   0) + pre_iter * pre_stride(1) + main_iter * main_stride(16)
>>   adr = base[37] + con(16) + invar + iv_scale(4) * iv      = base[37] + C_const(16) + C_invar(4) * var_invar + C_init(0) * var_init + C_pre(4) * pre_iter + C_main(64) * main_iter
>>   init is constant:
>>     C_const_init = 0
>>     C_init = 0
>>   invariant present:
>>     C_invar = invar_factor = 4
>>   C_const = con(16) + iv_scale(4) * C_const_init(0) = 16
>>   C_pre   = iv_scale(4) * pre_stride(1) = 4
>>   C_main  = iv_scale(4) * main_stride(16) = 64
>>   EQ(1 ): (C_const(16) + C_invar(4) * var_invar + C_...
>
> Ok, now printing it like this, looks better to me :)
> 
>   solution for pack:         m * q(2) + r(0) - invar(4 * [101 LoadI] + 4 * [105 LoadI]) / (iv_scale(4) * pre_stride) [- init / pre_stride], mem_ref[1067]
>   intersection with current: m * q(2) + r(0) - invar(4 * [101 LoadI] + 4 * [105 LoadI]) / (iv_scale(4) * pre_stride) [- init / pre_stride], mem_ref[1067]

I like that, too. Thanks for improving it!

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

PR Review Comment: https://git.openjdk.org/jdk/pull/21926#discussion_r1918781423


More information about the hotspot-compiler-dev mailing list