Home | History | Annotate | Download | only in Mips
      1 ; RUN: llc -march=mips -debug-only=isel -mips-tail-calls=1 \
      2 ; RUN:   -relocation-model=pic < %s 2>&1 | FileCheck --check-prefix=PIC %s
      3 ; RUN: llc -march=mips -debug-only=isel -mips-tail-calls=1  \
      4 ; RUN:   -relocation-model=static < %s 2>&1 | FileCheck --check-prefix=STATIC %s
      5 ; RUN: llc -march=mips64 -debug-only=isel -mips-tail-calls=1 \
      6 ; RUN:   -relocation-model=pic < %s 2>&1 | FileCheck --check-prefix=PIC64 %s
      7 ; RUN: llc -march=mips64 -debug-only=isel -mips-tail-calls=1  \
      8 ; RUN:   -relocation-model=static < %s 2>&1 | FileCheck --check-prefix=STATIC64 %s
      9 ; RUN: llc -march=mips -debug-only=isel -mips-tail-calls=1 \
     10 ; RUN:   -relocation-model=pic -mattr=+micromips < %s 2>&1 | FileCheck --check-prefix=PIC %s
     11 ; RUN: llc -march=mips -debug-only=isel -mips-tail-calls=1  \
     12 ; RUN:   -relocation-model=static -mattr=+micromips < %s 2>&1 | FileCheck --check-prefix=STATIC-MM %s
     13 ; RUN: llc -march=mips -mcpu=mips32r6 -debug-only=isel -mips-tail-calls=1 \
     14 ; RUN:   -relocation-model=pic -mattr=+micromips < %s 2>&1 | FileCheck --check-prefix=PIC %s
     15 ; RUN: llc -march=mips -mcpu=mips32r6 -debug-only=isel -mips-tail-calls=1  \
     16 ; RUN:   -relocation-model=static -mattr=+micromips < %s 2>&1 | FileCheck --check-prefix=STATIC-MM %s
     17 ; RUN: llc -march=mips -debug-only=isel -mips-tail-calls=1  \
     18 ; RUN:   -relocation-model=pic    -mattr=+mips16 < %s 2>&1 | FileCheck --check-prefix=MIPS16 %s
     19 ; RUN: llc -march=mips -debug-only=isel -mips-tail-calls=1  \
     20 ; RUN:   -relocation-model=static -mattr=+mips16 < %s 2>&1 | FileCheck --check-prefix=MIPS16 %s
     21 
     22 ; REQUIRES: asserts
     23 
     24 ; Test that the correct pseudo instructions are generated for indirect
     25 ; branches and tail calls. Previously, the order of the DAG matcher table
     26 ; determined if the correct instruction was selected for mips16.
     27 
     28 declare protected void @a()
     29 
     30 define void @test1(i32 %a) {
     31 entry:
     32   %0 = trunc i32 %a to i1
     33   %1 = select i1 %0,
     34               i8* blockaddress(@test1, %bb),
     35               i8* blockaddress(@test1, %bb6)
     36   indirectbr i8* %1, [label %bb, label %bb6]
     37 
     38 ; STATIC:     PseudoIndirectBranch
     39 ; STATIC-MM:  PseudoIndirectBranch
     40 ; STATIC-NOT: PseudoIndirectBranch64
     41 ; STATIC64:   PseudoIndirectBranch64
     42 ; PIC:        PseudoIndirectBranch
     43 ; PIC-NOT:    PseudoIndirectBranch64
     44 ; PIC64:      PseudoIndirectBranch64
     45 ; MIPS16:     JrcRx16
     46 bb:
     47   ret void
     48 
     49 bb6:
     50   tail call void @a()
     51 
     52 ; STATIC:     TAILCALL
     53 ; STATIC-NOT: TAILCALL_MM
     54 ; STATIC-MM:  TAILCALL_MM
     55 ; PIC:        TAILCALLREG
     56 ; PIC-NOT:    TAILCALLREG64
     57 ; PIC64:      TAILCALLREG64
     58 ; MIPS16:     RetRA16
     59   ret void
     60 }
     61