Commit f27be550 by Jeff Law Committed by Jeff Law

re PR middle-end/52306 (ICE in cselib_record_set, at cselib.c:2158)

	PR middle-end/52306
	* reload1.c (emit_input_reload_insns): Do not create invalid RTL
	when changing the SET_DEST of a prior insn to avoid an input
	reload.

	PR middle-end-52306
	* gcc.c-torture/compile/pr52306.c: New test.

From-SVN: r207662
parent 7606ae1a
2014-02-10 Jeff Law <law@redhat.com>
PR middle-end/52306
* reload1.c (emit_input_reload_insns): Do not create invalid RTL
when changing the SET_DEST of a prior insn to avoid an input
reload.
2014-02-10 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
* config/rs6000/sysv4.h (ENDIAN_SELECT): Do not attempt to enforce
......
......@@ -7362,9 +7362,18 @@ emit_input_reload_insns (struct insn_chain *chain, struct reload *rl,
/* Store into the reload register instead of the pseudo. */
SET_DEST (PATTERN (temp)) = reloadreg;
/* Verify that resulting insn is valid. */
/* Verify that resulting insn is valid.
Note that we have replaced the destination of TEMP with
RELOADREG. If TEMP references RELOADREG within an
autoincrement addressing mode, then the resulting insn
is ill-formed and we must reject this optimization. */
extract_insn (temp);
if (constrain_operands (1))
if (constrain_operands (1)
#ifdef AUTO_INC_DEC
&& ! find_reg_note (temp, REG_INC, reloadreg)
#endif
)
{
/* If the previous insn is an output reload, the source is
a reload register, and its spill_reg_store entry will
......
2014-02-10 Jeff Law <law@redhat.com>
PR middle-end-52306
* gcc.c-torture/compile/pr52306.c: New test.
2014-02-10 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
* g++.dg/ext/vector26.C: Use -mmmx for 32-bit x86.
......
/* PR middle-end/52306 */
struct xmlNs {
const unsigned char *prefix;
};
struct xmlNode {
const unsigned char *name;
struct xmlNs *ns;
struct xmlNs *nsDef;
};
struct xsltTemplate {
const unsigned char *name;
int inheritedNsNr;
void *inheritedNs;
};
struct xsltTemplate *xsltNewTemplate(void);
void xsltGetQNameURI(unsigned char**);
long xmlMalloc(unsigned long);
void xsltGenericDebug(void);
int xmlStrEqual(const unsigned char*, const unsigned char*);
static void xsltGetInheritedNsList(
struct xsltTemplate *template,
struct xmlNode *node)
{
struct xmlNs *cur;
struct xmlNs **ret;
int nbns = 0;
int maxns = 10;
int i;
if (template == 0
|| template->inheritedNsNr != 0
|| template->inheritedNs != 0)
return;
while (node != 0) {
cur = node->nsDef;
ret = (struct xmlNs**) xmlMalloc((maxns + 1) * sizeof(struct xmlNs*));
for (i = 0; i < nbns; i++)
if (cur->prefix == ret[i]->prefix
|| xmlStrEqual(cur->prefix, 0))
break;
if (i >= nbns) {
if (nbns >= maxns)
return;
ret[nbns++] = cur;
}
}
}
static void
xsltParseStylesheetTemplate(struct xmlNode *template)
{
struct xsltTemplate *ret;
unsigned char *prop;
ret = xsltNewTemplate();
if (ret == 0)
return;
xsltGetInheritedNsList(ret, template);
xsltGenericDebug();
xsltGetQNameURI(&prop);
xmlStrEqual(0, ret->name);
}
void xsltParseStylesheetTop(struct xmlNode *cur)
{
xmlStrEqual(0, 0);
while (cur != 0) {
if (xmlStrEqual(cur->name, 0))
;
else if (xmlStrEqual(cur->name, 0))
;
else if (xmlStrEqual(cur->name, 0))
xsltParseStylesheetTemplate(cur);
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment