diff --git a/gcc/testsuite/gcc.dg/torture/pr110228.c b/gcc/testsuite/gcc.dg/torture/pr110228.c new file mode 100644 index 0000000000000000000000000000000000000000..add9f17b42194f8915f8f15e42bdbd96cc819379 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr110228.c @@ -0,0 +1,34 @@ +/* { dg-do run { target x86_64-*-* i?86-*-* } } */ +/* { dg-require-effective-target lp64 } */ + +unsigned a[4] = {1,1,1,1}; +unsigned tt1 = 0; + +__attribute__((noipa)) +static void bug(unsigned * p, unsigned *t, int n, int t2) +{ + for(int i = 0; i < n; i++) + { + _Bool LookupFlags ; + unsigned v = t[i]; + unsigned tt = tt1; + if (v == 0) + LookupFlags = 0; + else if (v == 1) + LookupFlags = 1; + if (LookupFlags) { + tt|=3u; + LookupFlags = 0; + } + asm("movq $-1, %q1":"+a"(LookupFlags)); + *p = tt; + } +} + +int main() +{ + unsigned r = 42; + bug(&r,a, sizeof(a)/sizeof(a[0]), 1); + __builtin_printf("%u\n", r); + if (r != 3) __builtin_abort(); +} diff --git a/gcc/testsuite/gcc.dg/uninit-pr101912.c b/gcc/testsuite/gcc.dg/uninit-pr101912.c index 62cd2a0c73e1fc42aea59e773d877e52204ad917..cb7d7516e91e67fde55070f762b2e8f54977b20e 100644 --- a/gcc/testsuite/gcc.dg/uninit-pr101912.c +++ b/gcc/testsuite/gcc.dg/uninit-pr101912.c @@ -11,7 +11,7 @@ tzloadbody (void) for (int i = 0; i < n; i++) { int corr = getint (); - if (corr < 1 || (corr == 1 && !(leapcnt == 0 || (prevcorr < corr ? corr == prevcorr + 1 : (corr == prevcorr || corr == prevcorr - 1))))) /* { dg-bogus "uninitialized" "pr101912" { xfail *-*-* } } */ + if (corr < 1 || (corr == 1 && !(leapcnt == 0 || (prevcorr < corr ? corr == prevcorr + 1 : (corr == prevcorr || corr == prevcorr - 1))))) /* { dg-bogus "uninitialized" "pr101912" } */ return -1; prevcorr = corr; diff --git a/gcc/tree-ssa-ifcombine.cc b/gcc/tree-ssa-ifcombine.cc index 21a77ddecc7b61e41155d4d9bea93a80c13d8c13..58e19c1508e4e38bbbfb89d1dec21a5dce410127 100644 --- a/gcc/tree-ssa-ifcombine.cc +++ b/gcc/tree-ssa-ifcombine.cc @@ -128,7 +128,6 @@ bb_no_side_effects_p (basic_block bb) gassign *ass; enum tree_code rhs_code; if (gimple_has_side_effects (stmt) - || gimple_uses_undefined_value_p (stmt) || gimple_could_trap_p (stmt) || gimple_vuse (stmt) /* We need to rewrite stmts with undefined overflow to use @@ -153,6 +152,12 @@ bb_no_side_effects_p (basic_block bb) should handle this. */ || is_gimple_call (stmt)) return false; + + ssa_op_iter it; + tree use; + FOR_EACH_SSA_TREE_OPERAND (use, stmt, it, SSA_OP_USE) + if (ssa_name_maybe_undef_p (use)) + return false; } return true; @@ -836,6 +841,7 @@ pass_tree_ifcombine::execute (function *fun) bbs = single_pred_before_succ_order (); calculate_dominance_info (CDI_DOMINATORS); + mark_ssa_maybe_undefs (); /* Search every basic block for COND_EXPR we may be able to optimize.