tree-optimization/110506 - bogus non-zero mask in CCP for vector types
Checks
Commit Message
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
new file mode 100644
@@ -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;
+}
@@ -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)));