On Mon, Apr 23, 2012 at 8:03 PM, Ian Lance Taylor <i...@google.com> wrote: > Feng LI <nemoking...@gmail.com> writes: > >>>>>> Yes, you are right. But how could I reference to a backend defined >>>>>> builtin >>>>>> function in the middle end (I need to generate the builtin function in >>>>>> the >>>>>> middle end and expand it in x86 backend)? >>>>> >>>>> If the function doesn't have a machine-independent definition, then use >>>>> a target hook. >>>> >>>> Then I remove the duplicate builtin definition in x86 backend. >>>> I define the builtin function with built_in_class as BUILT_IN_MD in >>>> builtins.def. >>> >>> Sorry, I meant use a target hook to actually generate the call >>> expression. The target hook can refer to the target-specific builtin >>> function. >> Just for confirmation, do you mean by calling this hook: >> targetm.builtin_decl (unsigned code, bool initialized_p) >> in the middle end for getting the builtin definition in the backend? >> >> Probably I'm asking a silly question, when is the time of the initialization >> of the backend builtin functions. I'm refering it in gcc middle end, near >> OPENMP expansion (omp-low.c) pass. > > No, I mean adding a new target hook build_my_magic_call and calling > that. That target hook would be build a call to the function. > > You haven't really described the background, so I suppose I don't know > if this is appropriate. It's not the right approach if you want to > contribute this back to GCC mainline, but then of course GCC mainline > also doesn't want a target-specific function in builtins.def.
Just to add some 2 cents - target specific builtins are either covering a generic concept (and thus can be created by the middle-end by involving a target hook), or they can be completely target specific, in which case they are _not_created by the middle-end at all. Richard. > Ian