Commit 0ed5a4df authored by Michael Beck's avatar Michael Beck
Browse files

- can now handle const-like Confirms

[r19752]
parent 80ddf88e
...@@ -359,17 +359,39 @@ static int eval_cmp(pn_Cmp pnc, tarval *tv1, tarval *tv2) { ...@@ -359,17 +359,39 @@ static int eval_cmp(pn_Cmp pnc, tarval *tv1, tarval *tv2) {
return 1; return 1;
} }
/**
* Check for Const or constlike Confirm.
*/
static int is_Const_or_Confirm(const ir_node *node) {
if (is_Confirm(node)) {
if (get_Confirm_cmp(node) == pn_Cmp_Eq)
node = get_Confirm_bound(node);
}
return is_Const(node);
}
/**
* get the tarval of a COnst or constlike Confirm
*/
static tarval *get_Const_or_Confirm_tarval(const ir_node *node) {
if (is_Confirm(node)) {
if (get_Confirm_cmp(node) == pn_Cmp_Eq)
node = get_Confirm_bound(node);
}
return get_Const_tarval(node);
}
static ir_node *find_const(condeval_env_t *env, ir_node *jump, ir_node *value) static ir_node *find_const(condeval_env_t *env, ir_node *jump, ir_node *value)
{ {
ir_node *block = get_nodes_block(jump); ir_node *block = get_nodes_block(jump);
if(irn_visited(value)) if (irn_visited(value))
return NULL; return NULL;
mark_irn_visited(value); mark_irn_visited(value);
if(is_Const(value)) { if(is_Const_or_Confirm(value)) {
tarval *tv_const = get_Const_tarval(env->cnst); tarval *tv_const = get_Const_tarval(env->cnst);
tarval *tv = get_Const_tarval(value); tarval *tv = get_Const_or_Confirm_tarval(value);
if(eval_cmp(env->pnc, tv, tv_const) <= 0) { if(eval_cmp(env->pnc, tv, tv_const) <= 0) {
return NULL; return NULL;
...@@ -436,8 +458,8 @@ static ir_node *find_candidate(condeval_env_t *env, ir_node *jump, ...@@ -436,8 +458,8 @@ static ir_node *find_candidate(condeval_env_t *env, ir_node *jump,
} }
mark_irn_visited(value); mark_irn_visited(value);
if(is_Const(value)) { if(is_Const_or_Confirm(value)) {
tarval *tv = get_Const_tarval(value); tarval *tv = get_Const_or_Confirm_tarval(value);
if(tv != env->tv) if(tv != env->tv)
return NULL; return NULL;
...@@ -591,8 +613,8 @@ static void cond_eval(ir_node* block, void* data) ...@@ -591,8 +613,8 @@ static void cond_eval(ir_node* block, void* data)
return; return;
} }
} }
} else if(is_Const(selector)) { } else if(is_Const_or_Confirm(selector)) {
tarval *tv = get_Const_tarval(selector); tarval *tv = get_Const_or_Confirm_tarval(selector);
if(tv == get_tarval_b_true()) { if(tv == get_tarval_b_true()) {
selector_evaluated = 1; selector_evaluated = 1;
} else { } else {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment