get_value_for_expr was blindlessly using TYPE_PRECISION to produce
a mask for vector typed entities which the new tree checking now
catches.
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.
--- /dev/null
+/* { 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;
+}
}
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)));