diff options
Diffstat (limited to 'backend/CSE2.v')
-rw-r--r-- | backend/CSE2.v | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/backend/CSE2.v b/backend/CSE2.v index b7665097..1b3d415d 100644 --- a/backend/CSE2.v +++ b/backend/CSE2.v @@ -397,7 +397,8 @@ Definition apply_instr instr (rel : RELATION.t) : RB.t := | Ijumptable _ _ => Some rel | Istore _ _ _ _ _ => Some (kill_mem rel) | Iop op args dst _ => Some (gen_oper op dst args rel) - | Iload chunk addr args dst _ => Some (load chunk addr dst args rel) + | Iload TRAP chunk addr args dst _ => Some (load chunk addr dst args rel) + | Iload NOTRAP chunk addr args dst _ => Some (kill_reg dst rel) | Icall _ _ _ dst _ => Some (kill_reg dst (kill_mem rel)) | Ibuiltin _ _ res _ => Some (RELATION.top) (* TODO (kill_builtin_res res x) *) | Itailcall _ _ _ | Ireturn _ => RB.bot @@ -461,12 +462,14 @@ Definition transf_instr (fmap : option (PMap.t RB.t)) | None => Iop op args' dst s | Some src => Iop Omove (src::nil) dst s end - | Iload chunk addr args dst s => + | Iload TRAP chunk addr args dst s => let args' := subst_args fmap pc args in match find_load_in_fmap fmap pc chunk addr args' with - | None => Iload chunk addr args' dst s + | None => Iload TRAP chunk addr args' dst s | Some src => Iop Omove (src::nil) dst s end + | Iload NOTRAP chunk addr args dst s => + Iload NOTRAP chunk addr (subst_args fmap pc args) dst s | Istore chunk addr args src s => Istore chunk addr (subst_args fmap pc args) src s | Icall sig ros args dst s => |