re PR tree-optimization/86159 (g++ ICE at -O1 and above on valid code: incorrect...
authorRichard Biener <rguenther@suse.de>
Fri, 15 Jun 2018 11:08:30 +0000 (11:08 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Fri, 15 Jun 2018 11:08:30 +0000 (11:08 +0000)
2018-06-15  Richard Biener  <rguenther@suse.de>

PR middle-end/86159
* tree-cfg.c (gimplify_build3): Do not strip sign conversions,
leave useless conversion stripping to force_gimple_operand_gsi.
(gimplify_build2): Likewise.
(gimplify_build1): Likewise.

* g++.dg/pr86159.C: New testcase.

From-SVN: r261622

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/pr86159.C [new file with mode: 0644]
gcc/tree-cfg.c

index 8f95eb582f77dc675ec891424aa217c34c6d967c..361c6e3a86e89fefba88dfa6abdb291f1d5e20b5 100644 (file)
@@ -1,3 +1,11 @@
+2018-06-15  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/86159
+       * tree-cfg.c (gimplify_build3): Do not strip sign conversions,
+       leave useless conversion stripping to force_gimple_operand_gsi.
+       (gimplify_build2): Likewise.
+       (gimplify_build1): Likewise.
+
 2018-06-15  Richard Biener  <rguenther@suse.de>
 
        PR middle-end/86076
index 04278c6dcf0fd0087df9361153f60f31baf65c57..262bb2d3585c357a30ffba0f4a5fcdbfc401a0da 100644 (file)
@@ -1,3 +1,8 @@
+2018-06-15  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/86159
+       * g++.dg/pr86159.C: New testcase.
+
 2018-06-15  Richard Biener  <rguenther@suse.de>
 
        PR middle-end/86076
diff --git a/gcc/testsuite/g++.dg/pr86159.C b/gcc/testsuite/g++.dg/pr86159.C
new file mode 100644 (file)
index 0000000..83168f5
--- /dev/null
@@ -0,0 +1,10 @@
+// { dg-do compile }
+// { dg-options "-O -w -Wno-psabi" }
+
+typedef int vec __attribute__((vector_size(32)));
+vec fn1()
+{
+  vec x, zero{};
+  vec one = zero + 1;
+  return x < zero ? one : zero;
+}
index 78d80b00045ed6ffb61765f519b9fc1029af2a07..85e845ff097aa5d1ac0f78f2b657f09dfa0ed3bd 100644 (file)
@@ -8976,8 +8976,6 @@ gimplify_build3 (gimple_stmt_iterator *gsi, enum tree_code code,
   location_t loc = gimple_location (gsi_stmt (*gsi));
 
   ret = fold_build3_loc (loc, code, type, a, b, c);
-  STRIP_NOPS (ret);
-
   return force_gimple_operand_gsi (gsi, ret, true, NULL, true,
                                    GSI_SAME_STMT);
 }
@@ -8992,8 +8990,6 @@ gimplify_build2 (gimple_stmt_iterator *gsi, enum tree_code code,
   tree ret;
 
   ret = fold_build2_loc (gimple_location (gsi_stmt (*gsi)), code, type, a, b);
-  STRIP_NOPS (ret);
-
   return force_gimple_operand_gsi (gsi, ret, true, NULL, true,
                                    GSI_SAME_STMT);
 }
@@ -9008,8 +9004,6 @@ gimplify_build1 (gimple_stmt_iterator *gsi, enum tree_code code, tree type,
   tree ret;
 
   ret = fold_build1_loc (gimple_location (gsi_stmt (*gsi)), code, type, a);
-  STRIP_NOPS (ret);
-
   return force_gimple_operand_gsi (gsi, ret, true, NULL, true,
                                    GSI_SAME_STMT);
 }