]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - contrib/llvm/lib/Target/Hexagon/HexagonIntrinsicsDerived.td
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / contrib / llvm / lib / Target / Hexagon / HexagonIntrinsicsDerived.td
1 //===-- HexagonIntrinsicsDerived.td - Derived intrinsics ---*- tablegen -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // Multiply 64-bit and use lower result
11 //
12 // Optimized with intrinisics accumulates
13 //
14 def : Pat <(mul DoubleRegs:$src1, DoubleRegs:$src2),
15       (i64
16        (COMBINE_rr
17         (HEXAGON_M2_maci
18          (HEXAGON_M2_maci
19           (i32
20            (EXTRACT_SUBREG
21             (i64
22              (MPYU64 (i32 (EXTRACT_SUBREG (i64 DoubleRegs:$src1),
23                                           subreg_loreg)),
24                      (i32 (EXTRACT_SUBREG (i64 DoubleRegs:$src2),
25                                           subreg_loreg)))),
26             subreg_hireg)),
27           (i32 (EXTRACT_SUBREG (i64 DoubleRegs:$src1), subreg_loreg)),
28           (i32 (EXTRACT_SUBREG (i64 DoubleRegs:$src2), subreg_hireg))),
29          (i32 (EXTRACT_SUBREG (i64 DoubleRegs:$src2), subreg_loreg)),
30          (i32 (EXTRACT_SUBREG (i64 DoubleRegs:$src1), subreg_hireg))),
31         (i32
32          (EXTRACT_SUBREG
33           (i64
34            (MPYU64 (i32 (EXTRACT_SUBREG (i64 DoubleRegs:$src1), subreg_loreg)),
35                    (i32 (EXTRACT_SUBREG (i64 DoubleRegs:$src2),
36                                         subreg_loreg)))), subreg_loreg))))>;
37
38
39