<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css" style="display:none"><!-- p { margin-top: 0px; margin-bottom: 0px; }--></style>
</head>
<body dir="ltr" style="font-size:12pt;color:#000000;background-color:#FFFFFF;font-family:Calibri,Arial,Helvetica,sans-serif;">
<p>​Hi all,<br>
</p>
<p><br>
</p>
<p>> <span style="font-size:12pt">I feel it might be confusing to have a CHECK becomes effectively a CHECK-NOT,</span></p>
<p><span style="font-size:12pt">> especially if the RUN line is far from the CHECK line (which is often the case when</span></p>
<p><span style="font-size:12pt">> a single RUN line drives several groups of CHECK directives (e.g. code generation</span></p>
<p><span style="font-size:12pt">> tested for several functions for a specific feature, like PIC). You also loose control</span></p>
<p><span style="font-size:12pt">> on where the NOT should be: it would have to be at the same location as the</span></p>
<p><span style="font-size:12pt">> CHECK even though for the NOT case you might want to check it somewhere else.</span></p>
<p><span style="font-size:12pt"><br>
</span></p>
<p><span style="font-size:12pt">I think I agree with Thomas. </span></p>
<p><span style="font-size:12pt">+ the relationship with "<span style="color:rgb(33,33,33); font-family:Calibri,Arial,Helvetica,sans-serif; font-size:16px; background-color:rgb(255,255,255)">CHECK-NOT/CHECK-NEXT/CHECK-SAME" </span></span><span style="color: rgb(33, 33, 33);">might
 make </span><span style="color: rgb(33, 33, 33);">things overcomplicated probably</span><span style="color: rgb(33, 33, 33);">.</span></p>
<div dir="ltr" style="color:rgb(33,33,33)">
<div>
<div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
> How about having a concept of regex variables where you give a name</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
> to a given directive's pattern which you could reuse as another pattern. Something like (syntax TBD):</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
> </div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
> CHECK<NAME>: mov [[REG:r[0-9]+]], #42</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
> CHECK-NOT: <NAME><br>
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
I.e. without adding a new optinons for <span style="color: rgb(33, 33, 33); font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 16px; background-color: rgb(255, 255, 255);">FileCheck</span>, something like the following?<br>
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<div style="color: rgb(33, 33, 33); font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 16px; background-color: rgb(255, 255, 255);">
# RUN: llvm-sometool --print-string | FileCheck %s --check-prefix=CHECK1<br>
</div>
<div style="color: rgb(33, 33, 33); font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 16px; background-color: rgb(255, 255, 255);">
# RUN: llvm-sometool --no-print-string | FileCheck %s --check-prefix=<span style="color: rgb(33, 33, 33); font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 16px; background-color: rgb(255, 255, 255);">CHECK2</span><br>
</div>
<div style="color: rgb(33, 33, 33); font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 16px; background-color: rgb(255, 255, 255);">
<br>
</div>
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<span style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 16px; background-color: rgb(255, 255, 255);">CHECK1<NAME>: mov [[REG:r[0-9]+]], #42</span><br>
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<span style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 16px; background-color: rgb(255, 255, 255);">CHECK2-NOT: <NAME></span><br>
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
It might work probably.  We already have the ability to name parts of<br>
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
the output checked:<br>
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<div>// CHECK:      Dynamic Relocations {</div>
<div>// CHECK-NEXT:   {{.*}} R_AARCH64_RELATIVE - [[BAR_ADDR:.*]]<br>
</div>
<div><br>
</div>
<div>// CHECK:      Symbols [<br>
</div>
<div>// CHECK-NEXT:     Value: [[BAR_ADDR]]<br>
</div>
<div><br>
</div>
<div>So adding a way for naming the whole line does not look</div>
<div>an unreasonable/inconsistent extention to me I think.<br>
</div>
<br>
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:16px; background-color:rgb(255,255,255)">
Best regards,​</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:16px; background-color:rgb(255,255,255)">
George | Developer | Access Softek, Inc​​​​​​​<br>
</div>
<br>
</div>
<div id="appendonsend"></div>
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>From:</b> James Henderson <jh7370.2008@my.bristol.ac.uk><br>
<b>Sent:</b> 31 January 2020 09:14<br>
<b>To:</b> llvm-dev <llvm-dev@lists.llvm.org>; Thomas Preud'homme <thomasp@graphcore.ai>; Paul Robinson <paul.robinson@sony.com>; George Rimar <grimar@accesssoftek.com><br>
<b>Subject:</b> [RFC][FileCheck] New option to negate check patterns</font>
<div> </div>
</div>
<div>
<p><span style="background-color:#ffeb9c">     [This message was sent from somebody outside of your organisation]     </span></p>
<p> </p>
<div>
<div dir="ltr">
<div>Hi all,<br>
</div>
<div><br>
</div>
<div>There have been a few cases recently where I've noticed two test cases in the same lit test that do the same thing except invert the CHECK, to show that something is NOT present. I'm talking about something like the following:</div>
<div><br>
</div>
<div># RUN: llvm-sometool --print-string | FileCheck %s --check-prefix=STRING</div>
<div># RUN: llvm-sometool --no-print-string | FileCheck %s --check-prefix=NO-STRING<br>
</div>
<div># STRING: This is the string</div>
<div># NO-STRING-NOT: This is the string</div>
<div><br>
</div>
<div>In such cases, as can be seen, the CHECK line effectively has to be duplicated (either in an explicit check like in the above example, or via --implicit-check-not). Duplication is generally bad, especially in this sort of case, as it only takes a typo
 in the NOT pattern, or a careless developer/reviewer pair changing the output to cause the NOT pattern to no longer be useful.</div>
<div><br>
</div>
<div>I'd like to propose a new FileCheck option (e.g. --check-not-prefix/--check-not-prefixes) which allows implicitly converting a check prefix to a -NOT version of the same prefix. That would allow writing the above example as:</div>
<div><br>
</div>
<div>
<div># RUN: llvm-sometool --print-string | FileCheck %s --check-prefix=STRING</div>
<div># RUN: llvm-sometool --no-print-string | FileCheck %s --check-not-prefix=STRING<br>
</div>
<div># STRING: This is the string</div>
<div><br>
</div>
<div>If there was a typo or somebody changed the string output, this mechanism would ensure there is no chance of the pattern rotting.</div>
<div><br>
</div>
<div>Caveat: I don't know what would be the appropriate way of handling non-trivial checks, i.e. existing CHECK-NOT/CHECK-NEXT/CHECK-SAME etc. I'd appreciate any ideas on this.<br>
</div>
<div><br>
</div>
<div>Thoughts?</div>
<div><br>
</div>
<div>James<br>
</div>
</div>
</div>
</div>
</div>
<br>
<br>
<font size="1">** We have updated our privacy policy, which contains important information about how we collect and process your personal data. To read the policy, please click
<a href="http://www.graphcore.ai/privacy">here</a> **<br>
<br>
This email and its attachments are intended solely for the addressed recipients and may contain confidential or legally privileged information.<br>
If you are not the intended recipient you must not copy, distribute or disseminate this email in any way; to do so may be unlawful.<br>
<br>
Any personal data/special category personal data herein are processed in accordance with UK data protection legislation.<br>
All associated feasible security measures are in place. Further details are available from the Privacy Notice on the website and/or from the Company.<br>
<br>
Graphcore Limited (registered in England and Wales with registration number 10185006) is registered at 107 Cheapside, London, UK, EC2V 6DN.<br>
This message was scanned for viruses upon transmission. However Graphcore accepts no liability for any such transmission.<br>
<font></font></font></div>
</div>
</div>
</body>
</html>