[llvm-dev] Multi-Threading Compilers

Doerfert, Johannes via llvm-dev llvm-dev at lists.llvm.org
Wed Mar 25 17:14:29 PDT 2020

On 3/25/20 6:47 PM, Chris Lattner wrote:
 > On Mar 25, 2020, at 4:14 PM, Doerfert, Johannes <jdoerfert at anl.gov> 
 >>> Today, you can walk the use-list of any operand to an instruction.
 >>> This would be broken by this change,
 >> First, you would be able to walk the use-list of any operand. So nothing
 >> breaks just yet.
 > If I understand correctly, you are suggesting that you can walk it,
 > but you don’t get all the uses.  This is extremely dangerous, it would
 > be better to abort.

Correct, that is what I suggested.

 >>> which would make it much easier to write buggy/incorrect compiler code
 >>> and passes.
 >> I argued (implicitly) above that the uses of a Constant[Int/Float/...]
 >> are really not interesting if no-one ever walks them.
 > There is a difference between “no one ever walks them in practice” and
 > “no one can walk them.    :-)

Sure. That is why I argued below walking the incomplete list is not a
problem. At leas I'm not aware of a problem yet.

 >> Let's assume you
 >> walk the uses and we "removed" the use list so there are none, what does
 >> that mean. I'd say, nothing much. If you inspect the Value and see it's
 >> a Constant you have to assume it has Aliases that denote the same value
 >> so direct uses are not really interesting anyway. If you inspect further
 >> and see ConstantInt/Float/... you can deal with the missing use list. If
 >> you don't inspect the Value you cannot really make much of an empty use
 >> list, or can you? I doubt we ever call RAUW on a ConstantInt/Float/...
 >> Feel free to elaborate on your concerns.
 > Have you tested your thesis that no one walks the use-def chains?  You
 > could just add an assertion to the compiler (the methods like
 > use_begin() hasOneUse() etc), that aborts on constants, then run the
 > test suite.

That is what I suggested a few emails back. However, I never said it is
safe because no one walks it but what I suggested is that it will
actually not impact much if we don't remember the uses of Constants
(except globals).

 > -Chris

More information about the llvm-dev mailing list