Reverted the hack fix from bb222a10, and implemented a proper fix. The fix in TargetX86Base<TraitsType>::lowerCast (IceTargetLoweringX86BaseImpl.h) was suggested by Jim Stichnoth. The original problem is that we're trying movd an i32 to an i4i32, and since the target Variable is long-lived, it may not get a register allocated for it, and when that happens, we end up tripping the assert in InstX86Movd::emitIAS() that expects the destination to have been allocated a register. The solution that Jim suggested, and is implemented here, is to create a temporary, short-lived, variable to first movd into, which should guarantee a register target, since short-lived Variables usually get registers. Then we 'mov' the temporary register Variable to Dest, which *should* support moving the i4i32 register operand to an i32 memory operand. I said *should* above, because with the above fix, we now trip another assert in InstX86Mov::emitIAS (Mov, not Movd). The reason being that it doesn't actually support moving an i4i32 reg -> i32 memory operand. I added support for this as well (IceInstX86BaseImpl.h). Note that this assert only tripped when building with Om1 optimization level, since O2 ostensibly optimized out the mov call. Bug: b/145529686 Change-Id: I3c998a3e308838123cb415fcbf9f277113ac7d28 Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/39068 Kokoro-Presubmit: kokoro <noreply+kokoro@google.com> Reviewed-by:Nicolas Capens <nicolascapens@google.com> Tested-by:
Antonio Maiorano <amaiorano@google.com>
| Name |
Last commit
|
Last update |
|---|---|---|
| .. | ||
| Makefile.standalone-help | Loading commit data... | |
| bloat | Loading commit data... | |
| crosstest | Loading commit data... | |
| docs | Loading commit data... | |
| pnacl-llvm | Loading commit data... | |
| pydir | Loading commit data... | |
| runtime | Loading commit data... | |
| src | Loading commit data... | |
| tests_lit | Loading commit data... | |
| unittest | Loading commit data... | |
| wasm-tests | Loading commit data... | |
| .clang-format | Loading commit data... | |
| .dir-locals.el | Loading commit data... | |
| .gitignore | Loading commit data... | |
| CMakeLists.txt | Loading commit data... | |
| DESIGN.rst | Loading commit data... | |
| LICENSE.TXT | Loading commit data... | |
| Makefile | Loading commit data... | |
| Makefile.standalone | Loading commit data... | |
| OWNERS | Loading commit data... | |
| README-wasm.md | Loading commit data... | |
| README.rst | Loading commit data... | |
| c2wasm-exe.sh | Loading commit data... | |
| codereview.settings | Loading commit data... | |
| fetch-torture-tests.sh | Loading commit data... |