* @file
* @brief Backend ABI implementation.
* @author Sebastian Hack, Michael Beck
- * @version $Id$
*/
#include "config.h"
#include "irgwalk.h"
#include "irprintf_t.h"
#include "irgopt.h"
-#include "irbitset.h"
#include "iropt_t.h"
+#include "irtools.h"
#include "heights.h"
#include "pdeq.h"
-#include "irtools.h"
+#include "util.h"
#include "raw_bitset.h"
#include "error.h"
#include "pset_new.h"
const ir_edge_t *edge;
int *reg_param_idxs;
int *stack_param_idx;
- int i, n, destroy_all_regs;
+ int i, n;
int throws_exception;
size_t s;
size_t p;
}
}
- /* check for the return_twice property */
- destroy_all_regs = 0;
- if (is_SymConst_addr_ent(call_ptr)) {
- ir_entity *ent = get_SymConst_entity(call_ptr);
-
- if (get_entity_additional_properties(ent) & mtp_property_returns_twice)
- destroy_all_regs = 1;
- } else {
- ir_type *call_tp = get_Call_type(irn);
-
- if (get_method_additional_properties(call_tp) & mtp_property_returns_twice)
- destroy_all_regs = 1;
- }
-
/* Put caller save into the destroyed set and state registers in the states
* set */
for (i = 0, n = arch_env->n_register_classes; i < n; ++i) {
* checking */
continue;
}
- if (destroy_all_regs || arch_register_is_caller_save(arch_env, reg)) {
+ if (arch_register_is_caller_save(arch_env, reg)) {
if (!(reg->type & arch_register_type_ignore)) {
ARR_APP1(const arch_register_t*, destroyed_regs, reg);
}
count = get_Alloc_count(alloc);
/* we might need to multiply the count with the element size */
- if (type != firm_unknown_type && get_type_size_bytes(type) != 1) {
+ if (!is_unknown_type(type) && get_type_size_bytes(type) != 1) {
ir_mode *mode = get_irn_mode(count);
ir_tarval *tv = new_tarval_from_long(get_type_size_bytes(type),
mode);
assert(get_Free_where(free) == stack_alloc);
/* we might need to multiply the size with the element size */
- if (type != firm_unknown_type && get_type_size_bytes(type) != 1) {
+ if (!is_unknown_type(type) && get_type_size_bytes(type) != 1) {
ir_tarval *tv = new_tarval_from_long(get_type_size_bytes(type), mode_Iu);
ir_node *cnst = new_rd_Const(dbg, irg, tv);
ir_node *mul = new_rd_Mul(dbg, block, get_Free_count(free),