diff options
Diffstat (limited to 'src/passes/SafeHeap.cpp')
-rw-r--r-- | src/passes/SafeHeap.cpp | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/src/passes/SafeHeap.cpp b/src/passes/SafeHeap.cpp index 3cc1021ed..852af0c16 100644 --- a/src/passes/SafeHeap.cpp +++ b/src/passes/SafeHeap.cpp @@ -28,6 +28,7 @@ #include "ir/bits.h" #include "ir/function-type-utils.h" #include "ir/import-utils.h" +#include "ir/load-utils.h" namespace wasm { @@ -39,7 +40,7 @@ static Name getLoadName(Load* curr) { std::string ret = "SAFE_HEAP_LOAD_"; ret += printType(curr->type); ret += "_" + std::to_string(curr->bytes) + "_"; - if (!isFloatType(curr->type) && !curr->signed_) { + if (LoadUtils::isSignRelevant(curr) && !curr->signed_) { ret += "U_"; } if (curr->isAtomic) { @@ -219,8 +220,10 @@ struct SafeHeap : public Pass { // creates a function for a particular style of load void addLoadFunc(Load style, Module* module) { + auto name = getLoadName(&style); + if (module->getFunctionOrNull(name)) return; auto* func = new Function; - func->name = getLoadName(&style); + func->name = name; func->params.push_back(i32); // pointer func->params.push_back(i32); // offset func->vars.push_back(i32); // pointer + offset @@ -265,8 +268,10 @@ struct SafeHeap : public Pass { // creates a function for a particular type of store void addStoreFunc(Store style, Module* module) { + auto name = getStoreName(&style); + if (module->getFunctionOrNull(name)) return; auto* func = new Function; - func->name = getStoreName(&style); + func->name = name; func->params.push_back(i32); // pointer func->params.push_back(i32); // offset func->params.push_back(style.valueType); // value |