-
Bug
-
Resolution: Unresolved
-
P5
-
21
-
aarch64
On AArch64 with -XX:-UseTLAB, C2 can generate a sequence of instructions that isn't recognized by the current ALLOC/ALLOC_OF/ALLOC_ARRAY/ALLOC_ARRAY_OF Regex in the IR-based test framework as an object allocation. Some examples of such sequences:
```
090 mov R1, precise compiler/c2/irTests/scalarReplacement/AllocationMergesTests$Point: 0x000000013f1a5bf8:Constant:exact * # ptr
09c add R29, R0, #16 # ptr
0a0 spill R0 -> [sp, #16] # spill size = 64
0a4 call,static 0x0000000117492640 // ==> wrapper for: _new_instance_Java
--------------------------------
--------------------------------
094 + mov R1, precise compiler/c2/irTests/scalarReplacement/AllocationMergesTests$Point: 0x000000014929ec50:Constant:exact * # ptr
0a0 mulw R29, R10, R10
0a4 call,static 0x000000011722f2c0 // ==> wrapper for: _new_instance_Java
--------------------------------
--------------------------------
078 mov R1, precise compiler/c2/irTests/scalarReplacement/AllocationMergesTests$Point: 0x00000001404a7ac0:Constant:exact * # ptr
084 spill R10 -> [sp, #8] # spill size = 32
088 + addw R29, R3, R4
08c spill R3 -> [sp, #0] # spill size = 32
090 + spill R4 -> [sp, #4] # spill size = 32
090 call,static 0x0000000115bea3c0 // ==> wrapper for: _new_instance_Java
```
The Regex doesn't recognize the allocation because of the add, addw, mulw instructions. This is the current Regex: `(.*precise .*\\R((.*(?i:mov|xorl|nop|spill).*|\\s*)\\R)*.*(?i:call,static).*wrapper for: _new_instance_Java)`
```
090 mov R1, precise compiler/c2/irTests/scalarReplacement/AllocationMergesTests$Point: 0x000000013f1a5bf8:Constant:exact * # ptr
09c add R29, R0, #16 # ptr
0a0 spill R0 -> [sp, #16] # spill size = 64
0a4 call,static 0x0000000117492640 // ==> wrapper for: _new_instance_Java
--------------------------------
--------------------------------
094 + mov R1, precise compiler/c2/irTests/scalarReplacement/AllocationMergesTests$Point: 0x000000014929ec50:Constant:exact * # ptr
0a0 mulw R29, R10, R10
0a4 call,static 0x000000011722f2c0 // ==> wrapper for: _new_instance_Java
--------------------------------
--------------------------------
078 mov R1, precise compiler/c2/irTests/scalarReplacement/AllocationMergesTests$Point: 0x00000001404a7ac0:Constant:exact * # ptr
084 spill R10 -> [sp, #8] # spill size = 32
088 + addw R29, R3, R4
08c spill R3 -> [sp, #0] # spill size = 32
090 + spill R4 -> [sp, #4] # spill size = 32
090 call,static 0x0000000115bea3c0 // ==> wrapper for: _new_instance_Java
```
The Regex doesn't recognize the allocation because of the add, addw, mulw instructions. This is the current Regex: `(.*precise .*\\R((.*(?i:mov|xorl|nop|spill).*|\\s*)\\R)*.*(?i:call,static).*wrapper for: _new_instance_Java)`
- links to
-
Review openjdk/jdk/13631