summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rw-r--r--all.h3
-rw-r--r--main.c3
3 files changed, 7 insertions, 1 deletions
diff --git a/Makefile b/Makefile
index 935cb95..357575b 100644
--- a/Makefile
+++ b/Makefile
@@ -4,7 +4,7 @@ ABI = sysv
 V = @
 OBJDIR = obj
 
-SRC = main.c util.c parse.c mem.c ssa.c copy.c live.c $(ABI).c isel.c spill.c rega.c emit.c
+SRC = main.c util.c parse.c mem.c ssa.c copy.c fold.c live.c $(ABI).c isel.c spill.c rega.c emit.c
 OBJ = $(SRC:%.c=$(OBJDIR)/%.o)
 
 CFLAGS += -Wall -Wextra -std=c99 -g -pedantic
diff --git a/all.h b/all.h
index c9b52b0..c6e2acb 100644
--- a/all.h
+++ b/all.h
@@ -533,6 +533,9 @@ void ssa(Fn *);
 /* copy.c */
 void copy(Fn *);
 
+/* fold.c */
+void fold(Fn *);
+
 /* live.c */
 void liveon(BSet *, Blk *, Blk *);
 void filllive(Fn *);
diff --git a/main.c b/main.c
index d568621..1f1315f 100644
--- a/main.c
+++ b/main.c
@@ -11,6 +11,7 @@ char debug['Z'+1] = {
 	['M'] = 0, /* memory optimization */
 	['N'] = 0, /* ssa construction */
 	['C'] = 0, /* copy elimination */
+	['F'] = 0, /* constant folding */
 	['S'] = 0, /* spilling */
 	['R'] = 0, /* reg. allocation */
 };
@@ -48,6 +49,8 @@ func(Fn *fn)
 	ssa(fn);
 	filluse(fn);
 	copy(fn);
+	filluse(fn);
+	fold(fn);
 	abi(fn);
 	filluse(fn);
 	isel(fn);