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)
commit8142efa8ea172ae7eabb678e5df6467e85e5854c
treebf125bef46186e4cfc6e8568e092f6a21fd39714
parentc2e03a9c0d5356ff91ecb82d01f4b832c769bfbe
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.

llvm-svn: 224447
llvm/lib/CodeGen/ExecutionDepsFix.cpp