Commit 870e469
Eliminate redundant UpdatePrevInstr stores in InsertUpdatePrevInstr pass
Summary:
The InsertUpdatePrevInstr pass inserts UpdatePrevInstr instructions before every hasArbitraryExecution instruction to keep the frame's prev_instr/instr_ptr field current for stack traces and instrumentation. The existing pass already avoids emitting duplicate stores when the source line hasn't changed, but it still emits redundant stores when consecutive arbitrary-execution instructions are on different lines with no observable instructions between them. Only the last store before each observation point matters.
This change adds intra-block dead store elimination directly into the existing single-pass insertion loop. When a new UpdatePrevInstr is about to be inserted and the previously inserted one hasn't been observed by any hasArbitraryExecution instruction, the previous one is dead and gets removed. This is tracked with two variables per block: a pointer to the last emitted UpdatePrevInstr (`last_emitted`) and a bool indicating whether an arbitrary-execution instruction has been seen since the last emit (`saw_arbitrary`).
State is conservatively reset at inline function boundaries (BeginInlinedFunction/EndInlinedFunction) since the UpdatePrevInstr stores target different frames across those boundaries.
This is safe because deoptimization does not read the frame's prev_instr field — it uses FrameState::cur_instr_offs from the HIR metadata instead (see deopt.cpp reifyFrameImpl). The only consumers of prev_instr are instructions with hasArbitraryExecution (calls into Python/C that may inspect the frame for tracebacks, sys._getframe(), profilers, instrumentation), and our optimization guarantees the store is live before each such instruction.
The optimization adds zero extra passes over the IR — it piggybacks on the existing insertion walk with only a pointer and bool of additional state per block.
Reviewed By: alexmalyshev
Differential Revision: D103112980
fbshipit-source-id: a14b3f6e97f4aac0302cbff0324b00bbfccaab731 parent c5fb4b8 commit 870e469
4 files changed
Lines changed: 134 additions & 3 deletions
File tree
- cinderx
- Jit/hir
- PythonLib/test_cinderx
- RuntimeTests
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3734 | 3734 | | |
3735 | 3735 | | |
3736 | 3736 | | |
| 3737 | + | |
| 3738 | + | |
| 3739 | + | |
| 3740 | + | |
3737 | 3741 | | |
3738 | 3742 | | |
3739 | 3743 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
88 | 88 | | |
89 | 89 | | |
90 | 90 | | |
| 91 | + | |
91 | 92 | | |
92 | 93 | | |
93 | 94 | | |
94 | | - | |
95 | | - | |
96 | | - | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
97 | 105 | | |
98 | 106 | | |
99 | 107 | | |
| |||
135 | 143 | | |
136 | 144 | | |
137 | 145 | | |
| 146 | + | |
| 147 | + | |
138 | 148 | | |
139 | 149 | | |
140 | 150 | | |
141 | 151 | | |
142 | 152 | | |
143 | 153 | | |
| 154 | + | |
| 155 | + | |
144 | 156 | | |
145 | 157 | | |
146 | 158 | | |
| |||
157 | 169 | | |
158 | 170 | | |
159 | 171 | | |
| 172 | + | |
160 | 173 | | |
161 | 174 | | |
162 | 175 | | |
163 | 176 | | |
164 | 177 | | |
| 178 | + | |
165 | 179 | | |
166 | 180 | | |
167 | 181 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
110 | 110 | | |
111 | 111 | | |
112 | 112 | | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
113 | 136 | | |
114 | 137 | | |
115 | 138 | | |
| |||
Lines changed: 90 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
0 commit comments