1. 23 Mar, 2015 1 commit
    • Subzero: Fix inappropriate use of nullptr. · 27c56bf6
      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
  2. 20 Mar, 2015 3 commits
  3. 19 Mar, 2015 3 commits
    • Subzero: Fix floating-point constant pooling. · 5bfe2157
      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
    • Subzero: Add fabs intrinsic support. · 8c980d0d
      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
    • Assemble calls to constant addresses. · f644a4b3
      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
  4. 18 Mar, 2015 2 commits
  5. 13 Mar, 2015 1 commit
  6. 12 Mar, 2015 1 commit
  7. 10 Mar, 2015 2 commits
    • Subzero: Enable a cmake build. · cd912149
      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
    • Subzero: Run cross tests as a much more configurable python script. · dc7c597e
      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
  8. 06 Mar, 2015 1 commit
  9. 05 Mar, 2015 1 commit
  10. 04 Mar, 2015 3 commits
  11. 03 Mar, 2015 2 commits
    • Ignore NaCl st_blksize of 0 and buffer writes to raw_fd_ostream. · 437ceff2
      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
    • Subzero: Fix a register allocation issue for "advanced phi lowering". · 5bc44313
      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
  12. 02 Mar, 2015 2 commits
  13. 26 Feb, 2015 3 commits
  14. 25 Feb, 2015 3 commits
  15. 24 Feb, 2015 4 commits
  16. 20 Feb, 2015 2 commits
  17. 19 Feb, 2015 1 commit
  18. 13 Feb, 2015 5 commits