<div dir="ltr"><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Jul 16, 2020 at 10:12 AM Robinson, Paul via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br>
<br>
> -----Original Message-----<br>
> From: David Greene <<a href="mailto:david.greene@hpe.com" target="_blank">david.greene@hpe.com</a>><br>
> Sent: Wednesday, July 15, 2020 3:11 PM<br>
> To: Robinson, Paul <<a href="mailto:paul.robinson@sony.com" target="_blank">paul.robinson@sony.com</a>>; Michael Kruse<br>
> <<a href="mailto:llvmdev@meinersbur.de" target="_blank">llvmdev@meinersbur.de</a>>; '<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>' <llvm-<br>
> <a href="mailto:dev@lists.llvm.org" target="_blank">dev@lists.llvm.org</a>><br>
> Subject: Re: [llvm-dev] [RFC] Compiled regression tests.<br>
> <br>
> "Robinson, Paul via llvm-dev" <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>> writes:<br>
> <br>
> >> My use-case is for metadata, where I wanted to do this:<br>
> >><br>
> >> CHECK: %r1 = add %r2, %r3<br>
> >> CHECK-SAME: !some-metadata<br>
> >> CHECK-SAME: !some-other-metadata<br>
> >><br>
> >> where some-metadata and some-other-metadata might be reordered within<br>
> >> the line (because some unrelated metadata got added to the<br>
> instruction).<br>
> >> In other words, all of these should match:<br>
> >><br>
> >> %r1 = add %r2, %r3, !some-metadata !1, !some-other-metadata !2<br>
> >> %r1 = add %r2, %r3, !some-other-metadata !1, !some-metadata !2<br>
> >> %r1 = add %r2, %r3, !some-other-metadata !1, !some-unrelated-metadata<br>
> !3,<br>
> >> !some-metadata !2<br>
> <br>
> ><br>
> > I'd expect the following to do what you want:<br>
> ><br>
> > CHECK: %r1 = add %r2, %r3<br>
> > CHECK-DAG: !some-metadata<br>
> > CHECK-DAG: !some-other-metadata<br>
> > CHECK: {{$}}<br>
> ><br>
> > Interestingly, it does not; I filed PR46634 to figure this out.<br>
> <br>
> According to that PR this isn't supposed to work.  So I don't think we<br>
> have a solution to do what I want.<br>
> <br>
> And CHECK-DAG starts from the end of the previous match, and so can<br>
> match things on the same line?  I didn't expect that given the<br>
> documentation.<br>
> <br>
>                      -David<br>
<br>
Each CHECK-DAG starts from the end of the previous non-DAG match.<br>
CHECK-DAG directives in the same group can't have overlapping matches.<br>
Two successive CHECKs of any kind (other than CHECK-NEXT) are allowed <br>
to match on the same line; the effect of CHECK-SAME is to *require* <br>
that they are on the same line.<br>
<br>
If you're looking for a way to match two patterns in either order on<br>
a single line, I can think of two ways to do that.  One depends on <br>
having something distinctive that's guaranteed to be on the next line;<br>
then you can do CHECK-DAG/CHECK-DAG/CHECK-NEXT.  I suspect this is<br>
likely to be fragile.<br></blockquote><div><br></div><div>It's fragile: the CHECK-NEXT complains if it doesn't match on the line after whichever CHECK-DAG matches later in the input.  CHECK-NEXT does not verify that its match is on the line after whichever CHECK-DAG matches earlier in the input.</div><div><br></div><div>I wish we had a CHECK-DAG-SAME (and CHECK-DAG-NEXT) for cases like these.<br></div><div><br></div><div>Joel<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
If you don't have a distinctive next-line pattern, then I can't think<br>
of a multi-directive way to achieve what you want.  You'd have to write <br>
a regex with alternatives, like this untested attempt:<br>
CHECK: {{(!some-metadata.*!other-metadata)|(!other-metadata.*!some-metadata)}}<br>
<br>
--paulr<br>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote></div></div>