tree-optimization/114672 - WIDEN_MULT_PLUS_EXPR type mismatch
The following makes sure to restrict WIDEN_MULT*_EXPR to a mode precision final compute type as the mode is used to find the optab and type checking chokes when seeing bit-precisions later which would likely also not properly expanded to RTL. PR tree-optimization/114672 * tree-ssa-math-opts.cc (convert_plusminus_to_widen): Only allow mode-precision results. * gcc.dg/torture/pr114672.c: New testcase.
This commit is contained in:
parent
5aa3fec38c
commit
912753cc5f
2 changed files with 17 additions and 2 deletions
14
gcc/testsuite/gcc.dg/torture/pr114672.c
Normal file
14
gcc/testsuite/gcc.dg/torture/pr114672.c
Normal file
|
@ -0,0 +1,14 @@
|
|||
/* { dg-do compile } */
|
||||
|
||||
struct {
|
||||
__INT64_TYPE__ m : 60;
|
||||
} s;
|
||||
|
||||
short a;
|
||||
short b;
|
||||
|
||||
void
|
||||
foo ()
|
||||
{
|
||||
s.m += a * b;
|
||||
}
|
|
@ -2918,8 +2918,9 @@ convert_plusminus_to_widen (gimple_stmt_iterator *gsi, gimple *stmt,
|
|||
|
||||
lhs = gimple_assign_lhs (stmt);
|
||||
type = TREE_TYPE (lhs);
|
||||
if (TREE_CODE (type) != INTEGER_TYPE
|
||||
if ((TREE_CODE (type) != INTEGER_TYPE
|
||||
&& TREE_CODE (type) != FIXED_POINT_TYPE)
|
||||
|| !type_has_mode_precision_p (type))
|
||||
return false;
|
||||
|
||||
if (code == MINUS_EXPR)
|
||||
|
|
Loading…
Add table
Reference in a new issue