@@ -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