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:[EMAIL PROTECTED] 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" <[EMAIL PROTECTED]> 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