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