Commit 304d37f
authored
ZJIT: Fix hanging loop (ruby#16711)
ruby#16122 (c272297) worked for maximal SSA but
does not work for "normal" SSA. This is because it used information
propagating across block args/params as a proxy for tracking changes in
dependent blocks. To do this properly we need to move to something like
SCCP.
See example HIR diff from the repro in codegen test:
```diff
diff --git a/before b/after
index da00a9e..b1d2a58 100644
--- a/before
+++ b/after
@@ -64,10 +64,10 @@ bb7(v48:BasicObject):
StoreField v46, :_shape_id@0x4, v105
v79:HeapBasicObject = RefineType v46, HeapBasicObject
Jump bb5(v79, v41)
-bb5(v81:HeapBasicObject, v82:Fixnum[0]):
+bb5(v81:HeapBasicObject, v82:Fixnum):
PatchPoint NoEPEscape(set_value_loop)
v89:Fixnum[1] = Const Value(1)
PatchPoint MethodRedefined(Integer@ADDR, +@0x2b, cme:ADDR)
- v114:Fixnum[1] = Const Value(1)
+ v114:Fixnum = FixnumAdd v82, v89
Jump bb6(v81, v114)
```
(the `Fixnum[0]` is from type inference and the `Fixnum[1]`
is from constant folding having folded the `FixnumAdd`)
In the meantime, go back to looping over RPO repeatedly.
Fix Shopify#9741 parent 573b16a commit 304d37f
3 files changed
Lines changed: 166 additions & 67 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
5610 | 5610 | | |
5611 | 5611 | | |
5612 | 5612 | | |
| 5613 | + | |
| 5614 | + | |
| 5615 | + | |
| 5616 | + | |
| 5617 | + | |
| 5618 | + | |
| 5619 | + | |
| 5620 | + | |
| 5621 | + | |
| 5622 | + | |
| 5623 | + | |
| 5624 | + | |
| 5625 | + | |
| 5626 | + | |
| 5627 | + | |
| 5628 | + | |
| 5629 | + | |
| 5630 | + | |
| 5631 | + | |
| 5632 | + | |
| 5633 | + | |
| 5634 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3204 | 3204 | | |
3205 | 3205 | | |
3206 | 3206 | | |
3207 | | - | |
3208 | | - | |
3209 | | - | |
3210 | | - | |
3211 | | - | |
3212 | | - | |
3213 | | - | |
3214 | | - | |
3215 | | - | |
3216 | | - | |
3217 | | - | |
3218 | | - | |
3219 | 3207 | | |
3220 | | - | |
3221 | | - | |
3222 | | - | |
3223 | | - | |
3224 | | - | |
3225 | | - | |
3226 | | - | |
3227 | | - | |
3228 | | - | |
3229 | | - | |
3230 | | - | |
3231 | | - | |
3232 | | - | |
3233 | | - | |
3234 | | - | |
3235 | | - | |
3236 | | - | |
3237 | | - | |
3238 | | - | |
3239 | | - | |
3240 | | - | |
3241 | | - | |
3242 | 3208 | | |
3243 | | - | |
3244 | | - | |
3245 | | - | |
3246 | | - | |
3247 | | - | |
3248 | | - | |
3249 | | - | |
3250 | | - | |
3251 | | - | |
3252 | | - | |
3253 | | - | |
| 3209 | + | |
| 3210 | + | |
| 3211 | + | |
| 3212 | + | |
| 3213 | + | |
| 3214 | + | |
| 3215 | + | |
| 3216 | + | |
| 3217 | + | |
| 3218 | + | |
| 3219 | + | |
| 3220 | + | |
| 3221 | + | |
| 3222 | + | |
| 3223 | + | |
| 3224 | + | |
| 3225 | + | |
| 3226 | + | |
| 3227 | + | |
| 3228 | + | |
3254 | 3229 | | |
3255 | | - | |
3256 | | - | |
3257 | | - | |
3258 | | - | |
3259 | | - | |
3260 | | - | |
| 3230 | + | |
| 3231 | + | |
| 3232 | + | |
| 3233 | + | |
| 3234 | + | |
| 3235 | + | |
| 3236 | + | |
| 3237 | + | |
| 3238 | + | |
| 3239 | + | |
3261 | 3240 | | |
3262 | | - | |
3263 | | - | |
3264 | | - | |
3265 | | - | |
3266 | | - | |
3267 | | - | |
3268 | | - | |
3269 | | - | |
3270 | | - | |
3271 | | - | |
| 3241 | + | |
| 3242 | + | |
| 3243 | + | |
| 3244 | + | |
| 3245 | + | |
3272 | 3246 | | |
| 3247 | + | |
3273 | 3248 | | |
3274 | | - | |
| 3249 | + | |
| 3250 | + | |
| 3251 | + | |
| 3252 | + | |
| 3253 | + | |
| 3254 | + | |
| 3255 | + | |
| 3256 | + | |
| 3257 | + | |
| 3258 | + | |
| 3259 | + | |
| 3260 | + | |
3275 | 3261 | | |
3276 | | - | |
3277 | | - | |
3278 | | - | |
3279 | | - | |
3280 | | - | |
3281 | 3262 | | |
3282 | 3263 | | |
| 3264 | + | |
| 3265 | + | |
| 3266 | + | |
3283 | 3267 | | |
3284 | 3268 | | |
3285 | 3269 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
15544 | 15544 | | |
15545 | 15545 | | |
15546 | 15546 | | |
| 15547 | + | |
| 15548 | + | |
| 15549 | + | |
| 15550 | + | |
| 15551 | + | |
| 15552 | + | |
| 15553 | + | |
| 15554 | + | |
| 15555 | + | |
| 15556 | + | |
| 15557 | + | |
| 15558 | + | |
| 15559 | + | |
| 15560 | + | |
| 15561 | + | |
| 15562 | + | |
| 15563 | + | |
| 15564 | + | |
| 15565 | + | |
| 15566 | + | |
| 15567 | + | |
| 15568 | + | |
| 15569 | + | |
| 15570 | + | |
| 15571 | + | |
| 15572 | + | |
| 15573 | + | |
| 15574 | + | |
| 15575 | + | |
| 15576 | + | |
| 15577 | + | |
| 15578 | + | |
| 15579 | + | |
| 15580 | + | |
| 15581 | + | |
| 15582 | + | |
| 15583 | + | |
| 15584 | + | |
| 15585 | + | |
| 15586 | + | |
| 15587 | + | |
| 15588 | + | |
| 15589 | + | |
| 15590 | + | |
| 15591 | + | |
| 15592 | + | |
| 15593 | + | |
| 15594 | + | |
| 15595 | + | |
| 15596 | + | |
| 15597 | + | |
| 15598 | + | |
| 15599 | + | |
| 15600 | + | |
| 15601 | + | |
| 15602 | + | |
| 15603 | + | |
| 15604 | + | |
| 15605 | + | |
| 15606 | + | |
| 15607 | + | |
| 15608 | + | |
| 15609 | + | |
| 15610 | + | |
| 15611 | + | |
| 15612 | + | |
| 15613 | + | |
| 15614 | + | |
| 15615 | + | |
| 15616 | + | |
| 15617 | + | |
| 15618 | + | |
| 15619 | + | |
| 15620 | + | |
| 15621 | + | |
| 15622 | + | |
| 15623 | + | |
| 15624 | + | |
| 15625 | + | |
| 15626 | + | |
| 15627 | + | |
| 15628 | + | |
| 15629 | + | |
| 15630 | + | |
| 15631 | + | |
| 15632 | + | |
| 15633 | + | |
| 15634 | + | |
| 15635 | + | |
| 15636 | + | |
| 15637 | + | |
| 15638 | + | |
| 15639 | + | |
15547 | 15640 | | |
0 commit comments