[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>
wrote:
>>
>>> 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