| /* | |
| * Copyright 2024 WebAssembly Community Group participants | |
| * | |
| * Licensed under the Apache License, Version 2.0 (the "License"); | |
| * you may not use this file except in compliance with the License. | |
| * You may obtain a copy of the License at | |
| * | |
| * http://www.apache.org/licenses/LICENSE-2.0 | |
| * | |
| * Unless required by applicable law or agreed to in writing, software | |
| * distributed under the License is distributed on an "AS IS" BASIS, | |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| * See the License for the specific language governing permissions and | |
| * limitations under the License. | |
| */ | |
| #include "ir/effects.h" | |
| #include "wasm.h" | |
| namespace wasm { | |
| std::ostream& operator<<(std::ostream& o, const EffectAnalyzer& effects) { | |
| o << "EffectAnalyzer {\n"; | |
| if (effects.branchesOut) { | |
| o << "branchesOut\n"; | |
| } | |
| if (effects.calls) { | |
| o << "calls\n"; | |
| } | |
| if (effects.localsRead.size()) { | |
| o << "localsRead\n"; | |
| } | |
| if (effects.localsWritten.size()) { | |
| o << "localsWritten\n"; | |
| } | |
| if (effects.mutableGlobalsRead.size()) { | |
| o << "mutableGlobalsRead\n"; | |
| } | |
| if (effects.globalsWritten.size()) { | |
| o << "globalsWritten\n"; | |
| } | |
| if (effects.readsMemory) { | |
| o << "readsMemory\n"; | |
| } | |
| if (effects.writesMemory) { | |
| o << "writesMemory\n"; | |
| } | |
| if (effects.readsSharedMemory) { | |
| o << "readsSharedMemory\n"; | |
| } | |
| if (effects.writesSharedMemory) { | |
| o << "writesSharedMemory\n"; | |
| } | |
| if (effects.readsTable) { | |
| o << "readsTable\n"; | |
| } | |
| if (effects.writesTable) { | |
| o << "writesTable\n"; | |
| } | |
| if (effects.readsMutableStruct) { | |
| o << "readsMutableStruct\n"; | |
| } | |
| if (effects.writesStruct) { | |
| o << "writesStruct\n"; | |
| } | |
| if (effects.readsSharedMutableStruct) { | |
| o << "readsSharedMutableStruct\n"; | |
| } | |
| if (effects.writesSharedStruct) { | |
| o << "writesSharedStruct\n"; | |
| } | |
| if (effects.readsMutableArray) { | |
| o << "readsArray\n"; | |
| } | |
| if (effects.writesArray) { | |
| o << "writesArray\n"; | |
| } | |
| if (effects.readsSharedMutableArray) { | |
| o << "readsSharedMutableArray\n"; | |
| } | |
| if (effects.writesSharedArray) { | |
| o << "writesSharedArray\n"; | |
| } | |
| if (effects.trap) { | |
| o << "trap\n"; | |
| } | |
| if (effects.implicitTrap) { | |
| o << "implicitTrap\n"; | |
| } | |
| if (effects.readOrder != MemoryOrder::Unordered) { | |
| o << "readOrder " << effects.readOrder << "\n"; | |
| } | |
| if (effects.writeOrder != MemoryOrder::Unordered) { | |
| o << "writeOrder " << effects.writeOrder << "\n"; | |
| } | |
| if (effects.throws_) { | |
| o << "throws_\n"; | |
| } | |
| if (effects.suspends) { | |
| o << "suspends_\n"; | |
| } | |
| if (effects.tryDepth) { | |
| o << "tryDepth\n"; | |
| } | |
| if (effects.catchDepth) { | |
| o << "catchDepth\n"; | |
| } | |
| if (effects.danglingPop) { | |
| o << "danglingPop\n"; | |
| } | |
| if (effects.mayNotReturn) { | |
| o << "mayNotReturn\n"; | |
| } | |
| if (effects.hasReturnCallThrow) { | |
| o << "hasReturnCallThrow\n"; | |
| } | |
| if (effects.accessesLocal()) { | |
| o << "accessesLocal\n"; | |
| } | |
| if (effects.accessesMutableGlobal()) { | |
| o << "accessesMutableGlobal\n"; | |
| } | |
| if (effects.accessesMemory()) { | |
| o << "accessesMemory\n"; | |
| } | |
| if (effects.accessesTable()) { | |
| o << "accessesTable\n"; | |
| } | |
| if (effects.accessesMutableStruct()) { | |
| o << "accessesMutableStruct\n"; | |
| } | |
| if (effects.accessesArray()) { | |
| o << "accessesArray\n"; | |
| } | |
| if (effects.throws()) { | |
| o << "throws\n"; | |
| } | |
| if (effects.transfersControlFlow()) { | |
| o << "transfersControlFlow\n"; | |
| } | |
| if (effects.writesGlobalState()) { | |
| o << "writesGlobalState\n"; | |
| } | |
| if (effects.readsMutableGlobalState()) { | |
| o << "readsMutableGlobalState\n"; | |
| } | |
| if (effects.hasNonTrapSideEffects()) { | |
| o << "hasNonTrapSideEffects\n"; | |
| } | |
| if (effects.hasSideEffects()) { | |
| o << "hasSideEffects\n"; | |
| } | |
| if (effects.hasUnremovableSideEffects()) { | |
| o << "hasUnremovableSideEffects\n"; | |
| } | |
| if (effects.hasAnything()) { | |
| o << "hasAnything\n"; | |
| } | |
| if (effects.hasExternalBreakTargets()) { | |
| o << "hasExternalBreakTargets\n"; | |
| } | |
| o << "}"; | |
| return o; | |
| } | |
| } // namespace wasm |