Skip to content

Commit cba44d9

Browse files
author
Krzysztof Parzyszek
committed
[Hexagon] Use IMPLICIT_DEF to any-extend 32-bit values to 64 bits
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@349199 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent 0bbe50f commit cba44d9

File tree

1 file changed

+25
-23
lines changed

1 file changed

+25
-23
lines changed

lib/Target/Hexagon/HexagonPatterns.td

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,8 @@ def I1toI32: OutPatFrag<(ops node:$Rs), (C2_muxii (i1 $Rs), 1, 0)>;
218218
def I32toI1: OutPatFrag<(ops node:$Rs), (i1 (C2_cmpgtui (i32 $Rs), (i32 0)))>;
219219
def ToZext64: OutPatFrag<(ops node:$Rs), (i64 (A4_combineir 0, (i32 $Rs)))>;
220220
def ToSext64: OutPatFrag<(ops node:$Rs), (i64 (A2_sxtw (i32 $Rs)))>;
221+
def ToAext64: OutPatFrag<(ops node:$Rs),
222+
(REG_SEQUENCE DoubleRegs, (i32 (IMPLICIT_DEF)), isub_hi, (i32 $Rs), isub_lo)>;
221223

222224
def Combinew: OutPatFrag<(ops node:$Rs, node:$Rt),
223225
(REG_SEQUENCE DoubleRegs, $Rs, isub_hi, $Rt, isub_lo)>;
@@ -811,9 +813,9 @@ def: Pat<(select (not I1:$Pu), F32:$Rt, f32ImmPred:$I),
811813
(C2_muxri I1:$Pu, (ftoi $I), F32:$Rt)>;
812814

813815
def: Pat<(select I1:$Pu, V4I8:$Rs, V4I8:$Rt),
814-
(LoReg (C2_vmux I1:$Pu, (ToZext64 $Rs), (ToZext64 $Rt)))>;
816+
(LoReg (C2_vmux I1:$Pu, (ToAext64 $Rs), (ToAext64 $Rt)))>;
815817
def: Pat<(select I1:$Pu, V2I16:$Rs, V2I16:$Rt),
816-
(LoReg (C2_vmux I1:$Pu, (ToZext64 $Rs), (ToZext64 $Rt)))>;
818+
(LoReg (C2_vmux I1:$Pu, (ToAext64 $Rs), (ToAext64 $Rt)))>;
817819
def: Pat<(select I1:$Pu, V2I32:$Rs, V2I32:$Rt),
818820
(Combinew (C2_mux I1:$Pu, (HiReg $Rs), (HiReg $Rt)),
819821
(C2_mux I1:$Pu, (LoReg $Rs), (LoReg $Rt)))>;
@@ -1512,9 +1514,9 @@ def: Pat<(add V2I32:$Rx, (mul V2I32:$Rs, V2I32:$Rt)),
15121514
// Add/subtract two v4i8: Hexagon does not have an insn for this one, so
15131515
// we use the double add v8i8, and use only the low part of the result.
15141516
def: Pat<(add V4I8:$Rs, V4I8:$Rt),
1515-
(LoReg (A2_vaddub (ToZext64 $Rs), (ToZext64 $Rt)))>;
1517+
(LoReg (A2_vaddub (ToAext64 $Rs), (ToAext64 $Rt)))>;
15161518
def: Pat<(sub V4I8:$Rs, V4I8:$Rt),
1517-
(LoReg (A2_vsubub (ToZext64 $Rs), (ToZext64 $Rt)))>;
1519+
(LoReg (A2_vsubub (ToAext64 $Rs), (ToAext64 $Rt)))>;
15181520

15191521
// Use M2_vmpy2s_s0 for half-word vector multiply. It multiplies two
15201522
// half-words, and saturates the result to a 32-bit value, except the
@@ -1863,10 +1865,10 @@ let AddedComplexity = 20 in {
18631865
}
18641866

18651867
let AddedComplexity = 30 in {
1866-
defm: Loadxim_pat<extloadi1, i64, ToZext64, anyimm0, L2_loadrub_io>;
1867-
defm: Loadxim_pat<extloadi8, i64, ToZext64, anyimm0, L2_loadrub_io>;
1868-
defm: Loadxim_pat<extloadi16, i64, ToZext64, anyimm1, L2_loadruh_io>;
1869-
defm: Loadxim_pat<extloadi32, i64, ToZext64, anyimm2, L2_loadri_io>;
1868+
defm: Loadxim_pat<extloadi1, i64, ToAext64, anyimm0, L2_loadrub_io>;
1869+
defm: Loadxim_pat<extloadi8, i64, ToAext64, anyimm0, L2_loadrub_io>;
1870+
defm: Loadxim_pat<extloadi16, i64, ToAext64, anyimm1, L2_loadruh_io>;
1871+
defm: Loadxim_pat<extloadi32, i64, ToAext64, anyimm2, L2_loadri_io>;
18701872
defm: Loadxim_pat<zextloadi1, i64, ToZext64, anyimm0, L2_loadrub_io>;
18711873
defm: Loadxim_pat<zextloadi8, i64, ToZext64, anyimm0, L2_loadrub_io>;
18721874
defm: Loadxim_pat<zextloadi16, i64, ToZext64, anyimm1, L2_loadruh_io>;
@@ -1901,13 +1903,13 @@ let AddedComplexity = 60 in {
19011903

19021904
def: Loadxum_pat<sextloadi8, i64, anyimm0, ToSext64, L4_loadrb_ur>;
19031905
def: Loadxum_pat<zextloadi8, i64, anyimm0, ToZext64, L4_loadrub_ur>;
1904-
def: Loadxum_pat<extloadi8, i64, anyimm0, ToZext64, L4_loadrub_ur>;
1906+
def: Loadxum_pat<extloadi8, i64, anyimm0, ToAext64, L4_loadrub_ur>;
19051907
def: Loadxum_pat<sextloadi16, i64, anyimm1, ToSext64, L4_loadrh_ur>;
19061908
def: Loadxum_pat<zextloadi16, i64, anyimm1, ToZext64, L4_loadruh_ur>;
1907-
def: Loadxum_pat<extloadi16, i64, anyimm1, ToZext64, L4_loadruh_ur>;
1909+
def: Loadxum_pat<extloadi16, i64, anyimm1, ToAext64, L4_loadruh_ur>;
19081910
def: Loadxum_pat<sextloadi32, i64, anyimm2, ToSext64, L4_loadri_ur>;
19091911
def: Loadxum_pat<zextloadi32, i64, anyimm2, ToZext64, L4_loadri_ur>;
1910-
def: Loadxum_pat<extloadi32, i64, anyimm2, ToZext64, L4_loadri_ur>;
1912+
def: Loadxum_pat<extloadi32, i64, anyimm2, ToAext64, L4_loadri_ur>;
19111913
}
19121914

19131915
let AddedComplexity = 40 in {
@@ -1947,25 +1949,25 @@ let AddedComplexity = 20 in {
19471949
}
19481950

19491951
let AddedComplexity = 40 in {
1950-
def: Loadxrm_shl_pat<extloadi8, i64, ToZext64, L4_loadrub_rr>;
1952+
def: Loadxrm_shl_pat<extloadi8, i64, ToAext64, L4_loadrub_rr>;
19511953
def: Loadxrm_shl_pat<zextloadi8, i64, ToZext64, L4_loadrub_rr>;
19521954
def: Loadxrm_shl_pat<sextloadi8, i64, ToSext64, L4_loadrb_rr>;
1953-
def: Loadxrm_shl_pat<extloadi16, i64, ToZext64, L4_loadruh_rr>;
1955+
def: Loadxrm_shl_pat<extloadi16, i64, ToAext64, L4_loadruh_rr>;
19541956
def: Loadxrm_shl_pat<zextloadi16, i64, ToZext64, L4_loadruh_rr>;
19551957
def: Loadxrm_shl_pat<sextloadi16, i64, ToSext64, L4_loadrh_rr>;
1956-
def: Loadxrm_shl_pat<extloadi32, i64, ToZext64, L4_loadri_rr>;
1958+
def: Loadxrm_shl_pat<extloadi32, i64, ToAext64, L4_loadri_rr>;
19571959
def: Loadxrm_shl_pat<zextloadi32, i64, ToZext64, L4_loadri_rr>;
19581960
def: Loadxrm_shl_pat<sextloadi32, i64, ToSext64, L4_loadri_rr>;
19591961
}
19601962

19611963
let AddedComplexity = 20 in {
1962-
def: Loadxrm_add_pat<extloadi8, i64, ToZext64, L4_loadrub_rr>;
1964+
def: Loadxrm_add_pat<extloadi8, i64, ToAext64, L4_loadrub_rr>;
19631965
def: Loadxrm_add_pat<zextloadi8, i64, ToZext64, L4_loadrub_rr>;
19641966
def: Loadxrm_add_pat<sextloadi8, i64, ToSext64, L4_loadrb_rr>;
1965-
def: Loadxrm_add_pat<extloadi16, i64, ToZext64, L4_loadruh_rr>;
1967+
def: Loadxrm_add_pat<extloadi16, i64, ToAext64, L4_loadruh_rr>;
19661968
def: Loadxrm_add_pat<zextloadi16, i64, ToZext64, L4_loadruh_rr>;
19671969
def: Loadxrm_add_pat<sextloadi16, i64, ToSext64, L4_loadrh_rr>;
1968-
def: Loadxrm_add_pat<extloadi32, i64, ToZext64, L4_loadri_rr>;
1970+
def: Loadxrm_add_pat<extloadi32, i64, ToAext64, L4_loadri_rr>;
19691971
def: Loadxrm_add_pat<zextloadi32, i64, ToZext64, L4_loadri_rr>;
19701972
def: Loadxrm_add_pat<sextloadi32, i64, ToSext64, L4_loadri_rr>;
19711973
}
@@ -1997,13 +1999,13 @@ let AddedComplexity = 60 in {
19971999
}
19982000

19992001
let AddedComplexity = 30 in {
2000-
def: Loadam_pat<extloadi8, i64, anyimm0, ToZext64, PS_loadrubabs>;
2002+
def: Loadam_pat<extloadi8, i64, anyimm0, ToAext64, PS_loadrubabs>;
20012003
def: Loadam_pat<sextloadi8, i64, anyimm0, ToSext64, PS_loadrbabs>;
20022004
def: Loadam_pat<zextloadi8, i64, anyimm0, ToZext64, PS_loadrubabs>;
2003-
def: Loadam_pat<extloadi16, i64, anyimm1, ToZext64, PS_loadruhabs>;
2005+
def: Loadam_pat<extloadi16, i64, anyimm1, ToAext64, PS_loadruhabs>;
20042006
def: Loadam_pat<sextloadi16, i64, anyimm1, ToSext64, PS_loadrhabs>;
20052007
def: Loadam_pat<zextloadi16, i64, anyimm1, ToZext64, PS_loadruhabs>;
2006-
def: Loadam_pat<extloadi32, i64, anyimm2, ToZext64, PS_loadriabs>;
2008+
def: Loadam_pat<extloadi32, i64, anyimm2, ToAext64, PS_loadriabs>;
20072009
def: Loadam_pat<sextloadi32, i64, anyimm2, ToSext64, PS_loadriabs>;
20082010
def: Loadam_pat<zextloadi32, i64, anyimm2, ToZext64, PS_loadriabs>;
20092011

@@ -2039,13 +2041,13 @@ let AddedComplexity = 100 in {
20392041
}
20402042

20412043
let AddedComplexity = 70 in {
2042-
def: Loadam_pat<extloadi8, i64, addrgp, ToZext64, L2_loadrubgp>;
2044+
def: Loadam_pat<extloadi8, i64, addrgp, ToAext64, L2_loadrubgp>;
20432045
def: Loadam_pat<sextloadi8, i64, addrgp, ToSext64, L2_loadrbgp>;
20442046
def: Loadam_pat<zextloadi8, i64, addrgp, ToZext64, L2_loadrubgp>;
2045-
def: Loadam_pat<extloadi16, i64, addrgp, ToZext64, L2_loadruhgp>;
2047+
def: Loadam_pat<extloadi16, i64, addrgp, ToAext64, L2_loadruhgp>;
20462048
def: Loadam_pat<sextloadi16, i64, addrgp, ToSext64, L2_loadrhgp>;
20472049
def: Loadam_pat<zextloadi16, i64, addrgp, ToZext64, L2_loadruhgp>;
2048-
def: Loadam_pat<extloadi32, i64, addrgp, ToZext64, L2_loadrigp>;
2050+
def: Loadam_pat<extloadi32, i64, addrgp, ToAext64, L2_loadrigp>;
20492051
def: Loadam_pat<sextloadi32, i64, addrgp, ToSext64, L2_loadrigp>;
20502052
def: Loadam_pat<zextloadi32, i64, addrgp, ToZext64, L2_loadrigp>;
20512053

0 commit comments

Comments
 (0)