467 : ST(&_ST), MRI(&_MRI) {
469 addRulesForGOpcs({G_ADD, G_SUB},
Standard)
477 addRulesForGOpcs({G_XOR, G_OR, G_AND},
StandardB)
497 addRulesForGOpcs({G_LSHR},
Standard)
507 addRulesForGOpcs({G_ASHR},
Standard)
519 addRulesForGOpcs({G_UBFX, G_SBFX},
Standard)
528 addRulesForGOpcs({G_CONSTANT})
532 addRulesForGOpcs({G_ICMP})
537 addRulesForGOpcs({G_FCMP})
541 addRulesForGOpcs({G_BRCOND})
545 addRulesForGOpcs({G_BR}).
Any({{
_}, {{}, {
None}}});
555 addRulesForGOpcs({G_ANYEXT})
569 addRulesForGOpcs({G_TRUNC})
584 addRulesForGOpcs({G_ZEXT})
599 addRulesForGOpcs({G_SEXT})
614 addRulesForGOpcs({G_SEXT_INREG})
620 bool hasSMRDx3 = ST->hasScalarDwordx3Loads();
621 bool hasSMRDSmall = ST->hasScalarSubwordLoads();
622 bool usesTrue16 = ST->useRealTrue16Insts();
625 return (*
MI.memoperands_begin())->getAlign() >=
Align(16);
629 return (*
MI.memoperands_begin())->getAlign() >=
Align(4);
633 return (*
MI.memoperands_begin())->isAtomic();
649 return (*
MI.memoperands_begin())->isVolatile();
653 return (*
MI.memoperands_begin())->isInvariant();
668 return MemSize == 16 || MemSize == 8;
676 auto isUL = !isAtomicMMO && isUniMMO && (isConst || !isVolatileMMO) &&
677 (isConst || isInvMMO || isNoClobberMMO);
681 addRulesForGOpcs({G_LOAD})
788 addRulesForGOpcs({G_ZEXTLOAD, G_SEXTLOAD})
808 addRulesForGOpcs({G_STORE})
843 addRulesForGOpcs({G_AMDGPU_BUFFER_LOAD},
StandardB)
853 addRulesForGOpcs({G_AMDGPU_BUFFER_STORE})
856 addRulesForGOpcs({G_PTR_ADD})
862 addRulesForGOpcs({G_INTTOPTR})
870 addRulesForGOpcs({G_PTRTOINT})
880 bool hasSALUFloat = ST->hasSALUFloatInsts();
882 addRulesForGOpcs({G_FADD},
Standard)
887 addRulesForGOpcs({G_FPTOUI})
891 addRulesForGOpcs({G_UITOFP})
903 addRulesForIOpcs({amdgcn_if_break},
Standard)
906 addRulesForIOpcs({amdgcn_mbcnt_lo, amdgcn_mbcnt_hi},
Standard)
909 addRulesForIOpcs({amdgcn_readfirstlane})