[PATCH] D55563: [BDCE][DemandedBits] Detect dead uses of undead instructions

Nikita Popov via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Dec 11 09:21:07 PST 2018


nikic created this revision.
nikic added reviewers: hfinkel, spatel, RKSimon.
Herald added a subscriber: llvm-commits.

This (mostly) fixes https://bugs.llvm.org/show_bug.cgi?id=39771.

BDCE currently detects instructions that don't have any demanded bits and replaces their uses with zero. However, if an instruction has multiple uses, then some of the uses may be dead (have no demanded bits) even though the instruction itself is still live. This patch extends DemandedBits/BDCE to detect such uses and replace them with zero. While this will not immediately render any instructions dead, it may lead to simplifications (in the motivating case, by converting a rotate into a simple shift), break dependencies, etc.

The implementation tries to strike a balance between analysis power and complexity/memory usage. Originally I wanted to track demanded bits on a per-use level, but ultimately we're only really interested in whether a use is entirely dead or not. I'm using an extra set to track which uses are dead. However, as initially all uses are dead, I'm not storing uses those user is also dead. This case is checked separately instead.

The test case has a couple of cases that are simplified yet. In particular, we're only looking at uses of instructions right now. I think it would make sense to also extend this to arguments. Furthermore DemandedBits doesn't yet know some of the tricks that InstCombine does for the demanded bits or bitwise or/and/xor in combination with known bits information.


Repository:
  rL LLVM

https://reviews.llvm.org/D55563

Files:
  include/llvm/Analysis/DemandedBits.h
  lib/Analysis/DemandedBits.cpp
  lib/Transforms/Scalar/BDCE.cpp
  test/Transforms/BDCE/dead-uses.ll

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D55563.177726.patch
Type: text/x-patch
Size: 7204 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20181211/2d065308/attachment.bin>


More information about the llvm-commits mailing list