On Wed, Apr 13, 2011 at 5:45 PM, Feng LI <nemoking...@gmail.com> wrote: > On Wed, Apr 13, 2011 at 5:32 PM, Ian Lance Taylor <i...@google.com> wrote: >> Feng LI <nemoking...@gmail.com> writes: >> >>> I use unspec_volatile for a function with void arguments and >>> void return value for some initialization work. But it didn't generate >>> code in this case. I think probably I need to add more restrictions >>> some where but I don't know why and how. The code looks like: >>> >>> extern __inline void __attribute__((__gnu_inline__, __always_inline__, >>> __artificial__)) >>> __TEnd (void) >>> { >>> __builtin_ia32_tend (); >>> } >>> >>> (define_expand "dta_tend" >>> [(unspec_volatile [(const_int 0)] UNSPEC_TEND)] >>> "" >>> "") >>> >>> (define_insn "*dta_tend" >>> [(unspec_volatile [(const_int 0)] UNSPEC_TEND)] >>> "" >>> "tend" >>> [(set_attr "length" "3") >>> (set_attr "mode" "none")]) >> >> In the RTL dumps generated by -da, where does the insn appear and where >> does it disappear? > > It seems that it disappear at the ffork.c.143r.expand at the very beginning. > I suppose there should be some thing like > (call_insn ....) generated for __builtin_ia32_tend (); But there isn't. > instead, it generated: > > ;; Generating RTL for gimple basic block 2 > ;; __builtin_ia32_tend (); > (nil)
You need to expand builtins yourself, a "named" expander doesn't do that for you. Richard. > Feng >> >> Ian >> >