/**
* @file
* @brief code selection (transform FIRM into amd64 FIRM)
- * @version $Id: amd64_transform.c 26673 2009-10-01 16:43:13Z matze $
*/
#include "config.h"
#include "error.h"
#include "debug.h"
-#include "../benode.h"
-#include "../betranshlp.h"
-#include "../beutil.h"
+#include "benode.h"
+#include "betranshlp.h"
+#include "beutil.h"
#include "bearch_amd64_t.h"
#include "amd64_nodes_attr.h"
ir_node *res = create_const_graph(node, block);
(void) mode;
- be_dep_on_frame(res);
-
return res;
}
ir_node *new_node;
new_node = new_bd_amd64_SymConst(dbgi, block, entity);
- be_dep_on_frame(new_node);
return new_node;
}
ir_node *new_op2 = be_transform_node(op2);
ir_node *res = new_bd_amd64_Add(dbgi, block, new_op1, new_op2);
- be_dep_on_frame (res);
return res;
}
ir_node *new_op2 = be_transform_node(op2);
ir_node *res = new_bd_amd64_Sub(dbgi, block, new_op1, new_op2);
- be_dep_on_frame (res);
return res;
}
ir_node *new_op2 = be_transform_node(op2);
ir_node *res = new_bd_amd64_Mul(dbgi, block, new_op1, new_op2);
- be_dep_on_frame (res);
return res;
}
static ir_node *gen_be_Call(ir_node *node)
{
ir_node *res = be_duplicate_node(node);
- arch_irn_add_flags(res, arch_irn_flags_modify_flags);
+ arch_add_irn_flags(res, arch_irn_flags_modify_flags);
return res;
}
bool is_unsigned;
if (mode_is_float(cmp_mode)) {
- panic("Floating point not implemented yet (in gen_Cmp)!");
+ panic("Floating point not implemented yet!");
}
assert(get_irn_mode(op2) == cmp_mode);
}
#endif
-/**
- * Change some phi modes
- */
static ir_node *gen_Phi(ir_node *node)
{
+ ir_mode *mode = get_irn_mode(node);
const arch_register_req_t *req;
- ir_node *block = be_transform_node(get_nodes_block(node));
- ir_graph *irg = current_ir_graph;
- dbg_info *dbgi = get_irn_dbg_info(node);
- ir_mode *mode = get_irn_mode(node);
- ir_node *phi;
-
if (mode_needs_gp_reg(mode)) {
/* all integer operations are on 64bit registers now */
mode = mode_Lu;
req = arch_no_register_req;
}
- /* phi nodes allow loops, so we use the old arguments for now
- * and fix this later */
- phi = new_ir_node(dbgi, irg, block, op_Phi, mode, get_irn_arity(node),
- get_irn_in(node) + 1);
- copy_node_attr(irg, node, phi);
- be_duplicate_deps(node, phi);
-
- arch_set_out_register_req(phi, 0, req);
-
- be_enqueue_preds(node);
-
- return phi;
+ return be_transform_phi(node, req);
}
-
-
/**
* Transforms a Conv node.
*
} else { /* complete in gp registers */
int src_bits = get_mode_size_bits(src_mode);
int dst_bits = get_mode_size_bits(dst_mode);
- int min_bits;
ir_mode *min_mode;
if (src_bits == dst_bits) {
}
if (src_bits < dst_bits) {
- min_bits = src_bits;
min_mode = src_mode;
} else {
- min_bits = dst_bits;
min_mode = dst_mode;
}
*/
static ir_node *gen_Proj(ir_node *node)
{
- ir_graph *irg = current_ir_graph;
dbg_info *dbgi = get_irn_dbg_info(node);
ir_node *pred = get_Proj_pred(node);
long proj = get_Proj_proj(node);
- (void) irg;
(void) dbgi;
if (is_Store(pred)) {
} else if (be_is_AddSP(pred)) {
//panic("gen_Proj not implemented for AddSP");
return gen_Proj_be_AddSP(node);
- } else if (is_Cmp(pred)) {
- //panic("gen_Proj not implemented for Cmp");
- return gen_Proj_Cmp(node);
} else if (is_Div(pred)) {
return gen_Proj_Div(node);
#endif
} else if (is_Start(pred)) {
#if 0
+ ir_graph *const irg = get_irn_irg(node);
if (node == get_irg_anchor(irg, anchor_tls)) {
return gen_Proj_tls(node);
}