Krzysztof Parzyszek | 0e7d2d3 | 2016-04-28 16:43:16 +0000 | [diff] [blame] | 1 | //==- 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. |
| 15 | let hasNewValue = 1, opNewValue = 0, isAsmParserOnly = 1 in |
| 16 | def 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) |
| 22 | def : 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) |
| 27 | def : InstAlias<"$Vdd = #0", |
| 28 | (V6_vsubw_dv VecDblRegs:$Vdd, VecDblRegs:$Vdd, VecDblRegs:$Vdd)>, |
| 29 | Requires<[HasV60T]>; |
Krzysztof Parzyszek | e5fcce2 | 2016-04-28 19:49:18 +0000 | [diff] [blame] | 30 | |
| 31 | // maps "$Qd = vcmp.eq($Vu.uh, $Vv.uh)" -> "$Qd = vcmp.eq($Vu.h, $Vv.h)" |
| 32 | def : 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)" |
| 37 | def : 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)" |
| 42 | def : 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)" |
| 47 | def : 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)" |
| 52 | def : 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)" |
| 57 | def : 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)" |
| 62 | def : 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)" |
| 67 | def : 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)" |
| 72 | def : 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)" |
| 77 | def : 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)" |
| 82 | def : 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)" |
| 87 | def : 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)" |
| 92 | def : InstAlias<"$Rd.w = vextract($Vu, $Rs)", |
| 93 | (V6_extractw IntRegs:$Rd, VectorRegs:$Vu, IntRegs:$Rs)>, |
| 94 | Requires<[HasV60T]>; |