summaryrefslogtreecommitdiffhomepage
path: root/ir/be/benode.h
diff options
context:
space:
mode:
authorMatthias Braun <matze@braunis.de>2014-12-28 22:05:14 +0100
committerMatthias Braun <matze@braunis.de>2014-12-29 00:19:12 +0100
commit07a2398895cc546b4a1115721e95e032d7d786db (patch)
tree99fbc6d3ed042b004e60794ce78fc18af09f1122 /ir/be/benode.h
parent9bab46610a03c2af112b44be5518d91e3eda3096 (diff)
benode: introduce be_AnyVal.
This replaces ia32_ProduceVal/arm_EmptyReg. You should avoid using this node in general, but there are some cases where you need it to fixup nodes that are not register pressure faithful.
Diffstat (limited to 'ir/be/benode.h')
-rw-r--r--ir/be/benode.h13
1 files changed, 11 insertions, 2 deletions
diff --git a/ir/be/benode.h b/ir/be/benode.h
index e1fc933..283b5ff 100644
--- a/ir/be/benode.h
+++ b/ir/be/benode.h
@@ -22,8 +22,9 @@
#include "bearch.h"
typedef enum be_opcode {
+ beo_AnyVal,
+ beo_first = beo_AnyVal,
beo_Copy,
- beo_first = beo_Copy,
beo_CopyKeep,
beo_IncSP,
beo_Keep,
@@ -32,13 +33,13 @@ typedef enum be_opcode {
beo_last = beo_Perm
} be_opcode;
+extern ir_op *op_be_AnyVal;
extern ir_op *op_be_Copy;
extern ir_op *op_be_CopyKeep;
extern ir_op *op_be_IncSP;
extern ir_op *op_be_Keep;
extern ir_op *op_be_MemPerm;
extern ir_op *op_be_Perm;
-extern ir_op *op_be_ProduceVal;
/**
* Determines if irn is a be_node.
@@ -165,6 +166,14 @@ int be_get_MemPerm_offset(const ir_node *irn);
unsigned be_get_MemPerm_entity_arity(const ir_node *irn);
/**
+ * Create a AnyVal node. Use of this node should be avoided!
+ * The node is used as input at places where we need an input register assigned
+ * but don't care about its contents. This is for example necessary to fixup
+ * nodes which are not register pressure faithfull.
+ */
+ir_node *be_new_AnyVal(ir_node *block, const arch_register_class_t *cls);
+
+/**
* Impose a register constraint on a backend node.
* @param irn The node.
* @param pos The position of the argument.