@@ -75,9 +75,8 @@ enum class SchedGroupMask {
75
75
DS_READ = 1u << 8 ,
76
76
DS_WRITE = 1u << 9 ,
77
77
TRANS = 1u << 10 ,
78
- INLINE_ASM = 1u << 11 ,
79
78
ALL = ALU | VALU | SALU | MFMA | VMEM | VMEM_READ | VMEM_WRITE | DS |
80
- DS_READ | DS_WRITE | TRANS | INLINE_ASM ,
79
+ DS_READ | DS_WRITE | TRANS,
81
80
LLVM_MARK_AS_BITMASK_ENUM (/* LargestFlag = */ ALL)
82
81
};
83
82
@@ -2392,6 +2391,16 @@ bool SchedGroup::canAddMI(const MachineInstr &MI) const {
2392
2391
if (MI.isMetaInstruction ())
2393
2392
Result = false ;
2394
2393
2394
+ else if (MI.isInlineAsm ()) {
2395
+ std::string Text = MI.getOperand (0 ).getSymbolName ();
2396
+ if (Text.find (" SGMASK:" ) != std::string::npos) {
2397
+ Text = Text.substr (Text.find (" SGMASK:" ) + strlen (" SGMASK:" ));
2398
+ Text = Text.substr (0 , Text.find_first_of (" \t\r\n " ));
2399
+ unsigned long InlineAsmMask = std::stoul (Text, nullptr , 0 );
2400
+ Result = ((unsigned long )SGMask & InlineAsmMask) != 0 ;
2401
+ }
2402
+ }
2403
+
2395
2404
else if (((SGMask & SchedGroupMask::ALU) != SchedGroupMask::NONE) &&
2396
2405
(TII->isVALU (MI) || TII->isMFMAorWMMA (MI) || TII->isSALU (MI) ||
2397
2406
TII->isTRANS (MI)))
@@ -2437,10 +2446,6 @@ bool SchedGroup::canAddMI(const MachineInstr &MI) const {
2437
2446
TII->isTRANS (MI))
2438
2447
Result = true ;
2439
2448
2440
- else if (((SGMask & SchedGroupMask::INLINE_ASM) != SchedGroupMask::NONE) &&
2441
- MI.isInlineAsm ())
2442
- Result = true ;
2443
-
2444
2449
LLVM_DEBUG (
2445
2450
dbgs () << " For SchedGroup with mask " << format_hex ((int )SGMask, 10 , true )
2446
2451
<< (Result ? " could classify " : " unable to classify " ) << MI);
0 commit comments