@@ -75,9 +75,8 @@ enum class SchedGroupMask {
7575 DS_READ = 1u << 8 ,
7676 DS_WRITE = 1u << 9 ,
7777 TRANS = 1u << 10 ,
78- INLINE_ASM = 1u << 11 ,
7978 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,
8180 LLVM_MARK_AS_BITMASK_ENUM (/* LargestFlag = */ ALL)
8281};
8382
@@ -2392,6 +2391,16 @@ bool SchedGroup::canAddMI(const MachineInstr &MI) const {
23922391 if (MI.isMetaInstruction ())
23932392 Result = false ;
23942393
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+
23952404 else if (((SGMask & SchedGroupMask::ALU) != SchedGroupMask::NONE) &&
23962405 (TII->isVALU (MI) || TII->isMFMAorWMMA (MI) || TII->isSALU (MI) ||
23972406 TII->isTRANS (MI)))
@@ -2441,10 +2450,6 @@ bool SchedGroup::canAddMI(const MachineInstr &MI) const {
24412450 TII->isTRANS (MI))
24422451 Result = true ;
24432452
2444- else if (((SGMask & SchedGroupMask::INLINE_ASM) != SchedGroupMask::NONE) &&
2445- MI.isInlineAsm ())
2446- Result = true ;
2447-
24482453 LLVM_DEBUG (
24492454 dbgs () << " For SchedGroup with mask " << format_hex ((int )SGMask, 10 , true )
24502455 << (Result ? " could classify " : " unable to classify " ) << MI);
0 commit comments