@@ -56,9 +56,21 @@ func.func @cl_fma_size1_vector(%a: vector<1xf32>, %b: vector<1xf32>, %c: vector<
56
56
// CHECK: %[[S1:.+]] = spirv.CompositeExtract %[[V]][1 : i32] : vector<3xf32>
57
57
// CHECK: %[[S2:.+]] = spirv.CompositeExtract %[[V]][2 : i32] : vector<3xf32>
58
58
// CHECK: %[[MAX0:.+]] = spirv.CL.fmax %[[S0]], %[[S1]]
59
- // CHECK: %[[MAX1:.+]] = spirv.CL.fmax %[[MAX0]], %[[S2]]
60
- // CHECK: %[[MAX2:.+]] = spirv.CL.fmax %[[MAX1]], %[[S]]
61
- // CHECK: return %[[MAX2]]
59
+ // CHECK: %[[ISNAN0:.+]] = spirv.IsNan %[[S0]] : f32
60
+ // CHECK: %[[ISNAN1:.+]] = spirv.IsNan %[[S1]] : f32
61
+ // CHECK: %[[SELECT0:.+]] = spirv.Select %[[ISNAN0]], %[[S0]], %[[MAX0]] : i1, f32
62
+ // CHECK: %[[SELECT1:.+]] = spirv.Select %[[ISNAN1]], %[[S1]], %[[SELECT0]] : i1, f32
63
+ // CHECK: %[[MAX1:.+]] = spirv.CL.fmax %[[SELECT1]], %[[S2]]
64
+ // CHECK: %[[ISNAN2:.+]] = spirv.IsNan %[[SELECT1]] : f32
65
+ // CHECK: %[[ISNAN3:.+]] = spirv.IsNan %[[S2]] : f32
66
+ // CHECK: %[[SELECT2:.+]] = spirv.Select %[[ISNAN2]], %[[SELECT1]], %[[MAX1]] : i1, f32
67
+ // CHECK: %[[SELECT3:.+]] = spirv.Select %[[ISNAN3]], %[[S2]], %[[SELECT2]] : i1, f32
68
+ // CHECK: %[[MAX2:.+]] = spirv.CL.fmax %[[SELECT3]], %[[S]]
69
+ // CHECK: %[[ISNAN4:.+]] = spirv.IsNan %[[SELECT3]] : f32
70
+ // CHECK: %[[ISNAN5:.+]] = spirv.IsNan %[[S]] : f32
71
+ // CHECK: %[[SELECT4:.+]] = spirv.Select %[[ISNAN4]], %[[SELECT3]], %[[MAX2]] : i1, f32
72
+ // CHECK: %[[SELECT5:.+]] = spirv.Select %[[ISNAN5]], %[[S]], %[[SELECT4]] : i1, f32
73
+ // CHECK: return %[[SELECT5]]
62
74
func.func @cl_reduction_maximumf (%v : vector <3 xf32 >, %s: f32 ) -> f32 {
63
75
%reduce = vector.reduction <maximumf >, %v , %s : vector <3 xf32 > into f32
64
76
return %reduce : f32
@@ -70,11 +82,51 @@ func.func @cl_reduction_maximumf(%v : vector<3xf32>, %s: f32) -> f32 {
70
82
// CHECK: %[[S1:.+]] = spirv.CompositeExtract %[[V]][1 : i32] : vector<3xf32>
71
83
// CHECK: %[[S2:.+]] = spirv.CompositeExtract %[[V]][2 : i32] : vector<3xf32>
72
84
// CHECK: %[[MIN0:.+]] = spirv.CL.fmin %[[S0]], %[[S1]]
85
+ // CHECK: %[[ISNAN0:.+]] = spirv.IsNan %[[S0]] : f32
86
+ // CHECK: %[[ISNAN1:.+]] = spirv.IsNan %[[S1]] : f32
87
+ // CHECK: %[[SELECT0:.+]] = spirv.Select %[[ISNAN0]], %[[S0]], %[[MIN0]] : i1, f32
88
+ // CHECK: %[[SELECT1:.+]] = spirv.Select %[[ISNAN1]], %[[S1]], %[[SELECT0]] : i1, f32
89
+ // CHECK: %[[MIN1:.+]] = spirv.CL.fmin %[[SELECT1]], %[[S2]]
90
+ // CHECK: %[[ISNAN2:.+]] = spirv.IsNan %[[SELECT1]] : f32
91
+ // CHECK: %[[ISNAN3:.+]] = spirv.IsNan %[[S2]] : f32
92
+ // CHECK: %[[SELECT2:.+]] = spirv.Select %[[ISNAN2]], %[[SELECT1]], %[[MIN1]] : i1, f32
93
+ // CHECK: %[[SELECT3:.+]] = spirv.Select %[[ISNAN3]], %[[S2]], %[[SELECT2]] : i1, f32
94
+ // CHECK: %[[MIN2:.+]] = spirv.CL.fmin %[[SELECT3]], %[[S]]
95
+ // CHECK: %[[ISNAN4:.+]] = spirv.IsNan %[[SELECT3]] : f32
96
+ // CHECK: %[[ISNAN5:.+]] = spirv.IsNan %[[S]] : f32
97
+ // CHECK: %[[SELECT4:.+]] = spirv.Select %[[ISNAN4]], %[[SELECT3]], %[[MIN2]] : i1, f32
98
+ // CHECK: %[[SELECT5:.+]] = spirv.Select %[[ISNAN5]], %[[S]], %[[SELECT4]] : i1, f32
99
+ // CHECK: return %[[SELECT5]]
100
+ func.func @cl_reduction_minimumf (%v : vector <3 xf32 >, %s: f32 ) -> f32 {
101
+ %reduce = vector.reduction <minimumf >, %v , %s : vector <3 xf32 > into f32
102
+ return %reduce : f32
103
+ }
104
+
105
+ // CHECK-LABEL: func @cl_reduction_maxf
106
+ // CHECK-SAME: (%[[V:.+]]: vector<3xf32>, %[[S:.+]]: f32)
107
+ // CHECK: %[[S0:.+]] = spirv.CompositeExtract %[[V]][0 : i32] : vector<3xf32>
108
+ // CHECK: %[[S1:.+]] = spirv.CompositeExtract %[[V]][1 : i32] : vector<3xf32>
109
+ // CHECK: %[[S2:.+]] = spirv.CompositeExtract %[[V]][2 : i32] : vector<3xf32>
110
+ // CHECK: %[[MAX0:.+]] = spirv.CL.fmax %[[S0]], %[[S1]]
111
+ // CHECK: %[[MAX1:.+]] = spirv.CL.fmax %[[MAX0]], %[[S2]]
112
+ // CHECK: %[[MAX2:.+]] = spirv.CL.fmax %[[MAX1]], %[[S]]
113
+ // CHECK: return %[[MAX2]]
114
+ func.func @cl_reduction_maxf (%v : vector <3 xf32 >, %s: f32 ) -> f32 {
115
+ %reduce = vector.reduction <maxf >, %v , %s : vector <3 xf32 > into f32
116
+ return %reduce : f32
117
+ }
118
+
119
+ // CHECK-LABEL: func @cl_reduction_minf
120
+ // CHECK-SAME: (%[[V:.+]]: vector<3xf32>, %[[S:.+]]: f32)
121
+ // CHECK: %[[S0:.+]] = spirv.CompositeExtract %[[V]][0 : i32] : vector<3xf32>
122
+ // CHECK: %[[S1:.+]] = spirv.CompositeExtract %[[V]][1 : i32] : vector<3xf32>
123
+ // CHECK: %[[S2:.+]] = spirv.CompositeExtract %[[V]][2 : i32] : vector<3xf32>
124
+ // CHECK: %[[MIN0:.+]] = spirv.CL.fmin %[[S0]], %[[S1]]
73
125
// CHECK: %[[MIN1:.+]] = spirv.CL.fmin %[[MIN0]], %[[S2]]
74
126
// CHECK: %[[MIN2:.+]] = spirv.CL.fmin %[[MIN1]], %[[S]]
75
127
// CHECK: return %[[MIN2]]
76
- func.func @cl_reduction_minimumf (%v : vector <3 xf32 >, %s: f32 ) -> f32 {
77
- %reduce = vector.reduction <minimumf >, %v , %s : vector <3 xf32 > into f32
128
+ func.func @cl_reduction_minf (%v : vector <3 xf32 >, %s: f32 ) -> f32 {
129
+ %reduce = vector.reduction <minf >, %v , %s : vector <3 xf32 > into f32
78
130
return %reduce : f32
79
131
}
80
132
@@ -522,32 +574,112 @@ func.func @reduction_mul(%v : vector<3xf32>, %s: f32) -> f32 {
522
574
// CHECK: %[[S1:.+]] = spirv.CompositeExtract %[[V]][1 : i32] : vector<3xf32>
523
575
// CHECK: %[[S2:.+]] = spirv.CompositeExtract %[[V]][2 : i32] : vector<3xf32>
524
576
// CHECK: %[[MAX0:.+]] = spirv.GL.FMax %[[S0]], %[[S1]]
525
- // CHECK: %[[MAX1:.+]] = spirv.GL.FMax %[[MAX0]], %[[S2]]
526
- // CHECK: %[[MAX2:.+]] = spirv.GL.FMax %[[MAX1]], %[[S]]
527
- // CHECK: return %[[MAX2]]
577
+ // CHECK: %[[ISNAN0:.+]] = spirv.IsNan %[[S0]] : f32
578
+ // CHECK: %[[ISNAN1:.+]] = spirv.IsNan %[[S1]] : f32
579
+ // CHECK: %[[SELECT0:.+]] = spirv.Select %[[ISNAN0]], %[[S0]], %[[MAX0]] : i1, f32
580
+ // CHECK: %[[SELECT1:.+]] = spirv.Select %[[ISNAN1]], %[[S1]], %[[SELECT0]] : i1, f32
581
+ // CHECK: %[[MAX1:.+]] = spirv.GL.FMax %[[SELECT1]], %[[S2]]
582
+ // CHECK: %[[ISNAN2:.+]] = spirv.IsNan %[[SELECT1]] : f32
583
+ // CHECK: %[[ISNAN3:.+]] = spirv.IsNan %[[S2]] : f32
584
+ // CHECK: %[[SELECT2:.+]] = spirv.Select %[[ISNAN2]], %[[SELECT1]], %[[MAX1]] : i1, f32
585
+ // CHECK: %[[SELECT3:.+]] = spirv.Select %[[ISNAN3]], %[[S2]], %[[SELECT2]] : i1, f32
586
+ // CHECK: %[[MAX2:.+]] = spirv.GL.FMax %[[SELECT3]], %[[S]]
587
+ // CHECK: %[[ISNAN4:.+]] = spirv.IsNan %[[SELECT3]] : f32
588
+ // CHECK: %[[ISNAN5:.+]] = spirv.IsNan %[[S]] : f32
589
+ // CHECK: %[[SELECT4:.+]] = spirv.Select %[[ISNAN4]], %[[SELECT3]], %[[MAX2]] : i1, f32
590
+ // CHECK: %[[SELECT5:.+]] = spirv.Select %[[ISNAN5]], %[[S]], %[[SELECT4]] : i1, f32
591
+ // CHECK: return %[[SELECT5]]
528
592
func.func @reduction_maximumf (%v : vector <3 xf32 >, %s: f32 ) -> f32 {
529
593
%reduce = vector.reduction <maximumf >, %v , %s : vector <3 xf32 > into f32
530
594
return %reduce : f32
531
595
}
532
596
533
597
// -----
534
598
599
+ // CHECK-LABEL: func @reduction_maxf
600
+ // CHECK-SAME: (%[[V:.+]]: vector<3xf32>, %[[S:.+]]: f32)
601
+ // CHECK: %[[S0:.+]] = spirv.CompositeExtract %[[V]][0 : i32] : vector<3xf32>
602
+ // CHECK: %[[S1:.+]] = spirv.CompositeExtract %[[V]][1 : i32] : vector<3xf32>
603
+ // CHECK: %[[S2:.+]] = spirv.CompositeExtract %[[V]][2 : i32] : vector<3xf32>
604
+ // CHECK: %[[MAX0:.+]] = spirv.GL.FMax %[[S0]], %[[S1]]
605
+ // CHECK: %[[ISNAN0:.+]] = spirv.IsNan %[[S0]] : f32
606
+ // CHECK: %[[ISNAN1:.+]] = spirv.IsNan %[[S1]] : f32
607
+ // CHECK: %[[SELECT0:.+]] = spirv.Select %[[ISNAN0]], %[[S1]], %[[MAX0]] : i1, f32
608
+ // CHECK: %[[SELECT1:.+]] = spirv.Select %[[ISNAN1]], %[[S0]], %[[SELECT0]] : i1, f32
609
+ // CHECK: %[[MAX1:.+]] = spirv.GL.FMax %[[SELECT1]], %[[S2]]
610
+ // CHECK: %[[ISNAN2:.+]] = spirv.IsNan %[[SELECT1]] : f32
611
+ // CHECK: %[[ISNAN3:.+]] = spirv.IsNan %[[S2]] : f32
612
+ // CHECK: %[[SELECT2:.+]] = spirv.Select %[[ISNAN2]], %[[S2]], %[[MAX1]] : i1, f32
613
+ // CHECK: %[[SELECT3:.+]] = spirv.Select %[[ISNAN3]], %[[SELECT1]], %[[SELECT2]] : i1, f32
614
+ // CHECK: %[[MAX2:.+]] = spirv.GL.FMax %[[SELECT3]], %[[S]]
615
+ // CHECK: %[[ISNAN4:.+]] = spirv.IsNan %[[SELECT3]] : f32
616
+ // CHECK: %[[ISNAN5:.+]] = spirv.IsNan %[[S]] : f32
617
+ // CHECK: %[[SELECT4:.+]] = spirv.Select %[[ISNAN4]], %[[S]], %[[MAX2]] : i1, f32
618
+ // CHECK: %[[SELECT5:.+]] = spirv.Select %[[ISNAN5]], %[[SELECT3]], %[[SELECT4]] : i1, f32
619
+ // CHECK: return %[[SELECT5]]
620
+ func.func @reduction_maxf (%v : vector <3 xf32 >, %s: f32 ) -> f32 {
621
+ %reduce = vector.reduction <maxf >, %v , %s : vector <3 xf32 > into f32
622
+ return %reduce : f32
623
+ }
624
+
625
+ // -----
626
+
535
627
// CHECK-LABEL: func @reduction_minimumf
536
628
// CHECK-SAME: (%[[V:.+]]: vector<3xf32>, %[[S:.+]]: f32)
537
629
// CHECK: %[[S0:.+]] = spirv.CompositeExtract %[[V]][0 : i32] : vector<3xf32>
538
630
// CHECK: %[[S1:.+]] = spirv.CompositeExtract %[[V]][1 : i32] : vector<3xf32>
539
631
// CHECK: %[[S2:.+]] = spirv.CompositeExtract %[[V]][2 : i32] : vector<3xf32>
540
632
// CHECK: %[[MIN0:.+]] = spirv.GL.FMin %[[S0]], %[[S1]]
541
- // CHECK: %[[MIN1:.+]] = spirv.GL.FMin %[[MIN0]], %[[S2]]
542
- // CHECK: %[[MIN2:.+]] = spirv.GL.FMin %[[MIN1]], %[[S]]
543
- // CHECK: return %[[MIN2]]
633
+ // CHECK: %[[ISNAN0:.+]] = spirv.IsNan %[[S0]] : f32
634
+ // CHECK: %[[ISNAN1:.+]] = spirv.IsNan %[[S1]] : f32
635
+ // CHECK: %[[SELECT0:.+]] = spirv.Select %[[ISNAN0]], %[[S0]], %[[MIN0]] : i1, f32
636
+ // CHECK: %[[SELECT1:.+]] = spirv.Select %[[ISNAN1]], %[[S1]], %[[SELECT0]] : i1, f32
637
+ // CHECK: %[[MIN1:.+]] = spirv.GL.FMin %[[SELECT1]], %[[S2]]
638
+ // CHECK: %[[ISNAN2:.+]] = spirv.IsNan %[[SELECT1]] : f32
639
+ // CHECK: %[[ISNAN3:.+]] = spirv.IsNan %[[S2]] : f32
640
+ // CHECK: %[[SELECT2:.+]] = spirv.Select %[[ISNAN2]], %[[SELECT1]], %[[MIN1]] : i1, f32
641
+ // CHECK: %[[SELECT3:.+]] = spirv.Select %[[ISNAN3]], %[[S2]], %[[SELECT2]] : i1, f32
642
+ // CHECK: %[[MIN2:.+]] = spirv.GL.FMin %[[SELECT3]], %[[S]]
643
+ // CHECK: %[[ISNAN4:.+]] = spirv.IsNan %[[SELECT3]] : f32
644
+ // CHECK: %[[ISNAN5:.+]] = spirv.IsNan %[[S]] : f32
645
+ // CHECK: %[[SELECT4:.+]] = spirv.Select %[[ISNAN4]], %[[SELECT3]], %[[MIN2]] : i1, f32
646
+ // CHECK: %[[SELECT5:.+]] = spirv.Select %[[ISNAN5]], %[[S]], %[[SELECT4]] : i1, f32
647
+ // CHECK: return %[[SELECT5]]
544
648
func.func @reduction_minimumf (%v : vector <3 xf32 >, %s: f32 ) -> f32 {
545
649
%reduce = vector.reduction <minimumf >, %v , %s : vector <3 xf32 > into f32
546
650
return %reduce : f32
547
651
}
548
652
549
653
// -----
550
654
655
+ // CHECK-LABEL: func @reduction_minf
656
+ // CHECK-SAME: (%[[V:.+]]: vector<3xf32>, %[[S:.+]]: f32)
657
+ // CHECK: %[[S0:.+]] = spirv.CompositeExtract %[[V]][0 : i32] : vector<3xf32>
658
+ // CHECK: %[[S1:.+]] = spirv.CompositeExtract %[[V]][1 : i32] : vector<3xf32>
659
+ // CHECK: %[[S2:.+]] = spirv.CompositeExtract %[[V]][2 : i32] : vector<3xf32>
660
+ // CHECK: %[[MIN0:.+]] = spirv.GL.FMin %[[S0]], %[[S1]]
661
+ // CHECK: %[[ISNAN0:.+]] = spirv.IsNan %[[S0]] : f32
662
+ // CHECK: %[[ISNAN1:.+]] = spirv.IsNan %[[S1]] : f32
663
+ // CHECK: %[[SELECT0:.+]] = spirv.Select %[[ISNAN0]], %[[S1]], %[[MIN0]] : i1, f32
664
+ // CHECK: %[[SELECT1:.+]] = spirv.Select %[[ISNAN1]], %[[S0]], %[[SELECT0]] : i1, f32
665
+ // CHECK: %[[MIN1:.+]] = spirv.GL.FMin %[[SELECT1]], %[[S2]]
666
+ // CHECK: %[[ISNAN2:.+]] = spirv.IsNan %[[SELECT1]] : f32
667
+ // CHECK: %[[ISNAN3:.+]] = spirv.IsNan %[[S2]] : f32
668
+ // CHECK: %[[SELECT2:.+]] = spirv.Select %[[ISNAN2]], %[[S2]], %[[MIN1]] : i1, f32
669
+ // CHECK: %[[SELECT3:.+]] = spirv.Select %[[ISNAN3]], %[[SELECT1]], %[[SELECT2]] : i1, f32
670
+ // CHECK: %[[MIN2:.+]] = spirv.GL.FMin %[[SELECT3]], %[[S]]
671
+ // CHECK: %[[ISNAN4:.+]] = spirv.IsNan %[[SELECT3]] : f32
672
+ // CHECK: %[[ISNAN5:.+]] = spirv.IsNan %[[S]] : f32
673
+ // CHECK: %[[SELECT4:.+]] = spirv.Select %[[ISNAN4]], %[[S]], %[[MIN2]] : i1, f32
674
+ // CHECK: %[[SELECT5:.+]] = spirv.Select %[[ISNAN5]], %[[SELECT3]], %[[SELECT4]] : i1, f32
675
+ // CHECK: return %[[SELECT5]]
676
+ func.func @reduction_minf (%v : vector <3 xf32 >, %s: f32 ) -> f32 {
677
+ %reduce = vector.reduction <minf >, %v , %s : vector <3 xf32 > into f32
678
+ return %reduce : f32
679
+ }
680
+
681
+ // -----
682
+
551
683
// CHECK-LABEL: func @reduction_maxsi
552
684
// CHECK-SAME: (%[[V:.+]]: vector<3xi32>, %[[S:.+]]: i32)
553
685
// CHECK: %[[S0:.+]] = spirv.CompositeExtract %[[V]][0 : i32] : vector<3xi32>
0 commit comments