Fix for codegen bug that could cause illegal cmn instruction generation
[oota-llvm.git] / test / CodeGen / Mips / longbranch.ll
1 ; RUN: llc -march=mipsel -force-mips-long-branch -disable-mips-delay-filler < %s | FileCheck %s -check-prefix=O32
2 ; RUN: llc -march=mips64el -mcpu=mips4 -mattr=n64  -force-mips-long-branch -disable-mips-delay-filler < %s | FileCheck %s -check-prefix=N64
3 ; RUN: llc -march=mips64el -mcpu=mips64 -mattr=n64  -force-mips-long-branch -disable-mips-delay-filler < %s | FileCheck %s -check-prefix=N64
4
5 @g0 = external global i32
6
7 define void @foo1(i32 %s) nounwind {
8 entry:
9 ; O32: nop
10 ; O32: addiu $sp, $sp, -8
11 ; O32: bal
12 ; O32: lui $1, 0
13 ; O32: addiu $1, $1, {{[0-9]+}} 
14 ; N64: nop
15 ; N64: daddiu $sp, $sp, -16
16 ; N64: lui $1, 0
17 ; N64: daddiu $1, $1, 0
18 ; N64: dsll $1, $1, 16
19 ; N64: daddiu $1, $1, 0
20 ; N64: bal
21 ; N64: dsll $1, $1, 16
22 ; N64: daddiu $1, $1, {{[0-9]+}}  
23
24   %tobool = icmp eq i32 %s, 0
25   br i1 %tobool, label %if.end, label %if.then
26
27 if.then:                                          ; preds = %entry
28   %0 = load i32* @g0, align 4
29   %add = add nsw i32 %0, 12
30   store i32 %add, i32* @g0, align 4
31   br label %if.end
32
33 if.end:                                           ; preds = %entry, %if.then
34   ret void
35 }
36