470 : ST(&_ST), MRI(&_MRI) {
472 addRulesForGOpcs({G_ADD, G_SUB},
Standard)
482 addRulesForGOpcs({G_UADDO, G_USUBO},
Standard)
486 addRulesForGOpcs({G_UADDE, G_USUBE},
Standard)
492 bool hasMulHi = ST->hasScalarMulHiInsts();
493 addRulesForGOpcs({G_UMULH, G_SMULH},
Standard)
498 addRulesForGOpcs({G_XOR, G_OR, G_AND},
StandardB)
518 addRulesForGOpcs({G_LSHR},
Standard)
528 addRulesForGOpcs({G_ASHR},
Standard)
538 addRulesForGOpcs({G_FSHR},
Standard)
544 addRulesForGOpcs({G_UBFX, G_SBFX},
Standard)
550 addRulesForGOpcs({G_SMIN, G_SMAX},
Standard)
558 addRulesForGOpcs({G_UMIN, G_UMAX},
Standard)
569 addRulesForGOpcs({G_CONSTANT})
573 addRulesForGOpcs({G_ICMP})
578 addRulesForGOpcs({G_FCMP})
582 addRulesForGOpcs({G_BRCOND})
586 addRulesForGOpcs({G_BR}).
Any({{
_}, {{}, {
None}}});
596 addRulesForGOpcs({G_ANYEXT})
610 addRulesForGOpcs({G_TRUNC})
625 addRulesForGOpcs({G_ZEXT})
640 addRulesForGOpcs({G_SEXT})
655 addRulesForGOpcs({G_SEXT_INREG})
661 addRulesForGOpcs({G_ASSERT_ZEXT, G_ASSERT_SEXT},
Standard)
667 bool hasSMRDx3 = ST->hasScalarDwordx3Loads();
668 bool hasSMRDSmall = ST->hasScalarSubwordLoads();
669 bool usesTrue16 = ST->useRealTrue16Insts();
672 return (*
MI.memoperands_begin())->getAlign() >=
Align(16);
676 return (*
MI.memoperands_begin())->getAlign() >=
Align(4);
680 return (*
MI.memoperands_begin())->isAtomic();
696 return (*
MI.memoperands_begin())->isVolatile();
700 return (*
MI.memoperands_begin())->isInvariant();
715 return MemSize == 16 || MemSize == 8;
723 auto isUL = !isAtomicMMO && isUniMMO && (isConst || !isVolatileMMO) &&
724 (isConst || isInvMMO || isNoClobberMMO);
728 addRulesForGOpcs({G_LOAD})
835 addRulesForGOpcs({G_ZEXTLOAD, G_SEXTLOAD})
855 addRulesForGOpcs({G_STORE})
890 addRulesForGOpcs({G_AMDGPU_BUFFER_LOAD, G_AMDGPU_BUFFER_LOAD_FORMAT,
891 G_AMDGPU_TBUFFER_LOAD_FORMAT},
902 addRulesForGOpcs({G_AMDGPU_BUFFER_LOAD_USHORT, G_AMDGPU_BUFFER_LOAD_UBYTE,
903 G_AMDGPU_BUFFER_LOAD_SSHORT, G_AMDGPU_BUFFER_LOAD_SBYTE},
908 addRulesForGOpcs({G_AMDGPU_BUFFER_STORE})
911 addRulesForGOpcs({G_PTR_ADD})
917 addRulesForGOpcs({G_INTTOPTR})
925 addRulesForGOpcs({G_PTRTOINT})
935 addRulesForGOpcs({G_BITREVERSE},
Standard)
941 addRulesForGOpcs({G_FENCE}).
Any({{{}}, {{}, {}}});
943 addRulesForGOpcs({G_READSTEADYCOUNTER, G_READCYCLECOUNTER},
Standard)
948 addRulesForGOpcs({G_GLOBAL_VALUE})
955 addRulesForGOpcs({G_AMDGPU_WAVE_ADDRESS}).
Any({{
UniP5}, {{
SgprP5}, {}}});
957 bool hasSALUFloat = ST->hasSALUFloatInsts();
959 addRulesForGOpcs({G_FADD, G_FMUL, G_STRICT_FADD, G_STRICT_FMUL},
Standard)
973 addRulesForGOpcs({G_FSUB, G_STRICT_FSUB},
Standard)
981 addRulesForGOpcs({G_FMAD},
Standard)
1005 addRulesForGOpcs({G_AMDGPU_FMED3},
Standard)
1015 addRulesForGOpcs({G_FNEG, G_FABS},
Standard)
1030 addRulesForGOpcs({G_FPTOUI})
1034 addRulesForGOpcs({G_UITOFP})
1039 addRulesForGOpcs({G_FPEXT})
1046 addRulesForGOpcs({G_FPTRUNC})
1055 addRulesForGOpcs({G_IS_FPCLASS})
1070 addRulesForIOpcs({amdgcn_if_break},
Standard)
1073 addRulesForIOpcs({amdgcn_mbcnt_lo, amdgcn_mbcnt_hi},
Standard)
1076 addRulesForIOpcs({amdgcn_readfirstlane})
1082 addRulesForIOpcs({amdgcn_mul_u24, amdgcn_mul_i24},
Standard)
1088 addRulesForIOpcs({amdgcn_mulhi_u24, amdgcn_mulhi_i24, amdgcn_fmul_legacy},