[llvm] r372277 - [utils] Add minimal support for MIR inputs to update_llc_test_checks.py

Roman Tereshin via llvm-commits llvm-commits at lists.llvm.org
Thu Sep 19 07:09:34 PDT 2019


> The question i initially had was basically "is this the right tool for
> that, not the _mir one?",

I believe the first sentence of the description explicitly addresses exactly this question.

> but on a second look all appears to be in order.

Great!

Thank you,
Roman

> On Sep 19, 2019, at 7:06 AM, Roman Lebedev <lebedev.ri at gmail.com> wrote:
> 
> On Thu, Sep 19, 2019 at 4:52 PM Roman Tereshin <rtereshin at apple.com> wrote:
>> 
>> Hi Roman,
>> 
>>> Was this reviewed?
>> 
>> On Phabricator - no, internally - yes (+ Justin).
> 
>>> The patch description does not mention utils/update_mir_test_checks.py
>> 
>> Not sure what do you mean:
>> 1. The patch description does mention utils/update_mir_test_checks.py, though in the passing: "update_{llc,mir}_test_checks.py applicability is ...”
> Oops, skimmed through patch too quickly and did not see that ",mir}" part.
> 
>> 2. The patch does not change utils/update_mir_test_checks.py, it only changes utils/update_llc_test_checks.py
> Yes
> 
>> Is there any problem with the patch?
> Not that i can tell right now.
> The question i initially had was basically "is this the right tool for
> that, not the _mir one?",
> but on a second look all appears to be in order.
> 
>> Thanks,
> Roman
> 
>>> On Sep 19, 2019, at 1:06 AM, Roman Lebedev <lebedev.ri at gmail.com> wrote:
>>> 
>>> Was this reviewed?
>>> The patch description does not mention utils/update_mir_test_checks.py
>>> 
>>> On Thu, Sep 19, 2019 at 2:42 AM Roman Tereshin via llvm-commits
>>> <llvm-commits at lists.llvm.org> wrote:
>>>> 
>>>> Author: rtereshin
>>>> Date: Wed Sep 18 16:44:17 2019
>>>> New Revision: 372277
>>>> 
>>>> URL: http://llvm.org/viewvc/llvm-project?rev=372277&view=rev
>>>> Log:
>>>> [utils] Add minimal support for MIR inputs to update_llc_test_checks.py
>>>> 
>>>> update_{llc,mir}_test_checks.py applicability is determined by the
>>>> output (assembly or MIR), not the input, which makes
>>>> update_llc_test_checks.py the right tool to generate tests that start at
>>>> MIR and stop at the final assembly.
>>>> 
>>>> This commit adds the minimal support for this path. Main limitation that
>>>> remains:
>>>> 
>>>> - MIR has to have LLVM IR section, and the CHECK lines will be inserted
>>>> into the LLVM IR functions that correspond to the MIR functions.
>>>> 
>>>> Running
>>>> ../utils/update_llc_test_checks.py --llc-binary ./bin/llc
>>>> on a slightly modified  ../test/CodeGen/X86/bad-tls-fold.mir
>>>> 
>>>> produces the following diff:
>>>> 
>>>> +# NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
>>>> +# RUN: llc %s -o - | FileCheck %s
>>>> --- |
>>>>  target triple = "x86_64-unknown-linux-gnu"
>>>> 
>>>> @@ -6,17 +7,31 @@
>>>>  @i = external thread_local global i32
>>>> 
>>>>  define i32 @or() {
>>>> +  ; CHECK-LABEL: or:
>>>> +  ; CHECK:       # %bb.0: # %entry
>>>> +  ; CHECK-NEXT:    movq {{.*}}(%rip), %rax
>>>> +  ; CHECK-NEXT:    orq $7, %rax
>>>> +  ; CHECK-NEXT:    movq i@{{.*}}(%rip), %rcx
>>>> +  ; CHECK-NEXT:    orq %rax, %rcx
>>>> +  ; CHECK-NEXT:    movl %fs:(%rcx), %eax
>>>> +  ; CHECK-NEXT:    retq
>>>>  entry:
>>>>    ret i32 undef
>>>>  }
>>>> -
>>>>  define i32 @and() {
>>>> +  ; CHECK-LABEL: and:
>>>> +  ; CHECK:       # %bb.0: # %entry
>>>> +  ; CHECK-NEXT:    movq {{.*}}(%rip), %rax
>>>> +  ; CHECK-NEXT:    orq $7, %rax
>>>> +  ; CHECK-NEXT:    movq i@{{.*}}(%rip), %rcx
>>>> +  ; CHECK-NEXT:    andq %rax, %rcx
>>>> +  ; CHECK-NEXT:    movl %fs:(%rcx), %eax
>>>> +  ; CHECK-NEXT:    retq
>>>>  entry:
>>>>    ret i32 undef
>>>>  }
>>>> ...
>>>> 
>>>> (not applied)
>>>> 
>>>> Modified:
>>>>   llvm/trunk/utils/update_llc_test_checks.py
>>>> 
>>>> Modified: llvm/trunk/utils/update_llc_test_checks.py
>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/update_llc_test_checks.py?rev=372277&r1=372276&r2=372277&view=diff
>>>> ==============================================================================
>>>> --- llvm/trunk/utils/update_llc_test_checks.py (original)
>>>> +++ llvm/trunk/utils/update_llc_test_checks.py Wed Sep 18 16:44:17 2019
>>>> @@ -19,7 +19,7 @@ import re
>>>> 
>>>> from UpdateTestChecks import asm, common
>>>> 
>>>> -ADVERT = '; NOTE: Assertions have been autogenerated by '
>>>> +ADVERT = ' NOTE: Assertions have been autogenerated by '
>>>> 
>>>> 
>>>> def main():
>>>> @@ -44,7 +44,6 @@ def main():
>>>>  args = parser.parse_args()
>>>> 
>>>>  script_name = os.path.basename(__file__)
>>>> -  autogenerated_note = (ADVERT + 'utils/' + script_name)
>>>> 
>>>>  test_paths = [test for pattern in args.tests for test in glob.glob(pattern)]
>>>>  for test in test_paths:
>>>> @@ -118,6 +117,13 @@ def main():
>>>> 
>>>>      llc_cmd_args = llc_cmd[len(llc_tool):].strip()
>>>>      llc_cmd_args = llc_cmd_args.replace('< %s', '').replace('%s', '').strip()
>>>> +      if test.endswith('.mir'):
>>>> +        llc_cmd_args += ' -x mir'
>>>> +        comment_sym = '#'
>>>> +        check_indent = '  '
>>>> +      else:
>>>> +        comment_sym = ';'
>>>> +        check_indent = ''
>>>> 
>>>>      check_prefixes = [item for m in common.CHECK_PREFIX_RE.finditer(filecheck_cmd)
>>>>                               for item in m.group(1).split(',')]
>>>> @@ -128,6 +134,8 @@ def main():
>>>>      # now, we just ignore all but the last.
>>>>      run_list.append((check_prefixes, llc_cmd_args, triple_in_cmd, march_in_cmd))
>>>> 
>>>> +    autogenerated_note = (comment_sym + ADVERT + 'utils/' + script_name)
>>>> +
>>>>    func_dict = {}
>>>>    for p in run_list:
>>>>      prefixes = p[0]
>>>> @@ -166,7 +174,7 @@ def main():
>>>>            continue
>>>> 
>>>>        # Print out the various check lines here.
>>>> -        asm.add_asm_checks(output_lines, ';', run_list, func_dict, func_name)
>>>> +        asm.add_asm_checks(output_lines, check_indent + ';', run_list, func_dict, func_name)
>>>>        is_in_function_start = False
>>>> 
>>>>      if is_in_function:
>>>> @@ -180,7 +188,7 @@ def main():
>>>>        continue
>>>> 
>>>>      # Discard any previous script advertising.
>>>> -      if input_line.startswith(ADVERT):
>>>> +      if input_line.startswith(comment_sym + ADVERT):
>>>>        continue
>>>> 
>>>>      # If it's outside a function, it just gets copied to the output.
>>>> 
>>>> 
>>>> _______________________________________________
>>>> llvm-commits mailing list
>>>> llvm-commits at lists.llvm.org
>>>> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>> 



More information about the llvm-commits mailing list