| ; RUN: llc < %s -mcpu=cortex-a8 | FileCheck %s |
| target triple = "thumbv7-apple-ios" |
| |
| ; CHECK: local_split |
| ; |
| ; The load must go into d0-15 which are all clobbered by the asm. |
| ; RAGreedy should split the range and use d16-d31 to avoid a spill. |
| ; |
| ; CHECK: vldr s |
| ; CHECK-NOT: vstr |
| ; CHECK: vadd.f32 |
| ; CHECK-NOT: vstr |
| ; CHECK: vorr |
| ; CHECK: vstr s |
| define void @local_split(float* nocapture %p) nounwind ssp { |
| entry: |
| %x = load float* %p, align 4 |
| %a = fadd float %x, 1.0 |
| tail call void asm sideeffect "", "~{d0},~{d1},~{d2},~{d3},~{d4},~{d5},~{d6},~{d7},~{d8},~{d9},~{d10},~{d11},~{d12},~{d13},~{d14},~{d15}"() nounwind |
| store float %a, float* %p, align 4 |
| ret void |
| } |
| |
| ; CHECK: global_split |
| ; |
| ; Same thing, but across basic blocks. |
| ; |
| ; CHECK: vldr s |
| ; CHECK-NOT: vstr |
| ; CHECK: vadd.f32 |
| ; CHECK-NOT: vstr |
| ; CHECK: vorr |
| ; CHECK: vstr s |
| define void @global_split(float* nocapture %p1, float* nocapture %p2) nounwind ssp { |
| entry: |
| %0 = load float* %p1, align 4 |
| %add = fadd float %0, 1.000000e+00 |
| tail call void asm sideeffect "", "~{d0},~{d1},~{d2},~{d3},~{d4},~{d5},~{d6},~{d7},~{d8},~{d9},~{d10},~{d11},~{d12},~{d13},~{d14},~{d15}"() nounwind |
| %cmp = fcmp ogt float %add, 0.000000e+00 |
| br i1 %cmp, label %if.then, label %if.end |
| |
| if.then: |
| store float %add, float* %p2, align 4 |
| br label %if.end |
| |
| if.end: |
| store float %add, float* %p1, align 4 |
| ret void |
| } |