blob: 296c1765e2e42167a9ee071f70111569e2aadbf3 [file] [log] [blame]
Krzysztof Parzyszek0e7d2d32016-04-28 16:43:16 +00001//==- HexagonAlias.td - Hexagon Instruction Aliases ---------*- 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//===----------------------------------------------------------------------===//
11// Hexagon Instruction Mappings
12//===----------------------------------------------------------------------===//
13
14// V6_vassignp: Vector assign mapping.
15let hasNewValue = 1, opNewValue = 0, isAsmParserOnly = 1 in
16def HEXAGON_V6_vassignpair: CVI_VA_DV_Resource <
17 (outs VecDblRegs:$Vdd),
18 (ins VecDblRegs:$Vss),
19 "$Vdd = $Vss">;
20
21// maps Vd = #0 to Vd = vxor(Vd, Vd)
22def : InstAlias<"$Vd = #0",
23 (V6_vxor VectorRegs:$Vd, VectorRegs:$Vd, VectorRegs:$Vd)>,
24 Requires<[HasV60T]>;
25
26// maps Vdd = #0 to Vdd = vsub(Vdd, Vdd)
27def : InstAlias<"$Vdd = #0",
28 (V6_vsubw_dv VecDblRegs:$Vdd, VecDblRegs:$Vdd, VecDblRegs:$Vdd)>,
29 Requires<[HasV60T]>;
Krzysztof Parzyszeke5fcce22016-04-28 19:49:18 +000030
31// maps "$Qd = vcmp.eq($Vu.uh, $Vv.uh)" -> "$Qd = vcmp.eq($Vu.h, $Vv.h)"
32def : InstAlias<"$Qd = vcmp.eq($Vu.uh, $Vv.uh)",
33 (V6_veqh VecPredRegs:$Qd, VectorRegs:$Vu, VectorRegs:$Vv)>,
34 Requires<[HasV60T]>;
35
36// maps "$Qd &= vcmp.eq($Vu.uh, $Vv.uh)" -> "$Qd &= vcmp.eq($Vu.h, $Vv.h)"
37def : InstAlias<"$Qd &= vcmp.eq($Vu.uh, $Vv.uh)",
38 (V6_veqh_and VecPredRegs:$Qd, VectorRegs:$Vu, VectorRegs:$Vv)>,
39 Requires<[HasV60T]>;
40
41// maps "$Qd |= vcmp.eq($Vu.uh, $Vv.uh)" -> "$Qd |= vcmp.eq($Vu.h, $Vv.h)"
42def : InstAlias<"$Qd |= vcmp.eq($Vu.uh, $Vv.uh)",
43 (V6_veqh_or VecPredRegs:$Qd, VectorRegs:$Vu, VectorRegs:$Vv)>,
44 Requires<[HasV60T]>;
45
46// maps "$Qd ^= vcmp.eq($Vu.uh, $Vv.uh)" -> "$Qd ^= vcmp.eq($Vu.h, $Vv.h)"
47def : InstAlias<"$Qd ^= vcmp.eq($Vu.uh, $Vv.uh)",
48 (V6_veqh_xor VecPredRegs:$Qd, VectorRegs:$Vu, VectorRegs:$Vv)>,
49 Requires<[HasV60T]>;
50
51// maps "$Qd = vcmp.eq($Vu.uw, $Vv.uw)" -> "$Qd = vcmp.eq($Vu.w, $Vv.w)"
52def : InstAlias<"$Qd = vcmp.eq($Vu.uw, $Vv.uw)",
53 (V6_veqw VecPredRegs:$Qd, VectorRegs:$Vu, VectorRegs:$Vv)>,
54 Requires<[HasV60T]>;
55
56// maps "$Qd &= vcmp.eq($Vu.uw, $Vv.uw)" -> "$Qd &= vcmp.eq($Vu.w, $Vv.w)"
57def : InstAlias<"$Qd &= vcmp.eq($Vu.uw, $Vv.uw)",
58 (V6_veqw_and VecPredRegs:$Qd, VectorRegs:$Vu, VectorRegs:$Vv)>,
59 Requires<[HasV60T]>;
60
61// maps "$Qd |= vcmp.eq($Vu.uw, $Vv.uw)" -> "$Qd |= vcmp.eq($Vu.w, $Vv.w)"
62def : InstAlias<"$Qd |= vcmp.eq($Vu.uw, $Vv.uw)",
63 (V6_veqh_or VecPredRegs:$Qd, VectorRegs:$Vu, VectorRegs:$Vv)>,
64 Requires<[HasV60T]>;
65
66// maps "$Qd ^= vcmp.eq($Vu.uw, $Vv.uw)" -> "$Qd ^= vcmp.eq($Vu.w, $Vv.w)"
67def : InstAlias<"$Qd ^= vcmp.eq($Vu.uw, $Vv.uw)",
68 (V6_veqw_xor VecPredRegs:$Qd, VectorRegs:$Vu, VectorRegs:$Vv)>,
69 Requires<[HasV60T]>;
70
71// maps "$Qd = vcmp.eq($Vu.ub, $Vv.ub)" -> "$Qd = vcmp.eq($Vu.b, $Vv.b)"
72def : InstAlias<"$Qd = vcmp.eq($Vu.ub, $Vv.ub)",
73 (V6_veqb VecPredRegs:$Qd, VectorRegs:$Vu, VectorRegs:$Vv)>,
74 Requires<[HasV60T]>;
75
76// maps "$Qd &= vcmp.eq($Vu.ub, $Vv.ub)" -> "$Qd &= vcmp.eq($Vu.b, $Vv.b)"
77def : InstAlias<"$Qd &= vcmp.eq($Vu.ub, $Vv.ub)",
78 (V6_veqb_and VecPredRegs:$Qd, VectorRegs:$Vu, VectorRegs:$Vv)>,
79 Requires<[HasV60T]>;
80
81// maps "$Qd |= vcmp.eq($Vu.ub, $Vv.ub)" -> "$Qd |= vcmp.eq($Vu.b, $Vv.b)"
82def : InstAlias<"$Qd |= vcmp.eq($Vu.ub, $Vv.ub)",
83 (V6_veqb_or VecPredRegs:$Qd, VectorRegs:$Vu, VectorRegs:$Vv)>,
84 Requires<[HasV60T]>;
85
86// maps "$Qd ^= vcmp.eq($Vu.ub, $Vv.ub)" -> "$Qd ^= vcmp.eq($Vu.b, $Vv.b)"
87def : InstAlias<"$Qd ^= vcmp.eq($Vu.ub, $Vv.ub)",
88 (V6_veqb_xor VecPredRegs:$Qd, VectorRegs:$Vu, VectorRegs:$Vv)>,
89 Requires<[HasV60T]>;
90
91// maps "$Rd.w = vextract($Vu, $Rs)" -> "$Rd = vextract($Vu, $Rs)"
92def : InstAlias<"$Rd.w = vextract($Vu, $Rs)",
93 (V6_extractw IntRegs:$Rd, VectorRegs:$Vu, IntRegs:$Rs)>,
94 Requires<[HasV60T]>;