Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / Mips / branch-relaxation-with-hazard.ll
blobce0f2b0268d7b1b9ab03ea126a9d6ecac26a7b02
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, ptr %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 ptr, align 4
33   store i32 0, ptr %retval, align 4
34   store i32 %argc, ptr %argc.addr, align 4
35   store ptr %argv, ptr %argv.addr, align 4
36   %0 = load i32, ptr %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   call void asm sideeffect ".space 10", "~{$1}"()
42   %1 = load i32, ptr %argc.addr, align 4
43   %cmp1 = icmp sgt i32 %1, 3
44   br i1 %cmp1, label %if.then2, label %if.end
46 if.then2:
47   call void asm sideeffect ".space 10", "~{$1}"()
48   %call = call i32 @boo()
49   store i32 %call, ptr %retval, align 4
50   br label %return
52 if.end:
53   call void asm sideeffect ".space 4194228", "~{$1}"()
54   %call3 = call i32 @foo()
55   store i32 %call3, ptr %retval, align 4
56   br label %return
58 if.end4:
59   store i32 0, ptr %retval, align 4
60   br label %return
62 return:
63   %2 = load i32, ptr %retval, align 4
64   ret i32 %2