aboutsummaryrefslogtreecommitdiff
path: root/gcc/recog.c
diff options
context:
space:
mode:
authorAndreas Krebbel <Andreas.Krebbel@de.ibm.com>2009-03-09 13:30:19 +0000
committerAndreas Krebbel <Andreas.Krebbel@de.ibm.com>2009-03-09 13:30:19 +0000
commit3b0560fe41b7108d2e07f93eedd9f69bc6a58500 (patch)
tree031dd1ced917e31481cde7178045772632594fd5 /gcc/recog.c
parent29a37f095d469dc0e26f5bd801d52da6d2f1cbd5 (diff)
2009-03-09 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
* recog.c (verfiy_changes): Disallow renaming of hard regs in inline asms for register asm ("") declarations. 2009-03-09 Andreas Krebbel <Andreas.Krebbel@de.ibm.com> * gcc.target/s390/20090223-1.c: New testcase. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@144726 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/recog.c')
-rw-r--r--gcc/recog.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/gcc/recog.c b/gcc/recog.c
index 7c22faec6de..70370e3ad81 100644
--- a/gcc/recog.c
+++ b/gcc/recog.c
@@ -379,6 +379,16 @@ verify_changes (int num)
if (! memory_address_p (GET_MODE (object), XEXP (object, 0)))
break;
}
+ else if (REG_P (changes[i].old)
+ && asm_noperands (PATTERN (object)) > 0
+ && REG_EXPR (changes[i].old) != NULL_TREE
+ && DECL_ASSEMBLER_NAME_SET_P (REG_EXPR (changes[i].old))
+ && DECL_REGISTER (REG_EXPR (changes[i].old)))
+ {
+ /* Don't allow changes of hard register operands to inline
+ assemblies if they have been defined as register asm ("x"). */
+ break;
+ }
else if (insn_invalid_p (object))
{
rtx pat = PATTERN (object);