From: Krzysztof Parzyszek Date: Thu, 5 May 2016 16:19:36 +0000 (+0000) Subject: [Hexagon] Merge HexagonAlias.td into HexagonInstrAlias.td, NFC X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=af542d8d9ae50cbef8dbbf4262b08ca00d06e0d7;p=llvm [Hexagon] Merge HexagonAlias.td into HexagonInstrAlias.td, NFC git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@268641 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/Hexagon/Hexagon.td b/lib/Target/Hexagon/Hexagon.td index cc961bf745b..aaa0f3e9b3d 100644 --- a/lib/Target/Hexagon/Hexagon.td +++ b/lib/Target/Hexagon/Hexagon.td @@ -251,7 +251,6 @@ include "HexagonCallingConv.td" include "HexagonInstrInfo.td" include "HexagonIntrinsics.td" include "HexagonIntrinsicsDerived.td" -include "HexagonAlias.td" def HexagonInstrInfo : InstrInfo; diff --git a/lib/Target/Hexagon/HexagonAlias.td b/lib/Target/Hexagon/HexagonAlias.td deleted file mode 100644 index 296c1765e2e..00000000000 --- a/lib/Target/Hexagon/HexagonAlias.td +++ /dev/null @@ -1,94 +0,0 @@ -//==- HexagonAlias.td - Hexagon Instruction Aliases ---------*- tablegen -*-==// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -//===----------------------------------------------------------------------===// -// Hexagon Instruction Mappings -//===----------------------------------------------------------------------===// - -// V6_vassignp: Vector assign mapping. -let hasNewValue = 1, opNewValue = 0, isAsmParserOnly = 1 in -def HEXAGON_V6_vassignpair: CVI_VA_DV_Resource < - (outs VecDblRegs:$Vdd), - (ins VecDblRegs:$Vss), - "$Vdd = $Vss">; - -// maps Vd = #0 to Vd = vxor(Vd, Vd) -def : InstAlias<"$Vd = #0", - (V6_vxor VectorRegs:$Vd, VectorRegs:$Vd, VectorRegs:$Vd)>, - Requires<[HasV60T]>; - -// maps Vdd = #0 to Vdd = vsub(Vdd, Vdd) -def : InstAlias<"$Vdd = #0", - (V6_vsubw_dv VecDblRegs:$Vdd, VecDblRegs:$Vdd, VecDblRegs:$Vdd)>, - Requires<[HasV60T]>; - -// maps "$Qd = vcmp.eq($Vu.uh, $Vv.uh)" -> "$Qd = vcmp.eq($Vu.h, $Vv.h)" -def : InstAlias<"$Qd = vcmp.eq($Vu.uh, $Vv.uh)", - (V6_veqh VecPredRegs:$Qd, VectorRegs:$Vu, VectorRegs:$Vv)>, - Requires<[HasV60T]>; - -// maps "$Qd &= vcmp.eq($Vu.uh, $Vv.uh)" -> "$Qd &= vcmp.eq($Vu.h, $Vv.h)" -def : InstAlias<"$Qd &= vcmp.eq($Vu.uh, $Vv.uh)", - (V6_veqh_and VecPredRegs:$Qd, VectorRegs:$Vu, VectorRegs:$Vv)>, - Requires<[HasV60T]>; - -// maps "$Qd |= vcmp.eq($Vu.uh, $Vv.uh)" -> "$Qd |= vcmp.eq($Vu.h, $Vv.h)" -def : InstAlias<"$Qd |= vcmp.eq($Vu.uh, $Vv.uh)", - (V6_veqh_or VecPredRegs:$Qd, VectorRegs:$Vu, VectorRegs:$Vv)>, - Requires<[HasV60T]>; - -// maps "$Qd ^= vcmp.eq($Vu.uh, $Vv.uh)" -> "$Qd ^= vcmp.eq($Vu.h, $Vv.h)" -def : InstAlias<"$Qd ^= vcmp.eq($Vu.uh, $Vv.uh)", - (V6_veqh_xor VecPredRegs:$Qd, VectorRegs:$Vu, VectorRegs:$Vv)>, - Requires<[HasV60T]>; - -// maps "$Qd = vcmp.eq($Vu.uw, $Vv.uw)" -> "$Qd = vcmp.eq($Vu.w, $Vv.w)" -def : InstAlias<"$Qd = vcmp.eq($Vu.uw, $Vv.uw)", - (V6_veqw VecPredRegs:$Qd, VectorRegs:$Vu, VectorRegs:$Vv)>, - Requires<[HasV60T]>; - -// maps "$Qd &= vcmp.eq($Vu.uw, $Vv.uw)" -> "$Qd &= vcmp.eq($Vu.w, $Vv.w)" -def : InstAlias<"$Qd &= vcmp.eq($Vu.uw, $Vv.uw)", - (V6_veqw_and VecPredRegs:$Qd, VectorRegs:$Vu, VectorRegs:$Vv)>, - Requires<[HasV60T]>; - -// maps "$Qd |= vcmp.eq($Vu.uw, $Vv.uw)" -> "$Qd |= vcmp.eq($Vu.w, $Vv.w)" -def : InstAlias<"$Qd |= vcmp.eq($Vu.uw, $Vv.uw)", - (V6_veqh_or VecPredRegs:$Qd, VectorRegs:$Vu, VectorRegs:$Vv)>, - Requires<[HasV60T]>; - -// maps "$Qd ^= vcmp.eq($Vu.uw, $Vv.uw)" -> "$Qd ^= vcmp.eq($Vu.w, $Vv.w)" -def : InstAlias<"$Qd ^= vcmp.eq($Vu.uw, $Vv.uw)", - (V6_veqw_xor VecPredRegs:$Qd, VectorRegs:$Vu, VectorRegs:$Vv)>, - Requires<[HasV60T]>; - -// maps "$Qd = vcmp.eq($Vu.ub, $Vv.ub)" -> "$Qd = vcmp.eq($Vu.b, $Vv.b)" -def : InstAlias<"$Qd = vcmp.eq($Vu.ub, $Vv.ub)", - (V6_veqb VecPredRegs:$Qd, VectorRegs:$Vu, VectorRegs:$Vv)>, - Requires<[HasV60T]>; - -// maps "$Qd &= vcmp.eq($Vu.ub, $Vv.ub)" -> "$Qd &= vcmp.eq($Vu.b, $Vv.b)" -def : InstAlias<"$Qd &= vcmp.eq($Vu.ub, $Vv.ub)", - (V6_veqb_and VecPredRegs:$Qd, VectorRegs:$Vu, VectorRegs:$Vv)>, - Requires<[HasV60T]>; - -// maps "$Qd |= vcmp.eq($Vu.ub, $Vv.ub)" -> "$Qd |= vcmp.eq($Vu.b, $Vv.b)" -def : InstAlias<"$Qd |= vcmp.eq($Vu.ub, $Vv.ub)", - (V6_veqb_or VecPredRegs:$Qd, VectorRegs:$Vu, VectorRegs:$Vv)>, - Requires<[HasV60T]>; - -// maps "$Qd ^= vcmp.eq($Vu.ub, $Vv.ub)" -> "$Qd ^= vcmp.eq($Vu.b, $Vv.b)" -def : InstAlias<"$Qd ^= vcmp.eq($Vu.ub, $Vv.ub)", - (V6_veqb_xor VecPredRegs:$Qd, VectorRegs:$Vu, VectorRegs:$Vv)>, - Requires<[HasV60T]>; - -// maps "$Rd.w = vextract($Vu, $Rs)" -> "$Rd = vextract($Vu, $Rs)" -def : InstAlias<"$Rd.w = vextract($Vu, $Rs)", - (V6_extractw IntRegs:$Rd, VectorRegs:$Vu, IntRegs:$Rs)>, - Requires<[HasV60T]>; diff --git a/lib/Target/Hexagon/HexagonInstrAlias.td b/lib/Target/Hexagon/HexagonInstrAlias.td index 5a1a69b40d4..ab3d8db7439 100644 --- a/lib/Target/Hexagon/HexagonInstrAlias.td +++ b/lib/Target/Hexagon/HexagonInstrAlias.td @@ -460,3 +460,84 @@ def : InstAlias<"$Pd=cmp.lt($Rs, $Rt)", def : InstAlias<"$Pd=cmp.ltu($Rs, $Rt)", (C2_cmpgtu PredRegs:$Pd, IntRegs:$Rt, IntRegs:$Rs), 0>; +// V6_vassignp: Vector assign mapping. +let hasNewValue = 1, opNewValue = 0, isAsmParserOnly = 1 in +def HEXAGON_V6_vassignpair: CVI_VA_DV_Resource < + (outs VecDblRegs:$Vdd), + (ins VecDblRegs:$Vss), + "$Vdd = $Vss">; + +// maps Vd = #0 to Vd = vxor(Vd, Vd) +def : InstAlias<"$Vd = #0", + (V6_vxor VectorRegs:$Vd, VectorRegs:$Vd, VectorRegs:$Vd)>, + Requires<[HasV60T]>; + +// maps Vdd = #0 to Vdd = vsub(Vdd, Vdd) +def : InstAlias<"$Vdd = #0", + (V6_vsubw_dv VecDblRegs:$Vdd, VecDblRegs:$Vdd, VecDblRegs:$Vdd)>, + Requires<[HasV60T]>; + +// maps "$Qd = vcmp.eq($Vu.uh, $Vv.uh)" -> "$Qd = vcmp.eq($Vu.h, $Vv.h)" +def : InstAlias<"$Qd = vcmp.eq($Vu.uh, $Vv.uh)", + (V6_veqh VecPredRegs:$Qd, VectorRegs:$Vu, VectorRegs:$Vv)>, + Requires<[HasV60T]>; + +// maps "$Qd &= vcmp.eq($Vu.uh, $Vv.uh)" -> "$Qd &= vcmp.eq($Vu.h, $Vv.h)" +def : InstAlias<"$Qd &= vcmp.eq($Vu.uh, $Vv.uh)", + (V6_veqh_and VecPredRegs:$Qd, VectorRegs:$Vu, VectorRegs:$Vv)>, + Requires<[HasV60T]>; + +// maps "$Qd |= vcmp.eq($Vu.uh, $Vv.uh)" -> "$Qd |= vcmp.eq($Vu.h, $Vv.h)" +def : InstAlias<"$Qd |= vcmp.eq($Vu.uh, $Vv.uh)", + (V6_veqh_or VecPredRegs:$Qd, VectorRegs:$Vu, VectorRegs:$Vv)>, + Requires<[HasV60T]>; + +// maps "$Qd ^= vcmp.eq($Vu.uh, $Vv.uh)" -> "$Qd ^= vcmp.eq($Vu.h, $Vv.h)" +def : InstAlias<"$Qd ^= vcmp.eq($Vu.uh, $Vv.uh)", + (V6_veqh_xor VecPredRegs:$Qd, VectorRegs:$Vu, VectorRegs:$Vv)>, + Requires<[HasV60T]>; + +// maps "$Qd = vcmp.eq($Vu.uw, $Vv.uw)" -> "$Qd = vcmp.eq($Vu.w, $Vv.w)" +def : InstAlias<"$Qd = vcmp.eq($Vu.uw, $Vv.uw)", + (V6_veqw VecPredRegs:$Qd, VectorRegs:$Vu, VectorRegs:$Vv)>, + Requires<[HasV60T]>; + +// maps "$Qd &= vcmp.eq($Vu.uw, $Vv.uw)" -> "$Qd &= vcmp.eq($Vu.w, $Vv.w)" +def : InstAlias<"$Qd &= vcmp.eq($Vu.uw, $Vv.uw)", + (V6_veqw_and VecPredRegs:$Qd, VectorRegs:$Vu, VectorRegs:$Vv)>, + Requires<[HasV60T]>; + +// maps "$Qd |= vcmp.eq($Vu.uw, $Vv.uw)" -> "$Qd |= vcmp.eq($Vu.w, $Vv.w)" +def : InstAlias<"$Qd |= vcmp.eq($Vu.uw, $Vv.uw)", + (V6_veqh_or VecPredRegs:$Qd, VectorRegs:$Vu, VectorRegs:$Vv)>, + Requires<[HasV60T]>; + +// maps "$Qd ^= vcmp.eq($Vu.uw, $Vv.uw)" -> "$Qd ^= vcmp.eq($Vu.w, $Vv.w)" +def : InstAlias<"$Qd ^= vcmp.eq($Vu.uw, $Vv.uw)", + (V6_veqw_xor VecPredRegs:$Qd, VectorRegs:$Vu, VectorRegs:$Vv)>, + Requires<[HasV60T]>; + +// maps "$Qd = vcmp.eq($Vu.ub, $Vv.ub)" -> "$Qd = vcmp.eq($Vu.b, $Vv.b)" +def : InstAlias<"$Qd = vcmp.eq($Vu.ub, $Vv.ub)", + (V6_veqb VecPredRegs:$Qd, VectorRegs:$Vu, VectorRegs:$Vv)>, + Requires<[HasV60T]>; + +// maps "$Qd &= vcmp.eq($Vu.ub, $Vv.ub)" -> "$Qd &= vcmp.eq($Vu.b, $Vv.b)" +def : InstAlias<"$Qd &= vcmp.eq($Vu.ub, $Vv.ub)", + (V6_veqb_and VecPredRegs:$Qd, VectorRegs:$Vu, VectorRegs:$Vv)>, + Requires<[HasV60T]>; + +// maps "$Qd |= vcmp.eq($Vu.ub, $Vv.ub)" -> "$Qd |= vcmp.eq($Vu.b, $Vv.b)" +def : InstAlias<"$Qd |= vcmp.eq($Vu.ub, $Vv.ub)", + (V6_veqb_or VecPredRegs:$Qd, VectorRegs:$Vu, VectorRegs:$Vv)>, + Requires<[HasV60T]>; + +// maps "$Qd ^= vcmp.eq($Vu.ub, $Vv.ub)" -> "$Qd ^= vcmp.eq($Vu.b, $Vv.b)" +def : InstAlias<"$Qd ^= vcmp.eq($Vu.ub, $Vv.ub)", + (V6_veqb_xor VecPredRegs:$Qd, VectorRegs:$Vu, VectorRegs:$Vv)>, + Requires<[HasV60T]>; + +// maps "$Rd.w = vextract($Vu, $Rs)" -> "$Rd = vextract($Vu, $Rs)" +def : InstAlias<"$Rd.w = vextract($Vu, $Rs)", + (V6_extractw IntRegs:$Rd, VectorRegs:$Vu, IntRegs:$Rs)>, + Requires<[HasV60T]>;