forked from OSchip/llvm-project
[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
This commit is contained in:
parent
6221767055
commit
a8a89c77ea
|
@ -1,3 +1,4 @@
|
|||
; 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
|
||||
}
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -260,7 +260,10 @@ 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:]:
|
||||
output_lines.append('%s %s-NEXT: %s' % (comment_marker, checkprefix, func_line))
|
||||
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
|
||||
|
||||
# For IR output, change all defs to FileCheck variables, so we're immune
|
||||
|
|
Loading…
Reference in New Issue