@@ -1161,6 +1161,85 @@ define <2 x half> @constant_rtz_pkrtz() {
11611161 ret <2 x half > %cvt
11621162}
11631163
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+
11641243; --------------------------------------------------------------------
11651244; llvm.amdgcn.cvt.pknorm.i16
11661245; --------------------------------------------------------------------
0 commit comments