Saleem Abdulrasool | 7258735 | 2014-04-03 16:01:44 +0000 | [diff] [blame] | 1 | ; RUN: llc -mtriple=arm-eabi -mattr=+vfp2 %s -o - \ |
| 2 | ; RUN: | FileCheck %s -check-prefix=VFP2 |
| 3 | |
| 4 | ; RUN: llc -mtriple=arm-eabi -mattr=+neon %s -o - \ |
| 5 | ; RUN: | FileCheck %s -check-prefix=NEON |
| 6 | |
| 7 | ; RUN: llc -mtriple=arm-eabi -mcpu=cortex-a8 %s -o - \ |
| 8 | ; RUN: | FileCheck %s -check-prefix=A8 |
| 9 | |
| 10 | ; RUN: llc -mtriple=arm-eabi -mcpu=cortex-a8 -regalloc=basic %s -o - \ |
| 11 | ; RUN: | FileCheck %s -check-prefix=A8 |
| 12 | |
| 13 | ; RUN: llc -mtriple=arm-eabi -mcpu=cortex-a8 --enable-unsafe-fp-math %s -o - \ |
| 14 | ; RUN: | FileCheck %s -check-prefix=A8U |
| 15 | |
| 16 | ; RUN: llc -mtriple=arm-darwin -mcpu=cortex-a8 %s -o - \ |
| 17 | ; RUN: | FileCheck %s -check-prefix=A8U |
David Goodwin | 3b9c52c | 2009-08-04 17:53:06 +0000 | [diff] [blame] | 18 | |
Evan Cheng | 2d59ee3 | 2010-11-12 20:32:20 +0000 | [diff] [blame] | 19 | define float @t1(float %acc, float %a, float %b) nounwind { |
David Goodwin | 3b9c52c | 2009-08-04 17:53:06 +0000 | [diff] [blame] | 20 | entry: |
Stephen Lin | d24ab20 | 2013-07-14 06:24:09 +0000 | [diff] [blame] | 21 | ; VFP2-LABEL: t1: |
Evan Cheng | 2d59ee3 | 2010-11-12 20:32:20 +0000 | [diff] [blame] | 22 | ; VFP2: vnmla.f32 |
| 23 | |
Stephen Lin | d24ab20 | 2013-07-14 06:24:09 +0000 | [diff] [blame] | 24 | ; NEON-LABEL: t1: |
Evan Cheng | 2d59ee3 | 2010-11-12 20:32:20 +0000 | [diff] [blame] | 25 | ; NEON: vnmla.f32 |
| 26 | |
Stephen Lin | d24ab20 | 2013-07-14 06:24:09 +0000 | [diff] [blame] | 27 | ; A8U-LABEL: t1: |
Renato Golin | b4dd6c5 | 2013-03-21 18:47:47 +0000 | [diff] [blame] | 28 | ; A8U: vnmul.f32 s{{[0-9]}}, s{{[0-9]}}, s{{[0-9]}} |
| 29 | ; A8U: vsub.f32 d{{[0-9]}}, d{{[0-9]}}, d{{[0-9]}} |
| 30 | |
Stephen Lin | d24ab20 | 2013-07-14 06:24:09 +0000 | [diff] [blame] | 31 | ; A8-LABEL: t1: |
Jakob Stoklund Olesen | 0888bcf | 2011-03-31 22:14:03 +0000 | [diff] [blame] | 32 | ; A8: vnmul.f32 s{{[0-9]}}, s{{[0-9]}}, s{{[0-9]}} |
Renato Golin | b4dd6c5 | 2013-03-21 18:47:47 +0000 | [diff] [blame] | 33 | ; A8: vsub.f32 s{{[0-9]}}, s{{[0-9]}}, s{{[0-9]}} |
David Goodwin | 3b9c52c | 2009-08-04 17:53:06 +0000 | [diff] [blame] | 34 | %0 = fmul float %a, %b |
David Goodwin | 108b522 | 2009-08-10 22:31:04 +0000 | [diff] [blame] | 35 | %1 = fsub float -0.0, %0 |
David Goodwin | 3b9c52c | 2009-08-04 17:53:06 +0000 | [diff] [blame] | 36 | %2 = fsub float %1, %acc |
| 37 | ret float %2 |
| 38 | } |
| 39 | |
Evan Cheng | 2d59ee3 | 2010-11-12 20:32:20 +0000 | [diff] [blame] | 40 | define float @t2(float %acc, float %a, float %b) nounwind { |
David Goodwin | a2824d5 | 2009-08-04 18:11:59 +0000 | [diff] [blame] | 41 | entry: |
Stephen Lin | d24ab20 | 2013-07-14 06:24:09 +0000 | [diff] [blame] | 42 | ; VFP2-LABEL: t2: |
Evan Cheng | 2d59ee3 | 2010-11-12 20:32:20 +0000 | [diff] [blame] | 43 | ; VFP2: vnmla.f32 |
| 44 | |
Stephen Lin | d24ab20 | 2013-07-14 06:24:09 +0000 | [diff] [blame] | 45 | ; NEON-LABEL: t2: |
Evan Cheng | 2d59ee3 | 2010-11-12 20:32:20 +0000 | [diff] [blame] | 46 | ; NEON: vnmla.f32 |
| 47 | |
Stephen Lin | d24ab20 | 2013-07-14 06:24:09 +0000 | [diff] [blame] | 48 | ; A8U-LABEL: t2: |
Renato Golin | b4dd6c5 | 2013-03-21 18:47:47 +0000 | [diff] [blame] | 49 | ; A8U: vnmul.f32 s{{[01234]}}, s{{[01234]}}, s{{[01234]}} |
| 50 | ; A8U: vsub.f32 d{{[0-9]}}, d{{[0-9]}}, d{{[0-9]}} |
| 51 | |
Stephen Lin | d24ab20 | 2013-07-14 06:24:09 +0000 | [diff] [blame] | 52 | ; A8-LABEL: t2: |
Evan Cheng | 93b5cdc | 2011-05-03 19:09:32 +0000 | [diff] [blame] | 53 | ; A8: vnmul.f32 s{{[01234]}}, s{{[01234]}}, s{{[01234]}} |
Renato Golin | b4dd6c5 | 2013-03-21 18:47:47 +0000 | [diff] [blame] | 54 | ; A8: vsub.f32 s{{[0-9]}}, s{{[0-9]}}, s{{[0-9]}} |
David Goodwin | a2824d5 | 2009-08-04 18:11:59 +0000 | [diff] [blame] | 55 | %0 = fmul float %a, %b |
| 56 | %1 = fmul float -1.0, %0 |
| 57 | %2 = fsub float %1, %acc |
| 58 | ret float %2 |
| 59 | } |
| 60 | |
Evan Cheng | 2d59ee3 | 2010-11-12 20:32:20 +0000 | [diff] [blame] | 61 | define double @t3(double %acc, double %a, double %b) nounwind { |
| 62 | entry: |
Stephen Lin | d24ab20 | 2013-07-14 06:24:09 +0000 | [diff] [blame] | 63 | ; VFP2-LABEL: t3: |
Evan Cheng | 2d59ee3 | 2010-11-12 20:32:20 +0000 | [diff] [blame] | 64 | ; VFP2: vnmla.f64 |
| 65 | |
Stephen Lin | d24ab20 | 2013-07-14 06:24:09 +0000 | [diff] [blame] | 66 | ; NEON-LABEL: t3: |
Evan Cheng | 2d59ee3 | 2010-11-12 20:32:20 +0000 | [diff] [blame] | 67 | ; NEON: vnmla.f64 |
| 68 | |
Stephen Lin | d24ab20 | 2013-07-14 06:24:09 +0000 | [diff] [blame] | 69 | ; A8U-LABEL: t3: |
Renato Golin | b4dd6c5 | 2013-03-21 18:47:47 +0000 | [diff] [blame] | 70 | ; A8U: vnmul.f64 d |
| 71 | ; A8U: vsub.f64 d |
| 72 | |
Stephen Lin | d24ab20 | 2013-07-14 06:24:09 +0000 | [diff] [blame] | 73 | ; A8-LABEL: t3: |
Jakob Stoklund Olesen | ac6cfa4 | 2013-01-19 00:03:32 +0000 | [diff] [blame] | 74 | ; A8: vnmul.f64 d |
| 75 | ; A8: vsub.f64 d |
Evan Cheng | 2d59ee3 | 2010-11-12 20:32:20 +0000 | [diff] [blame] | 76 | %0 = fmul double %a, %b |
| 77 | %1 = fsub double -0.0, %0 |
| 78 | %2 = fsub double %1, %acc |
| 79 | ret double %2 |
| 80 | } |
| 81 | |
| 82 | define double @t4(double %acc, double %a, double %b) nounwind { |
| 83 | entry: |
Stephen Lin | d24ab20 | 2013-07-14 06:24:09 +0000 | [diff] [blame] | 84 | ; VFP2-LABEL: t4: |
Evan Cheng | 2d59ee3 | 2010-11-12 20:32:20 +0000 | [diff] [blame] | 85 | ; VFP2: vnmla.f64 |
| 86 | |
Stephen Lin | d24ab20 | 2013-07-14 06:24:09 +0000 | [diff] [blame] | 87 | ; NEON-LABEL: t4: |
Evan Cheng | 2d59ee3 | 2010-11-12 20:32:20 +0000 | [diff] [blame] | 88 | ; NEON: vnmla.f64 |
| 89 | |
Stephen Lin | d24ab20 | 2013-07-14 06:24:09 +0000 | [diff] [blame] | 90 | ; A8U-LABEL: t4: |
Renato Golin | b4dd6c5 | 2013-03-21 18:47:47 +0000 | [diff] [blame] | 91 | ; A8U: vnmul.f64 d |
| 92 | ; A8U: vsub.f64 d |
| 93 | |
Stephen Lin | d24ab20 | 2013-07-14 06:24:09 +0000 | [diff] [blame] | 94 | ; A8-LABEL: t4: |
Jakob Stoklund Olesen | ac6cfa4 | 2013-01-19 00:03:32 +0000 | [diff] [blame] | 95 | ; A8: vnmul.f64 d |
| 96 | ; A8: vsub.f64 d |
Evan Cheng | 2d59ee3 | 2010-11-12 20:32:20 +0000 | [diff] [blame] | 97 | %0 = fmul double %a, %b |
| 98 | %1 = fmul double -1.0, %0 |
| 99 | %2 = fsub double %1, %acc |
| 100 | ret double %2 |
| 101 | } |