Skip to content
This repository was archived by the owner on Mar 28, 2020. It is now read-only.

Commit a59d901

Browse files
author
Krzysztof Parzyszek
committed
[Hexagon] Add instruction aliases for vector unsigned compare-equal
Unsigned compare-equal instructions are mapped to signed compare-equal. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@267925 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent fb3ad89 commit a59d901

File tree

2 files changed

+101
-0
lines changed

2 files changed

+101
-0
lines changed

lib/Target/Hexagon/HexagonAlias.td

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,68 @@ def : InstAlias<"$Vd = #0",
2727
def : InstAlias<"$Vdd = #0",
2828
(V6_vsubw_dv VecDblRegs:$Vdd, VecDblRegs:$Vdd, VecDblRegs:$Vdd)>,
2929
Requires<[HasV60T]>;
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]>;

test/MC/Hexagon/v60-misc.s

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,39 @@ v1:0 = #0
88

99
# CHECK: 1f42c3e0 { v1:0 = vcombine(v3,v2) }
1010
v1:0 = v3:2
11+
12+
# CHECK: 1f90cf00 { q0 = vcmp.eq(v15.b,v16.b) }
13+
q0 = vcmp.eq(v15.ub, v16.ub)
14+
15+
# CHECK: 1c92f101 { q1 &= vcmp.eq(v17.b,v18.b) }
16+
q1 &= vcmp.eq(v17.ub, v18.ub)
17+
18+
# CHECK: 1c94f342 { q2 |= vcmp.eq(v19.b,v20.b) }
19+
q2 |= vcmp.eq(v19.ub, v20.ub)
20+
21+
# CHECK: 1c96f583 { q3 ^= vcmp.eq(v21.b,v22.b) }
22+
q3 ^= vcmp.eq(v21.ub, v22.ub)
23+
24+
# CHECK: 1f81c004 { q0 = vcmp.eq(v0.h,v1.h) }
25+
q0 = vcmp.eq(v0.uh, v1.uh)
26+
27+
# CHECK: 1c83e205 { q1 &= vcmp.eq(v2.h,v3.h) }
28+
q1 &= vcmp.eq(v2.uh, v3.uh)
29+
30+
# CHECK: 1c85e446 { q2 |= vcmp.eq(v4.h,v5.h) }
31+
q2 |= vcmp.eq(v4.uh, v5.uh)
32+
33+
# CHECK: 1c87e687 { q3 ^= vcmp.eq(v6.h,v7.h) }
34+
q3 ^= vcmp.eq(v6.uh, v7.uh)
35+
36+
# CHECK: 1f89c808 { q0 = vcmp.eq(v8.w,v9.w) }
37+
q0 = vcmp.eq(v8.uw, v9.uw)
38+
39+
# CHECK: 1c8aea09 { q1 &= vcmp.eq(v10.w,v10.w) }
40+
q1 &= vcmp.eq(v10.uw, v10.uw)
41+
42+
# CHECK: 1c8ceb46 { q2 |= vcmp.eq(v11.h,v12.h) }
43+
q2 |= vcmp.eq(v11.uw, v12.uw)
44+
45+
# CHECK: 1c8eed8b { q3 ^= vcmp.eq(v13.w,v14.w) }
46+
q3 ^= vcmp.eq(v13.uw, v14.uw)

0 commit comments

Comments
 (0)