/*
* Calculates the negated (Complement(R)) pnc condition.
*/
-int
-get_negated_pnc(int pnc) {
- switch (pnc) {
- case pn_Cmp_False: return pn_Cmp_True;
- case pn_Cmp_Eq: return pn_Cmp_Ne;
- case pn_Cmp_Lt: return pn_Cmp_Uge;
- case pn_Cmp_Le: return pn_Cmp_Ug;
- case pn_Cmp_Gt: return pn_Cmp_Ule;
- case pn_Cmp_Ge: return pn_Cmp_Ul;
- case pn_Cmp_Lg: return pn_Cmp_Ue;
- case pn_Cmp_Leg: return pn_Cmp_Uo;
- case pn_Cmp_Uo: return pn_Cmp_Leg;
- case pn_Cmp_Ue: return pn_Cmp_Lg;
- case pn_Cmp_Ul: return pn_Cmp_Ge;
- case pn_Cmp_Ule: return pn_Cmp_Gt;
- case pn_Cmp_Ug: return pn_Cmp_Le;
- case pn_Cmp_Uge: return pn_Cmp_Lt;
- case pn_Cmp_Ne: return pn_Cmp_Eq;
- case pn_Cmp_True: return pn_Cmp_False;
- }
- return 99; /* to shut up gcc */
+int get_negated_pnc(int pnc, ir_mode *mode) {
+ pnc ^= pn_Cmp_True;
+
+ /* do NOT add the Uo bit for non-floating point values */
+ if (! mode_is_float(mode))
+ pnc &= ~pn_Cmp_Uo;
+
+ return pnc;
}
/* Calculates the inversed (R^-1) pnc condition, i.e., "<" --> ">" */
}
int
-get_Block_n_cfgpreds (ir_node *node) {
- assert ((node->op == op_Block));
- return get_irn_arity(node);
+(get_Block_n_cfgpreds)(ir_node *node) {
+ return get_Block_n_cfgpreds(node);
}
ir_node *
-get_Block_cfgpred (ir_node *node, int pos) {
- assert(-1 <= pos && pos < get_irn_arity(node));
- assert(node->op == op_Block);
- return get_irn_n(node, pos);
+(get_Block_cfgpred)(ir_node *node, int pos) {
+ return get_Block_cfgpred(node, pos);
}
void
* @see also: get_irn_visited() inc_irg_visited() inc_irg_block_visited()*/
unsigned long get_Block_block_visited (ir_node *node);
void set_Block_block_visited (ir_node *node, unsigned long visit);
+
+/**
+ * Marks a block as dead but do not replace it with a Bad node.
+ * Dead blocks are removed in the con
+ */
ir_node *set_Block_dead(ir_node *block);
int is_Block_dead(const ir_node *block);
const char *get_pnc_string(int pnc);
/** Calculates the negated (Complement(R)) pnc condition. */
-int get_negated_pnc(int pnc);
+int get_negated_pnc(int pnc, ir_mode *mode);
/** Calculates the inversed (R^-1) pnc condition, i.e., "<" --> ">" */
int get_inversed_pnc(int pnc);
return (_get_irn_op(node) == op_Block);
}
+static INLINE int
+_get_Block_n_cfgpreds (ir_node *node) {
+ assert(_is_Block(node));
+ return _get_irn_arity(node);
+}
+
+static INLINE ir_node *
+_get_Block_cfgpred (ir_node *node, int pos) {
+ assert(0 <= pos && pos < get_irn_arity(node));
+ assert(_is_Block(node));
+ return _get_irn_n(node, pos);
+}
+
static INLINE unsigned long
_get_Block_block_visited (ir_node *node) {
assert (node->op == op_Block);
#define is_Bad(node) _is_Bad(node)
#define is_no_Block(node) _is_no_Block(node)
#define is_Block(node) _is_Block(node)
+#define get_Block_n_cfgpreds(node) _get_Block_n_cfgpreds(node)
+#define get_Block_cfgpred(node, pos) _get_Block_cfgpred(node, pos)
#define get_Block_block_visited(node) _get_Block_block_visited(node)
#define set_Block_block_visited(node, visit) _set_Block_block_visited(node, visit)
#define mark_Block_block_visited(node) _mark_Block_block_visited(node)