mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-10 06:40:29 +08:00
re PR target/33923 (ICE in reload_cse_simplify_operands (insn does not satisfy its constraints))
PR target/33923 * config/ia64/ia64.h (CANNOT_CHANGE_MODE_CLASS): Forbid mode changes for registers in BR_REGS class. From-SVN: r130188
This commit is contained in:
parent
f7bc70c5bf
commit
c6f4f1d196
@ -1,3 +1,9 @@
|
||||
2007-11-14 Eric Botcazou <ebotcazou@libertysurf.fr>
|
||||
|
||||
PR target/33923
|
||||
* config/ia64/ia64.h (CANNOT_CHANGE_MODE_CLASS): Forbid mode changes
|
||||
for registers in BR_REGS class.
|
||||
|
||||
2007-11-14 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR middle-end/34088
|
||||
|
@ -887,12 +887,16 @@ enum reg_class
|
||||
: (((CLASS) == FR_REGS || (CLASS) == FP_REGS) && (MODE) == XCmode) ? 2 \
|
||||
: (GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
|
||||
|
||||
/* In FP regs, we can't change FP values to integer values and vice versa,
|
||||
/* In BR regs, we can't change the DImode at all.
|
||||
In FP regs, we can't change FP values to integer values and vice versa,
|
||||
but we can change e.g. DImode to SImode, and V2SFmode into DImode. */
|
||||
|
||||
#define CANNOT_CHANGE_MODE_CLASS(FROM, TO, CLASS) \
|
||||
(SCALAR_FLOAT_MODE_P (FROM) != SCALAR_FLOAT_MODE_P (TO) \
|
||||
? reg_classes_intersect_p (CLASS, FR_REGS) : 0)
|
||||
(reg_classes_intersect_p (CLASS, BR_REGS) \
|
||||
? (FROM) != (TO) \
|
||||
: (SCALAR_FLOAT_MODE_P (FROM) != SCALAR_FLOAT_MODE_P (TO) \
|
||||
? reg_classes_intersect_p (CLASS, FR_REGS) \
|
||||
: 0))
|
||||
|
||||
/* Basic Stack Layout */
|
||||
|
||||
|
@ -1,3 +1,7 @@
|
||||
2007-11-14 Eric Botcazou <ebotcazou@libertysurf.fr>
|
||||
|
||||
* gcc.dg/pr33923.c: New test.
|
||||
|
||||
2007-11-14 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR middle-end/34088
|
||||
|
76
gcc/testsuite/gcc.dg/pr33923.c
Normal file
76
gcc/testsuite/gcc.dg/pr33923.c
Normal file
@ -0,0 +1,76 @@
|
||||
/* PR target/33923 */
|
||||
/* Testcase by Martin Michlmayr <tbm@cyrius.com> */
|
||||
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O3 --param max-partial-antic-length=0" } */
|
||||
|
||||
static int pendingCommand;
|
||||
static int currentModifiers;
|
||||
typedef struct
|
||||
{
|
||||
int (*updateKeys) (int *keyPressed);
|
||||
}
|
||||
ProtocolOperations;
|
||||
static const ProtocolOperations *protocol;
|
||||
brl_readCommand (void)
|
||||
{
|
||||
unsigned long int keys;
|
||||
int command;
|
||||
int keyPressed;
|
||||
unsigned char routingKeys[200];
|
||||
int routingKeyCount;
|
||||
signed char rightVerticalSensor;
|
||||
if (pendingCommand != (-1))
|
||||
{
|
||||
return command;
|
||||
}
|
||||
if (!protocol->updateKeys (&keyPressed))
|
||||
{
|
||||
if (rightVerticalSensor >= 0)
|
||||
keys |= 1;
|
||||
if ((routingKeyCount == 0) && keys)
|
||||
{
|
||||
if (currentModifiers)
|
||||
{
|
||||
doChord:switch (keys);
|
||||
}
|
||||
else
|
||||
{
|
||||
doCharacter:
|
||||
command = 0X2200;
|
||||
if (keys & 0X01UL)
|
||||
command |= 0001;
|
||||
if (keys & 0X02UL)
|
||||
command |= 0002;
|
||||
if (keys & 0X04UL)
|
||||
command |= 0004;
|
||||
if (keys & 0X08UL)
|
||||
command |= 0010;
|
||||
if (keys & 0X10UL)
|
||||
command |= 0020;
|
||||
if (keys & 0X20UL)
|
||||
command |= 0040;
|
||||
if (currentModifiers & (0X0010 | 0X0200))
|
||||
command |= 0100;
|
||||
if (currentModifiers & 0X0040)
|
||||
command |= 0200;
|
||||
if (currentModifiers & 0X0100)
|
||||
command |= 0X020000;
|
||||
if (currentModifiers & 0X0400)
|
||||
command |= 0X080000;
|
||||
if (currentModifiers & 0X0800)
|
||||
command |= 0X040000;
|
||||
}
|
||||
unsigned char key1 = routingKeys[0];
|
||||
if (key1 == 0)
|
||||
{
|
||||
} else if (key1 == 1)
|
||||
if (keys)
|
||||
{
|
||||
currentModifiers |= 0X0010;
|
||||
goto doCharacter;
|
||||
}
|
||||
}
|
||||
}
|
||||
return command;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user