diff options
| author | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2016-03-18 23:30:54 +0000 | 
|---|---|---|
| committer | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2016-03-18 23:30:54 +0000 | 
| commit | c3fa1eded258aa38a30911af6602892846efd6d1 (patch) | |
| tree | b637a19331161af2881feb05f0e323665da04b60 /lldb/source/Commands/CommandObjectMemory.cpp | |
| parent | 759aca01ce9490c518e211c9e85e8dce7443a332 (diff) | |
| download | llvm-c3fa1eded258aa38a30911af6602892846efd6d1.zip llvm-c3fa1eded258aa38a30911af6602892846efd6d1.tar.gz llvm-c3fa1eded258aa38a30911af6602892846efd6d1.tar.bz2 | |
AArch64: Don't modify other modules in AArch64PromoteConstant
Avoid modifying other modules in `AArch64PromoteConstant` when the
constant is `ConstantData` (a horrible accident, I'm sure, caught by an
experimental follow-up to r261464).
Previously, this walked through all the users of a constant, but that
reaches into other modules when the constant doesn't depend transitively
on a `GlobalValue`!  Since we're walking instructions anyway, just
modify the instructions we actually see.
As a drive-by, instead of storing `Use` and getting the instructions
again via `Use::getUser()` (which is not a constantant time lookup),
store `std::pair<Instruction, unsigned>`.  Besides being cheaper, this
makes it easier to drop use-lists form `ConstantData` in the future.
(I threw this in because I was touching all the code anyway.)
Because the patch completely changes the traversal logic, it looks
like a rewrite of the pass, but the core logic is all the same (or
should be, minus the out-of-module changes).  In other words, there
should be NFC as long as the LLVMContext only has a single Module.
I didn't think of a good way to test this, but I hope to submit a patch
eventually that makes walking these use-lists illegal/impossible.
llvm-svn: 263853
Diffstat (limited to 'lldb/source/Commands/CommandObjectMemory.cpp')
0 files changed, 0 insertions, 0 deletions
