From ee88d9aa55398253759a68eba8fec4f05819910a Mon Sep 17 00:00:00 2001
From: Maxim Kuvyrkov <maxim@codesourcery.com>
Date: Mon, 1 Jun 2009 14:45:18 +0000
Subject: [PATCH] Revert due to PR40320:

	2009-06-01  Maxim Kuvyrkov  <maxim@codesourcery.com>
	* calls.c (emit_library_call_value_1): Don't force_operand for move
	and push insns.

From-SVN: r148046
---
 gcc/ChangeLog |  8 ++++++++
 gcc/calls.c   | 10 ++++++++++
 2 files changed, 18 insertions(+)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index eee6e8447fdd..82b15ed63e25 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2009-06-01  Maxim Kuvyrkov  <maxim@codesourcery.com>
+
+	Revert due to PR40320:
+	
+	2009-06-01  Maxim Kuvyrkov  <maxim@codesourcery.com>
+	* calls.c (emit_library_call_value_1): Don't force_operand for move
+	and push insns.
+
 2009-06-01  Olivier Hainque  <hainque@adacore.com>
             Eric Botcazou  <botcazou@adacore.com>
 
diff --git a/gcc/calls.c b/gcc/calls.c
index 0d83ff4f38e2..c10b0cd3abad 100644
--- a/gcc/calls.c
+++ b/gcc/calls.c
@@ -3412,6 +3412,11 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value,
 
       nargs++;
 
+      /* Make sure it is a reasonable operand for a move or push insn.  */
+      if (!REG_P (addr) && !MEM_P (addr)
+	  && ! (CONSTANT_P (addr) && LEGITIMATE_CONSTANT_P (addr)))
+	addr = force_operand (addr, NULL_RTX);
+
       argvec[count].value = addr;
       argvec[count].mode = Pmode;
       argvec[count].partial = 0;
@@ -3447,6 +3452,11 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value,
       gcc_assert (mode != BLKmode
 		  && (GET_MODE (val) == mode || GET_MODE (val) == VOIDmode));
 
+      /* Make sure it is a reasonable operand for a move or push insn.  */
+      if (!REG_P (val) && !MEM_P (val)
+	  && ! (CONSTANT_P (val) && LEGITIMATE_CONSTANT_P (val)))
+	val = force_operand (val, NULL_RTX);
+
       if (pass_by_reference (&args_so_far, mode, NULL_TREE, 1))
 	{
 	  rtx slot;
-- 
GitLab