def METHOD_NAME(fx_g, example_inputs):
    print('run tpu_mlir_compiler, original graph:')
    fx_g.graph.print_tabular()
    name = f"fx_g{time.time()}"
    g = FxGraphDrawer(fx_g, name)
    with open(f"{name}.svg", "wb") as f:
        f.write(g.get_dot_graph().create_svg())
    for i, node in enumerate(fx_g.graph.nodes):
        print(f'>>> {i}th op, name:', node.name, 'target:',node.target, 'args:', node.args, 'users:', list(node.users.keys()), 'kwargs:', node.kwargs,
              'val:', node.meta['val'] if 'val' in node.meta else 'None')
    if args.skip_tpu_mlir:
        return make_boxed_func(fx_g.forward)
    fx_g_bk = copy.deepcopy(fx_g)
    from torch.fx.passes.fake_tensor_prop import FakeTensorProp
    FakeTensorProp(fx_g).propagate(*example_inputs)
    if fx_pass_for_bmm_expand(fx_g):
        print('run tpu_mlir_compiler, updated graph:')
        fx_g.graph.print_tabular()
    with compilers._disable_jit_autocast():
        compilers.strip_overloads(fx_g) #删除掉node.target的重载,比如将aten.sum.dim_IntList变为aten.sum
        for node in fx_g.graph.nodes:
            if (
                node.target == torch.ops.aten._to_copy
                and len(node.args) == 1
                and len(node.kwargs) == 1
                and "dtype" in node.kwargs
            ):
                node.target = torch.ops.aten.to
            if node.target == torch.ops.prims.div:
                node.target = torch.ops.aten.div
            if node.target == torch.ops.aten.alias:
                node.target = torch.ops.aten.clone
            if node.target == torch.ops.prims.var:
                node.target = torch.ops.aten.var
            if node.target == torch.ops.prims.sum:
                print('change prims.sum')
                node.target = torch.ops.aten.sum
            if node.target == torch.ops.prims.convert_element_type:
                node.target = torch.ops.aten.to
            if node.target == torch.ops.aten.view:
                node.target = torch.ops.aten.reshape
        for node in fx_g.graph.nodes:
            new_kwargs = {}
            for k, v in node.kwargs.items():
                if isinstance(v, torch.device):
                    v = v.type # device(type='cuda', index=0)
                new_kwargs[k] = v #将device改为字符串形式, why?
            node.kwargs = new_kwargs
        fx_g.graph.lint()
        fx_g.recompile()
        cvt_en = False
        partitioned_module = partition(fx_g, min_block_size = 3)
        name = f"partitioned_module_{time.time()}"
        g = FxGraphDrawer(partitioned_module, name)
        with open(f'{name}.svg', "wb") as f:
            f.write(g.get_dot_graph().create_svg())
        if len(list(partitioned_module.named_children())) > 0:
            for name, _ in partitioned_module.named_children():
                submodule = getattr(partitioned_module, name)
                print(name, 'submodule:', submodule)
                tpu_mlir_mod = convert_module_fx(name, submodule, args)
                if tpu_mlir_mod is not None:
                    cvt_en = True
                    setattr(partitioned_module, name, tpu_mlir_mod)
        else:
            partitioned_module = convert_module_fx('main_mod', partitioned_module, args)
            if partitioned_module is not None:
                cvt_en = True
    if cvt_en:
        return make_boxed_func(partitioned_module.forward)
    else:
        return make_boxed_func(fx_g_bk.forward)