Jakob Stoklund Olesen | ca6fd00 | 2011-03-31 22:14:03 +0000 | [diff] [blame] | 1 | ; 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 Cheng | 02b985c | 2007-01-19 09:20:23 +0000 | [diff] [blame] | 3 | |
Tanya Lattner | 6263f94 | 2008-02-17 20:02:20 +0000 | [diff] [blame] | 4 | define 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 Cheng | 02b985c | 2007-01-19 09:20:23 +0000 | [diff] [blame] | 10 | } |
| 11 | |
Tanya Lattner | 6263f94 | 2008-02-17 20:02:20 +0000 | [diff] [blame] | 12 | declare float @fabsf(float) |
Evan Cheng | 02b985c | 2007-01-19 09:20:23 +0000 | [diff] [blame] | 13 | |
Tanya Lattner | 6263f94 | 2008-02-17 20:02:20 +0000 | [diff] [blame] | 14 | declare double @fabs(double) |
Evan Cheng | 02b985c | 2007-01-19 09:20:23 +0000 | [diff] [blame] | 15 | |
Tanya Lattner | 6263f94 | 2008-02-17 20:02:20 +0000 | [diff] [blame] | 16 | define void @test_abs(float* %P, double* %D) { |
Bob Wilson | 9b379dc | 2009-09-15 20:58:02 +0000 | [diff] [blame] | 17 | ;CHECK: test_abs: |
Tanya Lattner | 6263f94 | 2008-02-17 20:02:20 +0000 | [diff] [blame] | 18 | %a = load float* %P ; <float> [#uses=1] |
Jim Grosbach | e516549 | 2009-11-09 00:11:35 +0000 | [diff] [blame] | 19 | ;CHECK: vabs.f32 |
Tanya Lattner | 6263f94 | 2008-02-17 20:02:20 +0000 | [diff] [blame] | 20 | %b = call float @fabsf( float %a ) ; <float> [#uses=1] |
| 21 | store float %b, float* %P |
| 22 | %A = load double* %D ; <double> [#uses=1] |
Jim Grosbach | e516549 | 2009-11-09 00:11:35 +0000 | [diff] [blame] | 23 | ;CHECK: vabs.f64 |
Tanya Lattner | 6263f94 | 2008-02-17 20:02:20 +0000 | [diff] [blame] | 24 | %B = call double @fabs( double %A ) ; <double> [#uses=1] |
| 25 | store double %B, double* %D |
| 26 | ret void |
Evan Cheng | 02b985c | 2007-01-19 09:20:23 +0000 | [diff] [blame] | 27 | } |
| 28 | |
Tanya Lattner | 6263f94 | 2008-02-17 20:02:20 +0000 | [diff] [blame] | 29 | define void @test_add(float* %P, double* %D) { |
Bob Wilson | 9b379dc | 2009-09-15 20:58:02 +0000 | [diff] [blame] | 30 | ;CHECK: test_add: |
Tanya Lattner | 6263f94 | 2008-02-17 20:02:20 +0000 | [diff] [blame] | 31 | %a = load float* %P ; <float> [#uses=2] |
Dan Gohman | ae3a0be | 2009-06-04 22:49:04 +0000 | [diff] [blame] | 32 | %b = fadd float %a, %a ; <float> [#uses=1] |
Tanya Lattner | 6263f94 | 2008-02-17 20:02:20 +0000 | [diff] [blame] | 33 | store float %b, float* %P |
| 34 | %A = load double* %D ; <double> [#uses=2] |
Dan Gohman | ae3a0be | 2009-06-04 22:49:04 +0000 | [diff] [blame] | 35 | %B = fadd double %A, %A ; <double> [#uses=1] |
Tanya Lattner | 6263f94 | 2008-02-17 20:02:20 +0000 | [diff] [blame] | 36 | store double %B, double* %D |
| 37 | ret void |
Evan Cheng | 02b985c | 2007-01-19 09:20:23 +0000 | [diff] [blame] | 38 | } |
| 39 | |
Tanya Lattner | 6263f94 | 2008-02-17 20:02:20 +0000 | [diff] [blame] | 40 | define void @test_ext_round(float* %P, double* %D) { |
Bob Wilson | 9b379dc | 2009-09-15 20:58:02 +0000 | [diff] [blame] | 41 | ;CHECK: test_ext_round: |
Tanya Lattner | 6263f94 | 2008-02-17 20:02:20 +0000 | [diff] [blame] | 42 | %a = load float* %P ; <float> [#uses=1] |
Andrew Trick | c558bf3 | 2011-04-12 20:14:07 +0000 | [diff] [blame] | 43 | ;CHECK: vcvt.f64.f32 |
Andrew Trick | 87896d9 | 2011-04-13 00:38:32 +0000 | [diff] [blame] | 44 | ;CHECK: vcvt.f32.f64 |
Tanya Lattner | 6263f94 | 2008-02-17 20:02:20 +0000 | [diff] [blame] | 45 | %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 Cheng | 02b985c | 2007-01-19 09:20:23 +0000 | [diff] [blame] | 51 | } |
| 52 | |
Tanya Lattner | 6263f94 | 2008-02-17 20:02:20 +0000 | [diff] [blame] | 53 | define void @test_fma(float* %P1, float* %P2, float* %P3) { |
Bob Wilson | 9b379dc | 2009-09-15 20:58:02 +0000 | [diff] [blame] | 54 | ;CHECK: test_fma: |
Tanya Lattner | 6263f94 | 2008-02-17 20:02:20 +0000 | [diff] [blame] | 55 | %a1 = load float* %P1 ; <float> [#uses=1] |
| 56 | %a2 = load float* %P2 ; <float> [#uses=1] |
| 57 | %a3 = load float* %P3 ; <float> [#uses=1] |
Jim Grosbach | e516549 | 2009-11-09 00:11:35 +0000 | [diff] [blame] | 58 | ;CHECK: vnmls.f32 |
Dan Gohman | ae3a0be | 2009-06-04 22:49:04 +0000 | [diff] [blame] | 59 | %X = fmul float %a1, %a2 ; <float> [#uses=1] |
| 60 | %Y = fsub float %X, %a3 ; <float> [#uses=1] |
Tanya Lattner | 6263f94 | 2008-02-17 20:02:20 +0000 | [diff] [blame] | 61 | store float %Y, float* %P1 |
| 62 | ret void |
Evan Cheng | 02b985c | 2007-01-19 09:20:23 +0000 | [diff] [blame] | 63 | } |
| 64 | |
Tanya Lattner | 6263f94 | 2008-02-17 20:02:20 +0000 | [diff] [blame] | 65 | define i32 @test_ftoi(float* %P1) { |
Bob Wilson | 9b379dc | 2009-09-15 20:58:02 +0000 | [diff] [blame] | 66 | ;CHECK: test_ftoi: |
Tanya Lattner | 6263f94 | 2008-02-17 20:02:20 +0000 | [diff] [blame] | 67 | %a1 = load float* %P1 ; <float> [#uses=1] |
Jim Grosbach | e516549 | 2009-11-09 00:11:35 +0000 | [diff] [blame] | 68 | ;CHECK: vcvt.s32.f32 |
Tanya Lattner | 6263f94 | 2008-02-17 20:02:20 +0000 | [diff] [blame] | 69 | %b1 = fptosi float %a1 to i32 ; <i32> [#uses=1] |
| 70 | ret i32 %b1 |
Evan Cheng | 02b985c | 2007-01-19 09:20:23 +0000 | [diff] [blame] | 71 | } |
| 72 | |
Tanya Lattner | 6263f94 | 2008-02-17 20:02:20 +0000 | [diff] [blame] | 73 | define i32 @test_ftou(float* %P1) { |
Bob Wilson | 9b379dc | 2009-09-15 20:58:02 +0000 | [diff] [blame] | 74 | ;CHECK: test_ftou: |
Tanya Lattner | 6263f94 | 2008-02-17 20:02:20 +0000 | [diff] [blame] | 75 | %a1 = load float* %P1 ; <float> [#uses=1] |
Jim Grosbach | e516549 | 2009-11-09 00:11:35 +0000 | [diff] [blame] | 76 | ;CHECK: vcvt.u32.f32 |
Tanya Lattner | 6263f94 | 2008-02-17 20:02:20 +0000 | [diff] [blame] | 77 | %b1 = fptoui float %a1 to i32 ; <i32> [#uses=1] |
| 78 | ret i32 %b1 |
Evan Cheng | 02b985c | 2007-01-19 09:20:23 +0000 | [diff] [blame] | 79 | } |
| 80 | |
Tanya Lattner | 6263f94 | 2008-02-17 20:02:20 +0000 | [diff] [blame] | 81 | define i32 @test_dtoi(double* %P1) { |
Bob Wilson | 9b379dc | 2009-09-15 20:58:02 +0000 | [diff] [blame] | 82 | ;CHECK: test_dtoi: |
Tanya Lattner | 6263f94 | 2008-02-17 20:02:20 +0000 | [diff] [blame] | 83 | %a1 = load double* %P1 ; <double> [#uses=1] |
Jim Grosbach | e516549 | 2009-11-09 00:11:35 +0000 | [diff] [blame] | 84 | ;CHECK: vcvt.s32.f64 |
Tanya Lattner | 6263f94 | 2008-02-17 20:02:20 +0000 | [diff] [blame] | 85 | %b1 = fptosi double %a1 to i32 ; <i32> [#uses=1] |
| 86 | ret i32 %b1 |
Evan Cheng | 02b985c | 2007-01-19 09:20:23 +0000 | [diff] [blame] | 87 | } |
| 88 | |
Tanya Lattner | 6263f94 | 2008-02-17 20:02:20 +0000 | [diff] [blame] | 89 | define i32 @test_dtou(double* %P1) { |
Bob Wilson | 9b379dc | 2009-09-15 20:58:02 +0000 | [diff] [blame] | 90 | ;CHECK: test_dtou: |
Tanya Lattner | 6263f94 | 2008-02-17 20:02:20 +0000 | [diff] [blame] | 91 | %a1 = load double* %P1 ; <double> [#uses=1] |
Jim Grosbach | e516549 | 2009-11-09 00:11:35 +0000 | [diff] [blame] | 92 | ;CHECK: vcvt.u32.f64 |
Tanya Lattner | 6263f94 | 2008-02-17 20:02:20 +0000 | [diff] [blame] | 93 | %b1 = fptoui double %a1 to i32 ; <i32> [#uses=1] |
| 94 | ret i32 %b1 |
Evan Cheng | 02b985c | 2007-01-19 09:20:23 +0000 | [diff] [blame] | 95 | } |
| 96 | |
Tanya Lattner | 6263f94 | 2008-02-17 20:02:20 +0000 | [diff] [blame] | 97 | define void @test_utod(double* %P1, i32 %X) { |
Bob Wilson | 9b379dc | 2009-09-15 20:58:02 +0000 | [diff] [blame] | 98 | ;CHECK: test_utod: |
Jim Grosbach | e516549 | 2009-11-09 00:11:35 +0000 | [diff] [blame] | 99 | ;CHECK: vcvt.f64.u32 |
Tanya Lattner | 6263f94 | 2008-02-17 20:02:20 +0000 | [diff] [blame] | 100 | %b1 = uitofp i32 %X to double ; <double> [#uses=1] |
| 101 | store double %b1, double* %P1 |
| 102 | ret void |
Evan Cheng | 02b985c | 2007-01-19 09:20:23 +0000 | [diff] [blame] | 103 | } |
| 104 | |
Tanya Lattner | 6263f94 | 2008-02-17 20:02:20 +0000 | [diff] [blame] | 105 | define void @test_utod2(double* %P1, i8 %X) { |
Bob Wilson | 9b379dc | 2009-09-15 20:58:02 +0000 | [diff] [blame] | 106 | ;CHECK: test_utod2: |
Jim Grosbach | e516549 | 2009-11-09 00:11:35 +0000 | [diff] [blame] | 107 | ;CHECK: vcvt.f64.u32 |
Tanya Lattner | 6263f94 | 2008-02-17 20:02:20 +0000 | [diff] [blame] | 108 | %b1 = uitofp i8 %X to double ; <double> [#uses=1] |
| 109 | store double %b1, double* %P1 |
| 110 | ret void |
Evan Cheng | 02b985c | 2007-01-19 09:20:23 +0000 | [diff] [blame] | 111 | } |
| 112 | |
Tanya Lattner | 6263f94 | 2008-02-17 20:02:20 +0000 | [diff] [blame] | 113 | define void @test_cmp(float* %glob, i32 %X) { |
Bob Wilson | 9b379dc | 2009-09-15 20:58:02 +0000 | [diff] [blame] | 114 | ;CHECK: test_cmp: |
Evan Cheng | 02b985c | 2007-01-19 09:20:23 +0000 | [diff] [blame] | 115 | entry: |
Tanya Lattner | 6263f94 | 2008-02-17 20:02:20 +0000 | [diff] [blame] | 116 | %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 Wilson | 9b379dc | 2009-09-15 20:58:02 +0000 | [diff] [blame] | 122 | ;CHECK: bmi |
| 123 | ;CHECK-NEXT: bgt |
Tanya Lattner | 6263f94 | 2008-02-17 20:02:20 +0000 | [diff] [blame] | 124 | br i1 %tmp6, label %cond_true, label %cond_false |
Evan Cheng | 02b985c | 2007-01-19 09:20:23 +0000 | [diff] [blame] | 125 | |
Tanya Lattner | 6263f94 | 2008-02-17 20:02:20 +0000 | [diff] [blame] | 126 | cond_true: ; preds = %entry |
| 127 | %tmp.upgrd.2 = tail call i32 (...)* @bar( ) ; <i32> [#uses=0] |
| 128 | ret void |
Evan Cheng | 02b985c | 2007-01-19 09:20:23 +0000 | [diff] [blame] | 129 | |
Tanya Lattner | 6263f94 | 2008-02-17 20:02:20 +0000 | [diff] [blame] | 130 | cond_false: ; preds = %entry |
| 131 | %tmp7 = tail call i32 (...)* @baz( ) ; <i32> [#uses=0] |
| 132 | ret void |
Evan Cheng | 02b985c | 2007-01-19 09:20:23 +0000 | [diff] [blame] | 133 | } |
| 134 | |
Tanya Lattner | 6263f94 | 2008-02-17 20:02:20 +0000 | [diff] [blame] | 135 | declare i1 @llvm.isunordered.f32(float, float) |
Evan Cheng | 02b985c | 2007-01-19 09:20:23 +0000 | [diff] [blame] | 136 | |
Tanya Lattner | 6263f94 | 2008-02-17 20:02:20 +0000 | [diff] [blame] | 137 | declare i32 @bar(...) |
Evan Cheng | 02b985c | 2007-01-19 09:20:23 +0000 | [diff] [blame] | 138 | |
Tanya Lattner | 6263f94 | 2008-02-17 20:02:20 +0000 | [diff] [blame] | 139 | declare i32 @baz(...) |
Evan Cheng | 02b985c | 2007-01-19 09:20:23 +0000 | [diff] [blame] | 140 | |
Tanya Lattner | 6263f94 | 2008-02-17 20:02:20 +0000 | [diff] [blame] | 141 | define void @test_cmpfp0(float* %glob, i32 %X) { |
Bob Wilson | 9b379dc | 2009-09-15 20:58:02 +0000 | [diff] [blame] | 142 | ;CHECK: test_cmpfp0: |
Evan Cheng | 02b985c | 2007-01-19 09:20:23 +0000 | [diff] [blame] | 143 | entry: |
Tanya Lattner | 6263f94 | 2008-02-17 20:02:20 +0000 | [diff] [blame] | 144 | %tmp = load float* %glob ; <float> [#uses=1] |
Jim Grosbach | e516549 | 2009-11-09 00:11:35 +0000 | [diff] [blame] | 145 | ;CHECK: vcmpe.f32 |
Tanya Lattner | 6263f94 | 2008-02-17 20:02:20 +0000 | [diff] [blame] | 146 | %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 Cheng | 02b985c | 2007-01-19 09:20:23 +0000 | [diff] [blame] | 148 | |
Tanya Lattner | 6263f94 | 2008-02-17 20:02:20 +0000 | [diff] [blame] | 149 | cond_true: ; preds = %entry |
| 150 | %tmp.upgrd.4 = tail call i32 (...)* @bar( ) ; <i32> [#uses=0] |
| 151 | ret void |
Evan Cheng | 02b985c | 2007-01-19 09:20:23 +0000 | [diff] [blame] | 152 | |
Tanya Lattner | 6263f94 | 2008-02-17 20:02:20 +0000 | [diff] [blame] | 153 | cond_false: ; preds = %entry |
| 154 | %tmp1 = tail call i32 (...)* @baz( ) ; <i32> [#uses=0] |
| 155 | ret void |
Evan Cheng | 02b985c | 2007-01-19 09:20:23 +0000 | [diff] [blame] | 156 | } |