--- /dev/null
+/* { dg-do compile } */
+/* { dg-add-options vect_early_break } */
+/* { dg-require-effective-target vect_early_break } */
+/* { dg-require-effective-target vect_int } */
+
+/* { dg-final { scan-tree-dump "LOOP VECTORIZED" "vect" } } */
+
+long tar_atol256_max, tar_atol256_size, tar_atosl_min;
+char tar_atol256_s;
+void __errno_location();
+
+
+inline static long tar_atol256(long min) {
+ char c;
+ int sign;
+ c = tar_atol256_s;
+ sign = c;
+ while (tar_atol256_size) {
+ if (c != sign)
+ return sign ? min : tar_atol256_max;
+ c = tar_atol256_size--;
+ }
+ if ((c & 128) != (sign & 128))
+ return sign ? min : tar_atol256_max;
+ return 0;
+}
+
+inline static long tar_atol(long min) {
+ return tar_atol256(min);
+}
+
+long tar_atosl() {
+ long n = tar_atol(-1);
+ if (tar_atosl_min) {
+ __errno_location();
+ return 0;
+ }
+ if (n > 0)
+ return 0;
+ return n;
+}
/* Now link the alternative exits. */
if (multiple_exits_p)
{
- set_immediate_dominator (CDI_DOMINATORS, new_preheader,
- main_loop_exit_block);
for (auto gsi_from = gsi_start_phis (loop->header),
gsi_to = gsi_start_phis (new_preheader);
!gsi_end_p (gsi_from) && !gsi_end_p (gsi_to);
if (multiple_exits_p)
{
update_loop = new_loop;
- for (edge e : get_loop_exit_edges (loop))
- doms.safe_push (e->dest);
- doms.safe_push (exit_dest);
-
- /* Likely a fall-through edge, so update if needed. */
- if (single_succ_p (exit_dest))
- doms.safe_push (single_succ (exit_dest));
+ doms = get_all_dominated_blocks (CDI_DOMINATORS, loop->header);
+ for (unsigned i = 0; i < doms.length (); ++i)
+ if (flow_bb_inside_loop_p (loop, doms[i]))
+ doms.unordered_remove (i);
}
}
else /* Add the copy at entry. */