ExecutionDepsFix: Correctly handle wide registers.
authorMatthias Braun <matze@braunis.de>
Wed, 17 Dec 2014 19:13:47 +0000 (19:13 +0000)
committerMatthias Braun <matze@braunis.de>
Wed, 17 Dec 2014 19:13:47 +0000 (19:13 +0000)
commitcd56c19f3c6645c69686132a5c525cadab330c21
treee14a5ac53727e26b696bf8c567a0b679be854b3f
parent544f63e84a76cdff41109fdec4fa2f65a60e3917
ExecutionDepsFix: Correctly handle wide registers.

The ExecutionDepsFix previously mapped each register to 1 or zero
registers of the register class it was called with and therefore
simulating liveness for.  This was problematic for cases involving wider
registers like Q0 on ARM where ExecutionDepsFix gets invoked for the Dxx
registers. In these cases the wide register would get mapped to the last
matching D register, while it should have been all matching D registers.
This commit changes the AliasMap to use a SmallVector to map registers
to potentially multiple destination regclass registers. This is required
to avoid regressions with subregister liveness tracking enabled.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224447 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/ExecutionDepsFix.cpp