Commit a28dfaaf by Richard Biener Committed by Richard Biener

re PR tree-optimization/87967 (ICE in slpeel_duplicate_current_defs_from_edges)

2018-11-13  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/87967
	* tree-vect-loop.c (vect_transform_loop): Also copy PHIs
	for constants for the scalar loop.

	* g++.dg/opt/pr87967.C: New testcase.

From-SVN: r266070
parent a277ca89
2018-11-13 Richard Biener <rguenther@suse.de>
PR tree-optimization/87967
* tree-vect-loop.c (vect_transform_loop): Also copy PHIs
for constants for the scalar loop.
2018-11-13 Alan Modra <amodra@gmail.com> 2018-11-13 Alan Modra <amodra@gmail.com>
* config/rs6000/linux64.h (ASM_OUTPUT_SPECIAL_POOL_ENTRY_P): Exclude * config/rs6000/linux64.h (ASM_OUTPUT_SPECIAL_POOL_ENTRY_P): Exclude
2018-11-13 Richard Biener <rguenther@suse.de>
PR tree-optimization/87967
* g++.dg/opt/pr87967.C: New testcase.
2018-11-13 Claudiu Zissulescu <claziss@synopsys.com> 2018-11-13 Claudiu Zissulescu <claziss@synopsys.com>
* gcc.target/arc/builtin_eh.c: New test. * gcc.target/arc/builtin_eh.c: New test.
......
// { dg-do compile { target c++11 } }
// { dg-options "-O3" }
void h();
template <typename b> struct k { using d = b; };
template <typename b, template <typename> class> using e = k<b>;
template <typename b, template <typename> class f>
using g = typename e<b, f>::d;
struct l {
template <typename i> using ab = typename i::j;
};
struct n : l {
using j = g<char *, ab>;
};
class o {
public:
long r();
};
char m;
char s() {
if (m)
return '0';
return 'A';
}
class t {
public:
typedef char *ad;
ad m_fn2();
};
void fn3() {
char *a;
t b;
bool p = false;
while (*a) {
h();
o c;
if (*a)
a++;
if (c.r()) {
n::j q;
for (t::ad d = b.m_fn2(), e; d != e; d++) {
char f = *q;
*d = f + s();
}
p = true;
}
}
if (p)
throw;
}
...@@ -8264,7 +8264,7 @@ vect_transform_loop (loop_vec_info loop_vinfo) ...@@ -8264,7 +8264,7 @@ vect_transform_loop (loop_vec_info loop_vinfo)
e = single_exit (LOOP_VINFO_SCALAR_LOOP (loop_vinfo)); e = single_exit (LOOP_VINFO_SCALAR_LOOP (loop_vinfo));
if (! single_pred_p (e->dest)) if (! single_pred_p (e->dest))
{ {
split_loop_exit_edge (e); split_loop_exit_edge (e, true);
if (dump_enabled_p ()) if (dump_enabled_p ())
dump_printf (MSG_NOTE, "split exit edge of scalar loop\n"); dump_printf (MSG_NOTE, "split exit edge of scalar loop\n");
} }
......
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