On Fri, Apr 27, 2012 at 7:53 AM, Sriraman Tallam <tmsri...@google.com> wrote: > On Fri, Apr 27, 2012 at 7:38 AM, H.J. Lu <hjl.to...@gmail.com> wrote: >> On Fri, Apr 27, 2012 at 7:35 AM, Sriraman Tallam <tmsri...@google.com> wrote: >>> On Fri, Apr 27, 2012 at 6:38 AM, H.J. Lu <hjl.to...@gmail.com> wrote: >>>> On Thu, Apr 26, 2012 at 10:08 PM, Sriraman Tallam <tmsri...@google.com> >>>> wrote: >>>>> Hi, >>>>> >>>>> I have made the following changes in this new patch which is attached: >>>>> >>>>> * Use target attribute itself to create function versions. >>>>> * Handle any number of ISA names and arch= args to target attribute, >>>>> generating the right dispatchers. >>>>> * Integrate with the CPU runtime detection checked in this week. >>>>> * Overload resolution: If the caller's target matches any of the >>>>> version function's target, then a direct call to the version is >>>>> generated, no need to go through the dispatching. >>>>> >>>>> Patch also available for review here: >>>>> http://codereview.appspot.com/5752064 >>>>> >>>> >>>> Does it work with >>>> >>>> int foo (); >>>> int foo () __attribute__ ((targetv("arch=corei7"))); >>>> >>>> int (*foo_p) () = foo? >>> >>> Yes, this will work. foo_p will be the address of the dispatcher >>> function and hence doing (*foo_p)() will call the right version. >> >> Even when foo_p is a global variable and compiled with -fPIC? > > I am not sure I understand what the complication is here, but FWIW, I > tried this example and it works > > int foo () > { > return 0; > } > > int __attribute__ ((target ("arch=corei7))) > foo () > { > return 1; > } > > int (*foo_p)() = foo; > int main () > { > return (*foo_p)(); > } > > g++ -fPIC -O2 example.cc > > > Did you have something else in mind? Could you please elaborate if you > a have a particular case in mind. >
That is what I meant. But I didn't see it in your testcase. Can you add it to your testcase? Also you should verify the correct function is called in your testcase at run-time. Thanks. -- H.J.