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: [patch] Fix PR40021: miscompile of BLAS (hence tonto and gamess)


On Wed, May 6, 2009 at 9:00 AM, Michael Matz <matz@suse.de> wrote:
> Hi,
>
> as detailed in the bugreport we can end up in a situation where a basic
> block with just one successor edge ends with multiple jump instructions to
> the same target (only during expansion itself). ?We are confused if we
> want to insert instructions on such edge and insert them before the last
> jump, but after the others, which later leads to miscompilations as the
> inserted instruction isn't ru then.
>
> This fixes the miscompile (with test input and of the testcase).
> Regstrapped on x86_64-linux. ?Okay?
>
>
> Ciao,
> Michael.
> --
> ? ? ? ?PR middle-end/40021
> ? ? ? ?* cfgexpand.c (maybe_cleanup_end_of_block): New static function.
> ? ? ? ?(expand_gimple_cond): Use it to cleanup CFG and superfluous jumps.
>

Would you include the small run-time testcase at

http://gcc.gnu.org/bugzilla/attachment.cgi?id=17800

replacing

          if (DX(I).ne.DY(I)) then
            print *, I, DX(I), '!=', DY(I)
          end if

with something like

         if (DX(I).ne.DY(I)) call abort

Thanks.

-- 
H.J.


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