Bug 102752 - [12 Regression] Recent change to ldist causing ICE on msp430-elf, rl78-elf, and xstormy16-elf
Summary: [12 Regression] Recent change to ldist causing ICE on msp430-elf, rl78-elf, a...
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: tree-optimization (show other bugs)
Version: 12.0
: P1 normal
Target Milestone: 12.0
Assignee: Not yet assigned to anyone
URL:
Keywords: ice-on-valid-code
Depends on:
Blocks:
 
Reported: 2021-10-14 17:11 UTC by Jeffrey A. Law
Modified: 2021-10-15 14:41 UTC (History)
2 users (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2021-10-14 00:00:00


Attachments
Fix determining precission of reduction_var (1.31 KB, application/mbox)
2021-10-15 09:41 UTC, Stefan Schulze Frielinghaus
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Jeffrey A. Law 2021-10-14 17:11:42 UTC
After this change:


msp430-elf, rl78-elf and xstormy16-elf are all getting an ICE on gcc.c-torture/execute/

From the msp430-elf gcc.log file:

/home/jlaw/jenkins/workspace/msp430-elf/gcc/gcc/testsuite/gcc.c-torture/execute/20100827-1.c: In function 'foo':^M
/home/jlaw/jenkins/workspace/msp430-elf/gcc/gcc/testsuite/gcc.c-torture/execute/20100827-1.c:3:1: internal compiler error: tree check: expected class 'type', have 'exceptional' (ssa_name) in transform_reduction_loop, at tree-loop-distribution.c:3684^M
0x1532ceb tree_class_check_failed(tree_node const*, tree_code_class, char const*, int, char const*)^M
        ../../..//gcc/gcc/tree.c:8739^M
0x861c29 tree_class_check(tree_node*, tree_code_class, char const*, int, char const*)^M
        ../../..//gcc/gcc/tree.h:3556^M
0x12006d9 loop_distribution::transform_reduction_loop(loop*)^M
        ../../..//gcc/gcc/tree-loop-distribution.c:3684^M
0x1200d92 loop_distribution::execute(function*)^M
        ../../..//gcc/gcc/tree-loop-distribution.c:3776^M
0x12012bd execute^M
        ../../..//gcc/gcc/tree-loop-distribution.c:3901^M
Please submit a full bug report,^M

You should be able to reproduce this with just a cross compiler.  No assembler or target libraries should be needed.
Comment 1 Jeffrey A. Law 2021-10-14 17:14:34 UTC
gcc.dg/tree-ssa/pr45427.c shows the same issue.
Comment 2 Stefan Schulze Frielinghaus 2021-10-14 18:07:23 UTC
It looks like I missed to take the TREE_TYPE of reduction_var. I just did a quick test with

diff --git a/gcc/tree-loop-distribution.c b/gcc/tree-loop-distribution.c
index fb9250031b5..0559b9c47d7 100644
--- a/gcc/tree-loop-distribution.c
+++ b/gcc/tree-loop-distribution.c
@@ -3430,7 +3430,7 @@ generate_strlen_builtin_using_rawmemchr (loop_p loop, tree reduction_var,
 static bool
 reduction_var_overflows_first (tree reduction_var, tree load_type)
 {
-  widest_int n2 = wi::lshift (1, TYPE_PRECISION (reduction_var));;
+  widest_int n2 = wi::lshift (1, TYPE_PRECISION (TREE_TYPE (reduction_var)));;
   widest_int m2 = wi::lshift (1, TYPE_PRECISION (ptrdiff_type_node) - 1);
   widest_int s = wi::to_widest (TYPE_SIZE_UNIT (load_type));
   return wi::ltu_p (n2, wi::udiv_trunc (m2, s));
@@ -3681,7 +3681,7 @@ loop_distribution::transform_reduction_loop (loop_p loop)
          && ((TYPE_PRECISION (sizetype) >= TYPE_PRECISION (ptr_type_node) - 1
               && TYPE_PRECISION (ptr_type_node) >= 32)
              || (TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (reduction_var))
-                 && TYPE_PRECISION (reduction_var) <= TYPE_PRECISION (sizetype)))
+                 && TYPE_PRECISION (TREE_TYPE (reduction_var)) <= TYPE_PRECISION (sizetype)))
          && builtin_decl_implicit (BUILT_IN_STRLEN))
        generate_strlen_builtin (loop, reduction_var, load_iv.base,
                                 reduction_iv.base, loc);

successfully. It's getting late here. I will come back to this tomorrow morning. Sorry for the inconvenience.
Comment 3 Jeffrey A. Law 2021-10-14 18:11:52 UTC
No worries.  This is why we have testing systems.
Comment 4 Jeffrey A. Law 2021-10-14 23:41:19 UTC
And just an FYI.  That patch fixes the problem on all three affected platforms.  Assuming it bootstraps and regression tests, consider it pre-approved for the trunk.

Thanks
Comment 5 Stefan Schulze Frielinghaus 2021-10-15 09:41:30 UTC
Created attachment 51606 [details]
Fix determining precission of reduction_var
Comment 6 Stefan Schulze Frielinghaus 2021-10-15 09:43:28 UTC
Thanks for confirmation! Bootstrap and regtest are still running on x86 as well as IBM Z. I will commit the attached patch assuming successful runs.
Comment 7 Jeffrey A. Law 2021-10-15 14:41:38 UTC
Fixed on the trunk.