Merge lp:~linaro-toolchain-dev/gcc-linaro/lp-803232 into lp:gcc-linaro/4.6

Proposed by Michael K. Edwards
Status: Rejected
Rejected by: Richard Sandiford
Proposed branch: lp:~linaro-toolchain-dev/gcc-linaro/lp-803232
Merge into: lp:gcc-linaro/4.6
Diff against target: 49 lines (+26/-5)
2 files modified
ChangeLog.linaro (+7/-0)
gcc/reload1.c (+19/-5)
To merge this branch: bzr merge lp:~linaro-toolchain-dev/gcc-linaro/lp-803232
Reviewer Review Type Date Requested Status
Richard Sandiford Pending
Review via email: mp+66533@code.launchpad.net

Description of the change

  Candidate patch for LP 803232

  ICE on code that uses vld4q_s16() NEON intrinsic

  The register allocator attempts to spill a structure containing a pair of
  int16x8_t's (total: 256 bits), for which there is no MODE_VECTOR_INT.
  (The ARM/NEON back end registers opaque holders > 128 bits wide as modes
  of class MODE_INT.) Work around this in choose_reload_regs() by calling
  smallest_mode_for_size() with MODE_INT instead of the real mode class if
  no mode in the class is wide enough.

To post a comment you must log in.
Revision history for this message
Linaro Toolchain Builder (cbuild) wrote :

cbuild has taken a snapshot of this branch at r106764 and queued it for build.

The snapshot is available at:
 http://ex.seabright.co.nz/snapshots/gcc-linaro-4.6+bzr106764~m-k-edwards~lp-803232.tar.xdelta3.xz

and will be built on the following builders:
 a9-builder armv5-builder i686 x86_64

You can track the build queue at:
 http://ex.seabright.co.nz/helpers/scheduler

cbuild-snapshot: gcc-linaro-4.6+bzr106764~m-k-edwards~lp-803232
cbuild-ancestor: lp:gcc-linaro/4.6+bzr106763
cbuild-state: check

Revision history for this message
Linaro Toolchain Builder (cbuild) wrote :

cbuild successfully built this on x86_64-natty-cbuild144-oort1-x86_64r1.

The build results are available at:
 http://ex.seabright.co.nz/build/gcc-linaro-4.6+bzr106764~m-k-edwards~lp-803232/logs/x86_64-natty-cbuild144-oort1-x86_64r1

The test suite results were unchanged compared to the branch point lp:gcc-linaro/4.6+bzr106763.

The full testsuite results are at:
 http://ex.seabright.co.nz/build/gcc-linaro-4.6+bzr106764~m-k-edwards~lp-803232/logs/x86_64-natty-cbuild144-oort1-x86_64r1/gcc-testsuite.txt

cbuild-checked: x86_64-natty-cbuild144-oort1-x86_64r1

Revision history for this message
Richard Sandiford (rsandifo) wrote :

For the record, I think this is just a workaround. It isn't something
we'd apply to the branch.

Revision history for this message
Linaro Toolchain Builder (cbuild) wrote :

cbuild successfully built this on armv7l-natty-cbuild146-ursa1-cortexa9r1.

The build results are available at:
 http://ex.seabright.co.nz/build/gcc-linaro-4.6+bzr106764~m-k-edwards~lp-803232/logs/armv7l-natty-cbuild146-ursa1-cortexa9r1

The test suite results were unchanged compared to the branch point lp:gcc-linaro/4.6+bzr106763.

The full testsuite results are at:
 http://ex.seabright.co.nz/build/gcc-linaro-4.6+bzr106764~m-k-edwards~lp-803232/logs/armv7l-natty-cbuild146-ursa1-cortexa9r1/gcc-testsuite.txt

cbuild-checked: armv7l-natty-cbuild146-ursa1-cortexa9r1

Revision history for this message
Linaro Toolchain Builder (cbuild) wrote :

cbuild successfully built this on armv7l-natty-cbuild146-ursa2-armv5r2.

The build results are available at:
 http://ex.seabright.co.nz/build/gcc-linaro-4.6+bzr106764~m-k-edwards~lp-803232/logs/armv7l-natty-cbuild146-ursa2-armv5r2

The test suite results were unchanged compared to the branch point lp:gcc-linaro/4.6+bzr106763.

The full testsuite results are at:
 http://ex.seabright.co.nz/build/gcc-linaro-4.6+bzr106764~m-k-edwards~lp-803232/logs/armv7l-natty-cbuild146-ursa2-armv5r2/gcc-testsuite.txt

cbuild-checked: armv7l-natty-cbuild146-ursa2-armv5r2

Revision history for this message
Richard Sandiford (rsandifo) wrote :

Fixed upstream by:

2011-07-07 Richard Sandiford <email address hidden>

 * reload1.c (choose_reload_regs): Use mode sizes to check whether
 an old reload register completely defines the required value.

We'll use that for the Linaro branches too.

Unmerged revisions

106764. By michaedw in build chroot <email address hidden>

Candidate patch for LP 803232

ICE on code that uses vld4q_s16() NEON intrinsic

The register allocator attempts to spill a structure containing a pair of
int16x8_t's (total: 256 bits), for which there is no MODE_VECTOR_INT.
(The ARM/NEON back end registers opaque holders > 128 bits wide as modes
of class MODE_INT.) Work around this in choose_reload_regs() by calling
smallest_mode_for_size() with MODE_INT instead of the real mode class if
no mode in the class is wide enough.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'ChangeLog.linaro'
2--- ChangeLog.linaro 2011-06-28 12:02:27 +0000
3+++ ChangeLog.linaro 2011-07-01 00:37:46 +0000
4@@ -1,3 +1,10 @@
5+2011-06-30 Michael Edwards <m.k.edwards@gmail.com>
6+
7+ LP 803232
8+ gcc/
9+ * reload1.c (choose_reload_regs): If none of the mode class's modes
10+ are wide enough, try MODE_INT instead.
11+
12 2011-06-28 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>
13
14 Backport from mainline.
15
16=== modified file 'gcc/reload1.c'
17--- gcc/reload1.c 2011-05-06 11:28:27 +0000
18+++ gcc/reload1.c 2011-07-01 00:37:46 +0000
19@@ -6464,11 +6464,25 @@
20 if (byte == 0)
21 need_mode = mode;
22 else
23- need_mode
24- = smallest_mode_for_size
25- (GET_MODE_BITSIZE (mode) + byte * BITS_PER_UNIT,
26- GET_MODE_CLASS (mode) == MODE_PARTIAL_INT
27- ? MODE_INT : GET_MODE_CLASS (mode));
28+ {
29+ unsigned int msize
30+ = GET_MODE_BITSIZE (mode) + byte * BITS_PER_UNIT;
31+ enum mode_class mclass
32+ = (GET_MODE_CLASS (mode) == MODE_PARTIAL_INT)
33+ ? MODE_INT : GET_MODE_CLASS (mode);
34+ if (mclass != MODE_INT)
35+ {
36+ enum machine_mode tmpmode;
37+ for (tmpmode = GET_CLASS_NARROWEST_MODE (mclass);
38+ tmpmode != VOIDmode;
39+ tmpmode = GET_MODE_WIDER_MODE (tmpmode))
40+ if (GET_MODE_PRECISION (mode) >= msize)
41+ break;
42+ if (tmpmode == VOIDmode)
43+ mclass = MODE_INT;
44+ }
45+ need_mode = smallest_mode_for_size (msize, mclass);
46+ }
47
48 if ((GET_MODE_SIZE (GET_MODE (last_reg))
49 >= GET_MODE_SIZE (need_mode))

Subscribers

People subscribed via source and target branches