[llvm-dev] Multi-Threading Compilers
Chris Lattner via llvm-dev
llvm-dev at lists.llvm.org
Fri Mar 27 20:31:12 PDT 2020
> On Mar 27, 2020, at 1:55 PM, David Blaikie <dblaikie at gmail.com> wrote:
> That's why I'm also wary of the idea of just having use lists empty
> for certain types without any other special handling. However, I would
> argue that if Value::use_begin() etc. contain an assertion that fails
> when called on one of the value types that don't have use lists, then
> the Liskov substition principle is de facto not broken. It basically
> leads to a situation that is as-if Value didn't have use lists in the
> first place, and only certain sub-types had use lists.
> But it doesn't - it means you write some generic code, test it with some cases & looks like it generalizes to other cases (you don't want to/can't test generic code with all possible generic arguments - that's why substitutability is important) then the code breaks when it hits a constant Value because it doesn't conform to the contract.
David is exactly right. To say the same thing in another way, such a design point would break library based design, one of the core principles of LLVM that makes it so powerful.
To make this explicit, a library that walks use-lists internally would have implicit dependencies in its APIs that some things are not allowed to be constants.
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the llvm-dev