From 676806d4955ddb24ce02411fbca3ee0f80241ba6 Mon Sep 17 00:00:00 2001
From: uros <uros@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Sat, 3 Feb 2007 23:39:31 +0000
Subject: [PATCH]         PR middle-end/30667         * combine.c
 (try_combine): Do not substitute source operand         with constants wider
 than 2 * HOST_BITS_PER_WIDE_INT.

testsuite/ChangeLog:

        PR middle-end/30667
        * gfortran.dg/pr30667.f: New test.



git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@121555 138bc75d-0d04-0410-961f-82ee72b054a4
---
 gcc/ChangeLog                       |  6 ++++++
 gcc/combine.c                       |  4 +++-
 gcc/testsuite/ChangeLog             |  5 +++++
 gcc/testsuite/gfortran.dg/pr30667.f | 10 ++++++++++
 4 files changed, 24 insertions(+), 1 deletion(-)
 create mode 100644 gcc/testsuite/gfortran.dg/pr30667.f

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d8ee26993cd9..fbf14560fd3d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2007-02-03  Uros Bizjak  <ubizjak@gmail.com>
+
+	PR middle-end/30667
+	* combine.c (try_combine): Do not substitute source operand
+	with constants wider than 2 * HOST_BITS_PER_WIDE_INT.
+
 2007-02-03  Jan Hubicka  <jh@suse.cz>
 
 	PR gcov-profile/30650
diff --git a/gcc/combine.c b/gcc/combine.c
index aa1e2ce20340..6605b7a35584 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -2003,7 +2003,9 @@ try_combine (rtx i3, rtx i2, rtx i1, int *new_direct_jump_p)
 	    offset = -1;
 	}
 
-      if (offset >= 0)
+      if (offset >= 0
+	  && (GET_MODE_BITSIZE (GET_MODE (SET_DEST (temp)))
+	      <= HOST_BITS_PER_WIDE_INT * 2))
 	{
 	  HOST_WIDE_INT mhi, ohi, ihi;
 	  HOST_WIDE_INT mlo, olo, ilo;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 7ec593780d24..2193c9563861 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2007-02-03  Uros Bizjak  <ubizjak@gmail.com>
+
+	PR middle-end/30667
+	* gfortran.dg/pr30667.f: New test.
+
 2007-02-03  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
 
 	* gcc.dg/builtins-54.c: Add more cases.
diff --git a/gcc/testsuite/gfortran.dg/pr30667.f b/gcc/testsuite/gfortran.dg/pr30667.f
new file mode 100644
index 000000000000..0f1af29d1f95
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr30667.f
@@ -0,0 +1,10 @@
+! { dg-do compile { target i?86-*-* x86_64-*-* } }
+! { dg-require-effective-target ilp32 }
+! { dg-options "-O2 -msse -ftree-vectorize" }
+      subroutine cblank_cvb(a,ndim)
+      character*(*) a
+      character*1 blank
+      data blank/' '/
+      do 100 i=1,ndim
+100   a(i:i)=blank
+      end
-- 
GitLab