From 3d72e71ff45d03a0fed2a2a1319e96a85b5cb3bc Mon Sep 17 00:00:00 2001 From: Michael Beck Date: Tue, 15 Mar 2005 18:04:47 +0000 Subject: [PATCH] get_swapped_pnc() added [r5413] --- ir/ir/irnode.c | 46 +++++++++++++++++++++++++++++----------------- ir/ir/irnode.h | 7 +++++++ 2 files changed, 36 insertions(+), 17 deletions(-) diff --git a/ir/ir/irnode.c b/ir/ir/irnode.c index 876c94868..3d89e6556 100644 --- a/ir/ir/irnode.c +++ b/ir/ir/irnode.c @@ -53,32 +53,44 @@ const char *get_pnc_string(int pnc) { return pnc_name_arr[pnc]; } -/** +/* * Calculates the negated pnc condition. */ int get_negated_pnc(int pnc) { switch (pnc) { - case pn_Cmp_False: return pn_Cmp_True; break; - case pn_Cmp_Eq: return pn_Cmp_Ne; break; - case pn_Cmp_Lt: return pn_Cmp_Uge; break; - case pn_Cmp_Le: return pn_Cmp_Ug; break; - case pn_Cmp_Gt: return pn_Cmp_Ule; break; - case pn_Cmp_Ge: return pn_Cmp_Ul; break; - case pn_Cmp_Lg: return pn_Cmp_Ue; break; - case pn_Cmp_Leg: return pn_Cmp_Uo; break; - case pn_Cmp_Uo: return pn_Cmp_Leg; break; - case pn_Cmp_Ue: return pn_Cmp_Lg; break; - case pn_Cmp_Ul: return pn_Cmp_Ge; break; - case pn_Cmp_Ule: return pn_Cmp_Gt; break; - case pn_Cmp_Ug: return pn_Cmp_Le; break; - case pn_Cmp_Uge: return pn_Cmp_Lt; break; - case pn_Cmp_Ne: return pn_Cmp_Eq; break; - case pn_Cmp_True: return pn_Cmp_False; break; + 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 */ } +/* Calculates the swapped pnc condition, i.e., "<" --> ">" */ +int +get_swapped_pnc(int pnc) { + int code = pnc & ~(pn_Cmp_Lt|pn_Cmp_Gt); + int lesser = pnc & pn_Cmp_Lt; + int greater = pnc & pn_Cmp_Gt; + + code |= (lesser ? pn_Cmp_Gt : 0) | (greater ? pn_Cmp_Lt : 0); + + return code; +} + const char *pns_name_arr [] = { "initial_exec", "global_store", "frame_base", "globals", "args" diff --git a/ir/ir/irnode.h b/ir/ir/irnode.h index e7fcdf6aa..5b66b75f7 100644 --- a/ir/ir/irnode.h +++ b/ir/ir/irnode.h @@ -663,8 +663,15 @@ typedef enum { } pn_Cmp; /* Projection numbers for Cmp */ /* #define not_mask pn_Cmp_Leg */ +/** returns the pnc name from an pnc constant */ const char *get_pnc_string(int pnc); + +/** Calculates the negated pnc condition. */ int get_negated_pnc(int pnc); + +/** Calculates the swapped pnc condition, i.e., "<" --> ">" */ +int get_swapped_pnc(int pnc); + ir_node *get_Cmp_left (ir_node *node); void set_Cmp_left (ir_node *node, ir_node *left); ir_node *get_Cmp_right (ir_node *node); -- 2.20.1