summaryrefslogtreecommitdiff
path: root/gcc/resource.c
diff options
context:
space:
mode:
authorMark Mitchell <mark@codesourcery.com>1999-05-04 16:02:07 +0000
committerMark Mitchell <mmitchel@gcc.gnu.org>1999-05-04 16:02:07 +0000
commit3d298f8f0e3934f7951b13281976bb9eda021387 (patch)
tree1861645136096dd536aa0bee0c2ebc01e0d0a214 /gcc/resource.c
parent50e0211ea034d5f30eb033cb364f547d4ad794d7 (diff)
downloadgcc-3d298f8f0e3934f7951b13281976bb9eda021387.tar.gz
resource.c (mark_set_resources): Handle UNSPEC_VOLATILE...
* resource.c (mark_set_resources): Handle UNSPEC_VOLATILE, ASM_INPUT, TRAP_IF, and ASM_OPERANDS just like in mark_referenced_resources. From-SVN: r26769
Diffstat (limited to 'gcc/resource.c')
-rw-r--r--gcc/resource.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/gcc/resource.c b/gcc/resource.c
index eceac56df90..bc214a3dc23 100644
--- a/gcc/resource.c
+++ b/gcc/resource.c
@@ -739,6 +739,28 @@ mark_set_resources (x, res, in_dest, include_delayed_effects)
SET_HARD_REG_BIT (res->regs, REGNO (x) + i);
return;
+ case UNSPEC_VOLATILE:
+ case ASM_INPUT:
+ /* Traditional asm's are always volatile. */
+ res->volatil = 1;
+ return;
+
+ case TRAP_IF:
+ res->volatil = 1;
+ break;
+
+ case ASM_OPERANDS:
+ res->volatil = MEM_VOLATILE_P (x);
+
+ /* For all ASM_OPERANDS, we must traverse the vector of input operands.
+ We can not just fall through here since then we would be confused
+ by the ASM_INPUT rtx inside ASM_OPERANDS, which do not indicate
+ traditional asms unlike their normal usage. */
+
+ for (i = 0; i < ASM_OPERANDS_INPUT_LENGTH (x); i++)
+ mark_set_resources (ASM_OPERANDS_INPUT (x, i), res, in_dest, 0);
+ return;
+
default:
break;
}