Commit a8a89c77 authored by Simon Atanasyan's avatar Simon Atanasyan
Browse files

[utils] Reflow asm check generation to tolerate blank lines

This change introduces two fixes. The second fix allows to generate
a test to check the first fix.

- Output `CHECK-EMPTY` prefix for an empty line in ASM output. Before that
  fix `update_llc_test_checks.py` incorrectly emits `CHECK-NEXT: <space>`
  prefix.
- Fix the `ASM_FUNCTION_MIPS_RE` regex to stop on a real function
  epilogue not on an inline assembler prologue and include inline
  assembler code into a test.

Differential Revision: https://reviews.llvm.org/D47192
parent 62217670
Loading
Loading
Loading
Loading
+16 −3
Original line number Diff line number Diff line
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
;
; Register constraint "r" shouldn't take long long unless
; The target is 64 bit.
@@ -7,13 +8,25 @@


define i32 @main() nounwind {
; CHECK-LABEL: main:
; CHECK:       # %bb.0: # %entry
; CHECK-NEXT:    daddiu $1, $zero, 7
; CHECK-NEXT:    #APP
; CHECK-NEXT:    .set push
; CHECK-NEXT:    .set at
; CHECK-NEXT:    .set macro
; CHECK-NEXT:    .set reorder
; CHECK-EMPTY:
; CHECK-NEXT:    addiu $1, $1, 3
; CHECK-EMPTY:
; CHECK-NEXT:    .set pop
; CHECK-NEXT:    #NO_APP
; CHECK-NEXT:    jr $ra
; CHECK-NEXT:    addiu $2, $zero, 0
entry:


; r with long long
;CHECK:	#APP
;CHECK:	addiu ${{[0-9]+}}, ${{[0-9]+}}, 3
;CHECK:	#NO_APP
  tail call i64 asm sideeffect "addiu $0, $1, $2", "=r,r,i"(i64 7, i64 3) nounwind
  ret i32 0
}
+2 −1
Original line number Diff line number Diff line
@@ -53,7 +53,8 @@ ASM_FUNCTION_MIPS_RE = re.compile(
    r'^_?(?P<func>[^:]+):[ \t]*#+[ \t]*@(?P=func)\n[^:]*?' # f: (name of func)
    r'(?:^[ \t]+\.(frame|f?mask|set).*?\n)+'  # Mips+LLVM standard asm prologue
    r'(?P<body>.*?)\n'                        # (body of the function)
    r'(?:^[ \t]+\.(set|end).*?\n)+'           # Mips+LLVM standard asm epilogue
    # Mips+LLVM standard asm epilogue
    r'(?:(^[ \t]+\.set[^\n]*?\n)*^[ \t]+\.end.*?\n)'
    r'(\$|\.L)func_end[0-9]+:\n',             # $func_end0: (mips32 - O32) or
                                              # .Lfunc_end0: (mips64 - NewABI)
    flags=(re.M | re.S))
+4 −1
Original line number Diff line number Diff line
@@ -260,6 +260,9 @@ def add_checks(output_lines, comment_marker, prefix_list, func_dict, func_name,
      if is_asm:
        output_lines.append('%s %s:       %s' % (comment_marker, checkprefix, func_body[0]))
        for func_line in func_body[1:]:
          if func_line.strip() == '':
            output_lines.append('%s %s-EMPTY:' % (comment_marker, checkprefix))
          else:
            output_lines.append('%s %s-NEXT:  %s' % (comment_marker, checkprefix, func_line))
        break