[update_llc_test_checks.py] Fix MIPS ASM regex for functions with EH
authorAlex Richardson <Alexander.Richardson@cl.cam.ac.uk>
Tue, 28 Sep 2021 14:10:07 +0000 (15:10 +0100)
committerAlex Richardson <Alexander.Richardson@cl.cam.ac.uk>
Tue, 28 Sep 2021 16:57:36 +0000 (17:57 +0100)
On MIPS, functions with exception handling code emits an additional
temporary label at the start of the function (due to UseAssignmentForEHBegin):

    _Z8do_catchv:                           # @_Z8do_catchv
    .Ltmp3:
    .set .Lfunc_begin0, .Ltmp3
    .cfi_startproc
    .cfi_personality 128, DW.ref.__gxx_personality_v0
    .cfi_lsda 0, .Lexception0
    .frame $c11,48,$c17
    .mask  0x00000000,0
    .fmask 0x00000000,0
    .set noreorder
    .set nomacro
    .set noat
    # %bb.0:                                # %entry

The `[^:]*` regex was terminating the search after .Ltmp<N>: and therefore
not detecting functions with exception handling.

Reviewed By: atanasyan, MaskRay

Differential Revision: https://reviews.llvm.org/D100027

llvm/test/tools/UpdateTestChecks/update_llc_test_checks/Inputs/mips64_eh.ll
llvm/test/tools/UpdateTestChecks/update_llc_test_checks/Inputs/mips64_eh.ll.expected
llvm/utils/UpdateTestChecks/asm.py

index f5bf99c..14d9cdb 100644 (file)
@@ -1,5 +1,4 @@
 ; RUN: llc -mtriple=mips64-unknown-linux < %s | FileCheck %s
-; FIXME: doesn't generate any CHECK lines
 
 define i32 @main() personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*){
   %1 = invoke i32 @foo() to label %good unwind label %bad
index 08535a9..897209a 100644 (file)
@@ -1,8 +1,26 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
 ; RUN: llc -mtriple=mips64-unknown-linux < %s | FileCheck %s
-; FIXME: doesn't generate any CHECK lines
 
 define i32 @main() personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*){
+; CHECK-LABEL: main:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    daddiu $sp, $sp, -16
+; CHECK-NEXT:    .cfi_def_cfa_offset 16
+; CHECK-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
+; CHECK-NEXT:    .cfi_offset 31, -8
+; CHECK-NEXT:  .Ltmp0:
+; CHECK-NEXT:    jal foo
+; CHECK-NEXT:    nop
+; CHECK-NEXT:  .Ltmp1:
+; CHECK-NEXT:  # %bb.1: # %good
+; CHECK-NEXT:    addiu $2, $zero, 5
+; CHECK-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
+; CHECK-NEXT:    jr $ra
+; CHECK-NEXT:    daddiu $sp, $sp, 16
+; CHECK-NEXT:  .LBB0_2: # %bad
+; CHECK-NEXT:  .Ltmp2:
+; CHECK-NEXT:    jal _Unwind_Resume
+; CHECK-NEXT:    nop
   %1 = invoke i32 @foo() to label %good unwind label %bad
 good:
   ret i32 5
index 2a18899..a877fea 100644 (file)
@@ -59,6 +59,7 @@ ASM_FUNCTION_M68K_RE = re.compile(
 
 ASM_FUNCTION_MIPS_RE = re.compile(
     r'^_?(?P<func>[^:]+):[ \t]*#+[ \t]*@"?(?P=func)"?\n[^:]*?' # f: (name of func)
+    r'(?:\s*\.?Ltmp[^:\n]*:\n)?[^:]*?'        # optional .Ltmp<N> for EH
     r'(?:^[ \t]+\.(frame|f?mask|set).*?\n)+'  # Mips+LLVM standard asm prologue
     r'(?P<body>.*?)\n'                        # (body of the function)
     # Mips+LLVM standard asm epilogue