From de21ce7fa8f64a4438874ede019e77034de43310 Mon Sep 17 00:00:00 2001
From: John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
Date: Thu, 1 Dec 2011 02:08:10 +0000
Subject: [PATCH] re PR middle-end/50283 (FAIL: g++.dg/eh/simd-1.C execution
 test)

	PR middle-end/50283
	* config/pa/pa.md (in_branch_delay): Disallow frame related insns.
	(in_nullified_branch_delay): Likewise.
	(in_call_delay): Likewise.

From-SVN: r181868
---
 gcc/ChangeLog       |  7 +++++++
 gcc/config/pa/pa.md | 12 ++++++++----
 2 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index dceaefcf3ccd..addee392384b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2011-11-30  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+
+	PR middle-end/50283
+	* config/pa/pa.md (in_branch_delay): Disallow frame related insns.
+	(in_nullified_branch_delay): Likewise.
+	(in_call_delay): Likewise.
+
 2011-11-30  Richard Henderson  <rth@redhat.com>
 
 	* predict.c (expr_expected_value_1): Assume compare-and-swap builtin
diff --git a/gcc/config/pa/pa.md b/gcc/config/pa/pa.md
index 1be614c32419..d5417febe8b3 100644
--- a/gcc/config/pa/pa.md
+++ b/gcc/config/pa/pa.md
@@ -121,10 +121,12 @@
 
 ;; Attributes for instruction and branch scheduling
 
-;; For conditional branches.
+;; For conditional branches. Frame related instructions are not allowed
+;; because they confuse the unwind support.
 (define_attr "in_branch_delay" "false,true"
   (if_then_else (and (eq_attr "type" "!uncond_branch,btable_branch,branch,cbranch,fbranch,call,dyncall,multi,milli,parallel_branch")
-		     (eq_attr "length" "4"))
+		     (eq_attr "length" "4")
+		     (not (match_test "RTX_FRAME_RELATED_P (insn)")))
 		(const_string "true")
 		(const_string "false")))
 
@@ -132,7 +134,8 @@
 ;; even if the instruction is nullified.
 (define_attr "in_nullified_branch_delay" "false,true"
   (if_then_else (and (eq_attr "type" "!uncond_branch,btable_branch,branch,cbranch,fbranch,call,dyncall,multi,milli,fpcc,fpalu,fpmulsgl,fpmuldbl,fpdivsgl,fpdivdbl,fpsqrtsgl,fpsqrtdbl,parallel_branch")
-		     (eq_attr "length" "4"))
+		     (eq_attr "length" "4")
+		     (not (match_test "RTX_FRAME_RELATED_P (insn)")))
 		(const_string "true")
 		(const_string "false")))
 
@@ -140,7 +143,8 @@
 ;; delay slot.
 (define_attr "in_call_delay" "false,true"
   (cond [(and (eq_attr "type" "!uncond_branch,btable_branch,branch,cbranch,fbranch,call,dyncall,multi,milli,parallel_branch")
-	      (eq_attr "length" "4"))
+	      (eq_attr "length" "4")
+	      (not (match_test "RTX_FRAME_RELATED_P (insn)")))
 	   (const_string "true")
 	 (eq_attr "type" "uncond_branch")
 	   (if_then_else (match_test "TARGET_JUMP_IN_DELAY")
-- 
GitLab