<div dir="ltr"><div>Yes - the specific case I was looking at had unwind info, so I didn't notice the deficiency. We should be able to cut and paste another clause from x86 or some other target. <br><br>Please feel free to make the script better for aarch or any other targets you're interested in. Thanks!<br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Oct 10, 2017 at 5:46 AM, Alex Bradbury <span dir="ltr"><<a href="mailto:asb@asbradbury.org" target="_blank">asb@asbradbury.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 25 August 2017 at 20:33, Sanjay Patel via llvm-commits<br>
<div><div class="h5"><<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br>
> Author: spatel<br>
> Date: Fri Aug 25 12:33:18 2017<br>
> New Revision: 311795<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=311795&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=311795&view=rev</a><br>
> Log:<br>
> [utils] add aarch64 target as an option<br>
><br>
> I don't know enough to add a custom scrubber for AArch64, so I just re-used ARM.<br>
><br>
><br>
> Modified:<br>
>     llvm/trunk/utils/update_llc_<wbr>test_checks.py<br>
><br>
> Modified: llvm/trunk/utils/update_llc_<wbr>test_checks.py<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/update_llc_test_checks.py?rev=311795&r1=311794&r2=311795&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/utils/<wbr>update_llc_test_checks.py?rev=<wbr>311795&r1=311794&r2=311795&<wbr>view=diff</a><br>
> ==============================<wbr>==============================<wbr>==================<br>
> --- llvm/trunk/utils/update_llc_<wbr>test_checks.py (original)<br>
> +++ llvm/trunk/utils/update_llc_<wbr>test_checks.py Fri Aug 25 12:33:18 2017<br>
> @@ -26,24 +26,11 @@ def llc(args, cmd_args, ir):<br>
><br>
>  # RegEx: this is where the magic happens.<br>
><br>
> -SCRUB_WHITESPACE_RE = re.compile(r'(?!^(|  \w))[ \t]+', flags=re.M)<br>
> -SCRUB_TRAILING_WHITESPACE_RE = re.compile(r'[ \t]+$', flags=re.M)<br>
> -SCRUB_KILL_COMMENT_RE = re.compile(r'^ *#+ +kill:.*\n')<br>
> -SCRUB_LOOP_COMMENT_RE = re.compile(<br>
> -    r'# =>This Inner Loop Header:.*|# in Loop:.*', flags=re.M)<br>
> -<br>
>  ASM_FUNCTION_X86_RE = re.compile(<br>
>      r'^_?(?P<func>[^:]+):[ \t]*#+[ \t]*@(?P=func)\n[^:]*?'<br>
>      r'(?P<body>^##?[ \t]+[^:]+:.*?)\s*'<br>
>      r'^\s*(?:[^:\n]+?:\s*\n\s*\.<wbr>size|\.cfi_endproc|\.globl|\.<wbr>comm|\.(?:sub)?section|# -- End function)',<br>
>      flags=(re.M | re.S))<br>
> -SCRUB_X86_SHUFFLES_RE = (<br>
> -    re.compile(<br>
> -        r'^(\s*\w+) [^#\n]+#+ ((?:[xyz]mm\d+|mem)( \{%k\d+\}( \{z\})?)? = .*)$',<br>
> -        flags=re.M))<br>
> -SCRUB_X86_SP_RE = re.compile(r'\d+\(%(esp|rsp)\)<wbr>')<br>
> -SCRUB_X86_RIP_RE = re.compile(r'[.\w]+\(%rip\)')<br>
> -SCRUB_X86_LCP_RE = re.compile(r'\.LCPI[0-9]+_[0-<wbr>9]+')<br>
><br>
>  ASM_FUNCTION_ARM_RE = re.compile(<br>
>          r'^(?P<func>[0-9a-zA-Z_]+):\n' # f: (name of function)<br>
> @@ -52,12 +39,13 @@ ASM_FUNCTION_ARM_RE = re.compile(<br>
>          r'.Lfunc_end[0-9]+:', # .Lfunc_end0: or # -- End function<br>
>          flags=(re.M | re.S))<br>
><br>
> -RUN_LINE_RE = re.compile('^\s*;\s*RUN:\s*(.*<wbr>)$')<br>
> -TRIPLE_ARG_RE = re.compile(r'-mtriple=([^ ]+)')<br>
> -TRIPLE_IR_RE = re.compile(r'^target\s+triple\<wbr>s*=\s*"([^"]+)"$')<br>
> -IR_FUNCTION_RE = re.compile('^\s*define\s+(?:<wbr>internal\s+)?[^@]*@(\w+)\s*\('<wbr>)<br>
> -CHECK_PREFIX_RE = re.compile('--?check-prefix(?:<wbr>es)?=(\S+)')<br>
> -CHECK_RE = re.compile(r'^\s*;\s*([^:]+?)(<wbr>?:-NEXT|-NOT|-DAG|-LABEL)?:')<br>
> +ASM_FUNCTION_AARCH64_RE = re.compile(<br>
> +     r'^_?(?P<func>[^:]+):[ \t]*\/\/[ \t]*@(?P=func)\n'<br>
> +     r'[ \t]+.cfi_startproc\n'<br>
> +     r'(?P<body>.*?)\n'<br>
> +     # This list is incomplete<br>
> +     r'.Lfunc_end[0-9]+:\n',<br>
> +     flags=(re.M | re.S))<br>
<br>
</div></div>Isn't this RE going to fail for a function that has the nounwind<br>
attribute and so has no .cfi_startproc.<br>
<br>
Best,<br>
<br>
Alex<br>
</blockquote></div><br></div>