diff options
-rw-r--r-- | src/passes/OptimizeAddedConstants.cpp | 5 | ||||
-rw-r--r-- | test/lit/passes/optimize-added-constants-nomemory.wast | 21 |
2 files changed, 26 insertions, 0 deletions
diff --git a/src/passes/OptimizeAddedConstants.cpp b/src/passes/OptimizeAddedConstants.cpp index c76711d8a..f03109223 100644 --- a/src/passes/OptimizeAddedConstants.cpp +++ b/src/passes/OptimizeAddedConstants.cpp @@ -290,6 +290,11 @@ struct OptimizeAddedConstants << "--low-memory-unused flag is set."; } + if (getModule()->memories.empty()) { + // There can be no loads and stores without a memory. + return; + } + // Multiple passes may be needed if we have x + 4 + 8 etc. (nested structs // in C can cause this, but it's rare). Note that we only need that for the // propagation case (as 4 + 8 would be optimized directly if it were diff --git a/test/lit/passes/optimize-added-constants-nomemory.wast b/test/lit/passes/optimize-added-constants-nomemory.wast new file mode 100644 index 000000000..75b9e112c --- /dev/null +++ b/test/lit/passes/optimize-added-constants-nomemory.wast @@ -0,0 +1,21 @@ +;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. + +;; RUN: wasm-opt %s -all --optimize-added-constants --low-memory-unused -S -o - | filecheck %s + +;; Check we do not error on modules with no memories, which the pass has +;; nothing to do on. + +(module + ;; CHECK: (func $do-stuff-without-a-memory (type $0) (param $x i32) (result i32) + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: (i32.const 42) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + (func $do-stuff-without-a-memory (param $x i32) (result i32) + (i32.add + (local.get $x) + (i32.const 42) + ) + ) +) |