[PATCH] AArch64: Don't modify other modules in AArch64PromoteConstant

Duncan P. N. Exon Smith via llvm-commits llvm-commits at lists.llvm.org
Mon Feb 29 21:08:14 PST 2016


ping

> On 2016-Feb-20, at 19:43, Duncan P. N. Exon Smith <dexonsmith at apple.com> wrote:
> 
> This patch stops 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.
> 
> <0001-AArch64-Don-t-modify-other-modules-in-AArch64Promote.patch>


-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-AArch64-Don-t-modify-other-modules-in-AArch64Promote.patch
Type: application/octet-stream
Size: 20796 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160229/88e81f87/attachment.obj>


More information about the llvm-commits mailing list