From 3d763bcffe7b76b4167159c9193263dbb47ededd Mon Sep 17 00:00:00 2001
From: Kazu Hirata <kazu@codesourcery.com>
Date: Mon, 22 May 2006 17:55:53 +0000
Subject: [PATCH] re PR target/27266 (syncronization primitives cause ICE with
 -march=pentium or better)

gcc/
	PR target/27266
	* config/i386/i386.c (ix86_expand_branch): Jump to simple if
	ix86_compare_emitted is non-NULL.

gcc/testsuite/
	PR target/27266
	* gcc.target/i386/pr27266.c: New.

From-SVN: r113987
---
 gcc/ChangeLog                           |  6 ++++++
 gcc/config/i386/i386.c                  |  6 ++++++
 gcc/testsuite/ChangeLog                 |  5 +++++
 gcc/testsuite/gcc.target/i386/pr27266.c | 14 ++++++++++++++
 4 files changed, 31 insertions(+)
 create mode 100644 gcc/testsuite/gcc.target/i386/pr27266.c

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5ae866d0c9d6..2d8c8ea24061 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2006-05-22  Kazu Hirata  <kazu@codesourcery.com>
+
+	PR target/27266
+	* config/i386/i386.c (ix86_expand_branch): Jump to simple if
+	ix86_compare_emitted is non-NULL.
+
 2006-05-22  Volker Reichelt  <reichelt@igpm.rwth-aachen.de>
 
 	PR c++/27451
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index d1f087c9d153..b004415e79c9 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -10175,6 +10175,12 @@ ix86_expand_branch (enum rtx_code code, rtx label)
 {
   rtx tmp;
 
+  /* If we have emitted a compare insn, go straight to simple.
+     ix86_expand_compare won't emit anything if ix86_compare_emitted
+     is non NULL.  */
+  if (ix86_compare_emitted)
+    goto simple;
+
   switch (GET_MODE (ix86_compare_op0))
     {
     case QImode:
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 89b9a02fa89f..79ec93c6995e 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2006-05-22  Kazu Hirata  <kazu@codesourcery.com>
+
+	PR target/27266
+	* gcc.target/i386/pr27266.c: New.
+
 2006-05-22  Volker Reichelt  <reichelt@igpm.rwth-aachen.de>
 
 	PR c++/27451
diff --git a/gcc/testsuite/gcc.target/i386/pr27266.c b/gcc/testsuite/gcc.target/i386/pr27266.c
new file mode 100644
index 000000000000..73e7c596f32e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr27266.c
@@ -0,0 +1,14 @@
+/* PR target/27266.
+   The testcase below used to trigger an ICE.  */
+
+/* { dg-do compile } */
+/* { dg-require-effective-target ilp32 } */
+/* { dg-options "-march=pentium" } */
+
+signed long long sll;
+
+void
+foo (void)
+{
+  __sync_fetch_and_add (&sll, 1);
+}
-- 
GitLab