[JSC] AI should not propagate AbstractValue relying on constant folding phase
[WebKit-https.git] / JSTests / microbenchmarks / try-get-by-id-polymorphic.js
1 // Test tryGetById's value profiling feedback after it's too polymorphic.
2
3 var createBuiltin = $vm.createBuiltin;
4
5 var it = 1e5;
6
7 const check = (got, expect) => { if (got != expect) throw "Error: bad result got " + got + " expected " + expect; };
8
9 fooPlusBar = createBuiltin(`(function (o) { return @tryGetById(o, "foo") + @tryGetById(o, "bar"); })`);
10 noInline(fooPlusBar);
11
12 const bench = f => { f(); }
13 noInline(bench);
14
15 // Non bool int32.
16 o = { foo: 42, bar: 1337 };
17 bench(() => { var res = 0; for (var i = 0; i < it; ++i) res += fooPlusBar(o);  check(res, (o.foo + o.bar) * it); });
18
19 // Non int double.
20 p = { foo: Math.PI, bar: Math.E };
21 bench(() => { var res = 0.; for (var i = 0; i < it; ++i) res += fooPlusBar(p); check(Math.round(res), Math.round((p.foo + p.bar) * it)); });
22
23 // String ident.
24 // This gets too polymorphic for the engine's taste.
25 s = { foo: "", bar: "⌽" };
26 bench(() => { var res = ""; for (var i = 0; i < it; ++i) res += fooPlusBar(s); check(res.length, (s.foo.length + s.bar.length) * it); });
27
28 // Again: non bool int32.
29 bench(() => { var res = 0; for (var i = 0; i < it; ++i) res += fooPlusBar(o); check(res, (o.foo + o.bar) * it); });