[llvm-dev] RFC: Are auto-generated assertions a good practice?

Alex Bradbury via llvm-dev llvm-dev at lists.llvm.org
Fri May 4 02:55:41 PDT 2018


On 4 May 2018 at 10:25, Alexandros Lamprineas via llvm-dev
<llvm-dev at lists.llvm.org> wrote:
> Hello llvm-dev,
>
>
> On a recent code review I was asked to auto-generate assertion checks for my
> unit test. I wasn't aware that this was even possible. I am referring to the
> python `update` scripts under `utils` directory. My first reaction was wow!
> I found it very practical and useful. It saves you significant amount of
> time when writing a regression test. So I gave it a try. The generated
> checks were satisfying enough, almost exactly what I wanted. Then I got a
> bit sceptical about them. I am worried that auto-generating tests based on
> the compiler output can be quite dangerous. The tests will always pass
> regardless of whether the compiler emits right or wrong code, therefore you
> have to be certain that they impose the desired compiler behaviour. I guess
> the question here is how often we should be using those scripts.

Like many test-related issues, it comes down to personal judgement. It
is of course easy to create test/CodeGen/*/* tests that pass
regardless of whether the compiler breaks broken code regardless of
whether the test CHECK lines are generated by
update_llc_test.checks.py or not.

I find it very helpful to have auto-generated CHECK lines that pick up
any codegen change, but this can of course be problematic for very
large test cases that are likely to see churn due to scheduling or
regallloc changes. Being able to regenerate the CHECK lines and view
the diff is also incredibly helpful when rebasing or moving a patch
between different branches.

My policy for test/Codegen/RISCV is to use update_llc_test_checks.py
wherever possible, except in cases where there are so many CHECK lines
on the output that they obscure the property being tested, indicating
that a more limited hand-crafted pattern would be superior.

Best,

Alex


More information about the llvm-dev mailing list