Re: Type inheritance graph analysis & speculative devirtualization, part 4a/6 simple anonymous namespace devirtualization during cgraph construction

2013-08-23 Thread Graham Stott
Jan,

This has broken all builds because method_type_class() is defined.

Graham



Using gen_int_mode instead of GEN_INT minot testsuite fallout on MIPS

2013-09-11 Thread Graham Stott
Hi Richard,

There is some minor testsuite fallout with these patches on MIPS a
couple of tests (see below)ICE ingen_int_mode () in both these ICE the mode is 
CCmode.

Here we arrive at gen_int_mode () via a use of plus_constant () is cse.c

with a register with CCmode called from  find_reg_offset_for_const ().

The plus_constant () ends up trying to create the reg+const rtx via


  if (c != 0)
    x = gen_rtx_PLUS (mode, x, gen_int_mode (c, mode));


with the gen_int_mode 90 triggering the ICE.

It obviously doesn't make sensegenerating a reg + const where the

reg has CCMode.

I've only got results from check-gcc-c testsuite so far.


Graham


testsuite/c-c++-common/cilk-plus/AN/builtin_func_double.c
testsuite/gcc.c-torture/execute/921013-1.c



Re: Using gen_int_mode instead of GEN_INT minot testsuite fallout on MIPS

2013-09-11 Thread Graham Stott
Hi Richard,

Thanks I'll give a go tomorrow.

Not sure why it has only been seen/reported for MIPS so far
I can't see why it can't happen in other backends. 


Cheers
Graham


Re: Using gen_int_mode instead of GEN_INT minot testsuite fallout on MIPS

2013-09-12 Thread Graham Stott
Hi Richard,

After applying just the cse.c part of the patch the two testcases no longer ICE 
and pass
with regressions in C or C++ testsuites.


Not sure if we really need the other part of the patch to gen_int_mode ().

Graham



- Original Message -
From: Richard Sandiford 
To: Graham Stott 
Cc: James Greenhalgh ; "gcc-patches@gcc.gnu.org" 

Sent: Wednesday, 11 September 2013, 19:39
Subject: Re: Using gen_int_mode instead of GEN_INT minot testsuite fallout on 
MIPS

Graham Stott  writes:
> Hi Richard,
>
> There is some minor testsuite fallout with these patches on MIPS a
> couple of tests (see below)ICE ingen_int_mode () in both these ICE the
> mode is CCmode.

Hmm, interesting.  I suppose gen_int_mode should handle CC modes,
since there's no other constant rtx that can be used instead.  OTOH,
like you say, it doesn't really make sense to apply try_const_anchor
to CCmode.

How does the following patch look?

Thanks,
Richard


gcc/
    * emit-rtl.c (gen_int_mode): Handle CC modes.
    * cse.c (try_const_anchors): ...but punt on them here.

Index: gcc/emit-rtl.c
===
--- gcc/emit-rtl.c    2013-09-08 11:52:15.0 +0100
+++ gcc/emit-rtl.c    2013-09-11 19:32:35.702377902 +0100
@@ -417,6 +417,11 @@ gen_rtx_CONST_INT (enum machine_mode mod
rtx
gen_int_mode (HOST_WIDE_INT c, enum machine_mode mode)
{
+  /* CONST_INT is used for CC modes too.  We can't make any assumptions
+     about the precision or bitsize in that case, so just pass the value
+     through unchanged.  */
+  if (GET_MODE_CLASS (mode) == MODE_CC)
+    return GEN_INT (c);
   return GEN_INT (trunc_int_for_mode (c, mode));
}

Index: gcc/cse.c
===
--- gcc/cse.c    2013-09-08 11:52:15.0 +0100
+++ gcc/cse.c    2013-09-11 19:38:17.664399826 +0100
@@ -1354,6 +1354,11 @@ try_const_anchors (rtx src_const, enum m
   rtx lower_exp = NULL_RTX, upper_exp = NULL_RTX;
   unsigned lower_old, upper_old;

+  /* CONST_INT is used for CC modes, but we should leave those alone.  */
+  if (GET_MODE_CLASS (mode) == MODE_CC)
+    return NULL_RTX;
+
+  gcc_assert (SCALAR_INT_MODE_P (mode));
   if (!compute_const_anchors (src_const, &lower_base, &lower_offs,
                  &upper_base, &upper_offs))
     return NULL_RTX;



Re: Profile housekeeping 6/n (-fprofile-consistency-report)

2012-10-06 Thread Graham Stott

Jan.

This patch also breaks bootstrap due compilation errors reported for 
pases.c and toplev.c


Graham


A recent change has broken bootstrap on trunk and gcc8-branch

2018-09-03 Thread graham stott
Hi
A heads up a change too tree_switch_conversion.c has broken bootstraps
Graham

Re: A recent change has broken bootstrap on trunk and gcc8-branch

2018-09-03 Thread graham stott
Internal compile  error mpn_base_power_of_two_p

 Original message 
From: graham stott  
Date: 03/09/2018  11:58  (GMT+00:00) 
To: gcc-patches  
Cc: gmail  
Subject: A recent change has broken bootstrap on trunk and gcc8-branch 

Hi
A heads up a change too tree_switch_conversion.c has broken bootstraps
Graham

WM

2017-12-10 Thread graham stott
finished

washing

2017-12-10 Thread graham stott
jj
you going to do more washing?

build failure x86_64

2018-02-01 Thread graham stott
A recent patch has broken RTL checking builds on x86_64 fails during combine 
RTL  check: expected code 'reg' have 'lshirtrt' in rhs_regno at rtl.h:1891 
builfing libgçc2.c in function  __mulsc3

food

2018-02-25 Thread graham stott
if you do  go can you please get some chicken fillets for papa thanks

RE: [PATCH RFC] MIPS add support for MIPS SIMD ARCHITECTURE V1.07

2013-11-21 Thread Graham Stott
Hi Joseph,

Thanks for the comments I will address these issues and send an updated  patch.

Graham





Re: r273969 - in /trunk/gcc/lto: ChangeLog Make-lan...

2019-08-01 Thread graham stott
There's no ChangeLog entry fof this



 Original message 
From: edlin...@gcc.gnu.org 
Date: 01/08/2019  09:45  (GMT+00:00) 
To: gcc-...@gcc.gnu.org 
Subject: r273969 - in /trunk/gcc/lto: ChangeLog Make-lan... 

Author: edlingerDate: Thu Aug  1 08:45:29 2019New Revision: 273969URL: 
https://gcc.gnu.org/viewcvs?rev=273969&root=gcc&view=revLog:2019-08-01  Bernd 
Edlinger      * Make-lang.in 
(lto.install-common): Remove unnecessary slash    between $(DESTDIR) and 
$(bindir).Modified:    trunk/gcc/lto/ChangeLog    trunk/gcc/lto/Make-lang.in

remove unused fiields in init_expmed_rtl expmed.c

2013-04-25 Thread Graham Stott
All,
 
The struture init_expmed_rtl defined in expmed.c has many fields which are 
totally unused
this patch removes them.
 
Bootstraped x86_64 all langauges 
 
Graham
 
gcc/ChangeLog
* expmed.c: (init_expmed_rtl) Remove unused fields reg_fld, plus_fld, 
mult_fld, sdiv_fld1, udiv_fld1,
 sdiv_32_fld1, smod_32_fld1, wide_mult_fld1, wide_lshr_fld1, shift_fld1, 
shift_mult_fld1 shift_add_fld1,
 shift_sub0_fld1, shift_sub1_fld1.
 
Index: gcc/expmed.c
===
--- gcc/expmed.c (revision 198200)
+++ gcc/expmed.c (working copy)
@@ -69,22 +69,22 @@
 
 struct init_expmed_rtl
 {
-  struct rtx_def reg;  rtunion reg_fld[2];
-  struct rtx_def plus; rtunion plus_fld1;
+  struct rtx_def reg;
+  struct rtx_def plus;
   struct rtx_def neg;
-  struct rtx_def mult; rtunion mult_fld1;
-  struct rtx_def sdiv; rtunion sdiv_fld1;
-  struct rtx_def udiv; rtunion udiv_fld1;
-  struct rtx_def sdiv_32; rtunion sdiv_32_fld1;
-  struct rtx_def smod_32; rtunion smod_32_fld1;
-  struct rtx_def wide_mult; rtunion wide_mult_fld1;
-  struct rtx_def wide_lshr; rtunion wide_lshr_fld1;
+  struct rtx_def mult;
+  struct rtx_def sdiv;
+  struct rtx_def udiv;
+  struct rtx_def sdiv_32;
+  struct rtx_def smod_32;
+  struct rtx_def wide_mult;
+  struct rtx_def wide_lshr;
   struct rtx_def wide_trunc;
-  struct rtx_def shift; rtunion shift_fld1;
-  struct rtx_def shift_mult; rtunion shift_mult_fld1;
-  struct rtx_def shift_add; rtunion shift_add_fld1;
-  struct rtx_def shift_sub0; rtunion shift_sub0_fld1;
-  struct rtx_def shift_sub1; rtunion shift_sub1_fld1;
+  struct rtx_def shift;
+  struct rtx_def shift_mult;
+  struct rtx_def shift_add;
+  struct rtx_def shift_sub0; 
+  struct rtx_def shift_sub1;
   struct rtx_def zext;
   struct rtx_def trunc;



Re: [patch][mips] split mips_reorg in pre- and post-dbr_schedule parts

2013-05-07 Thread Graham Stott
Steven,

The new execute mips_machine_reorrg2 part of the patch  doesn't have a return 
value!

Graham


Testsuite MIPS libs/scanasm.exe allow mathing against (no)micromips/

2013-05-21 Thread Graham Stott
All,
 
When micromips was added scanasm.exe wasn't updated this was causing a few tests
which scanned the assembler output to start failing such as 
dg.c++/debiug/dwarf2/lineno-simple1.C.
 
Fixed with the ollowing patch
 
Graham

testuite/ChangeLog:
 
 21-05-2013   * graham stott  graham.st...@btinternet.com
* lib/scanasm.exp (dg-function-on-line) target mips-*-*-* allow matching 
aginst micromips
   directive
  
Index: scanasm.exp
===
--- scanasm.exp (revision 199093)
+++ scanasm.exp (working copy)
@@ -493,7 +493,7 @@
  set pattern [format {\t;[^:]+:%d\n(\t[^\t]+\n)+%s:\n\t.PROC} \
  $line $symbol]
 } elseif { [istarget mips*-*-*] } {
- set pattern [format {\t\.loc [0-9]+ %d 0( 
[^\n]*)?\n(\t.cfi_startproc[^\t]*\n)*\t\.set\t(no)?mips16\n\t\.ent\t%s\n\t\.type\t%s,
 @function\n%s:\n} \
+ set pattern [format {\t\.loc [0-9]+ %d 0( 
[^\n]*)?\n(\t.cfi_startproc[^\t]*\n)*\t\.set\t(no)?mips16\n\t\.set\t(no)?micromips\n\t\.ent\t%s\n\t\.type\t%s,
 @function\n%s:\n} \
    $line $symbol $symbol $symbol]
 } else {
  set pattern [format 
{%s:[^\t]*(\t.(fnstart|frame|mask|file)[^\t]*)*\t[^:]+:%d\n} \



MIPS elimate trap-if-zero instruction if possible for divisions

2013-07-03 Thread Graham Stott
Hi Richard,
 
This patch attemps to elimate the TEQ instruction div DIV/MOD instructions
if possible (i.e the numerator is known to be non-zero)
 
I have introduced and seperated UNSPEC UNSPEC_SET_HILO_NOTRAP
which is generation by a peephole2 when the trap is known not to be required.
 
The peephole's work by checking for a REG_EQUAL or/REG_EQUIV on the
instruction which sets the numerator for the DIV/MOD this doesn't catch all
possible cases but does catch the common cases where ths numerator is
set set in a insn immediately preceeding the DIV/MOD.
 
ChangeLog
 
2013-07-03    Graham Stottgrah...@btinternet.com
* config/mips/mips.c: (mips_output_division) : Make static
  add new traps enables/disables the geration if a trap
 insn is TRAPS for divison are enabled.
 (mips_output_division_with_trap): New enables geration of trap
 on division by zero instruction.
 (mips_output_division_without_trap) New disables generation of
 trap.on division by zero instruction.
* config/mips/mips-protos.h (mips_output_divison): Delete.
  (mips_output_division_with_trap):  Add outputs a division 
sequence
  with a trap-if-zero if required.
  (mips_output_division_without_trap):  Add outputs the division
 sequence without and trap-if-zero instruction.
 * config/mips/mips.md (UNSPEC_SET_HILO_NOTRAP): Add unspec
   and two peephole2 defines
   (divmod4_hilo_: Rename
   divmod4_hilo__with_trap.
(divmod4_hilo__without_trap): New
 * config/mips/predicates.md (binary_operator): Define.
 (unary_operator): Define.

mips.md.diff
Description: Binary data


mips-protoes.h.diff
Description: Binary data


mips.c.diff
Description: Binary data


predicates.md.diff
Description: Binary data


RFC DIVMOD expansion in expand_divmod:expmed.c

2013-07-03 Thread Graham Stott
All,
 
The DIV/MOD expansion performed in expmed is basically driven by RTX costs/-Os
that are provided by the backend.In a few instances these costs and or _os 
appear to be ignored.
 
One senerio  is divsion by a constant in a mode whose size <= 
HOST_BITS_PER_WIDE_INT
it will always expand the DIV/MOD using multiplation (Montgomery) when 
optimizing for size.
 
Shouldn't this expansion be be guarded by  !speed and the expansion skipped 
allowing
the backend open coding an DIV/MOD sequence or libcall.
 
Is guarding this with a !speed guard the best thing to do for most backends or 
should this be 
controlled with a new target hook with the default hook returning true for yes 
expand maintaining
the status quo giving the backends to override.
 
Another senerio is signed divison of a power-of-2  if the backend dosn't have 
optabs for sdiv
and sdivmod then  expand_sdiv_pow2 will be choosen even if otimizing for size 
and
sdiv_pow2_cheap() retuns true!
 
 if (sdiv_pow2_cheap (speed, compute_mode)
   && ((optab_handler (sdiv_optab, compute_mode)
    != CODE_FOR_nothing)
   || (optab_handler (sdivmod_optab, compute_mode)
!= CODE_FOR_nothing)))
    quotient = expand_divmod (0, TRUNC_DIV_EXPR,
  compute_mode, op0,
  gen_int_mode (abs_d,
 compute_mode),
  NULL_RTX, 0);
  else
    quotient = expand_sdiv_pow2 (compute_mode, op0, abs_d);
 
When optimizing for size (!speed) and sdiv_pow2_cheap() is true we ideally 
don't want to use 
expand_sdiv_pow2 but instead let the back end opend code the DIV.
 
Question how can one determine if a backend can open code a DIV/MOD
 
 Graham



MIPS don't gererate MUL when muliplying by constant of for 2^N +/- 1 optimizing for size

2013-07-03 Thread Graham Stott
Hi Richard,
 
When -Os is used  and the multiplier is of the for 2^N +- 1 we generate a MUL 
instruction
rather that a  shift-left   N and add-sub 1.
 
The problem is that rtx cost for the MUL is too cheap causing the shift-left 
and add-sub sequence
to be  more expensive.
 
This patch makes the MUL slightly more expension so the alternate sequence and 
better sequence
used. The shift + add/sub is faster and can probaly be scheduled better.
 
This change is code size neutral because the MUL requires a load-immediate.
 
ChangeLog:
* config/mips/mips.c: (mips_rtx_costs): Slightly increase cost of MUL 
when optimizing
   for size. This allows a better sequence to be choosen when multiply by a 
constant of the
form 2^N +- 1.
 
Graham

mips.c.diff
Description: Binary data


Fix missing use of -Werror when compiling files in c-familty directory

2013-07-03 Thread Graham Stott
All,
 
 
Files in the c-family directory are being compiled during stage3 without 
-Werror and
other warningb flags that are part of WARN_STRICT flags.
 
Fixing this shows that array_notation_common.c  generates unused variable 
warnings
and will break the build after the apcth is applied.
 
 
ChangeLog
03-07-2013Graham Stott 
* gcc/Makegfvile.in: Define c-family-warn. to WARN_STRICT.

Makefile.in.diff
Description: Binary data


Fix ununsed variables before my patch adding missing -Werror

2013-07-03 Thread Graham Stott
 
This patch fixes the warnings from array-notation_common.c so that I can
then apply my Makefile missing -Werror patch.
 
Graham
 
ChangeLog
03-07-2013  graham.stott  graham.st...@btinternet.com
* c-familly/array_notation_comon.c (length_mismatch_expr_p): Delete 
unused
    varables l_length and l_node
 
Graham

array-notation-common.c.diff
Description: Binary data


Re: MIPS elimate trap-if-zero instruction if possible for divisions

2013-07-04 Thread Graham Stott
Hi Jeff, Richard

We could possibly also use VRP to change signed division to unsigned division 
when dividing a
non-negative signed operand by a power of 2 because then the sign bit will be 0 
and we could do
the division using logical shift right.
 
Graham


PING Fix ununsed variables before my patch adding missing -Werror

2013-07-05 Thread Graham Stott


- Original Message -
From: Graham Stott 
To: "gcc-patches@gcc.gnu.org" 
Cc: 
Sent: Wednesday, 3 July 2013, 16:25
Subject: Fix ununsed variables before my patch adding missing -Werror

 
This patch fixes the warnings from array-notation_common.c so that I can
then apply my Makefile missing -Werror patch.
 
Graham
 
ChangeLog
03-07-2013  graham.stott  graham.st...@btinternet.com
* c-familly/array_notation_comon.c (length_mismatch_expr_p): Delete 
unused
    varables l_length and l_node
 
Graham


Re: Fix missing use of -Werror when compiling files in c-familty directory

2013-07-08 Thread Graham Stott
I've fixed the issue with the warnings and have now comitted the patch with a 
corrected
ChangeLog entry as revision 200783

Graham



Re: MIPS don't gererate MUL when muliplying by constant of for 2^N +/- 1 optimizing for size

2013-07-08 Thread Graham Stott
Hi Richard,

The problem was with adjusting to be more expansive the load imm + mul sequence 
and
the shift + add sequence were the smake cost when optimizing for size so the 
code in expmed.c
choose the MUL.

I also considered this  version  also I couldn't decide which was better just 
went with the other
version on a toss of a coin.

I submit again with mips target testcase which use scan assember technique to 
check that
we use the shift+add/sub sequence.

A simple testcase compiled with -Os

int foo(int x)
{
  return x * 17;
}

will demonstrate that we currently use "LI + MUL" and after the patch we will 
use "SLL + ADDU".

Gtraham


Re: MIPS don't gererate MUL when muliplying by constant of for 2^N +/- 1 optimizing for size

2013-07-09 Thread Graham Stott




hi Richard,

I've Updated patch and added testcases basically they are the same testcase just
using different constants 

I tried combining  them into one testcase couldn'tget the scan-assembler stuff 
working when multiple functions were in the assembler output I couldn't 
couldn't work
out how to restrict the scans to only part of the assembler file. Maybe its not 
possible
without some new dejagnu/expect fragments.

Graham

    gcc/ChangeLog

    * config/mips/mips.c (): Very slightly increase code of MUL.whren 
optimizing for size.
    
   gcc/testsuite/ChangeLog
    * gcc.target/mips/mulsize-7.c: New.
    * gcc.target/mips/mulsize-9.c New.
    * gcc/target/mips/mulsize-15.c: New. 
    * gcc.target/mips/mulsize-17.c: New.


diffs
Description: Binary data
/* { dg-final { scan-assembler "\t.globl\tf17" } } */
/* { dg-final { scan-assembler "\tsll\t" } } */
/* { dg-final { scan-assembler "\taddu\t" } } */
/* { dg-final { scan-assembler-not "\tli\t" } } */
/* { dg-final { scan-assembler-not "\tmul\t" } } */
int
f17(int x)
{
  return x * 17;
}
/* { dg-final { scan-assembler "\t.globl\tf15" } } */
/* { dg-final { scan-assembler "\tsll\t" } } */
/* { dg-final { scan-assembler "\tsubu\t" } } */
/* { dg-final { scan-assembler-not "\tli\t" } } */
/* { dg-final { scan-assembler-not "\tmul\t" } } */
int
f15(int x)
{
  return x * 15;
}

/* { dg-final { scan-assembler "\t.globl\tf9" } } */
/* { dg-final { scan-assembler "\tsubu\t" } } */
/* { dg-final { scan-assembler-not "\tli\t" } } */
/* { dg-final { scan-assembler-not "\tmul\t" } } */
int
f9(int x)
{
  return x * 9;
}
/* { dg-final { scan-assembler "\t.globl\tf7" } } */
/* { dg-final { scan-assembler "\tsubu\t" } } */
/* { dg-final { scan-assembler-not "\tli\t" } } */
/* { dg-final { scan-assembler-not "\tmul\t" } } */
int
f7(int x)
{
  return x * 7;
}


Re: MIPS elimate trap-if-zero instruction if possible for divisions

2013-07-09 Thread Graham Stott
Hi Richard, Jeff.

Richard what's your idea for exposing things early enough so that VRP can 
eliminate the need for
a trao-if-zero insn iif possible. 


Graham


Re: MIPS elimate trap-if-zero instruction if possible for divisions

2013-07-09 Thread Graham Stott
Richard,

Isn't that to late for VRP its run twice before expand pass.

Graham


Re: MIPS don't gererate MUL when muliplying by constant of for 2^N +/- 1 optimizing for size

2013-07-09 Thread Graham Stott
Richard,

I'll renumber then consecutively and fix the typo and change log entry before I 
commit

Thanks
Graham




- Original Message -
From: Richard Sandiford 
To: Graham Stott 
Cc: "gcc-patches@gcc.gnu.org" 
Sent: Tuesday, 9 July 2013, 18:31
Subject: Re: MIPS  don't gererate MUL when muliplying by constant of for 2^N 
+/- 1 optimizing for size

Graham Stott  writes:
>     gcc/ChangeLog
>
>     * config/mips/mips.c (): Very slightly increase code of MUL.whren
> optimizing for size.

    * config/mips/mips.c (mips_rtx_costs): Very slightly increase
    the cost of MULT when optimizing for size.

>    gcc/testsuite/ChangeLog
>     * gcc.target/mips/mulsize-7.c: New.
>     * gcc.target/mips/mulsize-9.c New.
>     * gcc/target/mips/mulsize-15.c: New. 
>     * gcc.target/mips/mulsize-17.c: New.

Let's number these consecutively (1-4).  Typo "gcc/target/mips" ->
"gcc.target/mips".

OK with those changes, thanks.

Richard



Re: MIPS elimate trap-if-zero instruction if possible for divisions

2013-07-10 Thread Graham Stott
Hi Jeff, Richard,

Not sure if that working.

I created some rtl using TRAP_IF to represent the TEQ and emiited via an 
expander 

The TRAP_IF rtl make ait all the way though the rtl optimizers which are run 
after expand
even though it should be possible to determine is false.


(insn 7 3 20 2 (set (reg:SI 2 $2 [201])
    (const_int 27 [0x1b])) bug.c:67 289 {*movsi_internal}
 (expr_list:REG_EQUIV (const_int 27 [0x1b])
    (nil)))

(insn 20 7 21 2 (trap_if (eq:SI (reg:SI 2 $2 [201])
    (const_int 0 [0]))
    (const_int 7 [0x7])) bug.c:68 8 {*conditional_trapNsi_if_zero}
 (nil))

I grepped the RTL code for any code handling TRAP_IF that looked like it might 
remove the TRAP_IF but
only found some code is final_scan which only applied to CC0 backends. 

Is using a conditional trap (TRAP_IF)  the right way to go?

Graham



Re: PING Fix ununsed variables before my patch adding missing -Werror

2013-07-10 Thread Graham Stott
Erric,

Thanks I'll these errors

Graham



- Original Message -
From: Eric Botcazou 
To: Graham Stott 
Cc: gcc-patches@gcc.gnu.org
Sent: Wednesday, 10 July 2013, 17:26
Subject: Re: PING Fix ununsed variables before my patch adding missing -Werror

> ChangeLog
>         03-07-2013  graham.stott  graham.st...@btinternet.com
>         * c-familly/array_notation_comon.c (length_mismatch_expr_p): Delete
> unused varables l_length and l_node

Missing blank line in all your ChangeLog entries, and the above one is in the 
wrong ChangeLog file, it should be moved to c-family/ChangeLog as:

2013-07-08  Graham Stott  

    * array-notation-common.c (length_mismatch_in_expr_p): Delete unused
    variables l_length and l_node.


-- 
Eric Botcazou



Re: MIPS elimate trap-if-zero instruction if possible for divisions

2013-07-19 Thread Graham Stott
Hi Jeff, Richard.

None of the RTL optimzers look at TRAP_IF w.r.t optimiizations.

I've decided to add some code to cprop.c and simplification primetives to 
simply_rtx () this do work once
I fixed cprop to run on my testcase whicg only had functiions which 3 blocks 
currently it think theses nothing 

to do. I'jj submit a patchseparately for that.


I'm currently tracking done a latent bug the cfg cleanup code which triggers a 
control inside basic block abort
due to a (trap_if ((condtion) (const N)) being correctly optimized to ((trap_if 
(const_int 1)(conts_int N)).

I ensure that when the condition is optimized to (const_int 1) that the block 
gets split after the unconditional

trap satisfies control_flow_insn_p () predicate. The splt wroks so that the 
unconditional  trap_if is the last 

instruction n its block  but when cfg cleanup is run later it undoes this split 
and merges the blocks again thus
triggering the verify_flow abort.

Anyone know the rational (if any) for treating unconditional traps as control 
flow but not conditional traps.

I would have expected them  to be treated the same w.r.t flow control unless 
the condition is (const_int 0).

Graham


RTL gensupport - fix warning when using a match_scratch predicate

2013-04-24 Thread Graham Stott
All
 
Currently using the match_scratch predicate on a destination operand will 
trigger the warning
 
    "warning: destination operand 0 allows non-lvalue",
 
This happends because add_predicate_code()  will set the 
pred->allows_non_lvalue when
it encounters a SCRATCH rtx code which subsequently triggers the above genrecog 
warning/
 
Graham
  
gcc/ChangeLog
* gensupport.c:: (add_predicate_code) Also exclude SCRATCH from rtx codes 
which allow
 non-lvalues.
 
Index: gcc/gensupport.c
=
--- gcc/gensupport.c    (revision 198200)
+++ gcc/gensupport.c    (working copy)
@@ -2732,7 +2732,8 @@
  && code != MEM
  && code != CONCAT
  && code != PARALLEL
- && code != STRICT_LOW_PART)
+ && code != STRICT_LOW_PART
+ && code != SCRATCH)
    pred->allows_non_lvalue = true;
   if (pred->num_codes == 1)


RE: [PATCH RFC] MIPS add support for MIPS SIMD ARCHITECTURE V1.07

2014-02-05 Thread Graham Stott
Hi Richard,

Attached is an updated patch for  feedback so  MSA support to MIPS backend can 
be added when open again for next stage1.

It is unfinished in that some comments from your review of the initial patch 
have yet to be addressed.

The diff is against svn 207500 

Graham




msa.svn.207500.diffs.gz
Description: msa.svn.207500.diffs.gz


Re: [PATCH] Prevent out of bound access for multilib_options

2014-04-09 Thread Graham Stott
All,

It happens with all mulitilib configurations not just arm-elf

if we have reached the end of the multilib_options string there are

no more options to process  so break from the loop.

This patch is an alternative fix.
=
Index: gcc.c

--- gcc.c    (revision 209248)
+++ gcc.c    (working copy)
@@ -7531,6 +7531,9 @@
         }
       break;
     }
+
+      if (*q == '\0')
+        break;
     }
 }
 }




Graham


Re: Prevent inliner from removing aliases of used comdats

2011-09-13 Thread Graham Stott
Jan,

Any testcase do can add?

Graham


Re: __sync_swap* [ rename sync builtins ]

2011-06-21 Thread Graham Stott
All

--- On Tue, 21/6/11, Richard Henderson  wrote:

> From: Richard Henderson 
> Subject: Re: __sync_swap*  [ rename sync builtins ]
> To: "Andrew MacLeod" 
> Cc: "Aldy Hernandez" , "Jakub Jelinek" , 
> "Joseph S. Myers" , "gcc-patches" 
> 
> Date: Tuesday, 21 June, 2011, 19:50
> On 06/21/2011 11:46 AM, Andrew
> MacLeod wrote:
> >     * c-family/c-common.c: Add sync_ or
> SYNC__ to builtin names.
> >     * c-family/c-omp.c: Add sync_ or
> SYNC__ to builtin names.
> >     * java/builtins.c: Add sync_ or
> SYNC__ to builtin names.
> >     * java/expr.c: Add sync_ or SYNC__
> to builtin names.
> >     * builtins.c: Add sync_ or SYNC__
> to builtin names.
> >     * sync-builtins.def: Add sync_ or
> SYNC__ to builtin names.
> >     * omp-low.c: Add sync_ or SYNC__ to
> builtin names.
> >     * cp/semantics.c: Add sync_ or
> SYNC__ to builtin names.
> >     * fortran/trans-openmp.c: Add sync_
> or SYNC__ to builtin names.
> >     * fortran/trans-stmt.c: Add sync_
> or SYNC__ to builtin names.
> >     * fortran/trans-decl.c: Add sync_
> or SYNC__ to builtin names.
> 
> Ok.
> 
> 
> r~
> 

This looks to have broken the go frontend

gcc/gcc/go/gofrontend/gogo-tree.cc: In member function ‘void 
Gogo::define_builtin_function_trees()’:
/usr/local/src/gcc4.7/gcc/gcc/go/gofrontend/gogo-tree.cc:94:18: error: 
‘BUILT_IN_ADD_AND_FETCH_1’ was not declared in this scope
/usr/local/src/gcc4.7/gcc/gcc/go/gofrontend/gogo-tree.cc:99:19: error: 
‘BUILT_IN_ADD_AND_FETCH_2’ was not declared in this scope
/usr/local/src/gcc4.7/gcc/gcc/go/gofrontend/gogo-tree.cc:104:18: error: 
‘BUILT_IN_ADD_AND_FETCH_4’ was not declared in this scope
/usr/local/src/gcc4.7/gcc/gcc/go/gofrontend/gogo-tree.cc:109:18: error: 
‘BUILT_IN_ADD_AND_FETCH_8’ was not declared in this scope

Graham


Re: patch to fix PR 48435

2011-04-08 Thread Graham Stott
Vladimir,

The wrong PR 4435 was in referrenced the commit 

--- On Fri, 8/4/11, Jeff Law  wrote:

> From: Jeff Law 
> Subject: Re: patch to fix PR 48435
> To: "Vladimir Makarov" 
> Cc: "gcc-patches" 
> Date: Friday, 8 April, 2011, 16:18
> -BEGIN PGP SIGNED MESSAGE-
> Hash: SHA1
> 
> On 04/07/11 13:41, Vladimir Makarov wrote:
> > The following patch should solve problem
> > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48435. 
> It might solve other
> > latest IRA problems too including performance related
> ones.  The patch
> > is for targets which require some values to be placed
> in hard registers
> > starting with an even (odd) hard registers.
> > 
> > I already addressed an analogous problem recently and
> the patch I sent
> > that time although solved some problems it created
> even more new
> > problems.  I should acknowledge this.
> > 
> > The problem was in that profitable hard regs were used
> for colorability
> > criterion and finding hard registers where allocno
> values can be resided
> > but *also* as starting allocno hard registers. 
> It resulted in spilling
> > allocnos which should be placed in multi-registers
> starting on a
> > specific border because profitable hard registers were
> only starting
> > registers and when we calculated number of available
> hard registers
> > multi-register allocnos can not fit only in their
> starting hard registers.
> > 
> > The following patch was successfully bootstrapped on
> x86/x86-64 and on
> > i686 with H.J.'s autotester options.
> > 
> > OK to commit?
> > 
> > 2011-04-07  Vladimir Makarov 
> > 
> >     PR 4435
> >     * ira-color.c
> (setup_profitable_hard_regs): Add comments.
> >     Don't take prohibited hard
> regs into account.
> > 
>    (setup_conflict_profitable_regs): Rename
> to
> >     get_conflict_profitable_regs.
> >     (check_hard_reg_p): Check
> prohibited hard regs.
> OK.
> jeff
> -BEGIN PGP SIGNATURE-
> Version: GnuPG v1.4.11 (GNU/Linux)
> Comment: Using GnuPG with Fedora - http://enigmail.mozdev.org/
> 
> iQEcBAEBAgAGBQJNnycrAAoJEBRtltQi2kC70DsH/A7fnYlawxDvYPeULGb1ctQD
> 6LYWBWhJY4UDTiUNjLEzwALpq2XccVzubz1KEMI3wOndIHHYM2ykbsgTqCKmXqhf
> ZthBjzNUtE/i7jSxK8JK3SEShqs2j7vaAvlkUKbdF7O61rhQap8MRnD2umHfrbet
> PFea7MedpaC96mazzoyUWlzwWCt2CQhOlMFGlC44bxB1FrKy0nUjeIM7kWqjqG5W
> Y9lV8RlC4O2cLST5qHpqtssLSO4omPlKsEUBEKW4E/87UCoFAxP0n8NOZ1EFgMsc
> 3SlhSv+Dpinfh79gjHXt5+CH33bXTecf8Jfyd89Rn6huzL9OhAXJy+MjMi6cBm0=
> =KSaH
> -END PGP SIGNATURE-
>


Re: [patch, fortran] Handling of .and. and .or. expressions

2018-06-16 Thread graham stott via gcc-patches
if i read this correctly it appears that IMPURE/PURE are not the normal pure 
attribute used by gcc but some entirely diff attribute specific to FORTANso 
people are taking about different things

 Original message 
From: Steve Kargl  
Date: 16/06/2018  17:38  (GMT+00:00) 
To: Janus Weil  
Cc: Janne Blomqvist , Thomas Koenig 
, fort...@gcc.gnu.org, gcc-patches 
 
Subject: Re: [patch, fortran] Handling of .and. and .or. expressions 

On Sat, Jun 16, 2018 at 01:09:36PM +0200, Janus Weil wrote:
> 
> 
> Am 15. Juni 2018 20:38:17 MESZ schrieb Steve Kargl 
> :
> >> But at least for pure functions, this optimization looks Ok.
> >> 
> >
> >Why is everyone fixated on PURE vs IMPURE functions?
> 
> Simply because it makes a difference in this context!

It does not!  A function marked as PURE by a programmer
must meet certain requirement of the Fortran standard.
An unmarked function or a function marked as IMPURE can
still meet those same requirements.  Marking something as 
IMPURE has only a single requirement in the standard.

   An impure elemental procedure processes array arguments
   in array element order.

That's it.  Marking a function as IMPURE does not mean 
the function has side effects.  It does not mean that
a function must be evaluated for each reference.  Are
you advocating that gfortran must evaluate ping() 
twice for

  impure real function ping()
  end function ping
  
  x = ping() + 0 * ping()
  end

-- 
Steve


bootstrap with --werror=yes fails

2018-09-07 Thread graham stott via gcc-patches
Heads
Due too -Wabi empty class std::intergal_constant warning compiling 
libstdc++/c++/cxx11-shim_facets.cc
Graham

bootstrap -O3 failure libgo on x64_86

2018-09-15 Thread graham stott via gcc-patches
Hi
Fails due to undefind symbols runtime.*
O2 works

Re: bootstrap -O3 failure libgo on x64_86

2018-09-16 Thread graham stott via gcc-patches
Ian
A simple bootstrap using gcc 8 as host compiler works with default 
configuration all langs+ada. Now trying using gcc 9 host from a week ago
Will tty elimate which configue opts cause problem
Graham

 Original message 
From: Ian Lance Taylor via gcc-patches  
Date: 15/09/2018  16:01  (GMT+00:00) 
To: graham stott  
Cc: gcc-patches  
Subject: Re: bootstrap -O3 failure libgo on x64_86 

On Sat, Sep 15, 2018 at 7:12 AM, graham stott via gcc-patches
 wrote:
> Hi
> Fails due to undefind symbols runtime.*
> O2 works

I tried my best guess at recreating the problem, and everything worked fine.

Please tell us exactly what you did and exactly what happened.

Thanks.

Ian


Re: bootstrap -O3 failure libgo on x64_86

2018-09-17 Thread graham stott via gcc-patches
Ian
I've bootstrapped gcc 9 with gcc 8 again and I'm unable to recreate failure 
boostrapping with gcc 9
so ignore I'll report if happens again
Graham

 Original message 
From: Ian Lance Taylor via gcc-patches  
Date: 15/09/2018  16:01  (GMT+00:00) 
To: graham stott  
Cc: gcc-patches  
Subject: Re: bootstrap -O3 failure libgo on x64_86 

On Sat, Sep 15, 2018 at 7:12 AM, graham stott via gcc-patches
 wrote:
> Hi
> Fails due to undefind symbols runtime.*
> O2 works

I tried my best guess at recreating the problem, and everything worked fine.

Please tell us exactly what you did and exactly what happened.

Thanks.

Ian


Re: Fold more boolean expressions

2018-10-03 Thread graham stott via gcc-patches




 Original message 
From: MCC CS  
Date: 02/10/2018  14:38  (GMT+00:00) 
To: gcc-patches@gcc.gnu.org 
Subject: Re: Fold more boolean expressions 

Thanks a lot!


gcc 8 trunk broken O3 on x86_64

2018-04-27 Thread graham stott via gcc-patches
All 
Just a heads the trunk has been broken since about Weds most files fail compare 
during bootstrap at O3 but pass at O2
My last succesful boostrap at O3 was Tuesday
I no idea which commit caused it
Graham

O3 bootstraps fail on x86-64

2018-05-19 Thread graham stott via gcc-patches
O3 bootstraps have started to fail to build since about Thursday. 
Due to an internal compiler error when building asan.c in function 
asan_emit_stack_protectìon tree-ssa--sccan.c:3396
Graham

Re: O3 bootstraps fail on x86-64

2018-05-19 Thread graham stott via gcc-patches
Disabling asan the build works

 Original message 
From: graham stott via gcc-patches  
Date: 19/05/2018  10:30  (GMT+00:00) 
To: gcc-patches  
Subject: O3 bootstraps fail on x86-64 

O3 bootstraps have started to fail to build since about Thursday. 
Due to an internal compiler error when building asan.c in function 
asan_emit_stack_protectìon tree-ssa--sccan.c:3396
Graham

Re: O3 bootstraps fail on x86-64

2018-05-20 Thread graham stott via gcc-patches
It's --disable-libsanitizer that works not --disable-asan I got that wrong

 Original message 
From: graham stott via gcc-patches  
Date: 19/05/2018  10:30  (GMT+00:00) 
To: gcc-patches  
Subject: O3 bootstraps fail on x86-64 

O3 bootstraps have started to fail to build since about Thursday. 
Due to an internal compiler error when building asan.c in function 
asan_emit_stack_protectìon tree-ssa--sccan.c:3396
Graham

Re: [

2018-10-29 Thread graham stott via gcc-patches
Looks like it fixed an GO Libs failure as well I was having

 Original message 
From: Jeff Law  
Date: 29/10/2018  15:56  (GMT+00:00) 
To: Segher Boessenkool , Andrew Pinski 
 
Cc: GCC Patches  
Subject: Re: [ 

On 10/29/18 1:49 AM, Segher Boessenkool wrote:
> On Mon, Oct 29, 2018 at 12:31:28AM -0700, Andrew Pinski wrote:
>>> PR rtl-optimization/87701
>>> PR rtl-optimization/87780
>>> * combine.c (make_more_copies): Rewrite.
>>
>> I think a better changelog would be :):
>> * combine.c (make_more_copies): Rewrite to be simplier.
> 
> But it is not simpler at all now: *not* removing old notes while changing
> RTL instructions is a very bad idea often; and modifying instructions
> while not being very careful upsets DF.  It may *look* simple now ;-)
FWIW, it looks like cr16 ran to completion this morning :-)

Jeff


Re: [PATCH 29/43] i386: Emulate MMX ssse3_pmaddubsw with SSE

2019-02-10 Thread graham stott via gcc-patches
what about testcases? for these 


 Original message 
From: Uros Bizjak  
Date: 10/02/2019  12:26  (GMT+00:00) 
To: "H.J. Lu"  
Cc: gcc-patches@gcc.gnu.org 
Subject: Re: [PATCH 29/43] i386: Emulate MMX ssse3_pmaddubsw with SSE 

On 2/10/19, H.J. Lu  wrote:
> Emulate MMX ssse3_pmaddubsw with SSE.  Only SSE register source operand
> is allowed.
>
>   PR target/89021
>   * config/i386/sse.md (ssse3_pmaddubsw): Add SSE emulation.

OK.

Uros.

> ---
>  gcc/config/i386/sse.md | 18 +++---
>  1 file changed, 11 insertions(+), 7 deletions(-)
>
> diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md
> index 4bcfd3fc272..8b13a76da72 100644
> --- a/gcc/config/i386/sse.md
> +++ b/gcc/config/i386/sse.md
> @@ -15666,17 +15666,17 @@
> (set_attr "mode" "TI")])
>
>  (define_insn "ssse3_pmaddubsw"
> -  [(set (match_operand:V4HI 0 "register_operand" "=y")
> +  [(set (match_operand:V4HI 0 "register_operand" "=y,x,Yv")
>   (ss_plus:V4HI
>     (mult:V4HI
>       (zero_extend:V4HI
>     (vec_select:V4QI
> - (match_operand:V8QI 1 "register_operand" "0")
> + (match_operand:V8QI 1 "register_operand" "0,0,Yv")
>   (parallel [(const_int 0) (const_int 2)
>      (const_int 4) (const_int 6)])))
>       (sign_extend:V4HI
>     (vec_select:V4QI
> - (match_operand:V8QI 2 "nonimmediate_operand" "ym")
> + (match_operand:V8QI 2 "nonimmediate_operand" "ym,x,Yv")
>   (parallel [(const_int 0) (const_int 2)
>      (const_int 4) (const_int 6)]
>     (mult:V4HI
> @@ -15688,13 +15688,17 @@
>     (vec_select:V4QI (match_dup 2)
>   (parallel [(const_int 1) (const_int 3)
>      (const_int 5) (const_int 7)]))]
> -  "TARGET_SSSE3"
> -  "pmaddubsw\t{%2, %0|%0, %2}"
> -  [(set_attr "type" "sseiadd")
> +  "(TARGET_MMX || TARGET_MMX_WITH_SSE) && TARGET_SSSE3"
> +  "@
> +   pmaddubsw\t{%2, %0|%0, %2}
> +   pmaddubsw\t{%2, %0|%0, %2}
> +   vpmaddubsw\t{%2, %1, %0|%0, %1, %2}"
> +  [(set_attr "mmx_isa" "native,x64_noavx,x64_avx")
> +   (set_attr "type" "sseiadd")
> (set_attr "atom_unit" "simul")
> (set_attr "prefix_extra" "1")
> (set (attr "prefix_rex") (symbol_ref "x86_extended_reg_mentioned_p
> (insn)"))
> -   (set_attr "mode" "DI")])
> +   (set_attr "mode" "DI,TI,TI")])
>
>  (define_mode_iterator PMULHRSW
>    [V4HI V8HI (V16HI "TARGET_AVX2")])
> --
> 2.20.1
>
>


Re: [PATCH 12/43] i386: Emulate MMX vec_dupv2si with SSE

2019-02-11 Thread graham stott via gcc-patches
All these patches from HJL have no testcases. Are they even sutable for gcc 9 
at this stage

 Original message 
From: Uros Bizjak  
Date: 11/02/2019  12:51  (GMT+00:00) 
To: "H.J. Lu"  
Cc: GCC Patches  
Subject: Re: [PATCH 12/43] i386: Emulate MMX vec_dupv2si with SSE 

On Mon, Feb 11, 2019 at 1:26 PM H.J. Lu  wrote:
>
> On Sun, Feb 10, 2019 at 11:25 PM Uros Bizjak  wrote:
> >
> > On Mon, Feb 11, 2019 at 2:04 AM H.J. Lu  wrote:
> > >
> > > On Sun, Feb 10, 2019 at 1:49 PM Uros Bizjak  wrote:
> > > >
> > > > On Sun, Feb 10, 2019 at 10:45 PM Uros Bizjak  wrote:
> > > >
> > > > > > > > +  [(const_int 0)]
> > > > > > > > +{
> > > > > > > > +  /* Emulate MMX vec_dupv2si with SSE vec_dupv4si.  */
> > > > > > > > +  rtx op0 = gen_rtx_REG (V4SImode, REGNO (operands[0]));
> > > > > > > > +  rtx insn = gen_vec_dupv4si (op0, operands[1]);
> > > > > > > > +  emit_insn (insn);
> > > > > > > > +  DONE;
> > > > > > >
> > > > > > > Please write this simple RTX explicitly in the place of 
> > > > > > > (const_int 0) above.
> > > > > >
> > > > > > rtx insn = gen_vec_dupv4si (op0, operands[1]);
> > > > > >
> > > > > > is easy.   How do I write
> > > > > >
> > > > > > rtx op0 = gen_rtx_REG (V4SImode, REGNO (operands[0]));
> > > > > >
> > > > > > in place of  (const_int 0)?
> > > > >
> > > > >   [(set (match_dup 2)
> > > > > (vec_duplicate:V4SI (match_dup 1)))]
> > > > >
> > > > > with
> > > > >
> > > > > "operands[2] = gen_rtx_REG (V4SImode, REGNO (operands[0]));"
> > > > >
> > > > > or even better:
> > > > >
> > > > > "operands[2] = gen_lowpart (V4SImode, operands[0]);"
> > > > >
> > > > > in the preparation statement.
> > > >
> > > > Even shorter is
> > > >
> > > > "operands[0] = gen_lowpart (V4SImode, operands[0]);"
> > > >
> > > > and use (match_dup 0) instead of (match_dup 2) in the RTX.
> > > >
> > > > There is plenty of examples throughout sse.md.
> > > >
> > >
> > > This works:
> > >
> > > (define_insn_and_split "*vec_dupv2si"
> > >   [(set (match_operand:V2SI 0 "register_operand" "=y,x,Yv")
> > > (vec_duplicate:V2SI
> > >   (match_operand:SI 1 "register_operand" "0,0,Yv")))]
> > >   "TARGET_MMX || TARGET_MMX_WITH_SSE"
> > >   "@
> > >    punpckldq\t%0, %0
> > >    #
> > >    #"
> > >   "TARGET_MMX_WITH_SSE && reload_completed"
> > >   [(set (match_dup 0)
> > > (vec_duplicate:V4SI (match_dup 1)))]
> > >   "operands[0] = gen_rtx_REG (V4SImode, REGNO (operands[0]));"
> > >   [(set_attr "mmx_isa" "native,x64_noavx,x64_avx")
> > >    (set_attr "type" "mmxcvt,ssemov,ssemov")
> > >    (set_attr "mode" "DI,TI,TI")])
> >
> > If it works, then gen_lowpart is preferred due to extra checks.
> > However, it would result in a paradoxical subreg, so I wonder if these
> > extra checks allow this transformation.
>
> gen_lowpart dosn't work:

Ah, we need lowpart_subreg after reload.

Uros.