diff options
Diffstat (limited to 'gcc/rtlanal.c')
-rw-r--r-- | gcc/rtlanal.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/gcc/rtlanal.c b/gcc/rtlanal.c index c992c439bc3..e770a4d08a6 100644 --- a/gcc/rtlanal.c +++ b/gcc/rtlanal.c @@ -2138,7 +2138,6 @@ volatile_insn_p (x) case REG: case SCRATCH: case CLOBBER: - case ASM_INPUT: case ADDR_VEC: case ADDR_DIFF_VEC: case CALL: @@ -2149,6 +2148,7 @@ volatile_insn_p (x) /* case TRAP_IF: This isn't clear yet. */ return 1; + case ASM_INPUT: case ASM_OPERANDS: if (MEM_VOLATILE_P (x)) return 1; @@ -2205,7 +2205,6 @@ volatile_refs_p (x) case REG: case SCRATCH: case CLOBBER: - case ASM_INPUT: case ADDR_VEC: case ADDR_DIFF_VEC: return 0; @@ -2214,6 +2213,7 @@ volatile_refs_p (x) return 1; case MEM: + case ASM_INPUT: case ASM_OPERANDS: if (MEM_VOLATILE_P (x)) return 1; @@ -2269,7 +2269,6 @@ side_effects_p (x) case PC: case REG: case SCRATCH: - case ASM_INPUT: case ADDR_VEC: case ADDR_DIFF_VEC: return 0; @@ -2292,6 +2291,7 @@ side_effects_p (x) return 1; case MEM: + case ASM_INPUT: case ASM_OPERANDS: if (MEM_VOLATILE_P (x)) return 1; @@ -2418,6 +2418,12 @@ may_trap_p (x) return 1; break; + case FIX: + /* Conversion of floating point might trap. */ + if (flag_trapping_math && HONOR_NANS (GET_MODE (XEXP (x, 0)))) + return 1; + break; + case NEG: case ABS: /* These operations don't trap even with floating point. */ |