[ARM] Adjust how NEON shifts are lowered
[llvm-core.git] / test / CodeGen / ARM / fp-only-sp.ll
blobebfa41a8294def846e42f3f634ea7d5547c02d22
1 ; RUN: llc -mtriple=thumbv7em-apple-macho -mcpu=cortex-m4 %s -o - -O0 | FileCheck %s
2 ; RUN: llc -mtriple=thumbv7em-apple-macho -mcpu=cortex-m4 %s -o - | FileCheck %s
4 ; Note: vldr and vstr really do have 64-bit variants even with -fp64
5 define void @test_load_store(double* %addr) {
6 ; CHECK-LABEL: test_load_store:
7 ; CHECK: vldr [[TMP:d[0-9]+]], [r0]
8 ; CHECK: vstr [[TMP]], [r0]
9   %val = load volatile double, double* %addr
10   store volatile double %val, double* %addr
11   ret void
14 define void @test_cmp(double %l, double %r, i1* %addr.dst) {
15 ; CHECK-LABEL: test_cmp:
16 ; CHECK: bl ___eqdf2
17   %res = fcmp oeq double %l, %r
18   store i1 %res, i1* %addr.dst
19   ret void
22 define void @test_ext(float %in, double* %addr) {
23 ; CHECK-LABEL: test_ext:
24 ; CHECK: bl ___extendsfdf2
25   %res = fpext float %in to double
26   store double %res, double* %addr
27   ret void
30 define void @test_trunc(double %in, float* %addr) {
31 ; CHECK-LABEL: test_trunc:
32 ; CHECK: bl ___truncdfsf2
33   %res = fptrunc double %in to float
34   store float %res, float* %addr
35   ret void
38 define void @test_itofp(i32 %in, double* %addr) {
39 ; CHECK-LABEL: test_itofp:
40 ; CHECK: bl ___floatsidf
41   %res = sitofp i32 %in to double
42   store double %res, double* %addr
43 ;  %res = fptoui double %tmp to i32
44   ret void
47 define i32 @test_fptoi(double* %addr) {
48 ; CHECK-LABEL: test_fptoi:
49 ; CHECK: bl ___fixunsdfsi
50   %val = load double, double* %addr
51   %res = fptoui double %val to i32
52   ret i32 %res
55 define void @test_binop(double* %addr) {
56 ; CHECK-LABEL: test_binop:
57 ; CHECK: bl ___adddf3
58   %in = load double, double* %addr
59   %res = fadd double %in, %in
60   store double %res, double* %addr
61   ret void