This is the mail archive of the gcc-patches@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: Fix constant libcalls


> On Sun, Nov 11, 2001 at 01:12:51AM +0100, Jan Hubicka wrote:
> > *************** initialize_argument_information (num_act
> > *** 1240,1246 ****
> >   		copy = assign_temp (type, 0, 1, 0);
> >   
> >   	      store_expr (args[i].tree_value, copy, 0);
> > - 	      *ecf_flags &= ~(ECF_CONST | ECF_PURE);
> > + 	      if (*ecf_flags & ECF_CONST)
> > + 		*ecf_flags |= ECF_PURE;
> > + 	      *ecf_flags &= ~(ECF_CONST | ECF_LIBCALL_BLOCK);
> 
> The callee is allowed to clobber its arguments.  This change
> is ok iff we add a clobber of that memory to the function
> usage, which I don't recall that we do.

I guess we don't as we are just stripping the flags.  Given that
we are after freeze, I guess it is better to just change it to
> > + 	      *ecf_flags &= ~(ECF_CONST | ECF_PURE | ECF_LIBCALL_BLOCK);
OK?
> 
> > !     if ((flags & (ECF_LIBCALL_BLOCK))
> 
> Extra parens.
> 
> >       {
> >         flags |= ECF_SP_DEPRESSED;
> > -       flags &= ~(ECF_PURE | ECF_CONST);
> > +       flags &= ~ECF_LIBCALL_BLOCK;
> 
> This doesn't look safe to me.  I'd turn off all three here.
OK...
> 
> > +       if (valreg == 0 || GET_CODE (valreg) == PARALLEL)
> > +         flags &= ~ECF_LIBCALL_BLOCK;
> > + 
> [...]
> >         if (pass
> > - 	  && (flags & (ECF_CONST | ECF_PURE))
> > + 	  && (flags & ECF_LIBCALL_BLOCK)
> >   	  && valreg != 0 && GET_CODE (valreg) != PARALLEL)
> 
> Looks to be some redundancy here?
Hmm, pardon?

Honza
> 
> 
> 
> r~


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