|
Ran
|
Jobs
1
|
Files
89
|
Run time
1min
|
Badge
README BADGES
|
push
github
ARM64: Prevent STP fusion for conditional code emitted by TBAR. Thanks to Peter Cawley. (cherry picked from commit 7cc53f0b8) Assume we have a trace for the several `setmetatable()` calls to the same table. This trace contains the following IR: | 0011 p64 FREF 0003 tab.meta | ... | 0018 x0 > tab TNEW 0 0 | 0019 tab TBAR 0003 | 0020 tab FSTORE 0011 0018 The expected mcode to be emitted for the last two IRs is the following: | 55626cffb0 ldrb w30, [x19, 8] ; tab->marked | 55626cffb4 tst w30, 0x4 ; Is black? | 55626cffb8 beq 0x626cffd0 ; Skip marking. | 55626cffbc ldr x27, [x20, 128] | 55626cffc0 and w30, w30, 0xfffffffb | 55626cffc4 str x19, [x20, 128] | 55626cffcc strb w30, [x19, 8] ; tab->marked | 55626cffc8 str x27, [x19, 24] ; tab->gclist | 55626cffd0 str x0, [x19, 32] ; tab->metatable But the last 2 instructions are fused into the following `stp`: | 55581dffd0 stp x27, x0, [x19, 48] Hence, the GC propagation frontier back is done partially, since `str x27, [x19, 24]` is not skipped despite TBAR semantics. This leads to the incorrect value in the `gclist` and the segmentation fault during its traversal on GC step. This patch prevents this fusion via switching instruction for `tab->gclist` and `tab->marked` storing. Sergey Kaplun: * added the description and the test for the problem Part of tarantool/tarantool#11691 Reviewed-by: Sergey Bronnikov <sergeyb@tarantool.org> Signed-off-by: Sergey Kaplun <skaplun@tarantool.org> (cherry picked from commit 9149be331)
5711 of 6047 branches covered (94.44%)
Branch coverage included in aggregate %.
21795 of 23509 relevant lines covered (92.71%)
4015433.33 hits per line
| Lines | Coverage | ∆ | File |
|---|---|---|---|
| 1 |
78.52 |
0.0% | src/lj_opt_fold.c |
| 2 |
99.18 |
-0.33% | src/lj_gc.c |
| 6 |
96.7 |
0.0% | src/lj_asm.c |
| ID | Job ID | Ran | Files | Coverage | |
|---|---|---|---|---|---|
| 1 | 17609805821.1 | 89 |
93.06 |
GitHub Action Run |
| Coverage | ∆ | File | Lines | Relevant | Covered | Missed | Hits/Line | Branch Hits | Branch Misses |
|---|