def FunEliminateMemLoadStore(fun: ir.Fun, base_kind: o.DK, offset_kind: o.DK) -> int: # assert ir.FUN_FLAG.STACK_FINALIZED not in fun.flags return ir.FunGenericRewrite(fun, _InsEliminateMemLoadStore, base_kind=base_kind, offset_kind=offset_kind)
def FunSpillRegs(fun: ir.Fun, offset_kind: o.DK, regs: List[ir.Reg]) -> int: reg_to_stk: Dict[ir.Reg, ir.Stk] = {} for reg in regs: size = ir.OffsetConst(reg.kind.bitwidth() // 8) stk = ir.Stk(f"$spill_{reg.name}", size, size) reg_to_stk[reg] = stk fun.AddStk(stk) return ir.FunGenericRewrite(fun, InsSpillRegs, zero_const=ir.Const(offset_kind, 0), reg_to_stk=reg_to_stk)
def _FunMoveEliminationCpu(fun: ir.Fun) -> int: return ir.FunGenericRewrite(fun, _InsMoveEliminationCpu)
def _FunRewriteOutOfBoundsImmediates(fun: ir.Fun, unit: ir.Unit) -> int: return ir.FunGenericRewrite(fun, _InsRewriteOutOfBoundsImmediates, unit=unit)
def FunPopargConversion(fun: ir.Fun): return ir.FunGenericRewrite(fun, _InsPopargConversion, params=GetCpuRegsForSignature(fun.input_types))
def FunPropagateConsts(fun: ir.Fun) -> int: """Relies solely on the ins.operand_def info""" return ir.FunGenericRewrite(fun, _InsPropagateConsts)
def FunMoveImmediatesToMemory(fun: ir.Fun, unit: ir.Unit, kind: o.DK) -> int: return ir.FunGenericRewrite(fun, _InsMoveImmediatesToMemory, unit=unit, kind=kind)
def FunEliminateImmediateStores(fun: ir.Fun) -> int: return ir.FunGenericRewrite(fun, _InsEliminateImmediateStores)
def _FunRewriteIntoAABForm(fun: ir.Fun, unit: ir.Unit) -> int: """Bring instructions into A A B form (dst == src1). See README.md""" return ir.FunGenericRewrite(fun, _InsRewriteIntoAABForm)
def FunEliminateRem(fun: ir.Fun) -> int: assert ir.FUN_FLAG.STACK_FINALIZED not in fun.flags return ir.FunGenericRewrite(fun, _InsEliminateRem)
def FunStrengthReduction(fun: ir.Fun) -> int: return ir.FunGenericRewrite(fun, _InsStrengthReduction)
def FunCanonicalize(fun: ir.Fun) -> int: return ir.FunGenericRewrite(fun, _InsCanonicalize)
def FunPopargConversion(fun: ir.Fun, iface: PushPopInterface): return ir.FunGenericRewrite(fun, _InsPopargConversion, iface=iface, params=iface.GetCpuRegsForInSignature( fun.input_types))
def FunLimitShiftAmounts(fun: ir.Fun, width: int): return ir.FunGenericRewrite(fun, _InsLimitShiftAmounts, width=width)
def _FunRewriteOutOfBoundsImmediates(fun: ir.Fun) -> int: return ir.FunGenericRewrite(fun, _InsRewriteOutOfBoundsImmediates)
def _FunRewriteOutOfBoundsOffsetsStk(fun: ir.Fun): return ir.FunGenericRewrite(fun, _InsRewriteOutOfBoundsOffsetsStk)
def FunAddNop1ForCodeSel(fun: ir.Fun): return ir.FunGenericRewrite(fun, _InsAddNop1ForCodeSel)
def _FunRewriteDivRem(fun: ir.Fun) -> int: return ir.FunGenericRewrite(fun, _InsRewriteDivRemShifts)