[llvm] [BOLT] Improve InsertNegateRAStatePass::inferUnknownStates (PR #163381)
Gergely Bálint via llvm-commits
llvm-commits at lists.llvm.org
Tue Nov 11 11:06:03 PST 2025
================
@@ -200,16 +200,29 @@ This pass runs after optimizations. It performns the _inverse_ of MarkRAState pa
Some BOLT passes can add new Instructions. In InsertNegateRAStatePass, we have
to know what RA state these have.
-The current solution has the `inferUnknownStates` function to cover these, using
-a fairly simple strategy: unknown states inherit the last known state.
-
-This will be updated to a more robust solution.
-
> [!important]
> As issue #160989 describes, unwind info is incorrect in stubs with multiple callers.
> For this same reason, we cannot generate correct pac-specific unwind info: the signess
> of the _incorrect_ return address is meaningless.
+Assignment of RAStates to newly generated instructions is done in `inferUnknownStates`.
+We have three different cases to cover:
+
+1. If a BasicBlock has some instructions with known RA state, and some without, we
+ can copy the RAState of known instructions to the unknown ones. As the control
+ flow only changes between BasicBlocks, instructions in the same BasicBlock have the
+ same return address.
+
+2. If all instructions in a BasicBlock are unknown, we can look at all CFG neighbors
+ (that is predecessors/successors). The RAState should be the same as of the
+ neighboring blocks. Conflicting RAStates in neighbors indicate an error. Such
+ functions should be ignored.
+
+3. If a BasicBlock has no CFG neighbors, we have to copy the RAState of the previous
+ BasicBlock in layout order.
+
----------------
bgergely0 wrote:
exactly.
https://github.com/llvm/llvm-project/pull/163381
More information about the llvm-commits
mailing list