Skip to content

Commit d9190ab

Browse files
author
Simon Moll
committed
Merge commit 'ae1bb44ed80b7b60c3fd2426c8bee3df93e4a314' into merge/ve-setcc
2 parents bc4de87 + ae1bb44 commit d9190ab

File tree

5 files changed

+1641
-35
lines changed

5 files changed

+1641
-35
lines changed

llvm/lib/Target/VE/VVPInstrInfo.td

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,11 +73,20 @@ def SDTSelectVVP : SDTypeProfile<1, 4, [ // vp_select, vp_merge
7373
IsVLVT<4>
7474
]>;
7575

76-
// setcc (lhs, rhs, cc, mask, vl)
76+
// SetCC (lhs, rhs, cc, mask, vl)
7777
def SDTSetCCVVP : SDTypeProfile<1, 5, [ // vp_setcc
78-
SDTCisVec<0>, SDTCisVec<1>, SDTCisSameNumEltsAs<0, 1>, SDTCisSameAs<1, 2>, SDTCisVT<3, OtherVT>, SDTCisInt<4>, SDTCisSameNumEltsAs<0, 4>, IsVLVT<5>
78+
SDTCisVec<0>,
79+
SDTCisVec<1>,
80+
SDTCisSameNumEltsAs<0, 1>,
81+
SDTCisSameAs<1, 2>,
82+
SDTCisVT<3, OtherVT>,
83+
SDTCisInt<4>,
84+
SDTCisSameNumEltsAs<0, 4>,
85+
IsVLVT<5>
7986
]>;
8087

88+
89+
8190
// s/uint_to_fp
8291
def SDTIntToFPOpVVP : SDTypeProfile<1, 3, [ // [su]int_to_fp
8392
SDTCisFP<0>, SDTCisInt<1>, SDTCisSameNumEltsAs<0, 1>, SDTCisSameNumEltsAs<0, 2>, IsVLVT<3>
@@ -245,3 +254,5 @@ def c_vvp_fmaxnum : vvp_commutative<vvp_fmaxnum>;
245254
def c_vvp_ffma : vvp_fma_commutative<vvp_ffma>;
246255
def c_vvp_ffms : vvp_fma_commutative<vvp_ffms>;
247256
def c_vvp_ffmsn : vvp_fma_commutative<vvp_ffmsn>;
257+
258+
// } Binary Operators

llvm/lib/Target/VE/VVPInstrPatternsVec.td

Lines changed: 28 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -499,42 +499,38 @@ defm : Merge_mvv_ShortLong<vvp_select,
499499
v256i64,
500500
v256i32, "VMRG">;
501501

502-
multiclass VectorSelect_Packed<ValueType PackedVT> {
503-
def : Pat<(PackedVT (vvp_select PackedVT:$vtrue, PackedVT:$vfalse, v512i1:$vm, i32:$pivot)),
504-
(VMRGWvvml_v $vfalse, $vtrue, $vm, $pivot, $vfalse)>;
505-
}
506-
507-
defm : VectorSelect_Packed<v512i32>;
508-
defm : VectorSelect_Packed<v512f32>;
502+
defm : Merge_mvv<vvp_select,v512i32,v512i1,"VMRGW">;
503+
defm : Merge_mvv<vvp_select,v512f32,v512i1,"VMRGW">;
509504

510505

511506
///// Comparison (VVP_SETCC) /////
512507

513-
multiclass Set_CC<ValueType MaskVT, ValueType DataVT, string FmkBaseName, string CmpBaseName, SDPatternOperator CCMatcher, SDPatternOperator CCConv, string MaskTag="m"> {
514-
// TODO: Fused broadcast. Requires adapting SPU reg type to element type (as done for PVFADDUP, etc).
515-
// TODO: Predicate inversion to fuse broadcast (may do this in cpp code).
516-
// // Unmasked + broadcast
517-
// def : Pat<(MaskVT (vvp_setcc (any_broadcast ScalarVT:$LHS), DataVT:$RHS, CCMatcher:$cond, (MaskVT true_mask), i32:$vl)),
518-
// (!cast<Instruction>(FmkBaseName#"vl") (CCConv $cond), (!cast<Instruction>(CmpBaseName#"rvl") $LHS, $RHS, $vl), $vl)>;
519-
// unmasked
520-
def : Pat<(MaskVT (vvp_setcc DataVT:$LHS, DataVT:$RHS, CCMatcher:$cond, (MaskVT true_mask), i32:$vl)),
521-
(!cast<Instruction>(FmkBaseName#"vl") (CCConv $cond), (!cast<Instruction>(CmpBaseName#"vvl") $LHS, $RHS, $vl), $vl)>;
522-
// masked
523-
def : Pat<(MaskVT (vvp_setcc DataVT:$LHS, DataVT:$RHS, CCMatcher:$cond, MaskVT:$vm, i32:$vl)),
524-
(!cast<Instruction>(FmkBaseName#"v"#MaskTag#"l") (CCConv $cond), (!cast<Instruction>(CmpBaseName#"vvl") $LHS, $RHS, $vl), $vm, $vl)>;
525-
}
526-
527-
multiclass Set_CC_256<ValueType DataVT, string FmkBaseName, string CmpBaseName, SDPatternOperator CCMatcher, SDNodeXForm CCConv>
528-
: Set_CC<v256i1, DataVT, FmkBaseName, CmpBaseName, CCMatcher, CCConv, "m">;
529-
530-
// SETCC (256)
531-
defm : Set_CC_256<v256i64,"VFMKL","VCMPUL",CCUIOp,icond2cc>;
532-
defm : Set_CC_256<v256i64,"VFMKL","VCMPSL",CCSIOp,icond2cc>;
533-
defm : Set_CC_256<v256f64,"VFMKL","VFCMPD",cond,fcond2cc>;
534-
535-
defm : Set_CC_256<v256i32,"VFMKW","VCMPUW",CCUIOp,icond2cc>;
536-
defm : Set_CC_256<v256i32,"VFMKW","VCMPSWZX",CCSIOp,icond2cc>;
537-
defm : Set_CC_256<v256f32,"VFMKS","VFCMPS",cond,fcond2cc>;
508+
multiclass Set_CC<ValueType DataVT, string FmkBaseName, string CmpBaseName, SDPatternOperator CCMatcher, SDNodeXForm CCConv> {
509+
// Unmasked.
510+
def : Pat<(v256i1 (vvp_setcc
511+
DataVT:$LHS, DataVT:$RHS, CCMatcher:$cond, (v256i1 true_mask), i32:$vl)),
512+
(!cast<Instruction>(FmkBaseName#"vl")
513+
(CCConv $cond),
514+
(!cast<Instruction>(CmpBaseName#"vvl")
515+
$LHS, $RHS, $vl),
516+
$vl)>;
517+
// Masked.
518+
def : Pat<(v256i1 (vvp_setcc
519+
DataVT:$LHS, DataVT:$RHS, CCMatcher:$cond, v256i1:$vm, i32:$vl)),
520+
(!cast<Instruction>(FmkBaseName#"vml")
521+
(CCConv $cond),
522+
(!cast<Instruction>(CmpBaseName#"vvl")
523+
$LHS, $RHS, $vl),
524+
$vm, $vl)>;
525+
}
526+
527+
defm : Set_CC<v256i64,"VFMKL","VCMPUL",CCUIOp,icond2cc>;
528+
defm : Set_CC<v256i64,"VFMKL","VCMPSL",CCSIOp,icond2cc>;
529+
defm : Set_CC<v256f64,"VFMKL","VFCMPD",cond,fcond2cc>;
530+
531+
defm : Set_CC<v256i32,"VFMKW","VCMPUW",CCUIOp,icond2cc>;
532+
defm : Set_CC<v256i32,"VFMKW","VCMPSWZX",CCSIOp,icond2cc>;
533+
defm : Set_CC<v256f32,"VFMKS","VFCMPS",cond,fcond2cc>;
538534

539535
///// Conversion /////
540536

llvm/lib/Target/VE/VVPNodes.def

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,8 +159,12 @@ REGISTER_TERNARY_VVP_OP(VVP_FFMS) REGISTER_PACKED(VVP_FFMS)
159159
REGISTER_TERNARY_VVP_OP(VVP_FFMSN) REGISTER_PACKED(VVP_FFMSN)
160160

161161
// Select
162-
ADD_TERNARY_VVP_OP(VVP_SELECT,VSELECT) HANDLE_VP_TO_VVP(VP_SELECT, VVP_SELECT) REGISTER_PACKED(VVP_SELECT)
162+
ADD_TERNARY_VVP_OP(VVP_SELECT,VSELECT) REGISTER_PACKED(VVP_SELECT)
163+
164+
// Shuffles.
165+
HANDLE_VP_TO_VVP(VP_SELECT, VVP_SELECT)
163166
HANDLE_VP_TO_VVP(VP_MERGE, VVP_SELECT)
167+
164168
ADD_TERNARY_VVP_OP(VVP_SETCC,SETCC) HANDLE_VP_TO_VVP(VP_SETCC, VVP_SETCC)
165169

166170
// sint <> fp

0 commit comments

Comments
 (0)