summaryrefslogtreecommitdiffstats
path: root/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
diff options
context:
space:
mode:
authorPete Cooper <peter_cooper@apple.com>2015-05-09 00:51:03 +0000
committerPete Cooper <peter_cooper@apple.com>2015-05-09 00:51:03 +0000
commitd54fb8990171cf37f78ee64b5a94a1faae71b72a (patch)
treead4d974244b87a1a9ddfec00a2555bc08c418a0b /lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
parentdc2711446e877d0baea32f2663bb9b4602358c0e (diff)
downloadbcm5719-llvm-d54fb8990171cf37f78ee64b5a94a1faae71b72a.tar.gz
bcm5719-llvm-d54fb8990171cf37f78ee64b5a94a1faae71b72a.zip
[Fast-ISel] Don't mark the first use of a remat constant as killed.
When emitting something like 'add x, 1000' if we remat the 1000 then we should be able to mark the vreg containing 1000 as killed. Given that we go bottom up in fast-isel, a later use of 1000 will be higher up in the BB and won't kill it, or be impacted by the lower kill. However, rematerialised constant expressions aren't generated bottom up. The local value save area grows downwards. This means that if you remat 2 constant expressions which both use 1000 then the first will kill it, then the second, which is *lower* in the BB will read a killed register. This is the case in the attached test where the 2 GEPs both need to generate 'add x, 6680' for the constant offset. Note that this commit only makes kill flag generation conservative. There's nothing else obviously wrong with the local value save area growing downwards, and in fact it needs to for handling arbitrarily complex constant expressions. However, it would be nice if there was a solution which would let us generate more accurate kill flags, or just kill flags completely. llvm-svn: 236922
Diffstat (limited to 'lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud