@@ -1025,3 +1025,185 @@ define void @exp_compr_disabled_inputs_to_undef(<2 x half> %xy, <2 x half> %zw)
1025
1025
call void @llvm.amdgcn.exp.compr.v2f16 (i32 0 , i32 15 , <2 x half > %xy , <2 x half > %zw , i1 true , i1 false )
1026
1026
ret void
1027
1027
}
1028
+
1029
+ ; --------------------------------------------------------------------
1030
+ ; llvm.amdgcn.fmed3
1031
+ ; --------------------------------------------------------------------
1032
+
1033
+ declare float @llvm.amdgcn.fmed3.f32 (float , float , float ) nounwind readnone
1034
+
1035
+ ; CHECK-LABEL: @fmed3_f32(
1036
+ ; CHECK: %med3 = call float @llvm.amdgcn.fmed3.f32(float %x, float %y, float %z)
1037
+ define float @fmed3_f32 (float %x , float %y , float %z ) {
1038
+ %med3 = call float @llvm.amdgcn.fmed3.f32 (float %x , float %y , float %z )
1039
+ ret float %med3
1040
+ }
1041
+
1042
+ ; CHECK-LABEL: @fmed3_canonicalize_x_c0_c1_f32(
1043
+ ; CHECK: call float @llvm.amdgcn.fmed3.f32(float %x, float 0.000000e+00, float 1.000000e+00)
1044
+ define float @fmed3_canonicalize_x_c0_c1_f32 (float %x ) {
1045
+ %med3 = call float @llvm.amdgcn.fmed3.f32 (float %x , float 0 .0 , float 1 .0 )
1046
+ ret float %med3
1047
+ }
1048
+
1049
+ ; CHECK-LABEL: @fmed3_canonicalize_c0_x_c1_f32(
1050
+ ; CHECK: call float @llvm.amdgcn.fmed3.f32(float %x, float 0.000000e+00, float 1.000000e+00)
1051
+ define float @fmed3_canonicalize_c0_x_c1_f32 (float %x ) {
1052
+ %med3 = call float @llvm.amdgcn.fmed3.f32 (float 0 .0 , float %x , float 1 .0 )
1053
+ ret float %med3
1054
+ }
1055
+
1056
+ ; CHECK-LABEL: @fmed3_canonicalize_c0_c1_x_f32(
1057
+ ; CHECK: call float @llvm.amdgcn.fmed3.f32(float %x, float 0.000000e+00, float 1.000000e+00)
1058
+ define float @fmed3_canonicalize_c0_c1_x_f32 (float %x ) {
1059
+ %med3 = call float @llvm.amdgcn.fmed3.f32 (float 0 .0 , float 1 .0 , float %x )
1060
+ ret float %med3
1061
+ }
1062
+
1063
+ ; CHECK-LABEL: @fmed3_canonicalize_x_y_c_f32(
1064
+ ; CHECK: call float @llvm.amdgcn.fmed3.f32(float %x, float %y, float 1.000000e+00)
1065
+ define float @fmed3_canonicalize_x_y_c_f32 (float %x , float %y ) {
1066
+ %med3 = call float @llvm.amdgcn.fmed3.f32 (float %x , float %y , float 1 .0 )
1067
+ ret float %med3
1068
+ }
1069
+
1070
+ ; CHECK-LABEL: @fmed3_canonicalize_x_c_y_f32(
1071
+ ; CHECK: %med3 = call float @llvm.amdgcn.fmed3.f32(float %x, float %y, float 1.000000e+00)
1072
+ define float @fmed3_canonicalize_x_c_y_f32 (float %x , float %y ) {
1073
+ %med3 = call float @llvm.amdgcn.fmed3.f32 (float %x , float 1 .0 , float %y )
1074
+ ret float %med3
1075
+ }
1076
+
1077
+ ; CHECK-LABEL: @fmed3_canonicalize_c_x_y_f32(
1078
+ ; CHECK: call float @llvm.amdgcn.fmed3.f32(float %x, float %y, float 1.000000e+00)
1079
+ define float @fmed3_canonicalize_c_x_y_f32 (float %x , float %y ) {
1080
+ %med3 = call float @llvm.amdgcn.fmed3.f32 (float 1 .0 , float %x , float %y )
1081
+ ret float %med3
1082
+ }
1083
+
1084
+ ; CHECK-LABEL: @fmed3_undef_x_y_f32(
1085
+ ; CHECK: call float @llvm.minnum.f32(float %x, float %y)
1086
+ define float @fmed3_undef_x_y_f32 (float %x , float %y ) {
1087
+ %med3 = call float @llvm.amdgcn.fmed3.f32 (float undef , float %x , float %y )
1088
+ ret float %med3
1089
+ }
1090
+
1091
+ ; CHECK-LABEL: @fmed3_fmf_undef_x_y_f32(
1092
+ ; CHECK: call nnan float @llvm.minnum.f32(float %x, float %y)
1093
+ define float @fmed3_fmf_undef_x_y_f32 (float %x , float %y ) {
1094
+ %med3 = call nnan float @llvm.amdgcn.fmed3.f32 (float undef , float %x , float %y )
1095
+ ret float %med3
1096
+ }
1097
+
1098
+ ; CHECK-LABEL: @fmed3_x_undef_y_f32(
1099
+ ; CHECK: call float @llvm.minnum.f32(float %x, float %y)
1100
+ define float @fmed3_x_undef_y_f32 (float %x , float %y ) {
1101
+ %med3 = call float @llvm.amdgcn.fmed3.f32 (float %x , float undef , float %y )
1102
+ ret float %med3
1103
+ }
1104
+
1105
+ ; CHECK-LABEL: @fmed3_x_y_undef_f32(
1106
+ ; CHECK: call float @llvm.minnum.f32(float %x, float %y)
1107
+ define float @fmed3_x_y_undef_f32 (float %x , float %y ) {
1108
+ %med3 = call float @llvm.amdgcn.fmed3.f32 (float %x , float %y , float undef )
1109
+ ret float %med3
1110
+ }
1111
+
1112
+ ; CHECK-LABEL: @fmed3_qnan0_x_y_f32(
1113
+ ; CHECK: call float @llvm.minnum.f32(float %x, float %y)
1114
+ define float @fmed3_qnan0_x_y_f32 (float %x , float %y ) {
1115
+ %med3 = call float @llvm.amdgcn.fmed3.f32 (float 0x7FF8000000000000 , float %x , float %y )
1116
+ ret float %med3
1117
+ }
1118
+
1119
+ ; CHECK-LABEL: @fmed3_x_qnan0_y_f32(
1120
+ ; CHECK: call float @llvm.minnum.f32(float %x, float %y)
1121
+ define float @fmed3_x_qnan0_y_f32 (float %x , float %y ) {
1122
+ %med3 = call float @llvm.amdgcn.fmed3.f32 (float %x , float 0x7FF8000000000000 , float %y )
1123
+ ret float %med3
1124
+ }
1125
+
1126
+ ; CHECK-LABEL: @fmed3_x_y_qnan0_f32(
1127
+ ; CHECK: call float @llvm.minnum.f32(float %x, float %y)
1128
+ define float @fmed3_x_y_qnan0_f32 (float %x , float %y ) {
1129
+ %med3 = call float @llvm.amdgcn.fmed3.f32 (float %x , float %y , float 0x7FF8000000000000 )
1130
+ ret float %med3
1131
+ }
1132
+
1133
+ ; CHECK-LABEL: @fmed3_qnan1_x_y_f32(
1134
+ ; CHECK: call float @llvm.minnum.f32(float %x, float %y)
1135
+ define float @fmed3_qnan1_x_y_f32 (float %x , float %y ) {
1136
+ %med3 = call float @llvm.amdgcn.fmed3.f32 (float 0x7FF8000100000000 , float %x , float %y )
1137
+ ret float %med3
1138
+ }
1139
+
1140
+ ; This can return any of the qnans.
1141
+ ; CHECK-LABEL: @fmed3_qnan0_qnan1_qnan2_f32(
1142
+ ; CHECK: ret float 0x7FF8002000000000
1143
+ define float @fmed3_qnan0_qnan1_qnan2_f32 (float %x , float %y ) {
1144
+ %med3 = call float @llvm.amdgcn.fmed3.f32 (float 0x7FF8000100000000 , float 0x7FF8002000000000 , float 0x7FF8030000000000 )
1145
+ ret float %med3
1146
+ }
1147
+
1148
+ ; CHECK-LABEL: @fmed3_constant_src0_0_f32(
1149
+ ; CHECK: ret float 5.000000e-01
1150
+ define float @fmed3_constant_src0_0_f32 (float %x , float %y ) {
1151
+ %med3 = call float @llvm.amdgcn.fmed3.f32 (float 0 .5 , float -1 .0 , float 4 .0 )
1152
+ ret float %med3
1153
+ }
1154
+
1155
+ ; CHECK-LABEL: @fmed3_constant_src0_1_f32(
1156
+ ; CHECK: ret float 5.000000e-01
1157
+ define float @fmed3_constant_src0_1_f32 (float %x , float %y ) {
1158
+ %med3 = call float @llvm.amdgcn.fmed3.f32 (float 0 .5 , float 4 .0 , float -1 .0 )
1159
+ ret float %med3
1160
+ }
1161
+
1162
+ ; CHECK-LABEL: @fmed3_constant_src1_0_f32(
1163
+ ; CHECK: ret float 5.000000e-01
1164
+ define float @fmed3_constant_src1_0_f32 (float %x , float %y ) {
1165
+ %med3 = call float @llvm.amdgcn.fmed3.f32 (float -1 .0 , float 0 .5 , float 4 .0 )
1166
+ ret float %med3
1167
+ }
1168
+
1169
+ ; CHECK-LABEL: @fmed3_constant_src1_1_f32(
1170
+ ; CHECK: ret float 5.000000e-01
1171
+ define float @fmed3_constant_src1_1_f32 (float %x , float %y ) {
1172
+ %med3 = call float @llvm.amdgcn.fmed3.f32 (float 4 .0 , float 0 .5 , float -1 .0 )
1173
+ ret float %med3
1174
+ }
1175
+
1176
+ ; CHECK-LABEL: @fmed3_constant_src2_0_f32(
1177
+ ; CHECK: ret float 5.000000e-01
1178
+ define float @fmed3_constant_src2_0_f32 (float %x , float %y ) {
1179
+ %med3 = call float @llvm.amdgcn.fmed3.f32 (float -1 .0 , float 4 .0 , float 0 .5 )
1180
+ ret float %med3
1181
+ }
1182
+
1183
+ ; CHECK-LABEL: @fmed3_constant_src2_1_f32(
1184
+ ; CHECK: ret float 5.000000e-01
1185
+ define float @fmed3_constant_src2_1_f32 (float %x , float %y ) {
1186
+ %med3 = call float @llvm.amdgcn.fmed3.f32 (float 4 .0 , float -1 .0 , float 0 .5 )
1187
+ ret float %med3
1188
+ }
1189
+
1190
+ ; CHECK-LABEL: @fmed3_x_qnan0_qnan1_f32(
1191
+ ; CHECK: ret float %x
1192
+ define float @fmed3_x_qnan0_qnan1_f32 (float %x ) {
1193
+ %med3 = call float @llvm.amdgcn.fmed3.f32 (float %x , float 0x7FF8001000000000 , float 0x7FF8002000000000 )
1194
+ ret float %med3
1195
+ }
1196
+
1197
+ ; CHECK-LABEL: @fmed3_qnan0_x_qnan1_f32(
1198
+ ; CHECK: ret float %x
1199
+ define float @fmed3_qnan0_x_qnan1_f32 (float %x ) {
1200
+ %med3 = call float @llvm.amdgcn.fmed3.f32 (float 0x7FF8001000000000 , float %x , float 0x7FF8002000000000 )
1201
+ ret float %med3
1202
+ }
1203
+
1204
+ ; CHECK-LABEL: @fmed3_qnan0_qnan1_x_f32(
1205
+ ; CHECK: ret float %x
1206
+ define float @fmed3_qnan0_qnan1_x_f32 (float %x ) {
1207
+ %med3 = call float @llvm.amdgcn.fmed3.f32 (float 0x7FF8001000000000 , float 0x7FF8002000000000 , float %x )
1208
+ ret float %med3
1209
+ }
0 commit comments