HomePhabricator

AArch64: Don't modify other modules in AArch64PromoteConstant

Description

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.

Details

Committed
dexonsmithMar 18 2016, 4:30 PM
Parents
rL263852: [sancov] clang-formatting SanitizerCoverage.cpp and fully pleasing clang-tidy.
Branches
Unknown
Tags
Unknown

Event Timeline

This commit brought 4 warnings with -Wdocumentation.
I am afraid if I could update them. Could you update them please?

/llvm/trunk/lib/Target/AArch64/AArch64PromoteConstant.cpp
146

"Use" is obsoleted.

159

"Use" is obsoleted.

173

"Val" is obsoleted.

174

"InsPtrPerFunc" is obsoleted.

I'll have a look when I get to work. Feel free to revert if this is breaking a bot, since I may get stuck in meetings.

Is this clang? If not, can you point me at a bot with the warnings so I can confirm they go away?

  • dpnes