Home | History | Annotate | Download | only in Mips
      1 ; RUN: llc -O0 -mtriple=mips-img-linux-gnu -mcpu=mips32r6 -relocation-model=pic < %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-PIC
      2 ; RUN: llc -O0 -mtriple=mips-img-linux-gnu -mcpu=mips32r6 -relocation-model=static < %s -o - | FileCheck %s --check-prefixes=CHECK-STATIC
      3 
      4 declare i32 @boo(...)
      5 declare i32 @foo(...)
      6 
      7 define i32 @main(i32 signext %argc, i8** %argv) {
      8 ; CHECK: main:
      9 ; CHECK: # %bb.1:
     10 ; CHECK-PIC: addiu
     11 ; CHECK-PIC: sw
     12 ; CHECK-PIC: lui
     13 ; CHECK-PIC: addiu
     14 ; CHECK-PIC: balc
     15 ; CHECK-PIC: addu
     16 ; CHECK-PIC: lw
     17 ; CHECK-PIC: addiu
     18 ; CHECK-PIC: jrc
     19 ; CHECK-PIC: bc
     20 ; CHECK-PIC: bnezc
     21 ; CHECK-PIC: nop
     22 ; CHECK-PIC: bc
     23 
     24 ; CHECK-STATIC: bc
     25 ; CHECK-STATIC: j
     26 ; CHECK-STATIC: bnezc
     27 ; CHECK-STATIC: nop
     28 ; CHECK-STATIC: j
     29 entry:
     30   %retval = alloca i32, align 4
     31   %argc.addr = alloca i32, align 4
     32   %argv.addr = alloca i8**, align 4
     33   store i32 0, i32* %retval, align 4
     34   store i32 %argc, i32* %argc.addr, align 4
     35   store i8** %argv, i8*** %argv.addr, align 4
     36   %0 = load i32, i32* %argc.addr, align 4
     37   %cmp = icmp sgt i32 %0, 1
     38   br i1 %cmp, label %if.then, label %if.end4
     39 
     40 if.then:
     41   %1 = load i32, i32* %argc.addr, align 4
     42   %cmp1 = icmp sgt i32 %1, 3
     43   br i1 %cmp1, label %if.then2, label %if.end
     44 
     45 if.then2:
     46   %call = call i32 bitcast (i32 (...)* @boo to i32 ()*)()
     47   store i32 %call, i32* %retval, align 4
     48   br label %return
     49 
     50 if.end:
     51   call void asm sideeffect ".space 4194228", "~{$1}"()
     52   %call3 = call i32 bitcast (i32 (...)* @foo to i32 ()*)()
     53   store i32 %call3, i32* %retval, align 4
     54   br label %return
     55 
     56 if.end4:
     57   store i32 0, i32* %retval, align 4
     58   br label %return
     59 
     60 return:
     61   %2 = load i32, i32* %retval, align 4
     62   ret i32 %2
     63 
     64 }
     65