[ARM] Cortex-M4 schedule additions
[llvm-complete.git] / test / CodeGen / Mips / branch-relaxation-with-hazard.ll
blobeb9ee7e9d3f0626bd08a9778d901a3b3ac998c28
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
4 declare i32 @boo(...)
5 declare i32 @foo(...)
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
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
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
45 if.then2:
46   %call = call i32 bitcast (i32 (...)* @boo to i32 ()*)()
47   store i32 %call, i32* %retval, align 4
48   br label %return
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
56 if.end4:
57   store i32 0, i32* %retval, align 4
58   br label %return
60 return:
61   %2 = load i32, i32* %retval, align 4
62   ret i32 %2