diff mbox series

tree-optimization/115646 - ICE with pow shrink-wrapping from bitfield

Message ID 20240625141451.9344C3870896@sourceware.org
State New
Headers show
Series tree-optimization/115646 - ICE with pow shrink-wrapping from bitfield | expand

Commit Message

Richard Biener June 25, 2024, 2:14 p.m. UTC
The following makes analysis and transform agree on constraints.

Bootstrap and regtest pending on x86_64-unknown-linux-gnu.

	PR tree-optimization/115646
	* tree-call-cdce.cc (check_pow): Check for bit_sz values
	as allowed by transform.

	* gcc.dg/pr115646.c: New testcase.
---
 gcc/testsuite/gcc.dg/pr115646.c | 13 +++++++++++++
 gcc/tree-call-cdce.cc           |  2 +-
 2 files changed, 14 insertions(+), 1 deletion(-)
 create mode 100644 gcc/testsuite/gcc.dg/pr115646.c
diff mbox series

Patch

diff --git a/gcc/testsuite/gcc.dg/pr115646.c b/gcc/testsuite/gcc.dg/pr115646.c
new file mode 100644
index 00000000000..247777bc1e4
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr115646.c
@@ -0,0 +1,13 @@ 
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+extern double pow(double x, double y);
+
+struct S {
+    unsigned int a : 3, b : 8, c : 21;
+};
+
+void foo (struct S *p)
+{
+  pow (p->c, 42);
+}
diff --git a/gcc/tree-call-cdce.cc b/gcc/tree-call-cdce.cc
index 7f67a0b2dc6..befe6acf178 100644
--- a/gcc/tree-call-cdce.cc
+++ b/gcc/tree-call-cdce.cc
@@ -260,7 +260,7 @@  check_pow (gcall *pow_call)
       /* If the type of the base is too wide,
          the resulting shrink wrapping condition
 	 will be too conservative.  */
-      if (bit_sz > MAX_BASE_INT_BIT_SIZE)
+      if (bit_sz != 8 && bit_sz != 16 && bit_sz != MAX_BASE_INT_BIT_SIZE)
         return false;
 
       return true;