llvm-project
8fa680b9 - [win][aarch64] Called globals must match for instructions to be considered identical (#175798)

Commit
96 days ago
[win][aarch64] Called globals must match for instructions to be considered identical (#175798) When trying to enable AArch64 Import Call Optimization for Windows, we noticed an issue where a call to an incorrect function was happening after the loader replaced a branch instruction. The root cause of this was that LLVM had decided to fold two branch instructions into one as they were both branches to the same register, however the value of the register would be different in either path as they were branches for different imported functions. This change updates `MachineInstr::isIdenticalTo` to also consider any "called global" that is attached to the instruction, and will consider two instructions as "not the same" if the globals differ. Also fixed a possible source of non-determinism: switched from using a `DenseMap` to using a `vector` for mapping sections to lists of called globals (we don't expect many sections, so no need to use a map) and sort the map by section name before emitting.
Author
Parents
Loading