Esempio n. 1
0
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)
Esempio n. 2
0
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)
Esempio n. 3
0
def _FunMoveEliminationCpu(fun: ir.Fun) -> int:
    return ir.FunGenericRewrite(fun, _InsMoveEliminationCpu)
Esempio n. 4
0
def _FunRewriteOutOfBoundsImmediates(fun: ir.Fun, unit: ir.Unit) -> int:
    return ir.FunGenericRewrite(fun, _InsRewriteOutOfBoundsImmediates, unit=unit)
Esempio n. 5
0
def FunPopargConversion(fun: ir.Fun):
    return ir.FunGenericRewrite(fun, _InsPopargConversion,
                                params=GetCpuRegsForSignature(fun.input_types))
Esempio n. 6
0
def FunPropagateConsts(fun: ir.Fun) -> int:
    """Relies solely on the ins.operand_def info"""
    return ir.FunGenericRewrite(fun, _InsPropagateConsts)
Esempio n. 7
0
def FunMoveImmediatesToMemory(fun: ir.Fun, unit: ir.Unit, kind: o.DK) -> int:
    return ir.FunGenericRewrite(fun,
                                _InsMoveImmediatesToMemory,
                                unit=unit,
                                kind=kind)
Esempio n. 8
0
def FunEliminateImmediateStores(fun: ir.Fun) -> int:
    return ir.FunGenericRewrite(fun, _InsEliminateImmediateStores)
Esempio n. 9
0
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)
Esempio n. 10
0
def FunEliminateRem(fun: ir.Fun) -> int:
    assert ir.FUN_FLAG.STACK_FINALIZED not in fun.flags
    return ir.FunGenericRewrite(fun, _InsEliminateRem)
Esempio n. 11
0
def FunStrengthReduction(fun: ir.Fun) -> int:
    return ir.FunGenericRewrite(fun, _InsStrengthReduction)
Esempio n. 12
0
def FunCanonicalize(fun: ir.Fun) -> int:
    return ir.FunGenericRewrite(fun, _InsCanonicalize)
Esempio n. 13
0
def FunPopargConversion(fun: ir.Fun, iface: PushPopInterface):
    return ir.FunGenericRewrite(fun,
                                _InsPopargConversion,
                                iface=iface,
                                params=iface.GetCpuRegsForInSignature(
                                    fun.input_types))
Esempio n. 14
0
def FunLimitShiftAmounts(fun: ir.Fun, width: int):
    return ir.FunGenericRewrite(fun, _InsLimitShiftAmounts, width=width)
Esempio n. 15
0
def _FunRewriteOutOfBoundsImmediates(fun: ir.Fun) -> int:
    return ir.FunGenericRewrite(fun, _InsRewriteOutOfBoundsImmediates)
Esempio n. 16
0
def _FunRewriteOutOfBoundsOffsetsStk(fun: ir.Fun):
    return ir.FunGenericRewrite(fun, _InsRewriteOutOfBoundsOffsetsStk)
Esempio n. 17
0
def FunAddNop1ForCodeSel(fun: ir.Fun):
    return ir.FunGenericRewrite(fun, _InsAddNop1ForCodeSel)
Esempio n. 18
0
def _FunRewriteDivRem(fun: ir.Fun) -> int:
    return ir.FunGenericRewrite(fun, _InsRewriteDivRemShifts)