diff options
author | Bernd Schmidt <bernds@codesourcery.com> | 2012-04-26 14:20:39 +0000 |
---|---|---|
committer | Bernd Schmidt <bernds@gcc.gnu.org> | 2012-04-26 14:20:39 +0000 |
commit | e90247f8bac2b058550d5e3af7873fa2768624d2 (patch) | |
tree | cc9676874f6a1ec2605d4af7227233a8650f66f1 /gcc/genmodes.c | |
parent | 81c082ecd2881c3d1ed9387e4deeb922f74a8c4f (diff) | |
download | gcc-e90247f8bac2b058550d5e3af7873fa2768624d2.zip gcc-e90247f8bac2b058550d5e3af7873fa2768624d2.tar.gz gcc-e90247f8bac2b058550d5e3af7873fa2768624d2.tar.bz2 |
re PR middle-end/52940 (conversion from MODE_PARTIAL_INT uses sign extension for unsigned types)
PR middle-end/52940
* machmode.h (CLASS_HAS_WIDER_MODES_P): True for MODE_PARTIAL_INT.
* expr.c (convert_move): Honor unsignedp when extending partial int
modes.
* genmodes.c (complete_mode): Don't clear component field of partial
int modes.
(emit_mode_inner): Don't emit it however.
(calc_wider_mode): Partial int modes widen to their component.
From-SVN: r186877
Diffstat (limited to 'gcc/genmodes.c')
-rw-r--r-- | gcc/genmodes.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/gcc/genmodes.c b/gcc/genmodes.c index 84517b9..d0095c3 100644 --- a/gcc/genmodes.c +++ b/gcc/genmodes.c @@ -360,7 +360,6 @@ complete_mode (struct mode_data *m) m->bytesize = m->component->bytesize; m->ncomponents = 1; - m->component = 0; /* ??? preserve this */ break; case MODE_COMPLEX_INT: @@ -821,7 +820,13 @@ calc_wider_mode (void) sortbuf[i] = 0; for (j = 0; j < i; j++) - sortbuf[j]->next = sortbuf[j]->wider = sortbuf[j + 1]; + { + sortbuf[j]->next = sortbuf[j + 1]; + if (c == MODE_PARTIAL_INT) + sortbuf[j]->wider = sortbuf[j]->component; + else + sortbuf[j]->wider = sortbuf[j]->next; + } modes[c] = sortbuf[0]; } @@ -1118,7 +1123,8 @@ emit_mode_inner (void) for_all_modes (c, m) tagged_printf ("%smode", - m->component ? m->component->name : void_mode->name, + c != MODE_PARTIAL_INT && m->component + ? m->component->name : void_mode->name, m->name); print_closer (); |