diff options
author | Alon Zakai <azakai@google.com> | 2019-04-26 16:59:41 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-04-26 16:59:41 -0700 |
commit | db9124f1de0478dcac525009b6f1589b44a7edd8 (patch) | |
tree | fa26395a0f6cca53cf5cb6e10189f989c5bfa847 /src/ir/cost.h | |
parent | 87636dccd404a340d75acb1d96301581343f29ca (diff) | |
download | binaryen-db9124f1de0478dcac525009b6f1589b44a7edd8.tar.gz binaryen-db9124f1de0478dcac525009b6f1589b44a7edd8.tar.bz2 binaryen-db9124f1de0478dcac525009b6f1589b44a7edd8.zip |
Apply format changes from #2048 (#2059)
Mass change to apply clang-format to everything. We are applying this in a PR by me so the (git) blame is all mine ;) but @aheejin did all the work to get clang-format set up and all the manual work to tidy up some things to make the output nicer in #2048
Diffstat (limited to 'src/ir/cost.h')
-rw-r--r-- | src/ir/cost.h | 702 |
1 files changed, 494 insertions, 208 deletions
diff --git a/src/ir/cost.h b/src/ir/cost.h index 5179f80b1..95c2178d9 100644 --- a/src/ir/cost.h +++ b/src/ir/cost.h @@ -17,35 +17,31 @@ #ifndef wasm_ir_cost_h #define wasm_ir_cost_h -#include <wasm.h> #include <wasm-traversal.h> +#include <wasm.h> namespace wasm { // Measure the execution cost of an AST. Very handwave-ey struct CostAnalyzer : public Visitor<CostAnalyzer, Index> { - CostAnalyzer(Expression* ast) { - cost = visit(ast); - } + CostAnalyzer(Expression* ast) { cost = visit(ast); } Index cost; - Index maybeVisit(Expression* curr) { - return curr ? visit(curr) : 0; - } + Index maybeVisit(Expression* curr) { return curr ? visit(curr) : 0; } Index visitBlock(Block* curr) { Index ret = 0; - for (auto* child : curr->list) ret += visit(child); + for (auto* child : curr->list) + ret += visit(child); return ret; } Index visitIf(If* curr) { - return 1 + visit(curr->condition) + std::max(visit(curr->ifTrue), maybeVisit(curr->ifFalse)); - } - Index visitLoop(Loop* curr) { - return 5 * visit(curr->body); + return 1 + visit(curr->condition) + + std::max(visit(curr->ifTrue), maybeVisit(curr->ifFalse)); } + Index visitLoop(Loop* curr) { return 5 * visit(curr->body); } Index visitBreak(Break* curr) { return 1 + maybeVisit(curr->value) + maybeVisit(curr->condition); } @@ -56,41 +52,29 @@ struct CostAnalyzer : public Visitor<CostAnalyzer, Index> { // XXX this does not take into account if the call is to an import, which // may be costlier in general Index ret = 4; - for (auto* child : curr->operands) ret += visit(child); + for (auto* child : curr->operands) + ret += visit(child); return ret; } Index visitCallIndirect(CallIndirect* curr) { Index ret = 6 + visit(curr->target); - for (auto* child : curr->operands) ret += visit(child); + for (auto* child : curr->operands) + ret += visit(child); return ret; } - Index visitGetLocal(GetLocal* curr) { - return 0; - } - Index visitSetLocal(SetLocal* curr) { - return 1; - } - Index visitGetGlobal(GetGlobal* curr) { - return 1; - } - Index visitSetGlobal(SetGlobal* curr) { - return 2; - } + Index visitGetLocal(GetLocal* curr) { return 0; } + Index visitSetLocal(SetLocal* curr) { return 1; } + Index visitGetGlobal(GetGlobal* curr) { return 1; } + Index visitSetGlobal(SetGlobal* curr) { return 2; } Index visitLoad(Load* curr) { return 1 + visit(curr->ptr) + 10 * curr->isAtomic; } Index visitStore(Store* curr) { return 2 + visit(curr->ptr) + visit(curr->value) + 10 * curr->isAtomic; } - Index visitAtomicRMW(AtomicRMW* curr) { - return 100; - } - Index visitAtomicCmpxchg(AtomicCmpxchg* curr) { - return 100; - } - Index visitConst(Const* curr) { - return 1; - } + Index visitAtomicRMW(AtomicRMW* curr) { return 100; } + Index visitAtomicCmpxchg(AtomicCmpxchg* curr) { return 100; } + Index visitConst(Const* curr) { return 1; } Index visitUnary(Unary* curr) { Index ret = 0; switch (curr->op) { @@ -151,9 +135,13 @@ struct CostAnalyzer : public Visitor<CostAnalyzer, Index> { case TruncSatSFloat32ToInt64: case TruncSatUFloat32ToInt64: case TruncSatSFloat64ToInt64: - case TruncSatUFloat64ToInt64: ret = 1; break; + case TruncSatUFloat64ToInt64: + ret = 1; + break; case SqrtFloat32: - case SqrtFloat64: ret = 2; break; + case SqrtFloat64: + ret = 2; + break; case SplatVecI8x16: case SplatVecI16x8: case SplatVecI32x4: @@ -186,188 +174,486 @@ struct CostAnalyzer : public Visitor<CostAnalyzer, Index> { case ConvertSVecI32x4ToVecF32x4: case ConvertUVecI32x4ToVecF32x4: case ConvertSVecI64x2ToVecF64x2: - case ConvertUVecI64x2ToVecF64x2: return 1; - case InvalidUnary: WASM_UNREACHABLE(); + case ConvertUVecI64x2ToVecF64x2: + return 1; + case InvalidUnary: + WASM_UNREACHABLE(); } return ret + visit(curr->value); } Index visitBinary(Binary* curr) { Index ret = 0; switch (curr->op) { - case AddInt32: ret = 1; break; - case SubInt32: ret = 1; break; - case MulInt32: ret = 2; break; - case DivSInt32: ret = 3; break; - case DivUInt32: ret = 3; break; - case RemSInt32: ret = 3; break; - case RemUInt32: ret = 3; break; - case AndInt32: ret = 1; break; - case OrInt32: ret = 1; break; - case XorInt32: ret = 1; break; - case ShlInt32: ret = 1; break; - case ShrUInt32: ret = 1; break; - case ShrSInt32: ret = 1; break; - case RotLInt32: ret = 1; break; - case RotRInt32: ret = 1; break; - case AddInt64: ret = 1; break; - case SubInt64: ret = 1; break; - case MulInt64: ret = 2; break; - case DivSInt64: ret = 3; break; - case DivUInt64: ret = 3; break; - case RemSInt64: ret = 3; break; - case RemUInt64: ret = 3; break; - case AndInt64: ret = 1; break; - case OrInt64: ret = 1; break; - case XorInt64: ret = 1; break; - case ShlInt64: ret = 1; break; - case ShrUInt64: ret = 1; break; - case ShrSInt64: ret = 1; break; - case RotLInt64: ret = 1; break; - case RotRInt64: ret = 1; break; - case AddFloat32: ret = 1; break; - case SubFloat32: ret = 1; break; - case MulFloat32: ret = 2; break; - case DivFloat32: ret = 3; break; - case CopySignFloat32: ret = 1; break; - case MinFloat32: ret = 1; break; - case MaxFloat32: ret = 1; break; - case AddFloat64: ret = 1; break; - case SubFloat64: ret = 1; break; - case MulFloat64: ret = 2; break; - case DivFloat64: ret = 3; break; - case CopySignFloat64: ret = 1; break; - case MinFloat64: ret = 1; break; - case MaxFloat64: ret = 1; break; - case LtUInt32: ret = 1; break; - case LtSInt32: ret = 1; break; - case LeUInt32: ret = 1; break; - case LeSInt32: ret = 1; break; - case GtUInt32: ret = 1; break; - case GtSInt32: ret = 1; break; - case GeUInt32: ret = 1; break; - case GeSInt32: ret = 1; break; - case LtUInt64: ret = 1; break; - case LtSInt64: ret = 1; break; - case LeUInt64: ret = 1; break; - case LeSInt64: ret = 1; break; - case GtUInt64: ret = 1; break; - case GtSInt64: ret = 1; break; - case GeUInt64: ret = 1; break; - case GeSInt64: ret = 1; break; - case LtFloat32: ret = 1; break; - case GtFloat32: ret = 1; break; - case LeFloat32: ret = 1; break; - case GeFloat32: ret = 1; break; - case LtFloat64: ret = 1; break; - case GtFloat64: ret = 1; break; - case LeFloat64: ret = 1; break; - case GeFloat64: ret = 1; break; - case EqInt32: ret = 1; break; - case NeInt32: ret = 1; break; - case EqInt64: ret = 1; break; - case NeInt64: ret = 1; break; - case EqFloat32: ret = 1; break; - case NeFloat32: ret = 1; break; - case EqFloat64: ret = 1; break; - case NeFloat64: ret = 1; break; - case EqVecI8x16: ret = 1; break; - case NeVecI8x16: ret = 1; break; - case LtSVecI8x16: ret = 1; break; - case LtUVecI8x16: ret = 1; break; - case LeSVecI8x16: ret = 1; break; - case LeUVecI8x16: ret = 1; break; - case GtSVecI8x16: ret = 1; break; - case GtUVecI8x16: ret = 1; break; - case GeSVecI8x16: ret = 1; break; - case GeUVecI8x16: ret = 1; break; - case EqVecI16x8: ret = 1; break; - case NeVecI16x8: ret = 1; break; - case LtSVecI16x8: ret = 1; break; - case LtUVecI16x8: ret = 1; break; - case LeSVecI16x8: ret = 1; break; - case LeUVecI16x8: ret = 1; break; - case GtSVecI16x8: ret = 1; break; - case GtUVecI16x8: ret = 1; break; - case GeSVecI16x8: ret = 1; break; - case GeUVecI16x8: ret = 1; break; - case EqVecI32x4: ret = 1; break; - case NeVecI32x4: ret = 1; break; - case LtSVecI32x4: ret = 1; break; - case LtUVecI32x4: ret = 1; break; - case LeSVecI32x4: ret = 1; break; - case LeUVecI32x4: ret = 1; break; - case GtSVecI32x4: ret = 1; break; - case GtUVecI32x4: ret = 1; break; - case GeSVecI32x4: ret = 1; break; - case GeUVecI32x4: ret = 1; break; - case EqVecF32x4: ret = 1; break; - case NeVecF32x4: ret = 1; break; - case LtVecF32x4: ret = 1; break; - case LeVecF32x4: ret = 1; break; - case GtVecF32x4: ret = 1; break; - case GeVecF32x4: ret = 1; break; - case EqVecF64x2: ret = 1; break; - case NeVecF64x2: ret = 1; break; - case LtVecF64x2: ret = 1; break; - case LeVecF64x2: ret = 1; break; - case GtVecF64x2: ret = 1; break; - case GeVecF64x2: ret = 1; break; - case AndVec128: ret = 1; break; - case OrVec128: ret = 1; break; - case XorVec128: ret = 1; break; - case AddVecI8x16: ret = 1; break; - case AddSatSVecI8x16: ret = 1; break; - case AddSatUVecI8x16: ret = 1; break; - case SubVecI8x16: ret = 1; break; - case SubSatSVecI8x16: ret = 1; break; - case SubSatUVecI8x16: ret = 1; break; - case MulVecI8x16: ret = 2; break; - case AddVecI16x8: ret = 1; break; - case AddSatSVecI16x8: ret = 1; break; - case AddSatUVecI16x8: ret = 1; break; - case SubVecI16x8: ret = 1; break; - case SubSatSVecI16x8: ret = 1; break; - case SubSatUVecI16x8: ret = 1; break; - case MulVecI16x8: ret = 2; break; - case AddVecI32x4: ret = 1; break; - case SubVecI32x4: ret = 1; break; - case MulVecI32x4: ret = 2; break; - case AddVecI64x2: ret = 1; break; - case SubVecI64x2: ret = 1; break; - case AddVecF32x4: ret = 1; break; - case SubVecF32x4: ret = 1; break; - case MulVecF32x4: ret = 2; break; - case DivVecF32x4: ret = 3; break; - case MinVecF32x4: ret = 1; break; - case MaxVecF32x4: ret = 1; break; - case AddVecF64x2: ret = 1; break; - case SubVecF64x2: ret = 1; break; - case MulVecF64x2: ret = 2; break; - case DivVecF64x2: ret = 3; break; - case MinVecF64x2: ret = 1; break; - case MaxVecF64x2: ret = 1; break; - case InvalidBinary: WASM_UNREACHABLE(); + case AddInt32: + ret = 1; + break; + case SubInt32: + ret = 1; + break; + case MulInt32: + ret = 2; + break; + case DivSInt32: + ret = 3; + break; + case DivUInt32: + ret = 3; + break; + case RemSInt32: + ret = 3; + break; + case RemUInt32: + ret = 3; + break; + case AndInt32: + ret = 1; + break; + case OrInt32: + ret = 1; + break; + case XorInt32: + ret = 1; + break; + case ShlInt32: + ret = 1; + break; + case ShrUInt32: + ret = 1; + break; + case ShrSInt32: + ret = 1; + break; + case RotLInt32: + ret = 1; + break; + case RotRInt32: + ret = 1; + break; + case AddInt64: + ret = 1; + break; + case SubInt64: + ret = 1; + break; + case MulInt64: + ret = 2; + break; + case DivSInt64: + ret = 3; + break; + case DivUInt64: + ret = 3; + break; + case RemSInt64: + ret = 3; + break; + case RemUInt64: + ret = 3; + break; + case AndInt64: + ret = 1; + break; + case OrInt64: + ret = 1; + break; + case XorInt64: + ret = 1; + break; + case ShlInt64: + ret = 1; + break; + case ShrUInt64: + ret = 1; + break; + case ShrSInt64: + ret = 1; + break; + case RotLInt64: + ret = 1; + break; + case RotRInt64: + ret = 1; + break; + case AddFloat32: + ret = 1; + break; + case SubFloat32: + ret = 1; + break; + case MulFloat32: + ret = 2; + break; + case DivFloat32: + ret = 3; + break; + case CopySignFloat32: + ret = 1; + break; + case MinFloat32: + ret = 1; + break; + case MaxFloat32: + ret = 1; + break; + case AddFloat64: + ret = 1; + break; + case SubFloat64: + ret = 1; + break; + case MulFloat64: + ret = 2; + break; + case DivFloat64: + ret = 3; + break; + case CopySignFloat64: + ret = 1; + break; + case MinFloat64: + ret = 1; + break; + case MaxFloat64: + ret = 1; + break; + case LtUInt32: + ret = 1; + break; + case LtSInt32: + ret = 1; + break; + case LeUInt32: + ret = 1; + break; + case LeSInt32: + ret = 1; + break; + case GtUInt32: + ret = 1; + break; + case GtSInt32: + ret = 1; + break; + case GeUInt32: + ret = 1; + break; + case GeSInt32: + ret = 1; + break; + case LtUInt64: + ret = 1; + break; + case LtSInt64: + ret = 1; + break; + case LeUInt64: + ret = 1; + break; + case LeSInt64: + ret = 1; + break; + case GtUInt64: + ret = 1; + break; + case GtSInt64: + ret = 1; + break; + case GeUInt64: + ret = 1; + break; + case GeSInt64: + ret = 1; + break; + case LtFloat32: + ret = 1; + break; + case GtFloat32: + ret = 1; + break; + case LeFloat32: + ret = 1; + break; + case GeFloat32: + ret = 1; + break; + case LtFloat64: + ret = 1; + break; + case GtFloat64: + ret = 1; + break; + case LeFloat64: + ret = 1; + break; + case GeFloat64: + ret = 1; + break; + case EqInt32: + ret = 1; + break; + case NeInt32: + ret = 1; + break; + case EqInt64: + ret = 1; + break; + case NeInt64: + ret = 1; + break; + case EqFloat32: + ret = 1; + break; + case NeFloat32: + ret = 1; + break; + case EqFloat64: + ret = 1; + break; + case NeFloat64: + ret = 1; + break; + case EqVecI8x16: + ret = 1; + break; + case NeVecI8x16: + ret = 1; + break; + case LtSVecI8x16: + ret = 1; + break; + case LtUVecI8x16: + ret = 1; + break; + case LeSVecI8x16: + ret = 1; + break; + case LeUVecI8x16: + ret = 1; + break; + case GtSVecI8x16: + ret = 1; + break; + case GtUVecI8x16: + ret = 1; + break; + case GeSVecI8x16: + ret = 1; + break; + case GeUVecI8x16: + ret = 1; + break; + case EqVecI16x8: + ret = 1; + break; + case NeVecI16x8: + ret = 1; + break; + case LtSVecI16x8: + ret = 1; + break; + case LtUVecI16x8: + ret = 1; + break; + case LeSVecI16x8: + ret = 1; + break; + case LeUVecI16x8: + ret = 1; + break; + case GtSVecI16x8: + ret = 1; + break; + case GtUVecI16x8: + ret = 1; + break; + case GeSVecI16x8: + ret = 1; + break; + case GeUVecI16x8: + ret = 1; + break; + case EqVecI32x4: + ret = 1; + break; + case NeVecI32x4: + ret = 1; + break; + case LtSVecI32x4: + ret = 1; + break; + case LtUVecI32x4: + ret = 1; + break; + case LeSVecI32x4: + ret = 1; + break; + case LeUVecI32x4: + ret = 1; + break; + case GtSVecI32x4: + ret = 1; + break; + case GtUVecI32x4: + ret = 1; + break; + case GeSVecI32x4: + ret = 1; + break; + case GeUVecI32x4: + ret = 1; + break; + case EqVecF32x4: + ret = 1; + break; + case NeVecF32x4: + ret = 1; + break; + case LtVecF32x4: + ret = 1; + break; + case LeVecF32x4: + ret = 1; + break; + case GtVecF32x4: + ret = 1; + break; + case GeVecF32x4: + ret = 1; + break; + case EqVecF64x2: + ret = 1; + break; + case NeVecF64x2: + ret = 1; + break; + case LtVecF64x2: + ret = 1; + break; + case LeVecF64x2: + ret = 1; + break; + case GtVecF64x2: + ret = 1; + break; + case GeVecF64x2: + ret = 1; + break; + case AndVec128: + ret = 1; + break; + case OrVec128: + ret = 1; + break; + case XorVec128: + ret = 1; + break; + case AddVecI8x16: + ret = 1; + break; + case AddSatSVecI8x16: + ret = 1; + break; + case AddSatUVecI8x16: + ret = 1; + break; + case SubVecI8x16: + ret = 1; + break; + case SubSatSVecI8x16: + ret = 1; + break; + case SubSatUVecI8x16: + ret = 1; + break; + case MulVecI8x16: + ret = 2; + break; + case AddVecI16x8: + ret = 1; + break; + case AddSatSVecI16x8: + ret = 1; + break; + case AddSatUVecI16x8: + ret = 1; + break; + case SubVecI16x8: + ret = 1; + break; + case SubSatSVecI16x8: + ret = 1; + break; + case SubSatUVecI16x8: + ret = 1; + break; + case MulVecI16x8: + ret = 2; + break; + case AddVecI32x4: + ret = 1; + break; + case SubVecI32x4: + ret = 1; + break; + case MulVecI32x4: + ret = 2; + break; + case AddVecI64x2: + ret = 1; + break; + case SubVecI64x2: + ret = 1; + break; + case AddVecF32x4: + ret = 1; + break; + case SubVecF32x4: + ret = 1; + break; + case MulVecF32x4: + ret = 2; + break; + case DivVecF32x4: + ret = 3; + break; + case MinVecF32x4: + ret = 1; + break; + case MaxVecF32x4: + ret = 1; + break; + case AddVecF64x2: + ret = 1; + break; + case SubVecF64x2: + ret = 1; + break; + case MulVecF64x2: + ret = 2; + break; + case DivVecF64x2: + ret = 3; + break; + case MinVecF64x2: + ret = 1; + break; + case MaxVecF64x2: + ret = 1; + break; + case InvalidBinary: + WASM_UNREACHABLE(); } return ret + visit(curr->left) + visit(curr->right); } Index visitSelect(Select* curr) { - return 2 + visit(curr->condition) + visit(curr->ifTrue) + visit(curr->ifFalse); - } - Index visitDrop(Drop* curr) { - return visit(curr->value); - } - Index visitReturn(Return* curr) { - return maybeVisit(curr->value); - } - Index visitHost(Host* curr) { - return 100; - } - Index visitNop(Nop* curr) { - return 0; - } - Index visitUnreachable(Unreachable* curr) { - return 0; + return 2 + visit(curr->condition) + visit(curr->ifTrue) + + visit(curr->ifFalse); } + Index visitDrop(Drop* curr) { return visit(curr->value); } + Index visitReturn(Return* curr) { return maybeVisit(curr->value); } + Index visitHost(Host* curr) { return 100; } + Index visitNop(Nop* curr) { return 0; } + Index visitUnreachable(Unreachable* curr) { return 0; } }; } // namespace wasm |