/* set the link to NULL for all non-const/pure calls */
set_irn_link(call, NULL);
ptr = get_Call_ptr(call);
- if (is_SymConst_addr_ent(ptr)) {
- ent = get_SymConst_entity(ptr);
+ if (is_Global(ptr)) {
+ ent = get_Global_entity(ptr);
prop = get_entity_additional_properties(ent);
if ((prop & (mtp_property_const|mtp_property_pure)) == 0)
current_ir_graph = irg;
- /* First step: fix all calls by removing it's memory input.
- It's original memory input is preserved in their link fields. */
+ /* First step: fix all calls by removing their memory input.
+ * The original memory input is preserved in their link fields. */
for (call = call_list; call; call = next) {
next = get_irn_link(call);
mem = get_Call_mem(call);
set_Call_mem(call, get_irg_no_mem(irg));
/*
- * Sorrily we cannot simply set the node to 'float'.
+ * Unfortunately we cannot simply set the node to 'float'.
* There is a reason for that:
*
* - The call might be inside a loop/if that is NOT entered
mem = get_irn_link(call);
/* beware of calls in the pure call list */
- if (! mem || get_irn_op(mem) == op_Call)
+ if (!mem || is_Call(mem))
continue;
assert(get_irn_mode(mem) == mode_M);
/* set the link to NULL for all non-const/pure calls */
set_irn_link(call, NULL);
ptr = get_Call_ptr(call);
- if (is_SymConst_addr_ent(ptr)) {
- ent = get_SymConst_entity(ptr);
+ if (is_Global(ptr)) {
+ ent = get_Global_entity(ptr);
prop = get_entity_additional_properties(ent);
if ((prop & mtp_property_nothrow) == 0)
case iro_Call:
/* A call is only tolerable if its either constant or pure. */
ptr = get_Call_ptr(node);
- if (get_irn_op(ptr) == op_SymConst &&
- get_SymConst_kind(ptr) == symconst_addr_ent) {
+ if (is_SymConst(ptr) && get_SymConst_kind(ptr) == symconst_addr_ent) {
ir_entity *ent = get_SymConst_entity(ptr);
ir_graph *irg = get_entity_irg(ent);
if (prop != mtp_no_property) {
/* check, if a keep-alive exists */
for (j = get_End_n_keepalives(end) - 1; j >= 0; --j) {
- ir_node *mem = get_End_keepalive(end, j);
+ ir_node *kept = get_End_keepalive(end, j);
- if (mode_M != get_irn_mode(mem))
+ if (is_Block(kept)) {
+ prop = mtp_no_property;
+ break;
+ }
+
+ if (mode_M != get_irn_mode(kept))
continue;
- prop = max_property(prop, follow_mem(mem, prop));
+ prop = max_property(prop, follow_mem(kept, prop));
if (prop == mtp_no_property)
break;
}
if (is_alloc_entity != NULL && is_Call(node)) {
ir_node *ptr = get_Call_ptr(node);
- if (is_SymConst_addr_ent(ptr)) {
- ir_entity *ent = get_SymConst_entity(ptr);
+ if (is_Global(ptr)) {
+ ir_entity *ent = get_Global_entity(ptr);
return is_alloc_entity(ent);
}
}
break;
case iro_Call:
ptr = get_Call_ptr(succ);
- if (is_SymConst_addr_ent(ptr)) {
- ir_entity *ent = get_SymConst_entity(ptr);
+ if (is_Global(ptr)) {
+ ir_entity *ent = get_Global_entity(ptr);
int i;
/* we know the called entity */
} else if (is_Call(res)) {
ir_node *ptr = get_Call_ptr(res);
- if (is_SymConst_addr_ent(ptr)) {
+ if (is_Global(ptr)) {
/* a direct call */
- ir_entity *ent = get_SymConst_entity(ptr);
+ ir_entity *ent = get_Global_entity(ptr);
ir_graph *callee = get_entity_irg(ent);
if (callee == irg) {
if (is_Call(pred)) {
ir_node *ptr = get_Call_ptr(pred);
- if (is_SymConst_addr_ent(ptr)) {
+ if (is_Global(ptr)) {
/* a direct call */
- ir_entity *ent = get_SymConst_entity(ptr);
+ ir_entity *ent = get_Global_entity(ptr);
ir_graph *callee = get_entity_irg(ent);
if (callee == irg) {