diff options
Diffstat (limited to 'asmcomp/i386/proc.ml')
-rw-r--r-- | asmcomp/i386/proc.ml | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/asmcomp/i386/proc.ml b/asmcomp/i386/proc.ml index d80d182088..38bfdb29f9 100644 --- a/asmcomp/i386/proc.ml +++ b/asmcomp/i386/proc.ml @@ -182,6 +182,20 @@ let max_register_pressure = function Iintoffloat -> [| 6; max_int |] | _ -> [|7; max_int |] +(* Pure operations (without any side effect besides updating their result + registers). Note that floating-point operations are not pure + because they update the float stack. *) + +let op_is_pure = function + | Icall_ind | Icall_imm _ | Itailcall_ind | Itailcall_imm _ + | Iextcall _ | Istackoffset _ | Istore _ | Ialloc _ + | Iintop(Icheckbound) | Iintop_imm(Icheckbound, _) -> false + | Iconst_float _ | Inegf | Iabsf | Iaddf | Isubf | Imulf | Idivf + | Iintoffloat | Ifloatofint | Iload((Single | Double | Double_u), _) -> false + | Ispecific(Ilea _) -> true + | Ispecific _ -> false + | _ -> true + (* Layout of the stack frame *) let num_stack_slots = [| 0; 0 |] |