From: Kyrylo Tkachov Date: Thu, 21 Jan 2021 16:33:49 +0000 (+0000) Subject: tree-ssa-mathopts: Use proper poly_int64 comparison with param_avoid_fma_max_bits... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=9d33785f57daf29dc0c106c919da319fe1906bc6;p=gcc.git tree-ssa-mathopts: Use proper poly_int64 comparison with param_avoid_fma_max_bits [PR 98766] We ICE here because we end up comparing a poly_int64 with a scalar using <= rather than maybe_le. This patch fixes that in the way rich suggests in the PR. gcc/ChangeLog: PR tree-optimization/98766 * tree-ssa-math-opts.c (convert_mult_to_fma): Use maybe_le when comparing against type size with param_avoid_fma_max_bits. gcc/testsuite/ChangeLog: PR tree-optimization/98766 * gcc.dg/pr98766.c: New test. --- diff --git a/gcc/testsuite/gcc.dg/pr98766.c b/gcc/testsuite/gcc.dg/pr98766.c new file mode 100644 index 00000000000..d388fd2aa87 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr98766.c @@ -0,0 +1,12 @@ +/* PR tree-optimization/98766. */ + +/* { dg-do compile } */ +/* { dg-options "-O3 --param=avoid-fma-max-bits=8 " } */ +/* { dg-additional-options "-march=armv8.2-a+sve" { target aarch64*-*-* } } */ + +extern int a[]; +void c(short *d) { + for (int e = 0; e < 9; e++) + a[e] = d[e] * 2; +} + diff --git a/gcc/tree-ssa-math-opts.c b/gcc/tree-ssa-math-opts.c index d6201d3cb94..c4a6492b50d 100644 --- a/gcc/tree-ssa-math-opts.c +++ b/gcc/tree-ssa-math-opts.c @@ -3252,8 +3252,8 @@ convert_mult_to_fma (gimple *mul_stmt, tree op1, tree op2, bool check_defer = (state->m_deferring_p - && (tree_to_shwi (TYPE_SIZE (type)) - <= param_avoid_fma_max_bits)); + && maybe_le (tree_to_poly_int64 (TYPE_SIZE (type)), + param_avoid_fma_max_bits)); bool defer = check_defer; bool seen_negate_p = false; /* Make sure that the multiplication statement becomes dead after