blob: 9facf20fee7e045a53f86ccc8cdec59c6ab9af00 [file] [log] [blame]
Evan Cheng529916c2010-11-12 20:32:20 +00001; RUN: llc < %s -march=arm -mattr=+vfp2 | FileCheck %s -check-prefix=VFP2
2; RUN: llc < %s -march=arm -mattr=+neon | FileCheck %s -check-prefix=NEON
3; RUN: llc < %s -march=arm -mcpu=cortex-a8 | FileCheck %s -check-prefix=A8
Jakob Stoklund Olesenca6fd002011-03-31 22:14:03 +00004; RUN: llc < %s -march=arm -mcpu=cortex-a8 -regalloc=basic | FileCheck %s -check-prefix=A8
David Goodwin42a83f22009-08-04 17:53:06 +00005
Evan Cheng529916c2010-11-12 20:32:20 +00006define float @t1(float %acc, float %a, float %b) nounwind {
David Goodwin42a83f22009-08-04 17:53:06 +00007entry:
Evan Cheng529916c2010-11-12 20:32:20 +00008; VFP2: t1:
9; VFP2: vnmla.f32
10
11; NEON: t1:
12; NEON: vnmla.f32
13
14; A8: t1:
Jakob Stoklund Olesenca6fd002011-03-31 22:14:03 +000015; A8: vnmul.f32 s{{[0-9]}}, s{{[0-9]}}, s{{[0-9]}}
16; A8: vsub.f32 d{{[0-9]}}, d{{[0-9]}}, d{{[0-9]}}
David Goodwin42a83f22009-08-04 17:53:06 +000017 %0 = fmul float %a, %b
David Goodwinaeb66fe2009-08-10 22:31:04 +000018 %1 = fsub float -0.0, %0
David Goodwin42a83f22009-08-04 17:53:06 +000019 %2 = fsub float %1, %acc
20 ret float %2
21}
22
Evan Cheng529916c2010-11-12 20:32:20 +000023define float @t2(float %acc, float %a, float %b) nounwind {
David Goodwin831b5002009-08-04 18:11:59 +000024entry:
Evan Cheng529916c2010-11-12 20:32:20 +000025; VFP2: t2:
26; VFP2: vnmla.f32
27
28; NEON: t2:
29; NEON: vnmla.f32
30
31; A8: t2:
Jakob Stoklund Olesenca6fd002011-03-31 22:14:03 +000032; A8: vnmul.f32 s{{[0123]}}, s{{[0123]}}, s{{[0123]}}
33; A8: vsub.f32 d{{[0-9]}}, d{{[0-9]}}, d{{[0-9]}}
David Goodwin831b5002009-08-04 18:11:59 +000034 %0 = fmul float %a, %b
35 %1 = fmul float -1.0, %0
36 %2 = fsub float %1, %acc
37 ret float %2
38}
39
Evan Cheng529916c2010-11-12 20:32:20 +000040define double @t3(double %acc, double %a, double %b) nounwind {
41entry:
42; VFP2: t3:
43; VFP2: vnmla.f64
44
45; NEON: t3:
46; NEON: vnmla.f64
47
48; A8: t3:
Jakob Stoklund Olesenca6fd002011-03-31 22:14:03 +000049; A8: vnmul.f64 d1{{[67]}}, d1{{[67]}}, d1{{[67]}}
50; A8: vsub.f64 d1{{[67]}}, d1{{[67]}}, d1{{[67]}}
Evan Cheng529916c2010-11-12 20:32:20 +000051 %0 = fmul double %a, %b
52 %1 = fsub double -0.0, %0
53 %2 = fsub double %1, %acc
54 ret double %2
55}
56
57define double @t4(double %acc, double %a, double %b) nounwind {
58entry:
59; VFP2: t4:
60; VFP2: vnmla.f64
61
62; NEON: t4:
63; NEON: vnmla.f64
64
65; A8: t4:
Jakob Stoklund Olesenca6fd002011-03-31 22:14:03 +000066; A8: vnmul.f64 d1{{[67]}}, d1{{[67]}}, d1{{[67]}}
67; A8: vsub.f64 d1{{[67]}}, d1{{[67]}}, d1{{[67]}}
Evan Cheng529916c2010-11-12 20:32:20 +000068 %0 = fmul double %a, %b
69 %1 = fmul double -1.0, %0
70 %2 = fsub double %1, %acc
71 ret double %2
72}