Commit 0fb808ea by Jakub Jelinek Committed by Jakub Jelinek

re PR tree-optimization/51396 (ICE: verify_flow_info failed: BB 4 can not throw…

re PR tree-optimization/51396 (ICE: verify_flow_info failed: BB 4 can not throw but has an EH edge with -O2 -fnon-call-exceptions -mfma4)

	PR tree-optimization/51396
	* tree-ssa-math-opts.c (convert_mult_to_fma): Don't optimize
	if MUL_RESULT has zero uses.

	* g++.dg/opt/pr51396.C: New test.

From-SVN: r182028
parent 17fe0fdb
2011-12-05 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/51396
* tree-ssa-math-opts.c (convert_mult_to_fma): Don't optimize
if MUL_RESULT has zero uses.
PR debug/51410
* c-decl.c (pop_scope): Don't add DECL_EXTERNAL decls
for debug info if scope is file_scope.
2011-12-05 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/51396
* g++.dg/opt/pr51396.C: New test.
PR debug/51410
* gcc.dg/debug/dwarf2/pr51410.c: New test.
......
// PR tree-optimization/51396
// { dg-do compile }
// { dg-options "-O2 -fnon-call-exceptions -mfma" }
// { dg-options "-O2 -fnon-call-exceptions -mfma" { target i?86-*-* x86_64-*-* } }
double baz (double) throw ();
struct C
{
C (double d = 0.0) : c (d) {}
double c;
};
static inline void
foo (double x, const C &y)
{
x ? (y.c * baz (x)) : (C (), y);
}
void
bar (double x, C y)
{
foo (x, y);
}
......@@ -2429,6 +2429,12 @@ convert_mult_to_fma (gimple mul_stmt, tree op1, tree op2)
if (optab_handler (fma_optab, TYPE_MODE (type)) == CODE_FOR_nothing)
return false;
/* If the multiplication has zero uses, it is kept around probably because
of -fnon-call-exceptions. Don't optimize it away in that case,
it is DCE job. */
if (has_zero_uses (mul_result))
return false;
/* Make sure that the multiplication statement becomes dead after
the transformation, thus that all uses are transformed to FMAs.
This means we assume that an FMA operation has the same cost
......
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