blob: 49a69827bc05325f1e3d738b39858a8d48c903e7 [file] [log] [blame]
Jakob Stoklund Olesenca6fd002011-03-31 22:14:03 +00001; RUN: llc < %s -march=arm -mattr=+vfp2 -disable-post-ra | FileCheck %s
2; RUN: llc < %s -march=arm -mattr=+vfp2 -disable-post-ra -regalloc=basic | FileCheck %s
Evan Cheng02b985c2007-01-19 09:20:23 +00003
Tanya Lattner6263f942008-02-17 20:02:20 +00004define void @test(float* %P, double* %D) {
5 %A = load float* %P ; <float> [#uses=1]
6 %B = load double* %D ; <double> [#uses=1]
7 store float %A, float* %P
8 store double %B, double* %D
9 ret void
Evan Cheng02b985c2007-01-19 09:20:23 +000010}
11
Tanya Lattner6263f942008-02-17 20:02:20 +000012declare float @fabsf(float)
Evan Cheng02b985c2007-01-19 09:20:23 +000013
Tanya Lattner6263f942008-02-17 20:02:20 +000014declare double @fabs(double)
Evan Cheng02b985c2007-01-19 09:20:23 +000015
Tanya Lattner6263f942008-02-17 20:02:20 +000016define void @test_abs(float* %P, double* %D) {
Bob Wilson9b379dc2009-09-15 20:58:02 +000017;CHECK: test_abs:
Tanya Lattner6263f942008-02-17 20:02:20 +000018 %a = load float* %P ; <float> [#uses=1]
Jim Grosbache5165492009-11-09 00:11:35 +000019;CHECK: vabs.f32
Tanya Lattner6263f942008-02-17 20:02:20 +000020 %b = call float @fabsf( float %a ) ; <float> [#uses=1]
21 store float %b, float* %P
22 %A = load double* %D ; <double> [#uses=1]
Jim Grosbache5165492009-11-09 00:11:35 +000023;CHECK: vabs.f64
Tanya Lattner6263f942008-02-17 20:02:20 +000024 %B = call double @fabs( double %A ) ; <double> [#uses=1]
25 store double %B, double* %D
26 ret void
Evan Cheng02b985c2007-01-19 09:20:23 +000027}
28
Tanya Lattner6263f942008-02-17 20:02:20 +000029define void @test_add(float* %P, double* %D) {
Bob Wilson9b379dc2009-09-15 20:58:02 +000030;CHECK: test_add:
Tanya Lattner6263f942008-02-17 20:02:20 +000031 %a = load float* %P ; <float> [#uses=2]
Dan Gohmanae3a0be2009-06-04 22:49:04 +000032 %b = fadd float %a, %a ; <float> [#uses=1]
Tanya Lattner6263f942008-02-17 20:02:20 +000033 store float %b, float* %P
34 %A = load double* %D ; <double> [#uses=2]
Dan Gohmanae3a0be2009-06-04 22:49:04 +000035 %B = fadd double %A, %A ; <double> [#uses=1]
Tanya Lattner6263f942008-02-17 20:02:20 +000036 store double %B, double* %D
37 ret void
Evan Cheng02b985c2007-01-19 09:20:23 +000038}
39
Tanya Lattner6263f942008-02-17 20:02:20 +000040define void @test_ext_round(float* %P, double* %D) {
Bob Wilson9b379dc2009-09-15 20:58:02 +000041;CHECK: test_ext_round:
Tanya Lattner6263f942008-02-17 20:02:20 +000042 %a = load float* %P ; <float> [#uses=1]
Andrew Trickc558bf32011-04-12 20:14:07 +000043;CHECK: vcvt.f64.f32
Andrew Trick87896d92011-04-13 00:38:32 +000044;CHECK: vcvt.f32.f64
Tanya Lattner6263f942008-02-17 20:02:20 +000045 %b = fpext float %a to double ; <double> [#uses=1]
46 %A = load double* %D ; <double> [#uses=1]
47 %B = fptrunc double %A to float ; <float> [#uses=1]
48 store double %b, double* %D
49 store float %B, float* %P
50 ret void
Evan Cheng02b985c2007-01-19 09:20:23 +000051}
52
Tanya Lattner6263f942008-02-17 20:02:20 +000053define void @test_fma(float* %P1, float* %P2, float* %P3) {
Bob Wilson9b379dc2009-09-15 20:58:02 +000054;CHECK: test_fma:
Tanya Lattner6263f942008-02-17 20:02:20 +000055 %a1 = load float* %P1 ; <float> [#uses=1]
56 %a2 = load float* %P2 ; <float> [#uses=1]
57 %a3 = load float* %P3 ; <float> [#uses=1]
Jim Grosbache5165492009-11-09 00:11:35 +000058;CHECK: vnmls.f32
Dan Gohmanae3a0be2009-06-04 22:49:04 +000059 %X = fmul float %a1, %a2 ; <float> [#uses=1]
60 %Y = fsub float %X, %a3 ; <float> [#uses=1]
Tanya Lattner6263f942008-02-17 20:02:20 +000061 store float %Y, float* %P1
62 ret void
Evan Cheng02b985c2007-01-19 09:20:23 +000063}
64
Tanya Lattner6263f942008-02-17 20:02:20 +000065define i32 @test_ftoi(float* %P1) {
Bob Wilson9b379dc2009-09-15 20:58:02 +000066;CHECK: test_ftoi:
Tanya Lattner6263f942008-02-17 20:02:20 +000067 %a1 = load float* %P1 ; <float> [#uses=1]
Jim Grosbache5165492009-11-09 00:11:35 +000068;CHECK: vcvt.s32.f32
Tanya Lattner6263f942008-02-17 20:02:20 +000069 %b1 = fptosi float %a1 to i32 ; <i32> [#uses=1]
70 ret i32 %b1
Evan Cheng02b985c2007-01-19 09:20:23 +000071}
72
Tanya Lattner6263f942008-02-17 20:02:20 +000073define i32 @test_ftou(float* %P1) {
Bob Wilson9b379dc2009-09-15 20:58:02 +000074;CHECK: test_ftou:
Tanya Lattner6263f942008-02-17 20:02:20 +000075 %a1 = load float* %P1 ; <float> [#uses=1]
Jim Grosbache5165492009-11-09 00:11:35 +000076;CHECK: vcvt.u32.f32
Tanya Lattner6263f942008-02-17 20:02:20 +000077 %b1 = fptoui float %a1 to i32 ; <i32> [#uses=1]
78 ret i32 %b1
Evan Cheng02b985c2007-01-19 09:20:23 +000079}
80
Tanya Lattner6263f942008-02-17 20:02:20 +000081define i32 @test_dtoi(double* %P1) {
Bob Wilson9b379dc2009-09-15 20:58:02 +000082;CHECK: test_dtoi:
Tanya Lattner6263f942008-02-17 20:02:20 +000083 %a1 = load double* %P1 ; <double> [#uses=1]
Jim Grosbache5165492009-11-09 00:11:35 +000084;CHECK: vcvt.s32.f64
Tanya Lattner6263f942008-02-17 20:02:20 +000085 %b1 = fptosi double %a1 to i32 ; <i32> [#uses=1]
86 ret i32 %b1
Evan Cheng02b985c2007-01-19 09:20:23 +000087}
88
Tanya Lattner6263f942008-02-17 20:02:20 +000089define i32 @test_dtou(double* %P1) {
Bob Wilson9b379dc2009-09-15 20:58:02 +000090;CHECK: test_dtou:
Tanya Lattner6263f942008-02-17 20:02:20 +000091 %a1 = load double* %P1 ; <double> [#uses=1]
Jim Grosbache5165492009-11-09 00:11:35 +000092;CHECK: vcvt.u32.f64
Tanya Lattner6263f942008-02-17 20:02:20 +000093 %b1 = fptoui double %a1 to i32 ; <i32> [#uses=1]
94 ret i32 %b1
Evan Cheng02b985c2007-01-19 09:20:23 +000095}
96
Tanya Lattner6263f942008-02-17 20:02:20 +000097define void @test_utod(double* %P1, i32 %X) {
Bob Wilson9b379dc2009-09-15 20:58:02 +000098;CHECK: test_utod:
Jim Grosbache5165492009-11-09 00:11:35 +000099;CHECK: vcvt.f64.u32
Tanya Lattner6263f942008-02-17 20:02:20 +0000100 %b1 = uitofp i32 %X to double ; <double> [#uses=1]
101 store double %b1, double* %P1
102 ret void
Evan Cheng02b985c2007-01-19 09:20:23 +0000103}
104
Tanya Lattner6263f942008-02-17 20:02:20 +0000105define void @test_utod2(double* %P1, i8 %X) {
Bob Wilson9b379dc2009-09-15 20:58:02 +0000106;CHECK: test_utod2:
Jim Grosbache5165492009-11-09 00:11:35 +0000107;CHECK: vcvt.f64.u32
Tanya Lattner6263f942008-02-17 20:02:20 +0000108 %b1 = uitofp i8 %X to double ; <double> [#uses=1]
109 store double %b1, double* %P1
110 ret void
Evan Cheng02b985c2007-01-19 09:20:23 +0000111}
112
Tanya Lattner6263f942008-02-17 20:02:20 +0000113define void @test_cmp(float* %glob, i32 %X) {
Bob Wilson9b379dc2009-09-15 20:58:02 +0000114;CHECK: test_cmp:
Evan Cheng02b985c2007-01-19 09:20:23 +0000115entry:
Tanya Lattner6263f942008-02-17 20:02:20 +0000116 %tmp = load float* %glob ; <float> [#uses=2]
117 %tmp3 = getelementptr float* %glob, i32 2 ; <float*> [#uses=1]
118 %tmp4 = load float* %tmp3 ; <float> [#uses=2]
119 %tmp.upgrd.1 = fcmp oeq float %tmp, %tmp4 ; <i1> [#uses=1]
120 %tmp5 = fcmp uno float %tmp, %tmp4 ; <i1> [#uses=1]
121 %tmp6 = or i1 %tmp.upgrd.1, %tmp5 ; <i1> [#uses=1]
Bob Wilson9b379dc2009-09-15 20:58:02 +0000122;CHECK: bmi
123;CHECK-NEXT: bgt
Tanya Lattner6263f942008-02-17 20:02:20 +0000124 br i1 %tmp6, label %cond_true, label %cond_false
Evan Cheng02b985c2007-01-19 09:20:23 +0000125
Tanya Lattner6263f942008-02-17 20:02:20 +0000126cond_true: ; preds = %entry
127 %tmp.upgrd.2 = tail call i32 (...)* @bar( ) ; <i32> [#uses=0]
128 ret void
Evan Cheng02b985c2007-01-19 09:20:23 +0000129
Tanya Lattner6263f942008-02-17 20:02:20 +0000130cond_false: ; preds = %entry
131 %tmp7 = tail call i32 (...)* @baz( ) ; <i32> [#uses=0]
132 ret void
Evan Cheng02b985c2007-01-19 09:20:23 +0000133}
134
Tanya Lattner6263f942008-02-17 20:02:20 +0000135declare i1 @llvm.isunordered.f32(float, float)
Evan Cheng02b985c2007-01-19 09:20:23 +0000136
Tanya Lattner6263f942008-02-17 20:02:20 +0000137declare i32 @bar(...)
Evan Cheng02b985c2007-01-19 09:20:23 +0000138
Tanya Lattner6263f942008-02-17 20:02:20 +0000139declare i32 @baz(...)
Evan Cheng02b985c2007-01-19 09:20:23 +0000140
Tanya Lattner6263f942008-02-17 20:02:20 +0000141define void @test_cmpfp0(float* %glob, i32 %X) {
Bob Wilson9b379dc2009-09-15 20:58:02 +0000142;CHECK: test_cmpfp0:
Evan Cheng02b985c2007-01-19 09:20:23 +0000143entry:
Tanya Lattner6263f942008-02-17 20:02:20 +0000144 %tmp = load float* %glob ; <float> [#uses=1]
Jim Grosbache5165492009-11-09 00:11:35 +0000145;CHECK: vcmpe.f32
Tanya Lattner6263f942008-02-17 20:02:20 +0000146 %tmp.upgrd.3 = fcmp ogt float %tmp, 0.000000e+00 ; <i1> [#uses=1]
147 br i1 %tmp.upgrd.3, label %cond_true, label %cond_false
Evan Cheng02b985c2007-01-19 09:20:23 +0000148
Tanya Lattner6263f942008-02-17 20:02:20 +0000149cond_true: ; preds = %entry
150 %tmp.upgrd.4 = tail call i32 (...)* @bar( ) ; <i32> [#uses=0]
151 ret void
Evan Cheng02b985c2007-01-19 09:20:23 +0000152
Tanya Lattner6263f942008-02-17 20:02:20 +0000153cond_false: ; preds = %entry
154 %tmp1 = tail call i32 (...)* @baz( ) ; <i32> [#uses=0]
155 ret void
Evan Cheng02b985c2007-01-19 09:20:23 +0000156}