[WebAssembly] Don't perform the returned-argument optimization on constants.
[oota-llvm.git] / test / CodeGen / ARM / fnmscs.ll
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
18
19 define float @t1(float %acc, float %a, float %b) nounwind {
20 entry:
21 ; VFP2-LABEL: t1:
22 ; VFP2: vnmla.f32
23
24 ; NEON-LABEL: t1:
25 ; NEON: vnmla.f32
26
27 ; A8U-LABEL: t1:
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
31 ; A8-LABEL: t1:
32 ; A8: vnmul.f32 s{{[0-9]}}, s{{[0-9]}}, s{{[0-9]}}
33 ; A8: vsub.f32 s{{[0-9]}}, s{{[0-9]}}, s{{[0-9]}}
34         %0 = fmul float %a, %b
35         %1 = fsub float -0.0, %0
36         %2 = fsub float %1, %acc
37         ret float %2
38 }
39
40 define float @t2(float %acc, float %a, float %b) nounwind {
41 entry:
42 ; VFP2-LABEL: t2:
43 ; VFP2: vnmla.f32
44
45 ; NEON-LABEL: t2:
46 ; NEON: vnmla.f32
47
48 ; A8U-LABEL: t2:
49 ; A8U: vnmul.f32 s{{[01234]}}, s{{[01234]}}, s{{[01234]}}
50 ; A8U: vsub.f32 d{{[0-9]}}, d{{[0-9]}}, d{{[0-9]}}
51
52 ; A8-LABEL: t2:
53 ; A8: vnmul.f32 s{{[01234]}}, s{{[01234]}}, s{{[01234]}}
54 ; A8: vsub.f32 s{{[0-9]}}, s{{[0-9]}}, s{{[0-9]}}
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
61 define double @t3(double %acc, double %a, double %b) nounwind {
62 entry:
63 ; VFP2-LABEL: t3:
64 ; VFP2: vnmla.f64
65
66 ; NEON-LABEL: t3:
67 ; NEON: vnmla.f64
68
69 ; A8U-LABEL: t3:
70 ; A8U: vnmul.f64 d
71 ; A8U: vsub.f64 d
72
73 ; A8-LABEL: t3:
74 ; A8: vnmul.f64 d
75 ; A8: vsub.f64 d
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:
84 ; VFP2-LABEL: t4:
85 ; VFP2: vnmla.f64
86
87 ; NEON-LABEL: t4:
88 ; NEON: vnmla.f64
89
90 ; A8U-LABEL: t4:
91 ; A8U: vnmul.f64 d
92 ; A8U: vsub.f64 d
93
94 ; A8-LABEL: t4:
95 ; A8: vnmul.f64 d
96 ; A8: vsub.f64 d
97         %0 = fmul double %a, %b
98         %1 = fmul double -1.0, %0
99         %2 = fsub double %1, %acc
100         ret double %2
101 }