@@ -594,12 +594,6 @@ foreach intr = !listconcat(AMDGPUImageDimIntrinsics,
594
594
def intr#_pat_v4 : ImageDimPattern<intr, "_V4", v4f32>;
595
595
}
596
596
597
- // v2f16 and v4f16 are used as data types to signal that D16 should be used.
598
- // However, they are not (always) legal types, and the SelectionDAG requires us
599
- // to legalize them before running any patterns. So we legalize them by
600
- // converting to an int type of equal size and using an internal 'd16helper'
601
- // intrinsic instead which signifies both the use of D16 and actually allows
602
- // this integer-based return type.
603
597
multiclass ImageDimD16Helper<AMDGPUImageDimIntrinsic I,
604
598
AMDGPUImageDimIntrinsic d16helper> {
605
599
let SubtargetPredicate = HasUnpackedD16VMem in {
@@ -611,7 +605,7 @@ multiclass ImageDimD16Helper<AMDGPUImageDimIntrinsic I,
611
605
let SubtargetPredicate = HasPackedD16VMem in {
612
606
def _packed_v1 : ImageDimPattern<I, "_V1", f16, "_D16">;
613
607
def _packed_v2 : ImageDimPattern<I, "_V1", v2f16, "_D16">;
614
- def _packed_v4 : ImageDimPattern<d16helper , "_V2", v2i32 , "_D16">;
608
+ def _packed_v4 : ImageDimPattern<I , "_V2", v4f16 , "_D16">;
615
609
} // End HasPackedD16VMem.
616
610
}
617
611
@@ -653,10 +647,7 @@ foreach intr = AMDGPUImageDimGatherIntrinsics in {
653
647
} // End HasUnpackedD16VMem.
654
648
655
649
let SubtargetPredicate = HasPackedD16VMem in {
656
- def intr#_packed_v4 :
657
- ImageDimPattern<!cast<AMDGPUImageDimIntrinsic>(
658
- "int_SI_image_d16helper_" # intr.P.OpMod # intr.P.Dim.Name),
659
- "_V2", v2i32, "_D16">;
650
+ def intr#_packed_v4 : ImageDimPattern<intr, "_V2", v4f16, "_D16">;
660
651
} // End HasPackedD16VMem.
661
652
}
662
653
@@ -703,6 +694,7 @@ multiclass ImageSamplePatterns<SDPatternOperator name, string opcode> {
703
694
let SubtargetPredicate = HasPackedD16VMem in {
704
695
defm : ImageSampleDataPatterns<name, !cast<string>(opcode # _V1), f16, "_D16">;
705
696
defm : ImageSampleDataPatterns<name, !cast<string>(opcode # _V1), v2f16, "_D16">;
697
+ defm : ImageSampleDataPatterns<name, !cast<string>(opcode # _V2), v4f16, "_D16">;
706
698
} // End HasPackedD16VMem.
707
699
}
708
700
@@ -712,16 +704,15 @@ multiclass ImageSampleAltPatterns<SDPatternOperator name, string opcode> {
712
704
defm : ImageSampleDataPatterns<name, !cast<string>(opcode # _V2), v2i32, "_D16_gfx80">;
713
705
defm : ImageSampleDataPatterns<name, !cast<string>(opcode # _V4), v4i32, "_D16_gfx80">;
714
706
} // End HasUnpackedD16VMem.
715
-
716
- let SubtargetPredicate = HasPackedD16VMem in {
717
- defm : ImageSampleDataPatterns<name, !cast<string>(opcode # _V1), f16, "_D16">;
718
- defm : ImageSampleDataPatterns<name, !cast<string>(opcode # _V2), v2i32, "_D16">;
719
- } // End HasPackedD16VMem.
720
707
}
721
708
722
709
// ImageGather4 patterns.
723
710
multiclass ImageGather4Patterns<SDPatternOperator name, string opcode> {
724
711
defm : ImageSampleDataPatterns<name, !cast<string>(opcode # _V4), v4f32>;
712
+
713
+ let SubtargetPredicate = HasPackedD16VMem in {
714
+ defm : ImageSampleDataPatterns<name, !cast<string>(opcode # _V2), v4f16, "_D16">;
715
+ } // End HasPackedD16VMem.
725
716
}
726
717
727
718
// ImageGather4 alternative patterns for illegal vector half Types.
@@ -730,9 +721,6 @@ multiclass ImageGather4AltPatterns<SDPatternOperator name, string opcode> {
730
721
defm : ImageSampleDataPatterns<name, !cast<string>(opcode # _V4), v4i32, "_D16_gfx80">;
731
722
} // End HasUnpackedD16VMem.
732
723
733
- let SubtargetPredicate = HasPackedD16VMem in {
734
- defm : ImageSampleDataPatterns<name, !cast<string>(opcode # _V2), v2i32, "_D16">;
735
- } // End HasPackedD16VMem.
736
724
}
737
725
738
726
// ImageLoad for amdgcn.
@@ -766,6 +754,7 @@ multiclass ImageLoadPatterns<SDPatternOperator name, string opcode> {
766
754
let SubtargetPredicate = HasPackedD16VMem in {
767
755
defm : ImageLoadDataPatterns<name, !cast<string>(opcode # _V1), f16, "_D16">;
768
756
defm : ImageLoadDataPatterns<name, !cast<string>(opcode # _V1), v2f16, "_D16">;
757
+ defm : ImageLoadDataPatterns<name, !cast<string>(opcode # _V2), v4f16, "_D16">;
769
758
} // End HasPackedD16VMem.
770
759
}
771
760
@@ -775,11 +764,6 @@ multiclass ImageLoadAltPatterns<SDPatternOperator name, string opcode> {
775
764
defm : ImageLoadDataPatterns<name, !cast<string>(opcode # _V2), v2i32, "_D16_gfx80">;
776
765
defm : ImageLoadDataPatterns<name, !cast<string>(opcode # _V4), v4i32, "_D16_gfx80">;
777
766
} // End HasUnPackedD16VMem.
778
-
779
- let SubtargetPredicate = HasPackedD16VMem in {
780
- defm : ImageLoadDataPatterns<name, !cast<string>(opcode # _V1), f16, "_D16">;
781
- defm : ImageLoadDataPatterns<name, !cast<string>(opcode # _V2), v2i32, "_D16">;
782
- } // End HasPackedD16VMem.
783
767
}
784
768
785
769
// ImageStore for amdgcn.
@@ -813,6 +797,7 @@ multiclass ImageStorePatterns<SDPatternOperator name, string opcode> {
813
797
let SubtargetPredicate = HasPackedD16VMem in {
814
798
defm : ImageStoreDataPatterns<name, !cast<string>(opcode # _V1), f16, "_D16">;
815
799
defm : ImageStoreDataPatterns<name, !cast<string>(opcode # _V1), v2f16, "_D16">;
800
+ defm : ImageStoreDataPatterns<name, !cast<string>(opcode # _V2), v4f16, "_D16">;
816
801
} // End HasPackedD16VMem.
817
802
}
818
803
0 commit comments