From 4eeee5fbc1b60f02c4c2c75b8d6ab0e7c05ea2de Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Sun, 31 Jan 2016 18:40:36 -0800 Subject: optimize store offsets from emscripten output --- src/passes/PostEmscripten.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/passes/PostEmscripten.cpp b/src/passes/PostEmscripten.cpp index aa561baf8..14476b727 100644 --- a/src/passes/PostEmscripten.cpp +++ b/src/passes/PostEmscripten.cpp @@ -39,9 +39,12 @@ struct PostEmscripten : public WalkerPass> { // a mapped global, but it can't be because they are accessed directly (at worst, // it's 0 or an unused section of memory that was reserved for mapped globlas). // Thus it is ok to optimize such small constants into Load offsets. - void visitLoad(Load *curr) { + + template + void visitMemoryOp(T *curr) { if (curr->offset) return; - auto add = curr->ptr->dyn_cast(); + Expression* ptr = curr->ptr; + auto add = ptr->dyn_cast(); if (!add || add->op != Add) return; assert(add->type == i32); auto c = add->right->dyn_cast(); @@ -61,6 +64,13 @@ struct PostEmscripten : public WalkerPass> { curr->offset = value; } } + + void visitLoad(Load* curr) { + visitMemoryOp(curr); + } + void visitStore(Store* curr) { + visitMemoryOp(curr); + } }; static RegisterPass registerPass("post-emscripten", "miscellaneous optimizations for Emscripten-generated code"); -- cgit v1.2.3