Unruh, Erwin - RE: Is there a GIMPLE equivalent of UNSPEC? (original) (raw)

This is the mail archive of the gcc@gcc.gnu.orgmailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

OK, here are the details:

first, I have a PDImode pointer and do not want to have general arithmetic on that. So I invented a special RTL instruction to align a pointer. Within the va_arg sometimes I need to align the pointer. In 3.3.2 the code snippet in EXPAND_BUILTIN_VA_ARG looked like

tree t = ... // address of next parameter /* If the value is more aligned than a word, align the pointer. */ if (align > PARM_BOUNDARY) { rtx r; r = expand_expr (t, addr_rtx, Pmode, EXPAND_NORMAL); r = private_align_pmode (r, align / BITS_PER_UNIT); t = make_tree (TREE_TYPE (ovf), r); t = build (MODIFY_EXPR, TREE_TYPE (ovf), ovf, t); TREE_SIDE_EFFECTS (t) = 1; expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);

  t = save_expr (ovf);
}

Second, when passing a pointer (Pmode) via va_arg, I need a special instruction to retrieve its value. In 3.3.2 I used

rtx addr_rtx = ... // address of parameter rtx value_rtx = gen_reg_rtx (Pmode); rtx r = gen_rtx_MEM (Pmode, addr_rtx); set_mem_alias_set (r, get_varargs_alias_set ()); emit_insn (gen_private_va_arg_pdi (value_rtx, r)); addr_rtx = gen_reg_rtx (Pmode); r = gen_rtx_ADDRESSOF (Pmode, value_rtx, REGNO (value_rtx), 0); emit_move_insn (addr_rtx, r); // addr_rtx can now be used as a normal pointer to a Pmode entity

In both cases using an RTL unspec was a convenient way to go. All optimizing phases knew how to handle that.

If I do not find a simple way to represent those constructs in GIMPLE, I have to think about other ways to handle the underlying problem.

Erwin

Erwin Unruh, Fujitsu Siemens Computers, C/C++ compiler group

-----Original Message----- From: Steven Bosscher [mailto:stevenb@suse.de] Sent: Thursday, November 17, 2005 1:22 PM To: Unruh, Erwin Cc: GCC mailing list Subject: Re: Is there a GIMPLE equivalent of UNSPEC?

On Nov 17, 2005 01:11 PM, "Unruh, Erwin" Erwin.Unruh@fujitsu-siemens.com wrote:

is there some equivalent.

No, there isn't.? You are not being very specific about the problem you are trying to solve.? You'll have to tell more before anyone can give you a more helpful answer. ? Gr. Steven ? ?


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]