benode_t.h 1.77 KB
Newer Older
Sebastian Hack's avatar
Sebastian Hack committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
 * @file   benode_t.h
 * @date   17.05.2005
 * @author Sebastian Hack
 *
 * Backend node support.
 *
 * Copyright (C) 2005 Universitaet Karlsruhe
 * Released under the GPL
 */

#ifndef _BENODE_T_H
#define _BENODE_T_H

15
16
#include "pmap.h"

Sebastian Hack's avatar
Sebastian Hack committed
17
18
19
20
21
#include "irmode.h"
#include "irnode.h"

#include "bearch.h"

22
23
24
25
26
27
28
29
30
31
32
33
struct _be_node_factory_t {
  const arch_isa_if_t *isa;

  struct obstack      obst;
  set                 *ops;
  pmap                *irn_op_map;
  pmap                *reg_req_map;

  arch_irn_handler_t  handler;
  arch_irn_ops_t      irn_ops;
};

Sebastian Hack's avatar
Sebastian Hack committed
34
35
typedef struct _be_node_factory_t 			be_node_factory_t;

36
37
be_node_factory_t *be_node_factory_init(be_node_factory_t *factory,
    const arch_isa_if_t *isa);
Sebastian Hack's avatar
Sebastian Hack committed
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68

const arch_irn_handler_t *be_node_get_irn_handler(const be_node_factory_t *f);

ir_node *new_Spill(const be_node_factory_t *factory,
    const arch_register_class_t *cls,
    ir_graph *irg, ir_node *bl, ir_node *node_to_spill);

ir_node *new_Reload(const be_node_factory_t *factory,
    const arch_register_class_t *cls,
    ir_graph *irg, ir_node *bl, ir_node *spill_node);

ir_node *new_Perm(const be_node_factory_t *factory,
    const arch_register_class_t *cls,
    ir_graph *irg, ir_node *bl, int arity, ir_node **in);

ir_node *new_Copy(const be_node_factory_t *factory,
    const arch_register_class_t *cls,
    ir_graph *irg, ir_node *block, ir_node *in);

ir_node *be_spill(const be_node_factory_t *factory, const arch_env_t *env, ir_node *irn);
ir_node *be_reload(const be_node_factory_t *factory, const arch_env_t *env, ir_node *irn);

int is_Spill(const be_node_factory_t *f, const ir_node *irn);

ir_node *get_Reload_Spill(ir_node *reload);

void insert_perm(const be_node_factory_t *factory,
    const arch_register_class_t *reg_class,
    ir_node *in_front_of);

#endif /* _BENODE_T_H */