+void set_Builtin_kind(ir_node *node, ir_builtin_kind kind)
+{
+ assert(is_Builtin(node));
+ node->attr.builtin.kind = kind;
+}
+
+ir_node **get_Builtin_param_arr(ir_node *node)
+{
+ assert(is_Builtin(node));
+ return &get_irn_in(node)[BUILDIN_PARAM_OFFSET + 1];
+}
+
+int get_Builtin_n_params(const ir_node *node)
+{
+ assert(is_Builtin(node));
+ return (get_irn_arity(node) - BUILDIN_PARAM_OFFSET);
+}
+
+ir_node *get_Builtin_param(const ir_node *node, int pos)
+{
+ assert(is_Builtin(node));
+ return get_irn_n(node, pos + BUILDIN_PARAM_OFFSET);
+}
+
+void set_Builtin_param(ir_node *node, int pos, ir_node *param)
+{
+ assert(is_Builtin(node));
+ set_irn_n(node, pos + BUILDIN_PARAM_OFFSET, param);
+}
+
+ir_type *get_Builtin_type(ir_node *node)
+{
+ assert(is_Builtin(node));
+ return node->attr.builtin.type;
+}
+
+void set_Builtin_type(ir_node *node, ir_type *tp)
+{
+ assert(is_Builtin(node));
+ assert((get_unknown_type() == tp) || is_Method_type(tp));
+ node->attr.builtin.type = tp;
+}
+
+/* Returns a human readable string for the ir_builtin_kind. */
+const char *get_builtin_kind_name(ir_builtin_kind kind)
+{
+#define X(a) case a: return #a;
+ switch (kind) {
+ X(ir_bk_trap);
+ X(ir_bk_debugbreak);
+ X(ir_bk_return_address);
+ X(ir_bk_frame_address);
+ X(ir_bk_prefetch);
+ X(ir_bk_ffs);
+ X(ir_bk_clz);
+ X(ir_bk_ctz);
+ X(ir_bk_popcount);
+ X(ir_bk_parity);
+ X(ir_bk_bswap);
+ X(ir_bk_inport);
+ X(ir_bk_outport);
+ X(ir_bk_inner_trampoline);
+ }
+ return "<unknown>";
+#undef X
+}
+
+
+int Call_has_callees(const ir_node *node)
+{
+ assert(is_Call(node));
+ return ((get_irg_callee_info_state(get_irn_irg(node)) != irg_callee_info_none) &&
+ (node->attr.call.callee_arr != NULL));
+}
+
+int get_Call_n_callees(const ir_node *node)
+{
+ assert(is_Call(node) && node->attr.call.callee_arr);
+ return ARR_LEN(node->attr.call.callee_arr);
+}
+
+ir_entity *get_Call_callee(const ir_node *node, int pos)
+{
+ assert(pos >= 0 && pos < get_Call_n_callees(node));
+ return node->attr.call.callee_arr[pos];
+}
+
+void set_Call_callee_arr(ir_node *node, const int n, ir_entity ** arr)
+{
+ assert(is_Call(node));
+ if (node->attr.call.callee_arr == NULL || get_Call_n_callees(node) != n) {
+ node->attr.call.callee_arr = NEW_ARR_D(ir_entity *, current_ir_graph->obst, n);
+ }
+ memcpy(node->attr.call.callee_arr, arr, n * sizeof(ir_entity *));
+}
+
+void remove_Call_callee_arr(ir_node *node)
+{
+ assert(is_Call(node));
+ node->attr.call.callee_arr = NULL;
+}
+
+ir_node *get_CallBegin_ptr(const ir_node *node)
+{