comparison lib/Target/Hexagon/HexagonIntrinsics.td @ 95:afa8332a0e37 LLVM3.8

LLVM 3.8
author Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
date Tue, 13 Oct 2015 17:48:58 +0900
parents 60c9769439b8
children 7d135dc70f03
comparison
equal deleted inserted replaced
84:f3e34b893a5f 95:afa8332a0e37
674 (A2_tfrih IntRegs:$Rs, u16_0ImmPred:$Is)>; 674 (A2_tfrih IntRegs:$Rs, u16_0ImmPred:$Is)>;
675 675
676 // Transfer Register/immediate. 676 // Transfer Register/immediate.
677 def : T_R_pat <A2_tfr, int_hexagon_A2_tfr>; 677 def : T_R_pat <A2_tfr, int_hexagon_A2_tfr>;
678 def : T_I_pat <A2_tfrsi, int_hexagon_A2_tfrsi>; 678 def : T_I_pat <A2_tfrsi, int_hexagon_A2_tfrsi>;
679 def : T_I_pat <A2_tfrpi, int_hexagon_A2_tfrpi>;
679 680
680 // Assembler mapped from Rdd32=Rss32 to Rdd32=combine(Rss.H32,Rss.L32) 681 // Assembler mapped from Rdd32=Rss32 to Rdd32=combine(Rss.H32,Rss.L32)
681 def : Pat<(int_hexagon_A2_tfrp DoubleRegs:$src), 682 def : Pat<(int_hexagon_A2_tfrp DoubleRegs:$src),
682 (A2_combinew (HiReg DoubleRegs:$src), (LoReg DoubleRegs:$src))>; 683 (A2_combinew (HiReg DoubleRegs:$src), (LoReg DoubleRegs:$src))>;
683 684
690 def: T_RR_pat<A2_combine_lh, int_hexagon_A2_combine_lh>; 691 def: T_RR_pat<A2_combine_lh, int_hexagon_A2_combine_lh>;
691 def: T_RR_pat<A2_combine_ll, int_hexagon_A2_combine_ll>; 692 def: T_RR_pat<A2_combine_ll, int_hexagon_A2_combine_ll>;
692 693
693 def: T_II_pat<A2_combineii, int_hexagon_A2_combineii, s8ExtPred, s8ImmPred>; 694 def: T_II_pat<A2_combineii, int_hexagon_A2_combineii, s8ExtPred, s8ImmPred>;
694 695
695 def: Pat<(i32 (int_hexagon_C2_mux (I32:$Rp), (I32:$Rs), 696 def: Pat<(i32 (int_hexagon_C2_mux (I32:$Rp), (I32:$Rs), (I32:$Rt))),
696 (I32:$Rt))),
697 (i32 (C2_mux (C2_tfrrp IntRegs:$Rp), IntRegs:$Rs, IntRegs:$Rt))>; 697 (i32 (C2_mux (C2_tfrrp IntRegs:$Rp), IntRegs:$Rs, IntRegs:$Rt))>;
698 698
699 // Mux 699 // Mux
700 def : T_QRI_pat<C2_muxir, int_hexagon_C2_muxir, s8ExtPred>; 700 def : T_QRI_pat<C2_muxir, int_hexagon_C2_muxir, s8ExtPred>;
701 def : T_QIR_pat<C2_muxri, int_hexagon_C2_muxri, s8ExtPred>; 701 def : T_QIR_pat<C2_muxri, int_hexagon_C2_muxri, s8ExtPred>;
921 def: qi_CRInst_qiqi_pat<C2_and, int_hexagon_C2_and>; 921 def: qi_CRInst_qiqi_pat<C2_and, int_hexagon_C2_and>;
922 def: qi_CRInst_qiqi_pat<C2_andn, int_hexagon_C2_andn>; 922 def: qi_CRInst_qiqi_pat<C2_andn, int_hexagon_C2_andn>;
923 def: qi_CRInst_qiqi_pat<C2_or, int_hexagon_C2_or>; 923 def: qi_CRInst_qiqi_pat<C2_or, int_hexagon_C2_or>;
924 def: qi_CRInst_qiqi_pat<C2_orn, int_hexagon_C2_orn>; 924 def: qi_CRInst_qiqi_pat<C2_orn, int_hexagon_C2_orn>;
925 def: qi_CRInst_qiqi_pat<C2_xor, int_hexagon_C2_xor>; 925 def: qi_CRInst_qiqi_pat<C2_xor, int_hexagon_C2_xor>;
926
927 // Assembler mapped from Pd4=Ps4 to Pd4=or(Ps4,Ps4)
928 def : Pat<(int_hexagon_C2_pxfer_map PredRegs:$src),
929 (C2_pxfer_map PredRegs:$src)>;
926 930
927 // Multiply 32x32 and use lower result 931 // Multiply 32x32 and use lower result
928 def : T_RRI_pat <M2_macsip, int_hexagon_M2_macsip>; 932 def : T_RRI_pat <M2_macsip, int_hexagon_M2_macsip>;
929 def : T_RRI_pat <M2_macsin, int_hexagon_M2_macsin>; 933 def : T_RRI_pat <M2_macsin, int_hexagon_M2_macsin>;
930 def : T_RRR_pat <M2_maci, int_hexagon_M2_maci>; 934 def : T_RRR_pat <M2_maci, int_hexagon_M2_maci>;
1256 def: Pat<(i32 (int_hexagon_S2_storew_locked (I32:$Rs), (I32:$Rt))), 1260 def: Pat<(i32 (int_hexagon_S2_storew_locked (I32:$Rs), (I32:$Rt))),
1257 (i32 (C2_tfrpr (S2_storew_locked (I32:$Rs), (I32:$Rt))))>; 1261 (i32 (C2_tfrpr (S2_storew_locked (I32:$Rs), (I32:$Rt))))>;
1258 def: Pat<(i32 (int_hexagon_S4_stored_locked (I32:$Rs), (I64:$Rt))), 1262 def: Pat<(i32 (int_hexagon_S4_stored_locked (I32:$Rs), (I64:$Rt))),
1259 (i32 (C2_tfrpr (S4_stored_locked (I32:$Rs), (I64:$Rt))))>; 1263 (i32 (C2_tfrpr (S4_stored_locked (I32:$Rs), (I64:$Rt))))>;
1260 1264
1265 /********************************************************************
1266 * ST
1267 *********************************************************************/
1268
1269 class T_stb_pat <InstHexagon MI, Intrinsic IntID, PatLeaf Val>
1270 : Pat<(IntID I32:$Rs, Val:$Rt, I32:$Ru),
1271 (MI I32:$Rs, Val:$Rt, I32:$Ru)>;
1272
1273 def : T_stb_pat <S2_storerh_pbr_pseudo, int_hexagon_brev_sth, I32>;
1274 def : T_stb_pat <S2_storerb_pbr_pseudo, int_hexagon_brev_stb, I32>;
1275 def : T_stb_pat <S2_storeri_pbr_pseudo, int_hexagon_brev_stw, I32>;
1276 def : T_stb_pat <S2_storerf_pbr_pseudo, int_hexagon_brev_sthhi, I32>;
1277 def : T_stb_pat <S2_storerd_pbr_pseudo, int_hexagon_brev_std, I64>;
1278
1279 class T_stc_pat <InstHexagon MI, Intrinsic IntID, PatLeaf Imm, PatLeaf Val>
1280 : Pat<(IntID I32:$Rs, Val:$Rt, I32:$Ru, Imm:$s),
1281 (MI I32:$Rs, Val:$Rt, I32:$Ru, Imm:$s)>;
1282
1283 def: T_stc_pat<S2_storerb_pci_pseudo, int_hexagon_circ_stb, s4_0ImmPred, I32>;
1284 def: T_stc_pat<S2_storerh_pci_pseudo, int_hexagon_circ_sth, s4_1ImmPred, I32>;
1285 def: T_stc_pat<S2_storeri_pci_pseudo, int_hexagon_circ_stw, s4_2ImmPred, I32>;
1286 def: T_stc_pat<S2_storerd_pci_pseudo, int_hexagon_circ_std, s4_3ImmPred, I64>;
1287 def: T_stc_pat<S2_storerf_pci_pseudo, int_hexagon_circ_sthhi, s4_1ImmPred, I32>;
1288
1261 include "HexagonIntrinsicsV3.td" 1289 include "HexagonIntrinsicsV3.td"
1262 include "HexagonIntrinsicsV4.td" 1290 include "HexagonIntrinsicsV4.td"
1263 include "HexagonIntrinsicsV5.td" 1291 include "HexagonIntrinsicsV5.td"