v8/test/cctest/compiler
Jaroslav Sevcik 383ec7b506 [turbofan] IA32 port of branch load poisoning.
The tricky part here is to take away one register from register
allocation for the mask. The only problem is with calls that need
an input operand to be passed in the poison register. For such calls,
we change the register constraint in the instruction selector
to pass the value in whatever place the register allocator sees fit.
During code generation, we then copy the value from that place
to the poison register. By that time, the mask is not necessary
(once we bake the mask into the target, it should be done before
this move).

For the branches, the mask update does not use cmov (unlike x64)
because cmov does not take an immediate and we do not have
a scratch register. Instead we use bit-twiddling tricks
(suggested by @tebbi). For example, here is the code for masking
register update after a bailout on non-zero:

  jnz deopt_bailout    ;; Bailout branch
  setnz bl             ;; These three instructions update the mask
  add  ebx, 255
  sar  ebx, 31

(On x64, the sequence is:

  jnz deopt_bailout
  mov r10, 0      ;; We have a scratch register for zero
  cmovnz r9, r10  ;; Set to zero if we execute this branch
                  ;; in branch mis-speculation
)


This CL also fixes a bug in register configuration, where we used
to wrongly restrict the array of register name.

Change-Id: I5fceff2faf8bdc527d9934afc284b749574ab69e
Bug: chromium:798964
Reviewed-on: https://chromium-review.googlesource.com/946251
Commit-Queue: Jaroslav Sevcik <jarin@chromium.org>
Reviewed-by: Benedikt Meurer <bmeurer@chromium.org>
Reviewed-by: Michael Starzinger <mstarzinger@chromium.org>
Cr-Commit-Position: refs/heads/master@{#51798}
2018-03-08 08:25:42 +00:00
..
c-signature.h [test] Fix usages of std::array initializer lists. 2018-01-16 17:14:29 +00:00
call-tester.h Replace CALL_GENERATED_CODE by GeneratedCode wrapper 2018-01-09 10:33:36 +00:00
code-assembler-tester.h Reland "[arm64] Preparation for padding of arguments" 2017-12-20 13:50:36 +00:00
codegen-tester.cc Enable clang's -Wunreachable-code warning. 2017-12-04 13:09:25 +00:00
codegen-tester.h Normalize names of call descriptor local variables 2018-02-09 22:09:07 +00:00
function-tester.cc [cleanup] Introduce a dedicated FeedbackCell. 2018-02-22 13:18:48 +00:00
function-tester.h [cleanup] Add templatized FunctionTester::CallChecked(...) helpers 2017-07-18 14:25:21 +00:00
graph-builder-tester.h Normalize names of call descriptor local variables 2018-02-09 22:09:07 +00:00
test-basic-block-profiler.cc [iwyu] Pre-work for removing unallowed include macro-assembler.h -> assembler-inl.h 2017-02-23 12:10:21 +00:00
test-branch-combine.cc [iwyu] Pre-work for removing unallowed include macro-assembler.h -> assembler-inl.h 2017-02-23 12:10:21 +00:00
test-code-assembler.cc [cleanup] Rename Word to Int32/IntPtr depending on context 2018-02-23 14:34:07 +00:00
test-code-generator.cc [turbofan] IA32 port of branch load poisoning. 2018-03-08 08:25:42 +00:00
test-gap-resolver.cc Add bound checking to RegisterConfiguration accessors function. 2017-08-18 09:24:31 +00:00
test-graph-visualizer.cc Use nullptr instead of NULL where possible 2017-10-13 17:21:49 +00:00
test-instruction.cc Use nullptr instead of NULL where possible 2017-10-13 17:21:49 +00:00
test-js-constant-cache.cc [cleanup] Add accessors for operators with handles 2018-03-05 15:01:01 +00:00
test-js-context-specialization.cc [cleanup] Remove OpParameter(Node*) helper 2018-03-05 10:05:05 +00:00
test-js-typed-lowering.cc [cleanup] Add accessors for operators with handles 2018-03-05 15:01:01 +00:00
test-jump-threading.cc [cleanup] Fix remaining (D)CHECK macro usages 2017-10-18 10:12:31 +00:00
test-linkage.cc [Compiler] Simplify and unify GetSharedFunctionFor[Streamed]Script. 2018-02-21 15:40:13 +00:00
test-loop-analysis.cc Normalize casing of hexadecimal digits 2017-12-02 01:24:40 +00:00
test-machine-operator-reducer.cc Normalize casing of hexadecimal digits 2017-12-02 01:24:40 +00:00
test-multiple-return.cc [x64][turbofan] Pass the slot index for the peek instruction by operand 2018-01-15 15:22:27 +00:00
test-node.cc Use nullptr instead of NULL where possible 2017-10-13 17:21:49 +00:00
test-operator.cc Normalize casing of hexadecimal digits 2017-12-02 01:24:40 +00:00
test-representation-change.cc [turbofan] Add feedback to SpeculativeToNumber 2018-02-08 18:02:04 +00:00
test-run-bytecode-graph-builder.cc Reland "[parsing] inline ArrayLiteral creation for spread calls" 2018-03-02 10:03:42 +00:00
test-run-calls-to-external-references.cc [iwyu] Pre-work for removing unallowed include macro-assembler.h -> assembler-inl.h 2017-02-23 12:10:21 +00:00
test-run-deopt.cc [fullcodegen] Remove --stress-fullcodegen flag. 2017-08-10 09:52:49 +00:00
test-run-intrinsics.cc [cleanup] Limit Token usage to Parser, AST, BytecodeGenerator 2017-10-25 18:15:26 +00:00
test-run-jsbranches.cc [turbofan] Remove for-in support from the AstGraphBuilder. 2017-02-08 06:41:42 +00:00
test-run-jscalls.cc include fixing: api.h shouldn't include objects-inl.h 2017-01-09 13:43:28 +00:00
test-run-jsexceptions.cc [fullcodegen] Remove --stress-fullcodegen flag. 2017-08-10 09:52:49 +00:00
test-run-jsobjects.cc [iwyu] Remove stale TODOs about objects-inl.h inclusion. 2017-10-09 11:14:59 +00:00
test-run-jsops.cc Normalize casing of hexadecimal digits 2017-12-02 01:24:40 +00:00
test-run-load-store.cc [turbofan] Remove CheckedLoad operation 2018-01-02 08:47:01 +00:00
test-run-machops.cc [assembler] Make {RelocInfo} independent of the Isolate. 2018-02-13 14:13:43 +00:00
test-run-native-calls.cc Normalize names of call descriptor local variables 2018-02-09 22:09:07 +00:00
test-run-retpoline.cc Normalize names of call descriptor local variables 2018-02-09 22:09:07 +00:00
test-run-stackcheck.cc [fullcodegen] Remove --stress-fullcodegen flag. 2017-08-10 09:52:49 +00:00
test-run-stubs.cc [Compiler] Remove isolate from CompilationInfo. 2017-11-15 15:40:55 +00:00
test-run-tail-calls.cc Normalize names of call descriptor local variables 2018-02-09 22:09:07 +00:00
test-run-unwinding-info.cc [turbofan] Replace uninitialized JSCall nodes with SOFT deopt. 2017-06-27 03:57:13 +00:00
test-run-variables.cc Use nullptr instead of NULL where possible 2017-10-13 17:21:49 +00:00
test-run-wasm-machops.cc [assembler] Make {RelocInfo} independent of the Isolate. 2018-02-13 14:13:43 +00:00
value-helper.cc Reland "[test] Avoid unnecessary std::vector allocations" 2017-10-19 08:47:31 +00:00
value-helper.h [cleanup] Add accessors for operators with handles 2018-03-05 15:01:01 +00:00