+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>
* 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>
* gcc.target/arc/builtin_eh.c: New test.
--- /dev/null
+// { 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;
+}
e = single_exit (LOOP_VINFO_SCALAR_LOOP (loop_vinfo));
if (! single_pred_p (e->dest))
{
- split_loop_exit_edge (e);
+ split_loop_exit_edge (e, true);
if (dump_enabled_p ())
dump_printf (MSG_NOTE, "split exit edge of scalar loop\n");
}