471 : ST(&_ST), MRI(&_MRI) {
473 addRulesForGOpcs({G_ADD, G_SUB},
Standard)
483 addRulesForGOpcs({G_UADDO, G_USUBO},
Standard)
487 addRulesForGOpcs({G_UADDE, G_USUBE},
Standard)
493 addRulesForGOpcs({G_XOR, G_OR, G_AND},
StandardB)
513 addRulesForGOpcs({G_LSHR},
Standard)
523 addRulesForGOpcs({G_ASHR},
Standard)
533 addRulesForGOpcs({G_FSHR},
Standard)
539 addRulesForGOpcs({G_UBFX, G_SBFX},
Standard)
545 addRulesForGOpcs({G_SMIN, G_SMAX},
Standard)
553 addRulesForGOpcs({G_UMIN, G_UMAX},
Standard)
564 addRulesForGOpcs({G_CONSTANT})
568 addRulesForGOpcs({G_ICMP})
573 addRulesForGOpcs({G_FCMP})
577 addRulesForGOpcs({G_BRCOND})
581 addRulesForGOpcs({G_BR}).
Any({{
_}, {{}, {
None}}});
591 addRulesForGOpcs({G_ANYEXT})
605 addRulesForGOpcs({G_TRUNC})
620 addRulesForGOpcs({G_ZEXT})
635 addRulesForGOpcs({G_SEXT})
650 addRulesForGOpcs({G_SEXT_INREG})
656 addRulesForGOpcs({G_ASSERT_ZEXT, G_ASSERT_SEXT},
Standard)
662 bool hasSMRDx3 = ST->hasScalarDwordx3Loads();
663 bool hasSMRDSmall = ST->hasScalarSubwordLoads();
664 bool usesTrue16 = ST->useRealTrue16Insts();
667 return (*
MI.memoperands_begin())->getAlign() >=
Align(16);
671 return (*
MI.memoperands_begin())->getAlign() >=
Align(4);
675 return (*
MI.memoperands_begin())->isAtomic();
691 return (*
MI.memoperands_begin())->isVolatile();
695 return (*
MI.memoperands_begin())->isInvariant();
710 return MemSize == 16 || MemSize == 8;
718 auto isUL = !isAtomicMMO && isUniMMO && (isConst || !isVolatileMMO) &&
719 (isConst || isInvMMO || isNoClobberMMO);
723 addRulesForGOpcs({G_LOAD})
830 addRulesForGOpcs({G_ZEXTLOAD, G_SEXTLOAD})
850 addRulesForGOpcs({G_STORE})
885 addRulesForGOpcs({G_AMDGPU_BUFFER_LOAD, G_AMDGPU_BUFFER_LOAD_FORMAT,
886 G_AMDGPU_TBUFFER_LOAD_FORMAT},
897 addRulesForGOpcs({G_AMDGPU_BUFFER_STORE})
900 addRulesForGOpcs({G_PTR_ADD})
906 addRulesForGOpcs({G_INTTOPTR})
914 addRulesForGOpcs({G_PTRTOINT})
924 addRulesForGOpcs({G_FENCE}).
Any({{{}}, {{}, {}}});
926 addRulesForGOpcs({G_READSTEADYCOUNTER, G_READCYCLECOUNTER},
Standard)
931 addRulesForGOpcs({G_GLOBAL_VALUE})
938 addRulesForGOpcs({G_AMDGPU_WAVE_ADDRESS}).
Any({{
UniP5}, {{
SgprP5}, {}}});
940 bool hasSALUFloat = ST->hasSALUFloatInsts();
942 addRulesForGOpcs({G_FADD, G_FMUL},
Standard)
958 addRulesForGOpcs({G_FPTOUI})
962 addRulesForGOpcs({G_UITOFP})
967 addRulesForGOpcs({G_IS_FPCLASS})
982 addRulesForIOpcs({amdgcn_if_break},
Standard)
985 addRulesForIOpcs({amdgcn_mbcnt_lo, amdgcn_mbcnt_hi},
Standard)
988 addRulesForIOpcs({amdgcn_readfirstlane})