get_value_for_expr was blindlessly using TYPE_PRECISION to produce a mask for vector typed entities which the new tree checking now catches.
Bootstrapped and tested on x86_64-unknown-linux-gnu, pushed. PR tree-optimization/110506 * tree-ssa-ccp.cc (get_value_for_expr): Check for integral type before relying on TYPE_PRECISION to produce a nonzero mask. * gcc.dg/pr110506.c: New testcase. --- gcc/testsuite/gcc.dg/pr110506.c | 24 ++++++++++++++++++++++++ gcc/tree-ssa-ccp.cc | 1 + 2 files changed, 25 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/pr110506.c diff --git a/gcc/testsuite/gcc.dg/pr110506.c b/gcc/testsuite/gcc.dg/pr110506.c new file mode 100644 index 00000000000..10dbd4e6ce6 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr110506.c @@ -0,0 +1,24 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +struct { + long *sp; + long *csp; +} neko_interp_loop_vm; +int neko_interp_loop_vm_2; +void neko_interp_loop() +{ + void *pc[] = {&&LabelAccGlobal, &&LabelPhysCompare, &&LabelTailCall, + &&LabelLoop, &&LabelMakeArray2}; + long *sp, *csp = neko_interp_loop_vm.csp; +LabelAccGlobal: + neko_interp_loop_vm.sp = sp; + neko_interp_loop_vm.csp = csp; + goto * 0; +LabelTailCall: + csp = sp -= neko_interp_loop_vm_2; +LabelMakeArray2: +LabelPhysCompare: +LabelLoop: + goto * 0; +} diff --git a/gcc/tree-ssa-ccp.cc b/gcc/tree-ssa-ccp.cc index 26d5e445abd..0d0f02a8442 100644 --- a/gcc/tree-ssa-ccp.cc +++ b/gcc/tree-ssa-ccp.cc @@ -682,6 +682,7 @@ get_value_for_expr (tree expr, bool for_bits_p) } if (val.lattice_val == VARYING + && INTEGRAL_TYPE_P (TREE_TYPE (expr)) && TYPE_UNSIGNED (TREE_TYPE (expr))) val.mask = wi::zext (val.mask, TYPE_PRECISION (TREE_TYPE (expr))); -- 2.35.3