This is the mail archive of the gcc@gcc.gnu.org mailing 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]

Re: adding -fnoalias ... would a patch be accepted ?


On Tue, Jan 5, 2010 at 5:39 PM, torbenh <torbenh@gmx.de> wrote:
> On Tue, Jan 05, 2010 at 04:27:33PM +0100, Richard Guenther wrote:
>> On Tue, Jan 5, 2010 at 4:03 PM, torbenh <torbenh@gmx.de> wrote:
>> > On Tue, Jan 05, 2010 at 02:46:30PM +0100, Richard Guenther wrote:
>> >> On Tue, Jan 5, 2010 at 2:40 PM, torbenh <torbenh@gmx.de> wrote:
>> >>
>> >> The -fno-alias-X things do not make much sense for user code (they
>> >> have been historically used from Frontends). ?If restrict doesn't work
>> >> for you (do you have a testcase that can reproduce your issue?)
>> >> then you probably need to wait for IPA pointer analysis to be
>> >> fixed in GCC 4.6.
>> >
>> > sorry... forget the attachment :S
>>
>> Yes, in this case you can fix it by making ramp static. ?Otherwise its
>> address may be takein in another translation unit. ?For Fortran we
>> have the DECL_RESTRICTED_P which we could expose to other
>> languages via an attribute. ?It tells that a decl is not aliased by
>> restrict qualified pointers, so
>>
>> struct Ramp {
>> ? ? float phase;
>> ? ? inline float process() { return phase++; }
>> } ramp __attribute__((restrict));
>>
>> void fill_buffer( float * __restrict buf, size_t nframes )
>> {
>> ? ? for( size_t i=0; i<nframes; i++ )
>> ? ? ? ? buf[i] = ramp.process();
>> }
>
> would that also work with this stuff:
>
>
> template<typename ... Args>
> class Mixer;
>
> template<typename T1, typename ... Args>
> class Mixer<T1, Args...> : public Block
> {
> ? ?private:
> ? ? ? ?T1 t1 __attribute__((restrict));
> ? ? ? ?Mixer<Args...> t2;
> ? ?public:
> ? ? ? ?inline float process() {
> ? ? ? ? ? ?return t1.process() + t2.process();
> ? ? ? ?}
> };
>
> template<typename T1, typename T2>
> class Mixer<T1,T2> : public Block
> {
> ? ?private:
> ? ? ? ?T1 t1 __attribute__((restrict));
> ? ? ? ?T2 t2 __attribute__((restrict));
> ? ?public:
> ? ? ? ?inline float process() {
> ? ? ? ? ? ?return t1.process() + t2.process();
> ? ? ? ?}
> };
>
> Mixer<Ramp,Ramp,Ramp,Ramp> mix __attribute__((restrict))
>
> ?

I don't see a restrict qualified pointer here.  Note that the
restrict attribute would only disambiguate against those.
Also I think you need the restrict attribute on the Mixer
objects, not its members.

> i still dont understand whats the problem with -fnolias,
> as in attached patch.

The patch will miscompile everything.

Richard.

>>
>> would then be optimized as well. ?Can you file an enhancement
>> bugreport according to this?
>>
>> Thanks,
>> Richard.
>
> --
> torben Hohn
>


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