[llvm-dev] [RFC] Compiled regression tests.

Robinson, Paul via llvm-dev llvm-dev at lists.llvm.org
Thu Jul 16 07:12:24 PDT 2020



> -----Original Message-----
> From: David Greene <david.greene at hpe.com>
> Sent: Wednesday, July 15, 2020 3:11 PM
> To: Robinson, Paul <paul.robinson at sony.com>; Michael Kruse
> <llvmdev at meinersbur.de>; 'llvm-dev at lists.llvm.org' <llvm-
> dev at lists.llvm.org>
> Subject: Re: [llvm-dev] [RFC] Compiled regression tests.
> 
> "Robinson, Paul via llvm-dev" <llvm-dev at lists.llvm.org> writes:
> 
> >> My use-case is for metadata, where I wanted to do this:
> >>
> >> CHECK: %r1 = add %r2, %r3
> >> CHECK-SAME: !some-metadata
> >> CHECK-SAME: !some-other-metadata
> >>
> >> where some-metadata and some-other-metadata might be reordered within
> >> the line (because some unrelated metadata got added to the
> instruction).
> >> In other words, all of these should match:
> >>
> >> %r1 = add %r2, %r3, !some-metadata !1, !some-other-metadata !2
> >> %r1 = add %r2, %r3, !some-other-metadata !1, !some-metadata !2
> >> %r1 = add %r2, %r3, !some-other-metadata !1, !some-unrelated-metadata
> !3,
> >> !some-metadata !2
> 
> >
> > I'd expect the following to do what you want:
> >
> > CHECK: %r1 = add %r2, %r3
> > CHECK-DAG: !some-metadata
> > CHECK-DAG: !some-other-metadata
> > CHECK: {{$}}
> >
> > Interestingly, it does not; I filed PR46634 to figure this out.
> 
> According to that PR this isn't supposed to work.  So I don't think we
> have a solution to do what I want.
> 
> And CHECK-DAG starts from the end of the previous match, and so can
> match things on the same line?  I didn't expect that given the
> documentation.
> 
>                      -David

Each CHECK-DAG starts from the end of the previous non-DAG match.
CHECK-DAG directives in the same group can't have overlapping matches.
Two successive CHECKs of any kind (other than CHECK-NEXT) are allowed 
to match on the same line; the effect of CHECK-SAME is to *require* 
that they are on the same line.

If you're looking for a way to match two patterns in either order on
a single line, I can think of two ways to do that.  One depends on 
having something distinctive that's guaranteed to be on the next line;
then you can do CHECK-DAG/CHECK-DAG/CHECK-NEXT.  I suspect this is
likely to be fragile.

If you don't have a distinctive next-line pattern, then I can't think
of a multi-directive way to achieve what you want.  You'd have to write 
a regex with alternatives, like this untested attempt:
CHECK: {{(!some-metadata.*!other-metadata)|(!other-metadata.*!some-metadata)}}

--paulr


More information about the llvm-dev mailing list