-
Ng Zhi An authored
The idea of effect level was introduced in https://codereview.chromium.org/1706763002. This change was trying to optimize sequences like: x = load o, i cmp 1, x to use a memory operand: cmp 1, [o+i] However, the load can be invalidated, like so: x = load o, i store o, i, v cmp 1, x Then, selecting a memory operand for cmp would be incorrect (it should be using the loaded value x, not the store valued v: store o, i, v cmp 1, [o+i] # uses v, which is wrong, should use x Effect levels were introduced to mark where levels of potentially invalidating instructions: effect level x = load o, i 0 store o, i, v 1 cmp 1, x 1 Then when selecting instructions, CanCover will check to ensure that cmp and load are on the same level. ProtectedLoad, and LoadTransforms should not affect the effect levels in this case, because they don't invalidate any prior loads: x = load o, i y = protected load o, i cmp 1, x Becomes: y = protected load o, i cmp 1, [o+i] Bug: v8:12189 Change-Id: I585b94320def4ba554ae955fa5f8fcc9efd6dafe Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3158551Reviewed-by: Georg Neis <neis@chromium.org> Commit-Queue: Zhi An Ng <zhin@chromium.org> Cr-Commit-Position: refs/heads/main@{#76826}
66cbbb7a