@@ -499,42 +499,38 @@ defm : Merge_mvv_ShortLong<vvp_select,
499
499
v256i64,
500
500
v256i32, "VMRG">;
501
501
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">;
509
504
510
505
511
506
///// Comparison (VVP_SETCC) /////
512
507
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>;
538
534
539
535
///// Conversion /////
540
536
0 commit comments