Aleksandar Beserminji | a5f7551 | 2018-05-22 13:24:38 +0000 | [diff] [blame] | 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 | } |