Re: [PATCH i386 2/8] [AVX512] Add mask registers.

2013-09-11 Thread Kirill Yukhin
Hello, On 10 Sep 11:51, Richard Henderson wrote: > On 09/10/2013 11:25 AM, Kirill Yukhin wrote: > > Is it ok now? > > > Yes. Thanks a lot! Checked into main trunk: http://gcc.gnu.org/ml/gcc-cvs/2013-09/msg00354.html -- Thanks, K

Re: [PATCH i386 2/8] [AVX512] Add mask registers.

2013-09-10 Thread Richard Henderson
On 09/10/2013 05:57 AM, Kirill Yukhin wrote: > + { OPTION_MASK_ISA_AVX512F, CODE_FOR_andhi_1, "__builtin_ia32_kandhi", > IX86_BUILTIN_KAND16, UNKNOWN, (int) HI_FTYPE_HI_HI }, Alternately, why not use the standard CODE_FOR_andhi3 expander? r~

Re: [PATCH i386 2/8] [AVX512] Add mask registers.

2013-09-10 Thread Richard Henderson
On 09/10/2013 11:25 AM, Kirill Yukhin wrote: > Hello, > On 10 Sep 09:17, Richard Henderson wrote: >> On 09/10/2013 05:57 AM, Kirill Yukhin wrote: >>> + { OPTION_MASK_ISA_AVX512F, CODE_FOR_andhi_1, "__builtin_ia32_kandhi", >>> IX86_BUILTIN_KAND16, UNKNOWN, (int) HI_FTYPE_HI_HI }, >> >> Alternately

Re: [PATCH i386 2/8] [AVX512] Add mask registers.

2013-09-10 Thread Kirill Yukhin
Hello, On 10 Sep 09:17, Richard Henderson wrote: > On 09/10/2013 05:57 AM, Kirill Yukhin wrote: > > + { OPTION_MASK_ISA_AVX512F, CODE_FOR_andhi_1, "__builtin_ia32_kandhi", > > IX86_BUILTIN_KAND16, UNKNOWN, (int) HI_FTYPE_HI_HI }, > > Alternately, why not use the standard CODE_FOR_andhi3 expander

Re: [PATCH i386 2/8] [AVX512] Add mask registers.

2013-09-10 Thread Richard Henderson
On 09/10/2013 05:57 AM, Kirill Yukhin wrote: > Do you still think we need "*"? No, I suppose that's fine. r~

Re: [PATCH i386 2/8] [AVX512] Add mask registers.

2013-09-10 Thread Kirill Yukhin
Hello Richard, Thanks for inputs. On 09 Sep 10:39, Richard Henderson wrote: > gen_andhi_1 is not used, nor is it likely to be in the future, therefore this > should still have "*". We're using it in patch 6/8 when introducing plugins: + { OPTION_MASK_ISA_AVX512F, CODE_FOR_andhi_1, "__builtin_ia3

Re: [PATCH i386 2/8] [AVX512] Add mask registers.

2013-09-09 Thread Richard Henderson
On 08/29/2013 04:59 AM, Kirill Yukhin wrote: > @@ -7616,10 +7677,10 @@ >[(set_attr "type" "alu") > (set_attr "mode" "SI")]) > > -(define_insn "*andhi_1" > - [(set (match_operand:HI 0 "nonimmediate_operand" "=rm,r,Ya") > - (and:HI (match_operand:HI 1 "nonimmediate_operand" "%0,0,qm")

Re: [PATCH i386 2/8] [AVX512] Add mask registers.

2013-09-09 Thread Kirill Yukhin
Hello, On 04 Sep 22:45, Kirill Yukhin wrote: > Hello, > > PING. PING. -- Thanks, K

Re: [PATCH i386 2/8] [AVX512] Add mask registers.

2013-09-06 Thread Kirill Yukhin
Hello, On 29 Aug 15:59, Kirill Yukhin wrote: > /* Define parameter passing and return registers. */ > @@ -4219,8 +4225,13 @@ ix86_conditional_register_usage (void) > >/* If AVX512F is disabled, squash the registers. */ >if (! TARGET_AVX512F) > -for (i = FIRST_EXT_REX_SSE_REG; i < L

Re: [PATCH i386 2/8] [AVX512] Add mask registers.

2013-09-04 Thread Kirill Yukhin
Hello, PING. -- Thanks, K

Re: [PATCH i386 2/8] [AVX512] Add mask registers.

2013-08-29 Thread Kirill Yukhin
Hello, > Testing in progress, is it ok for trunk if pass? I forgot to add clobber to split of andn, so testing fail. Fixed. Updated patch in the bottom. Testing: 1. Bootstrap pass. 2. make check shows no regressions. 3. Spec 2000 & 2006 build show no regressions both with and without -mavx5

Re: [PATCH i386 2/8] [AVX512] Add mask registers.

2013-08-28 Thread Kirill Yukhin
Hello, On 28 Aug 13:17, Richard Henderson wrote: > Uh, no, you can't just add it when doing the split. You could be adding it in > a place that the flags register is live. You must ALWAYS have the clobber on > the whole pattern when gprs are possible. I see now, thanks a lot for explanation! >

Re: [PATCH i386 2/8] [AVX512] Add mask registers.

2013-08-28 Thread Richard Henderson
On 08/28/2013 11:38 AM, Kirill Yukhin wrote: >> When combine puts the AND and the NOT together, we don't know what registers >> we >> want the data in. If we do not supply the general register alternative, with >> the clobber, then we will be FORCED to implement the operation in the mask >> regis

Re: [PATCH i386 2/8] [AVX512] Add mask registers.

2013-08-28 Thread Kirill Yukhin
Hello Richard, On 28 Aug 10:55, Richard Henderson wrote: > On 08/28/2013 10:45 AM, Kirill Yukhin wrote: > > Hello Richard, > > > > On 27 Aug 13:07, Richard Henderson wrote: > >> On 08/27/2013 11:11 AM, Kirill Yukhin wrote: > > What happened to the bmi andn alternative we discussed? > >>> BMI

Re: [PATCH i386 2/8] [AVX512] Add mask registers.

2013-08-28 Thread Richard Henderson
On 08/28/2013 10:45 AM, Kirill Yukhin wrote: > Hello Richard, > > On 27 Aug 13:07, Richard Henderson wrote: >> On 08/27/2013 11:11 AM, Kirill Yukhin wrote: > What happened to the bmi andn alternative we discussed? >>> BMI only supported for 4- and 8- byte integers, while >>> kandw - for HI/QI

Re: [PATCH i386 2/8] [AVX512] Add mask registers.

2013-08-28 Thread Kirill Yukhin
Hello Richard, On 27 Aug 13:07, Richard Henderson wrote: > On 08/27/2013 11:11 AM, Kirill Yukhin wrote: > >> > What happened to the bmi andn alternative we discussed? > > BMI only supported for 4- and 8- byte integers, while > > kandw - for HI/QI > > > > We're talking about values in registers. I

Re: [PATCH i386 2/8] [AVX512] Add mask registers.

2013-08-27 Thread Richard Henderson
On 08/27/2013 11:11 AM, Kirill Yukhin wrote: >> > What happened to the bmi andn alternative we discussed? > BMI only supported for 4- and 8- byte integers, while > kandw - for HI/QI > We're talking about values in registers. Ignoring the high bits of the andn result still produces the correct re

Re: [PATCH i386 2/8] [AVX512] Add mask registers.

2013-08-27 Thread Kirill Yukhin
On 27 Aug 22:11, Kirill Yukhin wrote: Hello, I've while pasting the patch I've accidentally put extra brace. Pls Ignore it > +(define_insn "kxnor" > + [(set (match_operand:SWI12 0 "register_operand" "=r,!k") > + (not:SWI12 > + (xor:SWI12 > + (match_operand:SWI12 1 "register_opera

Re: [PATCH i386 2/8] [AVX512] Add mask registers.

2013-08-27 Thread Kirill Yukhin
Hello Reichard, On 26 Aug 09:37, Richard Henderson wrote: > On 08/26/2013 09:13 AM, Kirill Yukhin wrote: > > +(define_split > > + [(set (match_operand:SWI12 0 "mask_reg_operand") > > + (any_logic:SWI12 (match_operand:SWI12 1 "mask_reg_operand") > > +(match_operand:SWI12 2 "m

Re: [PATCH i386 2/8] [AVX512] Add mask registers.

2013-08-26 Thread Richard Henderson
On 08/26/2013 09:13 AM, Kirill Yukhin wrote: > +(define_split > + [(set (match_operand:SWI12 0 "mask_reg_operand") > + (any_logic:SWI12 (match_operand:SWI12 1 "mask_reg_operand") > + (match_operand:SWI12 2 "mask_reg_operand"))) > + (clobber (reg:CC FLAGS_REG))] > + "TAR

Re: [PATCH i386 2/8] [AVX512] Add mask registers.

2013-08-26 Thread Kirill Yukhin
On 22 Aug 08:49, Richard Henderson wrote: Hello, > You can always split away the clobber after reload, as we do for > when add gets implemented with lea. I've refactored the patch, making mask logic insn patterns non-unspec. Unfortunately I was unable to use '*' in mask alternative, since it is n

Re: [PATCH i386 2/8] [AVX512] Add mask registers.

2013-08-22 Thread Richard Henderson
On 08/22/2013 02:35 AM, Kirill Yukhin wrote: > Despite of generic OR, mask version of OR do not clobber FLAGS_REG. > Of course, we may conservatively think that it is, but I believe > this is not good idea. I believe that having two different patterns is a worse idea. You can always split away th

Re: [PATCH i386 2/8] [AVX512] Add mask registers.

2013-08-22 Thread Kirill Yukhin
Hello Richard, On 19 Aug 14:17, Richard Henderson wrote: > On 08/14/2013 12:23 AM, Kirill Yukhin wrote: > > + ;; For AVX512F mask support > > + UNSPEC_KIOR > > + UNSPEC_KXOR > > + UNSPEC_KAND > > + UNSPEC_KANDN > > I thought we determined that you didn't need these, > that "*Yk" as a constra

Re: [PATCH i386 2/8] [AVX512] Add mask registers.

2013-08-19 Thread Richard Henderson
On 08/14/2013 12:23 AM, Kirill Yukhin wrote: > + ;; For AVX512F mask support > + UNSPEC_KIOR > + UNSPEC_KXOR > + UNSPEC_KAND > + UNSPEC_KANDN I thought we determined that you didn't need these, that "*Yk" as a constraint was sufficient. > +(define_insn "kandn" > +(define_insn "kand" > +(defi

Re: [PATCH i386 2/8] [AVX512] Add mask registers.

2013-08-14 Thread Kirill Yukhin
Hello, Patch was rebased on top of trunk. It is applicable on top of [1/8] (which was rebased on new trunk today). Testing: 1. Bootstrap pass. 2. make check shows no regressions. 3. Spec 2000 & 2006 build show no regressions both with and without -mavx512f option. 4. Spec 2000 &

Re: [PATCH i386 2/8] [AVX512] Add mask registers.

2013-08-07 Thread Kirill Yukhin
Hello! > You can't read from memory into a mask register in QImode. > This will fail if the memory was the last byte of a page, > and the following page is not mapped. > > I expected you to need the following patch, to help spill > and fill QImode values, but I havn't found a test case that > ac

Re: [PATCH i386 2/8] [AVX512] Add mask registers.

2013-08-06 Thread Richard Henderson
BTW, you've a bug in your movqi pattern: > diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md > index b4c9ac5..d8401b5 100644 > --- a/gcc/config/i386/i386.md > +++ b/gcc/config/i386/i386.md > @@ -2298,7 +2298,7 @@ > ;; partial register stall can be caused there. Then we use movzx. >

Re: [PATCH i386 2/8] [AVX512] Add mask registers.

2013-07-31 Thread Richard Henderson
On 07/31/2013 05:02 AM, Kirill Yukhin wrote: > > There's ICE (max. number of generated reload insns per insn is achieved (90)), > when LRA tried to save mask register before call. This was caused by fact > that split_reg function > in lra-constraints.c allocates memory for saved reg in > SECOND

[PATCH i386 2/8] [AVX512] Add mask registers.

2013-07-31 Thread Kirill Yukhin
Hello, In this patch we add support for new mask register k0-k7. Changes are mostly strightforward, but there are two problems. First we can't use k0 as mask in vector instructions, so we have introduce two register classes. One for use in vector instruction with "k" constraint - corresponding to k