#! /bin/sh -e

# DP: Proposed patch for PR target/34571 (alpha)

dir=
if [ $# -eq 3 -a "$2" = '-d' ]; then
    pdir="-d $3"
    dir="$3/"
elif [ $# -ne 1 ]; then
    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
    exit 1
fi
case "$1" in
    -patch)
        patch $pdir -f --no-backup-if-mismatch -p0 < $0
        ;;
    -unpatch)
        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
        ;;
    *)
        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
        exit 1
esac
exit 0

2007-12-26  Rask Ingemann Lambertsen  <rask@sygehus.dk>

	PR target/34571
	* config/alpha/alpha.c (alpha_cannot_force_const_mem): Use
	symbolic_operand.
	* varasm.c (output_constant_pool_1): Fix typo.

Index: gcc/config/alpha/alpha.c
===================================================================
--- gcc/config/alpha/alpha.c	(revision 131132)
+++ gcc/config/alpha/alpha.c	(working copy)
@@ -1112,10 +1112,9 @@ alpha_legitimize_address (rtx x, rtx scr
 
 static bool
 alpha_cannot_force_const_mem (rtx x)
 {
-  enum rtx_code code = GET_CODE (x);
-  return code == SYMBOL_REF || code == LABEL_REF || code == CONST;
+  return symbolic_operand (x, GET_MODE (x));
 }
 
 /* We do not allow indirect calls to be optimized into sibling calls, nor
    can we allow a call to a function with a different GP to be optimized
Index: gcc/varasm.c
===================================================================
--- gcc/varasm.c	(revision 131132)
+++ gcc/varasm.c	(working copy)
@@ -3709,9 +3709,9 @@ output_constant_pool_1 (struct constant_
       tmp = XEXP (XEXP (x, 0), 0);
       /* FALLTHRU  */
 
     case LABEL_REF:
-      tmp = XEXP (x, 0);
+      tmp = XEXP (tmp, 0);
       gcc_assert (!INSN_DELETED_P (tmp));
       gcc_assert (!NOTE_P (tmp)
 		  || NOTE_KIND (tmp) != NOTE_INSN_DELETED);
       break;
