summaryrefslogtreecommitdiff
path: root/backend/CleanupLabels.v
diff options
context:
space:
mode:
authorGravatar xleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e>2013-03-16 16:51:42 +0000
committerGravatar xleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e>2013-03-16 16:51:42 +0000
commit707b6a1ae9660b13cf6f68c7c0ce74017f5981c5 (patch)
tree166a21d507612d60db40737333ddec5003fc81aa /backend/CleanupLabels.v
parente44df4563f1cb893ab25b2a8b25d5b83095205be (diff)
Assorted changes to reduce stack and heap requirements when compiling very big functions.
git-svn-id: https://yquem.inria.fr/compcert/svn/compcert/trunk@2151 fca1b0fc-160b-0410-b1d3-a4f43f01ea2e
Diffstat (limited to 'backend/CleanupLabels.v')
-rw-r--r--backend/CleanupLabels.v18
1 files changed, 9 insertions, 9 deletions
diff --git a/backend/CleanupLabels.v b/backend/CleanupLabels.v
index 0ed2be1..8db871e 100644
--- a/backend/CleanupLabels.v
+++ b/backend/CleanupLabels.v
@@ -44,17 +44,17 @@ Definition labels_branched_to (c: code) : Labelset.t :=
(** Remove label declarations for labels that are not in
the [bto] (branched-to) set. *)
-Fixpoint remove_unused_labels (bto: Labelset.t) (c: code) : code :=
- match c with
- | nil => nil
- | Llabel lbl :: c' =>
- if Labelset.mem lbl bto
- then Llabel lbl :: remove_unused_labels bto c'
- else remove_unused_labels bto c'
- | i :: c' =>
- i :: remove_unused_labels bto c'
+Definition remove_unused (bto: Labelset.t) (i: instruction) (k: code) : code :=
+ match i with
+ | Llabel lbl =>
+ if Labelset.mem lbl bto then i :: k else k
+ | _ =>
+ i :: k
end.
+Definition remove_unused_labels (bto: Labelset.t) (c: code) : code :=
+ list_fold_right (remove_unused bto) c nil.
+
Definition cleanup_labels (c: code) :=
remove_unused_labels (labels_branched_to c) c.