@@ -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
0 commit comments