[InstCombine] Signed saturation patterns
[llvm-core.git] / test / CodeGen / Thumb2 / inflate-regs.ll
blob4814db281bfef46971796870bb170ac5f0661e42
1 ; RUN: llc < %s -mcpu=cortex-a8 | FileCheck %s
2 target triple = "thumbv7-apple-ios"
4 ; CHECK: local_split
6 ; The load must go into d0-15 which are all clobbered by the asm.
7 ; RAGreedy should split the range and use d16-d31 to avoid a spill.
9 ; CHECK: vldr s
10 ; CHECK-NOT: vstr
11 ; CHECK: vadd.f32
12 ; CHECK-NOT: vstr
13 ; CHECK: vorr
14 ; CHECK: vstr s
15 define void @local_split(float* nocapture %p) nounwind ssp {
16 entry:
17   %x = load float, float* %p, align 4
18   %a = fadd float %x, 1.0
19   tail call void asm sideeffect "", "~{d0},~{d1},~{d2},~{d3},~{d4},~{d5},~{d6},~{d7},~{d8},~{d9},~{d10},~{d11},~{d12},~{d13},~{d14},~{d15}"() nounwind
20   store float %a, float* %p, align 4
21   ret void
24 ; CHECK: global_split
26 ; Same thing, but across basic blocks.
28 ; CHECK: vldr s
29 ; CHECK-NOT: vstr
30 ; CHECK: vadd.f32
31 ; CHECK-NOT: vstr
32 ; CHECK: vorr
33 ; CHECK: vstr s
34 define void @global_split(float* nocapture %p1, float* nocapture %p2) nounwind ssp {
35 entry:
36   %0 = load float, float* %p1, align 4
37   %add = fadd float %0, 1.000000e+00
38   tail call void asm sideeffect "", "~{d0},~{d1},~{d2},~{d3},~{d4},~{d5},~{d6},~{d7},~{d8},~{d9},~{d10},~{d11},~{d12},~{d13},~{d14},~{d15}"() nounwind
39   %cmp = fcmp ogt float %add, 0.000000e+00
40   br i1 %cmp, label %if.then, label %if.end
42 if.then:
43   store float %add, float* %p2, align 4
44   br label %if.end
46 if.end:
47   store float %add, float* %p1, align 4
48   ret void