[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / CodeGen / AArch64 / neon-fma-FMF.ll
blob0eb173396ce97c300300c7d84f563c7fcd0bbb06
1 ; RUN: llc < %s -verify-machineinstrs -mtriple=aarch64-none-linux-gnu -mattr=+neon | FileCheck %s
2 ; RUN: llc < %s -O3 -verify-machineinstrs -mtriple=aarch64-none-linux-gnu -mattr=+neon | FileCheck %s
4 define <2 x float> @fma_1(<2 x float> %A, <2 x float> %B, <2 x float> %C) {
5 ; CHECK-LABEL: fma_1:
6 ; CHECK: fmla {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
7         %tmp1 = fmul contract <2 x float> %A, %B;
8         %tmp2 = fadd contract <2 x float> %C, %tmp1;
9         ret <2 x float> %tmp2
12 ; This case will fold as it was only available through unsafe before, now available from
13 ; the contract on the fadd
14 define <2 x float> @fma_2(<2 x float> %A, <2 x float> %B, <2 x float> %C) {
15 ; CHECK-LABEL: fma_2:
16 ; CHECK: fmla {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
17         %tmp1 = fmul <2 x float> %A, %B;
18         %tmp2 = fadd contract <2 x float> %C, %tmp1;
19         ret <2 x float> %tmp2
22 define <2 x float> @no_fma_1(<2 x float> %A, <2 x float> %B, <2 x float> %C) {
23 ; CHECK-LABEL: no_fma_1:
24 ; CHECK: fmul
25 ; CHECK: fadd
26         %tmp1 = fmul contract <2 x float> %A, %B;
27         %tmp2 = fadd <2 x float> %C, %tmp1;
28         ret <2 x float> %tmp2
31 define <2 x float> @fma_sub_1(<2 x float> %A, <2 x float> %B, <2 x float> %C) {
32 ; CHECK-LABEL: fma_sub_1:
33 ; CHECK: fmls {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
34         %tmp1 = fmul contract <2 x float> %A, %B;
35         %tmp2 = fsub contract <2 x float> %C, %tmp1;
36         ret <2 x float> %tmp2
39 ; This case will fold as it was only available through unsafe before, now available from
40 ; the contract on the fsub
41 define <2 x float> @fma_sub_2(<2 x float> %A, <2 x float> %B, <2 x float> %C) {
42 ; CHECK-LABEL: fma_sub_2:
43 ; CHECK: fmls {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
44         %tmp1 = fmul <2 x float> %A, %B;
45         %tmp2 = fsub contract <2 x float> %C, %tmp1;
46         ret <2 x float> %tmp2
49 define <2 x float> @no_fma_sub_1(<2 x float> %A, <2 x float> %B, <2 x float> %C) {
50 ; CHECK-LABEL: no_fma_sub_1:
51 ; CHECK: fmul
52 ; CHECK: fsub
53         %tmp1 = fmul contract <2 x float> %A, %B;
54         %tmp2 = fsub <2 x float> %C, %tmp1;
55         ret <2 x float> %tmp2