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] Changes in mode switching


Vladimir Yakovlev <vbyakovl23@gmail.com> wrote:
> I discoverd some inaccuracies when tried to implement vzeroupper
> insertion (pr#47440).
> 
> First, I made 'transp' as an array of bit vectors rather bitvector
> because it should be own for each mode, otherwise its resetting on
> mode changing kills all modes (and new mode also).
> 
> Another changes  concern processing of  mode switching inside a basic block.
> 
> I also added addition argument to EMIT_MODE_SET because it is needed
> me in target dependent changes.
> Make check and bootstrap passed, no fails.
> 
> I used compiler
>     Target: x86_64-unknown-linux-gnu
>     Configured with: ../gcc/configure
> --prefix=/export/users/vbyakovl/workspaces/vzu/install-ref
> --enable-languages=c,c++,fortran --with-arch=corei7 --with-cpu=corei7
> --with-fpmath=sse
> 
> Ok for trank.
> 
> 
> 2012-08-25  Vladimir Yakovlev  <vladimir.b.yakovlev@intel.com>
> 
>         * mode-switching.c (transp): Changed type
>         (make_preds_opaque): Added an argument
>         (optimize_mode_switching): Some fixes which was done for vzeroupper
>         insertion needs.
> 
>         * config/epiphany/epiphany.h (EMIT_MODE_SET): Added an argument.
> 
>         * config/i386/i386.h (EMIT_MODE_SET): Added an argument.
> 
>         * config/sh/sh.h (EMIT_MODE_SET): Added an argument.

I've tried the patch on sh4-unknown-linux-gnu.  I see new failures
with it:

Running /exp/ldroot/dodes/LOCAL/trunk/gcc/testsuite/gcc.c-torture/execute/execute.exp ...
FAIL: gcc.c-torture/execute/20021120-1.c execution,  -O0 
FAIL: gcc.c-torture/execute/20021120-1.c execution,  -O1 
FAIL: gcc.c-torture/execute/20021120-1.c execution,  -O2 
FAIL: gcc.c-torture/execute/20021120-1.c execution,  -O3 -fomit-frame-pointer 
FAIL: gcc.c-torture/execute/20021120-1.c execution,  -O3 -fomit-frame-pointer -funroll-loops 
FAIL: gcc.c-torture/execute/20021120-1.c execution,  -O3 -fomit-frame-pointer -funroll-all-loops -finline-functions 
FAIL: gcc.c-torture/execute/20021120-1.c execution,  -O3 -g 
FAIL: gcc.c-torture/execute/20021120-1.c execution,  -Os 
FAIL: gcc.c-torture/execute/20021120-1.c execution,  -O2 -flto -fno-use-linker-plugin -flto-partition=none 
FAIL: gcc.c-torture/execute/20021120-1.c execution,  -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects 
FAIL: gcc.c-torture/execute/conversion.c execution,  -O0 
FAIL: gcc.c-torture/execute/conversion.c execution,  -O1 
FAIL: gcc.c-torture/execute/pr28982b.c execution,  -O2 
FAIL: gcc.c-torture/execute/pr28982b.c execution,  -O3 -fomit-frame-pointer 
FAIL: gcc.c-torture/execute/pr28982b.c execution,  -O3 -fomit-frame-pointer -funroll-loops 
FAIL: gcc.c-torture/execute/pr28982b.c execution,  -O3 -fomit-frame-pointer -funroll-all-loops -finline-functions 
FAIL: gcc.c-torture/execute/pr28982b.c execution,  -O3 -g 
FAIL: gcc.c-torture/execute/pr28982b.c execution,  -Os 
FAIL: gcc.c-torture/execute/pr28982b.c execution,  -O2 -flto -fno-use-linker-plugin -flto-partition=none 
FAIL: gcc.c-torture/execute/pr28982b.c execution,  -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects 
Running /exp/ldroot/dodes/LOCAL/trunk/gcc/testsuite/gcc.c-torture/execute/ieee/ieee.exp ...
FAIL: gcc.c-torture/execute/ieee/inf-1.c execution,  -O0 
FAIL: gcc.c-torture/execute/ieee/inf-2.c execution,  -O0 
FAIL: gcc.c-torture/execute/ieee/inf-2.c execution,  -O1 
FAIL: gcc.c-torture/execute/ieee/inf-2.c execution,  -O2 
FAIL: gcc.c-torture/execute/ieee/inf-2.c execution,  -O3 -fomit-frame-pointer 
FAIL: gcc.c-torture/execute/ieee/inf-2.c execution,  -O3 -g 
FAIL: gcc.c-torture/execute/ieee/inf-2.c execution,  -Os 
FAIL: gcc.c-torture/execute/ieee/inf-2.c execution,  -O2 -flto -fno-use-linker-plugin -flto-partition=none 
FAIL: gcc.c-torture/execute/ieee/inf-3.c execution,  -O0 
FAIL: gcc.c-torture/execute/ieee/inf-3.c execution,  -O1 
FAIL: gcc.c-torture/execute/ieee/inf-3.c execution,  -O2 
FAIL: gcc.c-torture/execute/ieee/inf-3.c execution,  -O3 -fomit-frame-pointer 
FAIL: gcc.c-torture/execute/ieee/inf-3.c execution,  -O3 -g 
FAIL: gcc.c-torture/execute/ieee/inf-3.c execution,  -Os 
FAIL: gcc.c-torture/execute/ieee/inf-3.c execution,  -O2 -flto -fno-use-linker-plugin -flto-partition=none 
...

With a quick look at gcc.c-torture/execute/20021120-1.c case,
the required mode switching has missed between two comparisons at

    if (gd[i] != i * 4 || gf[i] != i)

in main() of 20021120-1.c.  I'll look into what is going on.

Regards,
	kaz


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