@@ -474,6 +474,8 @@ class AMDGPUOperand : public MCParsedAsmOperand {
474
474
475
475
bool isSSrcF64() const { return isSCSrc_b64() || isLiteralImm(MVT::f64); }
476
476
477
+ bool isSSrc_bf16() const { return isSCSrcB16() || isLiteralImm(MVT::bf16); }
478
+
477
479
bool isSSrc_f16() const { return isSCSrcB16() || isLiteralImm(MVT::f16); }
478
480
479
481
bool isSSrcV2F16() const {
@@ -540,22 +542,40 @@ class AMDGPUOperand : public MCParsedAsmOperand {
540
542
return isRegOrInlineNoMods(AMDGPU::VS_64RegClassID, MVT::f64);
541
543
}
542
544
545
+ bool isVCSrcTBF16() const {
546
+ return isRegOrInlineNoMods(AMDGPU::VS_16RegClassID, MVT::bf16);
547
+ }
548
+
543
549
bool isVCSrcTF16() const {
544
550
return isRegOrInlineNoMods(AMDGPU::VS_16RegClassID, MVT::f16);
545
551
}
546
552
553
+ bool isVCSrcTBF16_Lo128() const {
554
+ return isRegOrInlineNoMods(AMDGPU::VS_16_Lo128RegClassID, MVT::bf16);
555
+ }
556
+
547
557
bool isVCSrcTF16_Lo128() const {
548
558
return isRegOrInlineNoMods(AMDGPU::VS_16_Lo128RegClassID, MVT::f16);
549
559
}
550
560
561
+ bool isVCSrcFake16BF16_Lo128() const {
562
+ return isRegOrInlineNoMods(AMDGPU::VS_32_Lo128RegClassID, MVT::bf16);
563
+ }
564
+
551
565
bool isVCSrcFake16F16_Lo128() const {
552
566
return isRegOrInlineNoMods(AMDGPU::VS_32_Lo128RegClassID, MVT::f16);
553
567
}
554
568
569
+ bool isVCSrc_bf16() const {
570
+ return isRegOrInlineNoMods(AMDGPU::VS_32RegClassID, MVT::bf16);
571
+ }
572
+
555
573
bool isVCSrc_f16() const {
556
574
return isRegOrInlineNoMods(AMDGPU::VS_32RegClassID, MVT::f16);
557
575
}
558
576
577
+ bool isVCSrc_v2bf16() const { return isVCSrc_bf16(); }
578
+
559
579
bool isVCSrc_v2f16() const { return isVCSrc_f16(); }
560
580
561
581
bool isVSrc_b32() const {
@@ -596,18 +616,34 @@ class AMDGPUOperand : public MCParsedAsmOperand {
596
616
597
617
bool isVSrc_f64() const { return isVCSrcF64() || isLiteralImm(MVT::f64); }
598
618
619
+ bool isVSrcT_bf16() const { return isVCSrcTBF16() || isLiteralImm(MVT::bf16); }
620
+
599
621
bool isVSrcT_f16() const { return isVCSrcTF16() || isLiteralImm(MVT::f16); }
600
622
623
+ bool isVSrcT_bf16_Lo128() const {
624
+ return isVCSrcTBF16_Lo128() || isLiteralImm(MVT::bf16);
625
+ }
626
+
601
627
bool isVSrcT_f16_Lo128() const {
602
628
return isVCSrcTF16_Lo128() || isLiteralImm(MVT::f16);
603
629
}
604
630
631
+ bool isVSrcFake16_bf16_Lo128() const {
632
+ return isVCSrcFake16BF16_Lo128() || isLiteralImm(MVT::bf16);
633
+ }
634
+
605
635
bool isVSrcFake16_f16_Lo128() const {
606
636
return isVCSrcFake16F16_Lo128() || isLiteralImm(MVT::f16);
607
637
}
608
638
639
+ bool isVSrc_bf16() const { return isVCSrc_bf16() || isLiteralImm(MVT::bf16); }
640
+
609
641
bool isVSrc_f16() const { return isVCSrc_f16() || isLiteralImm(MVT::f16); }
610
642
643
+ bool isVSrc_v2bf16() const {
644
+ return isVSrc_bf16() || isLiteralImm(MVT::v2bf16);
645
+ }
646
+
611
647
bool isVSrc_v2f16() const { return isVSrc_f16() || isLiteralImm(MVT::v2f16); }
612
648
613
649
bool isVISrcB32() const {
@@ -634,6 +670,10 @@ class AMDGPUOperand : public MCParsedAsmOperand {
634
670
return isVISrcF16() || isVISrcB32();
635
671
}
636
672
673
+ bool isVISrc_64_bf16() const {
674
+ return isRegOrInlineNoMods(AMDGPU::VReg_64RegClassID, MVT::bf16);
675
+ }
676
+
637
677
bool isVISrc_64_f16() const {
638
678
return isRegOrInlineNoMods(AMDGPU::VReg_64RegClassID, MVT::f16);
639
679
}
@@ -802,6 +842,10 @@ class AMDGPUOperand : public MCParsedAsmOperand {
802
842
return isAISrc_128F16() || isAISrc_128_b32();
803
843
}
804
844
845
+ bool isVISrc_128_bf16() const {
846
+ return isRegOrInlineNoMods(AMDGPU::VReg_128RegClassID, MVT::bf16);
847
+ }
848
+
805
849
bool isVISrc_128_f16() const {
806
850
return isRegOrInlineNoMods(AMDGPU::VReg_128RegClassID, MVT::f16);
807
851
}
@@ -1889,6 +1933,14 @@ static const fltSemantics *getOpFltSemantics(uint8_t OperandType) {
1889
1933
case AMDGPU::OPERAND_REG_IMM_V2FP16:
1890
1934
case AMDGPU::OPERAND_KIMM16:
1891
1935
return &APFloat::IEEEhalf();
1936
+ case AMDGPU::OPERAND_REG_IMM_BF16:
1937
+ case AMDGPU::OPERAND_REG_IMM_BF16_DEFERRED:
1938
+ case AMDGPU::OPERAND_REG_INLINE_C_BF16:
1939
+ case AMDGPU::OPERAND_REG_INLINE_C_V2BF16:
1940
+ case AMDGPU::OPERAND_REG_INLINE_AC_BF16:
1941
+ case AMDGPU::OPERAND_REG_INLINE_AC_V2BF16:
1942
+ case AMDGPU::OPERAND_REG_IMM_V2BF16:
1943
+ return &APFloat::BFloat();
1892
1944
default:
1893
1945
llvm_unreachable("unsupported fp type");
1894
1946
}
@@ -2185,17 +2237,24 @@ void AMDGPUOperand::addLiteralImmOperand(MCInst &Inst, int64_t Val, bool ApplyMo
2185
2237
case AMDGPU::OPERAND_REG_INLINE_AC_INT32:
2186
2238
case AMDGPU::OPERAND_REG_INLINE_AC_FP32:
2187
2239
case AMDGPU::OPERAND_REG_IMM_INT16:
2240
+ case AMDGPU::OPERAND_REG_IMM_BF16:
2188
2241
case AMDGPU::OPERAND_REG_IMM_FP16:
2242
+ case AMDGPU::OPERAND_REG_IMM_BF16_DEFERRED:
2189
2243
case AMDGPU::OPERAND_REG_IMM_FP16_DEFERRED:
2190
2244
case AMDGPU::OPERAND_REG_INLINE_C_INT16:
2245
+ case AMDGPU::OPERAND_REG_INLINE_C_BF16:
2191
2246
case AMDGPU::OPERAND_REG_INLINE_C_FP16:
2192
2247
case AMDGPU::OPERAND_REG_INLINE_C_V2INT16:
2248
+ case AMDGPU::OPERAND_REG_INLINE_C_V2BF16:
2193
2249
case AMDGPU::OPERAND_REG_INLINE_C_V2FP16:
2194
2250
case AMDGPU::OPERAND_REG_INLINE_AC_INT16:
2251
+ case AMDGPU::OPERAND_REG_INLINE_AC_BF16:
2195
2252
case AMDGPU::OPERAND_REG_INLINE_AC_FP16:
2196
2253
case AMDGPU::OPERAND_REG_INLINE_AC_V2INT16:
2254
+ case AMDGPU::OPERAND_REG_INLINE_AC_V2BF16:
2197
2255
case AMDGPU::OPERAND_REG_INLINE_AC_V2FP16:
2198
2256
case AMDGPU::OPERAND_REG_IMM_V2INT16:
2257
+ case AMDGPU::OPERAND_REG_IMM_V2BF16:
2199
2258
case AMDGPU::OPERAND_REG_IMM_V2FP16:
2200
2259
case AMDGPU::OPERAND_REG_INLINE_C_V2FP32:
2201
2260
case AMDGPU::OPERAND_REG_IMM_V2FP32:
@@ -2239,6 +2298,7 @@ void AMDGPUOperand::addLiteralImmOperand(MCInst &Inst, int64_t Val, bool ApplyMo
2239
2298
case AMDGPU::OPERAND_REG_INLINE_AC_INT32:
2240
2299
case AMDGPU::OPERAND_REG_INLINE_AC_FP32:
2241
2300
case AMDGPU::OPERAND_REG_IMM_V2INT16:
2301
+ case AMDGPU::OPERAND_REG_IMM_V2BF16:
2242
2302
case AMDGPU::OPERAND_REG_IMM_V2FP16:
2243
2303
case AMDGPU::OPERAND_REG_IMM_V2FP32:
2244
2304
case AMDGPU::OPERAND_REG_INLINE_C_V2FP32:
@@ -2276,11 +2336,15 @@ void AMDGPUOperand::addLiteralImmOperand(MCInst &Inst, int64_t Val, bool ApplyMo
2276
2336
return;
2277
2337
2278
2338
case AMDGPU::OPERAND_REG_IMM_INT16:
2339
+ case AMDGPU::OPERAND_REG_IMM_BF16:
2279
2340
case AMDGPU::OPERAND_REG_IMM_FP16:
2341
+ case AMDGPU::OPERAND_REG_IMM_BF16_DEFERRED:
2280
2342
case AMDGPU::OPERAND_REG_IMM_FP16_DEFERRED:
2281
2343
case AMDGPU::OPERAND_REG_INLINE_C_INT16:
2344
+ case AMDGPU::OPERAND_REG_INLINE_C_BF16:
2282
2345
case AMDGPU::OPERAND_REG_INLINE_C_FP16:
2283
2346
case AMDGPU::OPERAND_REG_INLINE_AC_INT16:
2347
+ case AMDGPU::OPERAND_REG_INLINE_AC_BF16:
2284
2348
case AMDGPU::OPERAND_REG_INLINE_AC_FP16:
2285
2349
if (isSafeTruncation(Val, 16) &&
2286
2350
AMDGPU::isInlinableLiteral16(static_cast<int16_t>(Val),
@@ -2295,8 +2359,10 @@ void AMDGPUOperand::addLiteralImmOperand(MCInst &Inst, int64_t Val, bool ApplyMo
2295
2359
return;
2296
2360
2297
2361
case AMDGPU::OPERAND_REG_INLINE_C_V2INT16:
2362
+ case AMDGPU::OPERAND_REG_INLINE_C_V2BF16:
2298
2363
case AMDGPU::OPERAND_REG_INLINE_C_V2FP16:
2299
2364
case AMDGPU::OPERAND_REG_INLINE_AC_V2INT16:
2365
+ case AMDGPU::OPERAND_REG_INLINE_AC_V2BF16:
2300
2366
case AMDGPU::OPERAND_REG_INLINE_AC_V2FP16: {
2301
2367
assert(isSafeTruncation(Val, 16));
2302
2368
assert(AMDGPU::isInlinableLiteral16(static_cast<int16_t>(Val),
0 commit comments