Commit 3f1d32a5 by Jeff Law Committed by Jeff Law

[PATCH] [PR rtl-optimization/49847] Fix ICE in CSE due to cc0-setter and…

[PATCH] [PR rtl-optimization/49847] Fix ICE in CSE due to cc0-setter and cc0-user in different blocks

	PR rtl-optimization/49847
	* cse.c (record_jump_equiv): Handle fold_rtx returning NULL_RTX.

	PR rtl-optimization/49847
	* g++.dg/pr49847-2.C: New test.

From-SVN: r231821
parent a012998e
2015-12-18 Jeff Law <law@redhat.com>
PR rtl-optimization/49847
* cse.c (record_jump_equiv): Handle fold_rtx returning NULL_RTX.
2015-12-18 Nathan Sidwell <nathan@acm.org>
* config/nvptx/nvptx.c (worker_bcast_name, worker_red_name): Delete.
......@@ -3874,6 +3874,13 @@ record_jump_equiv (rtx_insn *insn, bool taken)
op0 = fold_rtx (XEXP (XEXP (SET_SRC (set), 0), 0), insn);
op1 = fold_rtx (XEXP (XEXP (SET_SRC (set), 0), 1), insn);
/* On a cc0 target the cc0-setter and cc0-user may end up in different
blocks. When that happens the tracking of the cc0-setter via
PREV_INSN_CC0 is spoiled. That means that fold_rtx may return
NULL_RTX. In those cases, there's nothing to record. */
if (op0 == NULL_RTX || op1 == NULL_RTX)
return;
code = find_comparison_args (code, &op0, &op1, &mode0, &mode1);
if (! cond_known_true)
{
......
2015-12-18 Jeff Law <law@redhat.com>
PR rtl-optimization/49847
* g++.dg/pr49847-2.C: New test.
2015-12-18 H.J. Lu <hongjiu.lu@intel.com>
* gcc.dg/vect/pr68305.c (dg-additional-options): Add -mavx2
......
/* { dg-do compile { target m68k-*-* } } */
/* { dg-options "-O2 -mcpu=68060 -fnon-call-exceptions -fPIC -O2 -fpermissive" } */
extern "C" {
typedef __java_int jint;
typedef __java_float jfloat;
namespace java {
namespace lang {
class Class;
class Object;
class Throwable;
}
}
}
typedef class java::lang::Class * jclass;
typedef class java::lang::Throwable * jthrowable;
typedef unsigned short _Jv_ushort __attribute__ ((__mode__ (__HI__)));
extern "Java" {
struct _JvObjectPrefix {
};
}
class java::lang::Object: public _JvObjectPrefix {
};
union _Jv_word {
jint i;
jfloat f;
};
class _Jv_MethodBase {
};
class _Jv_InterpMethod: public _Jv_MethodBase {
private:_Jv_ushort max_stack;
static void run (_Jv_InterpMethod *);
};
class java::lang::Throwable: public::java::lang::Object {
public:static::java::lang::Class class$;
};
void _Jv_InterpMethod::run (_Jv_InterpMethod * meth) {
_Jv_word stack[meth->max_stack];
_Jv_word *sp = stack;
try {
jfloat value2 = ((jfloat) (--sp)->f);
jfloat value1 = ((jfloat) (--sp)->f);
if (value1 > value2) (sp++)->i = (1);
}
catch (java::lang::Throwable * ex) {
}
}
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