|Deletions are marked like this.||Additions are marked like this.|
|Line 56:||Line 56:|
|Actually PPRE would perform insertion here. See PR38401 for a patch unleashing it (at -O3). There
is also missing DSE in this testcase (because DSE doesn't look through PHIs) and missing "FRE" (the
loads are all from uninitialized memory which we could detect and substitute an uninitialized register
instead). A really weird testcase.
push/pop_stmt_changes can be cleaned up, simplified, or even removed.
The inliner can rewrite the virtual operands itself just like regular operands. The only difficulties are that new pure/const functions are exposed after IPA-pure-const and that new PHI-nodes need to be inserted to merge VDEFs in the inlined function to the VDEF of the call statement. Partial patch available.
The single pre-function gimple_vop (cfun) DECL can be made per CU. The disadvantage is that cross-function inconsistencies are harder to detect.
Most passes that mark symbols for renaming should not need to. This is mostly fixed.
PTA should keep both an unpruned points-to set and a TBAA-pruned points-to set. This allows per alias-oracle query decisions on whether TBAA should be applied or not. This also allows (a fixed - see its comments) merge_alias_info to do its job using the unpruned sets.
into-SSA could go into virtual SSA form directly, without doing an ssa-update to rename the virtual operands after into-SSA. into-SSA expert needed.
In PTA we can generate a CALLUSED variable and its constraints for each pure call (just like we do with consttmp for const calls).
Simple mod/ref analysis can be done in PTA handle_rhs_call for builtins. call-used queries have to be extended to builtin function calls then (or finally a stmt local call-used points-to solution reference can be introduced).
PRE should compute a per-BB maximal set, unioning from the exit block upward the CFG. This should make the validity checks for the VUSEs unnecessary and speed up phi-translating the maximal set.
Testsuite status on x86_64, i?86
FAILs that appear also on trunk and XPASSes are omitted.
FAIL: gcc.dg/uninit-B.c uninit i warning (test for warnings, line 12) FAIL: gcc.dg/uninit-pr19430.c (test for warnings, line 32) FAIL: gcc.dg/uninit-pr19430.c uninitialized (test for warnings, line 41)
Uninitialized memory warnings will no longer work, or rather, the current implementation will be even more fragile. Action: uninit-B.c to be XFAILed again, the rest to be XFAILed.
FAIL: gcc.dg/tree-ssa/ssa-fre-10.c scan-tree-dump pre "Insertions: 2"
Weird testcase, it is not clear what it was supposed to test. Action: Move to the compile torture. Actually PPRE would perform insertion here. See PR38401 for a patch unleashing it (at -O3). There is also missing DSE in this testcase (because DSE doesn't look through PHIs) and missing "FRE" (the loads are all from uninitialized memory which we could detect and substitute an uninitialized register instead). A really weird testcase.
FAIL: gcc.dg/tree-ssa/ssa-pre-24.c scan-tree-dump-not pre "prephitmp"
A new testcase on the branch. We shouldn't insert a prephitmp here. The issue is that PHI-translating VUSEs should return the same VUSE if the expression does not die on the other edges of the PHI (thus is loop invariant for example). In general PHI-translation shouldn't change the expression if its value doesn't change. This may conflict with the purpose of the VUSE being a stmt location, so further phi-translating a "non"-translated VUSE may confuse the machinery.