@@ -1161,6 +1161,85 @@ define <2 x half> @constant_rtz_pkrtz() {
1161
1161
ret <2 x half > %cvt
1162
1162
}
1163
1163
1164
+ define <2 x half > @fpext_const_cvt_pkrtz (half %x ) {
1165
+ ; CHECK-LABEL: @fpext_const_cvt_pkrtz(
1166
+ ; CHECK-NEXT: [[CVT:%.*]] = insertelement <2 x half> <half poison, half 0xH4200>, half [[X:%.*]], i64 0
1167
+ ; CHECK-NEXT: ret <2 x half> [[CVT]]
1168
+ ;
1169
+ %ext = fpext half %x to float
1170
+ %cvt = call <2 x half > @llvm.amdgcn.cvt.pkrtz (float %ext , float 3 .0 )
1171
+ ret <2 x half > %cvt
1172
+ }
1173
+
1174
+ define <2 x half > @const_fpext_cvt_pkrtz (half %y ) {
1175
+ ; CHECK-LABEL: @const_fpext_cvt_pkrtz(
1176
+ ; CHECK-NEXT: [[CVT:%.*]] = insertelement <2 x half> <half 0xH4500, half poison>, half [[Y:%.*]], i64 1
1177
+ ; CHECK-NEXT: ret <2 x half> [[CVT]]
1178
+ ;
1179
+ %ext = fpext half %y to float
1180
+ %cvt = call <2 x half > @llvm.amdgcn.cvt.pkrtz (float 5 .0 , float %ext )
1181
+ ret <2 x half > %cvt
1182
+ }
1183
+
1184
+ define <2 x half > @const_fpext_multi_cvt_pkrtz (half %y ) {
1185
+ ; CHECK-LABEL: @const_fpext_multi_cvt_pkrtz(
1186
+ ; CHECK-NEXT: [[CVT1:%.*]] = insertelement <2 x half> <half 0xH4500, half poison>, half [[Y:%.*]], i64 1
1187
+ ; CHECK-NEXT: [[CVT2:%.*]] = insertelement <2 x half> <half 0xH4200, half poison>, half [[Y]], i64 1
1188
+ ; CHECK-NEXT: [[ADD:%.*]] = fadd <2 x half> [[CVT1]], [[CVT2]]
1189
+ ; CHECK-NEXT: ret <2 x half> [[ADD]]
1190
+ ;
1191
+ %ext = fpext half %y to float
1192
+ %cvt1 = call <2 x half > @llvm.amdgcn.cvt.pkrtz (float 5 .0 , float %ext )
1193
+ %cvt2 = call <2 x half > @llvm.amdgcn.cvt.pkrtz (float 3 .0 , float %ext )
1194
+ %add = fadd <2 x half > %cvt1 , %cvt2
1195
+ ret <2 x half > %add
1196
+ }
1197
+
1198
+ define <2 x half > @fpext_fpext_cvt_pkrtz (half %x , half %y ) {
1199
+ ; CHECK-LABEL: @fpext_fpext_cvt_pkrtz(
1200
+ ; CHECK-NEXT: [[TMP1:%.*]] = insertelement <2 x half> poison, half [[X:%.*]], i64 0
1201
+ ; CHECK-NEXT: [[CVT:%.*]] = insertelement <2 x half> [[TMP1]], half [[Y:%.*]], i64 1
1202
+ ; CHECK-NEXT: ret <2 x half> [[CVT]]
1203
+ ;
1204
+ %extx = fpext half %x to float
1205
+ %exty = fpext half %y to float
1206
+ %cvt = call <2 x half > @llvm.amdgcn.cvt.pkrtz (float %extx , float %exty )
1207
+ ret <2 x half > %cvt
1208
+ }
1209
+
1210
+ define <2 x half > @fpext_fpext_bf16_cvt_pkrtz (bfloat %x , bfloat %y ) {
1211
+ ; CHECK-LABEL: @fpext_fpext_bf16_cvt_pkrtz(
1212
+ ; CHECK-NEXT: [[EXTX:%.*]] = fpext bfloat [[X:%.*]] to float
1213
+ ; CHECK-NEXT: [[EXTY:%.*]] = fpext bfloat [[Y:%.*]] to float
1214
+ ; CHECK-NEXT: [[CVT:%.*]] = call <2 x half> @llvm.amdgcn.cvt.pkrtz(float [[EXTX]], float [[EXTY]])
1215
+ ; CHECK-NEXT: ret <2 x half> [[CVT]]
1216
+ ;
1217
+ %extx = fpext bfloat %x to float
1218
+ %exty = fpext bfloat %y to float
1219
+ %cvt = call <2 x half > @llvm.amdgcn.cvt.pkrtz (float %extx , float %exty )
1220
+ ret <2 x half > %cvt
1221
+ }
1222
+
1223
+ define <2 x half > @poison_fpext_cvt_pkrtz (half %y ) {
1224
+ ; CHECK-LABEL: @poison_fpext_cvt_pkrtz(
1225
+ ; CHECK-NEXT: [[CVT:%.*]] = insertelement <2 x half> poison, half [[Y:%.*]], i64 1
1226
+ ; CHECK-NEXT: ret <2 x half> [[CVT]]
1227
+ ;
1228
+ %ext = fpext half %y to float
1229
+ %cvt = call <2 x half > @llvm.amdgcn.cvt.pkrtz (float poison, float %ext )
1230
+ ret <2 x half > %cvt
1231
+ }
1232
+
1233
+ define <2 x half > @fpext_poison_cvt_pkrtz (half %x ) {
1234
+ ; CHECK-LABEL: @fpext_poison_cvt_pkrtz(
1235
+ ; CHECK-NEXT: [[TMP1:%.*]] = insertelement <2 x half> poison, half [[X:%.*]], i64 0
1236
+ ; CHECK-NEXT: ret <2 x half> [[TMP1]]
1237
+ ;
1238
+ %ext = fpext half %x to float
1239
+ %cvt = call <2 x half > @llvm.amdgcn.cvt.pkrtz (float %ext , float poison)
1240
+ ret <2 x half > %cvt
1241
+ }
1242
+
1164
1243
; --------------------------------------------------------------------
1165
1244
; llvm.amdgcn.cvt.pknorm.i16
1166
1245
; --------------------------------------------------------------------
0 commit comments