- 09 Apr, 2015 1 commit
-
-
Jim Stichnoth authored
Otherwise, constant pools are emitted in hash table order, which can vary across systems. BUG= https://code.google.com/p/nativeclient/issues/detail?id=4129 R=jvoung@chromium.org Review URL: https://codereview.chromium.org/1069453003
-
- 07 Apr, 2015 1 commit
-
-
Jim Stichnoth authored
Autoconf is the default. Use "make -f Makefile.standalong CMAKE=1" to use the cmake build. BUG= none R=jvoung@chromium.org, mtrofin@chromium.org Review URL: https://codereview.chromium.org/998863002
-
- 06 Apr, 2015 1 commit
-
-
Mircea Trofin authored
- redundant ';' after namespace decls - mix of enums and integer values - use of && insteand of & for bitwise operations BUG=NONE R=stichnot@chromium.org Review URL: https://codereview.chromium.org/1062803005
-
- 31 Mar, 2015 1 commit
-
-
Jan Voung authored
The \0 delimited string array that the browser sends doesn't have the program name and the IRT only tokenizes that and forwards it along. We need argv[0] to make the llvm CL parser happy (used for -help message, etc). Alternatively, we could have the IRT fill in a program name so that the argv is a real argv. That will involve less copying since the argv will be the right size to begin with, but prevents each app from customizing its argv[0] =/ BUG= https://code.google.com/p/nativeclient/issues/detail?id=4091 TEST= manual for now (construct the sel_universal script to only pass the "--build-atts" flag and see it exits without being swallowed, or pass "-Ofoo" and see an error + exit) R=mtrofin@chromium.org, stichnot@chromium.org Review URL: https://codereview.chromium.org/1041843003
-
- 30 Mar, 2015 1 commit
-
-
Jim Stichnoth authored
BUG= none R=mtrofin@chromium.org Review URL: https://codereview.chromium.org/1041303002
-
- 29 Mar, 2015 1 commit
-
-
Jim Stichnoth authored
When trying to do bisection debugging, the pnacl-llc translation was happening every time even if the pexe didn't change. This is because it was checking for a binary called 'llc' in the current directory, instead of an absolute path the pnacl-llc. (This check is done so that updating pnacl-llc triggers a rebuild of the bisection binary, similar to the check for an update of pnacl-sz.) BUG= none R=jvoung@chromium.org Review URL: https://codereview.chromium.org/1044623003
-
- 27 Mar, 2015 1 commit
-
-
Jan Voung authored
Handlers are represented as a "compile server" even though right now it can really only handle a single compile request. Then there can be a commandline-based server and a browser-based server. This server takes over the main thread. In the browser-based case the server can block, waiting on bytes to be pushed. This becomes a producer of bitcode bytes. The original main thread which did bitcode reading is now shifted to yet another worker thread, which is then the consumer of bitcode bytes. This uses an IRT interface for listening to messages from the browser: https://codereview.chromium.org/984713003/ TEST=Build the IRT core nexe w/ the above patch and compile w/ something like: echo """ readwrite_file objfile /tmp/temp.nexe---gcc.opt.stripped.pexe---.o rpc StreamInitWithSplit i(4) h(objfile) h(invalid) h(invalid) h(invalid) h(invalid) h(invalid) h(invalid) h(invalid) h(invalid) h(invalid) h(invalid) h(invalid) h(invalid) h(invalid) h(invalid) h(invalid) C(4,-O2\x00) * s() stream_file /usr/local/google/home/jvoung/pexe_tests/gcc.opt.stripped.pexe 65536 1000000000 rpc StreamEnd * i() s() s() s() echo "pnacl-sz complete" """ | scons-out/opt-linux-x86-32/staging/sel_universal \ -a -B scons-out/nacl_irt-x86-32/staging/irt_core.nexe \ --abort_on_error \ -- toolchain/linux_x86/pnacl_translator/translator/x86-32/bin/pnacl-sz.nexe echo """ readwrite_file nexefile /tmp/temp.nexe.tmp readonly_file objfile0 /tmp/temp.nexe---gcc.opt.stripped.pexe---.o rpc RunWithSplit i(1) h(objfile0) h(invalid) h(invalid) h(invalid) h(invalid) h(invalid) h(invalid) h(invalid) h(invalid) h(invalid) h(invalid) h(invalid) h(invalid) h(invalid) h(invalid) h(invalid) h(nexefile) * echo "ld complete" """ | /usr/local/google/home/nacl3/native_client/scons-out/opt-linux-x86-32/staging/sel_universal \ --abort_on_error \ -a -B \ scons-out/nacl_irt-x86-32/staging/irt_core.nexe \ -E NACL_IRT_OPEN_RESOURCE_BASE=toolchain/linux_x86/pnacl_translator/translator/x86-32/lib/ \ -E NACL_IRT_OPEN_RESOURCE_REMAP=libpnacl_irt_shim.a:libpnacl_irt_shim_dummy.a \ -- toolchain/linux_x86/pnacl_translator/translator/x86-32/bin/ld.nexe BUG= https://code.google.com/p/nativeclient/issues/detail?id=4091 R=kschimpf@google.com, stichnot@chromium.org Review URL: https://codereview.chromium.org/997773002
-
- 24 Mar, 2015 2 commits
-
-
Jim Stichnoth authored
The x86-32 xchg and xadd instructions are modeled using two source operands, one of which is a memory operand and the other ultimately a physical register. These instructions have a side effect of modifying both operands. During lowering, we need to specially express that the instruction modifies the Variable operand (since it doesn't appear as the instruction's Dest variable). This makes the register allocator aware of the Variable being multi-def, and prevents it from sharing a register with an overlapping live range. This was being partially expressed by adding a FakeDef instruction. However, FakeDef instructions are still allowed to be dead-code eliminated, and if this happens, the Variable may appear to be single-def, triggering the unsafe register sharing. The solution is to prevent the FakeDef instruction from being eliminated, via a FakeUse instruction. It turns out that the current register allocator isn't aggressive enough to manifest the bug with cmpxchg instructions, but the fix and tests are there just in case. BUG= none R=jvoung@chromium.org Review URL: https://codereview.chromium.org/1020853011
-
Jan Voung authored
Otherwise you get: In file included from src/IceGlobalContext.cpp:21: In file included from src/IceCfg.h:21: src/IceGlobalContext.h:257:44: error: variable 'TLS' is uninitialized when used within its own initialization [-Werror,-Wuninitialized] ThreadContext *TLS = ICE_TLS_GET_FIELD(TLS); ~~~ ^~~ src/IceTLS.h:95:39: note: expanded from macro 'ICE_TLS_GET_FIELD' ^ So rename the local var to Tls. BUG=none R=stichnot@chromium.org Review URL: https://codereview.chromium.org/1030793002
-
- 23 Mar, 2015 3 commits
-
-
Jim Stichnoth authored
The non-mov-like SSE instructions generally require 16-byte aligned memory operands. The PNaCl bitcode ABI only guarantees 4-byte alignment or less on vector loads and stores. Subzero maintains stack alignment so stack memory operands are fine. We handle this by legalizing memory operands into a register wherever there is doubt. This bug was first discovered on the vector_align scons test. BUG= https://code.google.com/p/nativeclient/issues/detail?id=4083 BUG= https://code.google.com/p/nativeclient/issues/detail?id=4133 R=jvoung@chromium.org Review URL: https://codereview.chromium.org/1024253003
-
Jim Stichnoth authored
The gcc torture test suite has examples where there is a function call (to a routine that throws an exception or aborts or something), followed by an "unreachable" instruction, followed by more code that may e.g. return a value to the caller. In these examples, the code following the unreachable is itself unreachable. Problems arise when the unreachable code references a variable defined in the reachable code. This triggers a liveness consistency error because the use of the variable has no reaching definition. It's a bit surprising that LLVM actually allows this, but it does so we need to deal with it. The solution is, after initial CFG construction, do a traversal starting from the entry node and then delete any undiscovered nodes. There is code in Subzero that assumes Cfg::Nodes[i]->Number == i, so the nodes need to be renumbered after pruning. The alternative was to set Nodes[i]=nullptr and not change the node number, but that would mean peppering the code base with CfgNode null checks. BUG= none R=jvoung@chromium.org Review URL: https://codereview.chromium.org/1027933002
-
Jim Stichnoth authored
When lowering of a couple of atomic intrinsics down to a loop structure, a FakeUse on the memory address's base variable is created. However, if the memory address is a global constant, there is no base variable. So check for that and don't create a FakeUse if there is none. BUG= none TEST=synchronization_sync (scons test) R=jvoung@chromium.org Review URL: https://codereview.chromium.org/1023673007
-
- 20 Mar, 2015 3 commits
-
-
Jan Voung authored
Simplifies the GlobalContext constructor so that a future change may just set up the flags and the GlobalContext before calling into what is currently "main". Namely this change: https://codereview.chromium.org/997773002/ This also moves all uses of LLVM's CommandLine.h to a single file, so that in the future we may be able to simplify the flags parsing (especially for the minimal build). BUG= https://code.google.com/p/nativeclient/issues/detail?id=4091 BUG= https://code.google.com/p/nativeclient/issues/detail?id=4084 R=stichnot@chromium.org Review URL: https://codereview.chromium.org/1024203002
-
Jim Stichnoth authored
The pand instruction for masking off the sign bit can operate on a register or an m128 memory location, but not a 32-bit or 64-bit memory location. This means we need to make sure f32 and f64 operands are first loaded into a register. BUG= none R=jvoung@chromium.org Review URL: https://codereview.chromium.org/1022123004
-
Jim Stichnoth authored
This is done by emitting the following: .byte 0xe8 .long __Sz_AbsoluteZero -4 - . The linker is passed an argument like --defsym=__Sz_AbsoluteZero=0 to force the symbol's value to 0. This special symbol is needed due to an llvm-mc parsing bug. BUG= none R=jvoung@chromium.org Review URL: https://codereview.chromium.org/1027593002
-
- 19 Mar, 2015 3 commits
-
-
Jim Stichnoth authored
This fixes a regression likely introduced in d2cb4361 . The problem is that by using the default std::unordered_map comparison predicate std::equal_to, we get incorrect behavior when the key is float or double: 1. 0.0 and -0.0 appear equal, so they share a constant pool entry even though the bit patterns are different. This is a correctness bug. 2. Each instance of NaN gets a separate constant pool entry, because NaN != NaN by C equality rules. This is a performance bug. (This problem doesn't show up with the native bitcode reader, because constants are already unique-ified in the PNaCl bitcode file.) The solution is to use memcmp for floating-point key types. Also, the abi-atomics.ll test is disabled for the MINIMAL build, to fix an oversight from a previous CL. BUG= none R=jfb@chromium.org Review URL: https://codereview.chromium.org/1019233002
-
Jim Stichnoth authored
The intrinsic is lowered using the standard technique of masking off the FP sign bit, which is the high-order bit. To construct this mask, we use the existing trick of loading a vector register with all "1" bits, then logical-shift-right by one bit. In the future, we should add 128-bit vector values to the constant pool and force them to memory, and this could be used for the other routines that synthesize a vector constant. BUG= https://code.google.com/p/nativeclient/issues/detail?id=4097 R=jvoung@chromium.org Review URL: https://codereview.chromium.org/1022573004
-
Jan Voung authored
Finally address this TODO in the assembler. This will help translate non-IRT using programs (no ABI stability). The default scons testing mode is non-IRT, so this helps with that. I haven't actually tested this against scons yet, but I'm filling in the tests based on how LLVM translates the same bitcode. The filetype=asm is adjusted to omit the "*" and the "$". The filetype=obj is adjusted to check for fixups with NullSymbols, and also fill the assembler buffer at the instruction's immediate field w/ the right constant. The filetype=iasm is still TODO (hits an new assert in the Fixup's emit() function). Reverts 7ad1bed9: "Allow stubbing of called constant addresses using command line argument." since this is now handled (except for iasm). BUG= https://code.google.com/p/nativeclient/issues/detail?id=4080 R=stichnot@chromium.org Review URL: https://codereview.chromium.org/1017373002
-
- 18 Mar, 2015 2 commits
-
-
Jim Stichnoth authored
The actual code lowering is unchanged, but the validation is made less strict to allow the additional orderings. BUG= https://code.google.com/p/nativeclient/issues/detail?id=4029 R=jfb@chromium.org Review URL: https://codereview.chromium.org/1017453007
-
Jim Stichnoth authored
The attribute matching logic was wrong. If you specify the exact set of attributes, i.e. for a single test, no match would be found due to the < instead of <= test. BUG= none R=jvoung@chromium.org Review URL: https://codereview.chromium.org/1020473002
-
- 13 Mar, 2015 1 commit
-
-
Jim Stichnoth authored
This makes it more convenient to directly test the crosstests without having to go through the lit tests first. BUG= none R=kschimpf@google.com Review URL: https://codereview.chromium.org/1005163002
-
- 12 Mar, 2015 1 commit
-
-
Karl Schimpf authored
Fixes error reporting to match that of CL https://codereview.chromium.org/986453002 BUG=None R=stichnot@chromium.org Review URL: https://codereview.chromium.org/980393004
-
- 10 Mar, 2015 2 commits
-
-
Jim Stichnoth authored
This just puts the CMakeLists.txt file in place. A couple other changes are needed in other repos to make this take effect. BUG= none R=dschuff@chromium.org, mtrofin@chromium.org Review URL: https://codereview.chromium.org/998693003
-
Jim Stichnoth authored
The runtests.sh script is removed and replaced with crosstest_generator.py. "make check" limits to a relevant subset of cross tests to control the combinatorial explosion. We cut the native tests almost in half, and the sandboxed tests down to a quarter. The --include and --exclude logic is copied/adapted from szbuild.py. The script works by running through every possible test in the combinatorial explosion, and if the test is a match against the --include and --exclude arguments, the test is built and run. The script includes lit support, which is the most likely way it will be run. When run with the --lit argument, it sprays the output directory with lit test files in the form of shell scripts, and "make check" runs lit on that directory. BUG= https://code.google.com/p/nativeclient/issues/detail?id=4085 R=jvoung@chromium.org, mtrofin@chromium.org Review URL: https://codereview.chromium.org/987503004
-
- 06 Mar, 2015 1 commit
-
-
Jan Voung authored
This makes it compatible with the current browser interface, which pushes bytes to a DataStreamer. In the browser-integration mode, there will be a push-based DataStreamer (vs a file-based one). BUG= https://code.google.com/p/nativeclient/issues/detail?id=4091 R=dschuff@chromium.org, kschimpf@google.com, stichnot@chromium.org Review URL: https://codereview.chromium.org/982403002
-
- 05 Mar, 2015 1 commit
-
-
Jan Voung authored
Sometimes the work dir is empty and only cached results are used. I couldn't switch the LLVM one from work-dir to install/download-dir because we prune all the .a file in the download-dir. BUG=none R=kschimpf@google.com, stichnot@chromium.org Review URL: https://codereview.chromium.org/983533003
-
- 04 Mar, 2015 3 commits
-
-
Karl Schimpf authored
The error handling in LLVM for errors has been updated so that errors in the bitcode stream no longer cause (assertion crashes). This CL applies the appropriate changes to subzero. See CL https://codereview.chromium.org/932953002 for changes to error handling for LLVM. BUG= https://code.google.com/p/nativeclient/issues/detail?id=4002 R=stichnot@chromium.org Review URL: https://codereview.chromium.org/916313004
-
Jim Stichnoth authored
BUG= none R=jvoung@chromium.org Review URL: https://codereview.chromium.org/974113002
-
Jim Stichnoth authored
Tests all cross tests in both sandboxed and unsandboxed modes. Unfortunately, crosstest run time is more than doubled because of LTO of the crosstest drivers. (We may want to add "full" and "lite" versions of cross tests.) LLVM triple strings are removed where possible (from .ll files), and when generated, we use just i686 or i686-nacl. "Fix" the integrated assembler to emit the lock prefix after the 16-bit operand prefix, to make the validator happy. Don't add external symbol references to the ELF file for llvm.* intrinsic functions. Make the ELF object writer honor the -externalize argument. BUG= https://code.google.com/p/nativeclient/issues/detail?id=4092 R=jvoung@chromium.org Review URL: https://codereview.chromium.org/973823003
-
- 03 Mar, 2015 2 commits
-
-
Jan Voung authored
The default LLVM raw_fd_ostream buffer size is based on stat'ing the FD and then checking st_blksize. Unfortunately, in the NaCl sandboxed build of pnacl-sz, NaCl's syscall returns st_blksize of 0 which makes the writes unbuffered. There is a comment in "src/trusted/service_runtime/include/bits/stat.h": nacl_abi_blksize_t nacl_abi_st_blksize; /* not implemented */ And the " src/trusted/desc/" implementation sets this to 0. This results in half a million write syscalls to translate the GCC pexe, which roughly doubles the translation time in sandboxed mode vs unsandboxed mode. Manually set a buffer size (Linux st_blksize seems to be about 4KB for comparison). This drops the number of write syscalls to about 200 for translating the GCC pexe. BUG= https://code.google.com/p/nativeclient/issues/detail?id=4091 R=stichnot@chromium.org Review URL: https://codereview.chromium.org/969403003
-
Jim Stichnoth authored
When the advanced phi lowering handles a phi arg that is Undef, it lowers it to an assignment of a constant zero (or vector of zeroes). The ad-hoc register allocation was missing the fact that a vector of zeroes is done with "pxor %reg, %reg". This resulted in a pxor instruction with invalid addressing modes at emission time. The fix is to tell legalize() to use the dest physical register if dest has one; and if dest lacks a register, take the path where it actually does the ad-hoc register allocation as though the source operand were a memory operand. Tests are added for these vector undef phi args, and for scalar undef phi args as well for good measure. BUG= none R=jvoung@chromium.org Review URL: https://codereview.chromium.org/969703002
-
- 02 Mar, 2015 2 commits
-
-
Jan Voung authored
Need to list more dependencies, otherwise the static link fails. The current unsandboxed build is a shared build which uses libLLVM-3.*.so. Also mess with the CXXFlags a bit. The current pnacl-llc nexe build uses O3, but that triggers a method pointer bug: https://code.google.com/p/nativeclient/issues/detail?id=3857, so override that with O2. We may just want to change the pnacl-llc build as well (maybe use Os), but I don't know of the performance implications right now. Use gnu++11, because of newlib + libc++. Toggle the feature flags to be a MINIMAL build when building the sandboxed translator w/ the LLVM-based Makefile. Goes with build script change https://codereview.chromium.org/945473003/ BUG= https://code.google.com/p/nativeclient/issues/detail?id=4091 BUG= https://code.google.com/p/nativeclient/issues/detail?id=3857 R=dschuff@chromium.org, kschimpf@google.com Review URL: https://codereview.chromium.org/937283002
-
Jim Stichnoth authored
The runtime helpers are given more consistent names: __Sz_<bitcode>_<type1>_<type2> Missing helpers (various vector bitcasts) are implemented. We'd prefer to avoid calling external library functions, e.g. in compiler-rt, but even llc uses these helpers for some bitcode on x86-32, so the alternative is to copy their implementation into Subzero's runtime. BUG= none R=mtrofin@chromium.org Review URL: https://codereview.chromium.org/961413002
-
- 26 Feb, 2015 3 commits
-
-
Jan Voung authored
-
Jan Voung authored
-
Jim Stichnoth authored
Most of this is a mechanical change of 'llvm2ice' to 'pnacl-sz'. This is a convenient naming choice because both strings are the same length which minimizes the need for line length reformatting. Python variables needed to use pnacl_sz instead, and sometimes pnacl_sz_ . The IceConverter still uses LLVM2Ice naming, which is actually appropriate there since it actually converts LLVM IR into ICE. I will rename tests_lit/llvm2ice_tests/ in a separate CL, otherwise this CL will look misleadingly massive and no one will review it. BUG= none R=kschimpf@google.com Review URL: https://codereview.chromium.org/956123002
-
- 25 Feb, 2015 3 commits
-
-
Jim Stichnoth authored
1. Don't do anything in Cfg::emitTextHeader() in MINIMAL mode. (Reduces binary size by 1KB.) This actually broke a number of lit tests for the MINIMAL build, so "--assemble --disassemble" was changed to "--filetype=obj --disassemble". This allowed (or required) better precision in checking for data symbols. 1a. For the lit files touched, go ahead and remove "-verbose none" since that will forevermore by the default. 2. Don't emit the ".bundle_align_mode" directive. This is not necessary when assembling with the right -triple argument. BUG= none R=jvoung@chromium.org, kschimpf@google.com Review URL: https://codereview.chromium.org/955003002
-
Jan Voung authored
Rather than hard code 32. BUG= https://code.google.com/p/nativeclient/issues/detail?id=4080 R=stichnot@chromium.org Review URL: https://codereview.chromium.org/948343007
-
Jan Voung authored
Noticed the "Note: Still used by emit IAS" and decided to check if we can omit it. Saves about 3KB. There's also the "Note: Still used by emit IAS" CFG text header, but I haven't looked at that. This would silently cripple the -filetype=asm or -filetype=iasm in the MINIMAL build, but that isn't supposed to be supported. Had to conditionalize some more of the tests. BUG= https://code.google.com/p/nativeclient/issues/detail?id=4080 R=stichnot@chromium.org Review URL: https://codereview.chromium.org/952993006
-
- 24 Feb, 2015 1 commit
-
-
Jim Stichnoth authored
Delete zero-argument ctor where possible. Delete default copy ctor and default assignment operator where possible (some were missed in the past). (The above are not done to the cross tests because we aren't yet building them with C++11.) Declare single-argument ctor as "explicit". BUG= none R=jfb@chromium.org Review URL: https://codereview.chromium.org/952953002
-