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