- 19 Jan, 2016 2 commits
-
-
Jim Stichnoth authored
Provides a variant of the UnimplementedError macro specifically for use in incomplete target instruction lowering. When --skip-unimplemented is specified, the UnimplementedLoweringError macro adds FakeUse and FakeDef instructions in order to maintain consistency in liveness analysis. BUG= none R=kschimpf@google.com Review URL: https://codereview.chromium.org/1591893002 .
-
John Porto authored
if vpush/vpop needs to emit multiple instructions (because of non-consecutive registers), then the emitted sequence should be: vpush list1 vpush list2 ... vpop list2 vpop list1 Subzero was emiting vpop in the wrong order: vpop list1 vpop list2 These multiple lists push/pop arise because of the way fp32 and fp64 registers are declared (s0 -> s31, d31 -> d0). This CL modifies fp64 registers so they are declared in ascending order (d0 -> d31), which fixes subzero temporarily. The appropriate fix is to change vpop to be emitted in the right order. BUG= https://bugs.chromium.org/p/nativeclient/issues/detail?id=4076 R=sehr@chromium.org, stichnot@chromium.org Review URL: https://codereview.chromium.org/1592663004 .
-
- 15 Jan, 2016 5 commits
-
-
John Porto authored
This CL introduces the TargetLowering::AutoBundle type, which allows RAII-style bundle emission. As part of the CL, all of the uses of TargetLowering::_bundle_lock(), and TargetLowering::_bundle_unlock(), were replaced with uses of the newly introduced type. BUG= R=sehr@chromium.org, stichnot@chromium.org Review URL: https://codereview.chromium.org/1585843007 .
-
Karl Schimpf authored
This allows better debugging of register encodings into instructions, in the integrated assembler. BUG= https://bugs.chromium.org/p/nativeclient/issues/detail?id=4334 R=stichnot@chromium.org Review URL: https://codereview.chromium.org/1571433004 .
-
Jim Stichnoth authored
A good trick for implementing lowering for a new target is, for not-yet-implemented instructions, to insert a FakeUse of each instruction variable followed by a FakeDef of the dest variable. Otherwise one risks running afoul of liveness analysis integrity checks. However, if all the high-level instructions in a basic block lack variables (e.g. unconditional branches, or void calls with only constant arguments), the resulting block may be completely empty. In O2 mode, this triggers a couple of assertions/errors that wouldn't normally occur: 1. CfgNode::contractIfEmpty() finds a block with a single out-edge that does *not* end with an unconditional branch. 2. CfgNode::livenessAddIntervals() tries to add a bogus liveness interval to a variable because the empty block contains no actual instruction numbers to form a valid interval from. This adds some fixes/workarounds for those problems. Another workaround for the empty basic block problem may be to just to add a FakeUse of the stack pointer when lowering an unconditional branch, which combined with the trick above, should prevent empty blocks. However, these fixes seem reasonable apart from that. BUG= none R=sehr@chromium.org Review URL: https://codereview.chromium.org/1590303002 .
-
Karl Schimpf authored
Cleans up code by removing unnecessary class. BUG=None R=stichnot@chromium.org Review URL: https://codereview.chromium.org/1581803009 .
-
Karl Schimpf authored
Before, type signatures of functions were only checked when called. This CL fixes this by checking all function signatures. BUG=None R=stichnot@chromium.org Review URL: https://codereview.chromium.org/1579203002 .
-
- 14 Jan, 2016 1 commit
-
-
John Porto authored
BUG= https://bugs.chromium.org/p/nativeclient/issues/detail?id=4077 R=sehr@chromium.org, stichnot@chromium.org Review URL: https://codereview.chromium.org/1559243002 .
-
- 13 Jan, 2016 3 commits
-
-
David Sehr authored
Also turn it on for presubmit testing. BUG= R=stichnot@chromium.org Review URL: https://codereview.chromium.org/1531623007 .
-
Jim Stichnoth authored
If the default --target option is not actually included in the Subzero build (via llvm/Config/SZTargets.def), then "pnacl-sz --build-atts" will fail. This is because the attribute printing is done after the GlobalContext is created, which does some amount of Target initialization. The fix is to move the attribute printing to a point after the flags are parsed and the output streams are created, but before the GlobalContext is created. This basically disables --build-atts in the browser build, but that should be OK. BUG= none R=kschimpf@google.com Review URL: https://codereview.chromium.org/1584923002 .
-
Jim Stichnoth authored
This tries to use the same -W options that the buildbots use, to reduce the amount of warning spam in the logs. BUG= none R=jpp@chromium.org Review URL: https://codereview.chromium.org/1575873006 .
-
- 11 Jan, 2016 5 commits
-
-
Sean Klein authored
TEST=Run szbuild.py in a directory which does not include "native_client" as a subdirectory. BUG=None R=stichnot@chromium.org Review URL: https://codereview.chromium.org/1565963002 .
-
Karl Schimpf authored
Also fixes bug in emitVFPddd. BUG= https://bugs.chromium.org/p/nativeclient/issues/detail?id=4334 R=stichnot@chromium.org Review URL: https://codereview.chromium.org/1564393002 .
-
Karl Schimpf authored
Refactors methods emit() and emitIAS() of InstARM32Push and InstARM32Pop to separate out the selection of assembler instructions from instruction emission, using template methods. Template method assemble() provides a single implementation for emit() and emitIAS(). This method calls template functions in the assembler to generate textual and binary forms of the instruction. BUG= None R=jpp@chromium.org, stichnot@chromium.org Review URL: https://codereview.chromium.org/1535233002 .
-
John Porto authored
BUG= https://bugs.chromium.org/p/nativeclient/issues/detail?id=4076 R=stichnot@chromium.org Review URL: https://codereview.chromium.org/1572303002 .
-
Jim Stichnoth authored
The linking errors are the following. Somehow the clang build succeeds. .../IceInstARM32.o:IceInstARM32.cpp:(.text$_ZNK3Ice5ARM3220InstARM32ThreeAddrFPILNS0_9InstARM3213InstKindARM32E74EE4dumpEPKNS_3CfgE[__ZNK3Ice5ARM3220InstARM32ThreeAddrFPILNS0_9InstARM3213InstKindARM32E74EE4dumpEPKNS_3CfgE]+0x38): undefined reference to `Ice::ARM32::InstARM32ThreeAddrFP<(Ice::ARM32::InstARM32::InstKindARM32)74>::Opcode' .../IceInstARM32.o:IceInstARM32.cpp:(.text$_ZNK3Ice5ARM3220InstARM32ThreeAddrFPILNS0_9InstARM3213InstKindARM32E75EE4dumpEPKNS_3CfgE[__ZNK3Ice5ARM3220InstARM32ThreeAddrFPILNS0_9InstARM3213InstKindARM32E75EE4dumpEPKNS_3CfgE]+0x38): undefined reference to `Ice::ARM32::InstARM32ThreeAddrFP<(Ice::ARM32::InstARM32::InstKindARM32)75>::Opcode' collect2.exe: error: ld returned 1 exit status BUG= none TBR=jpp Review URL: https://codereview.chromium.org/1576823002 .
-
- 10 Jan, 2016 2 commits
-
-
Jim Stichnoth authored
It turns out that the g++ test build, initiated by "make presubmit", was actually using clang++ for the build. This fixes the makefile, plus the code that actually produces errors under the g++ build. BUG= none TBR=jpp Review URL: https://codereview.chromium.org/1572863003 .
-
Reed Kotler authored
BUG= R=stichnot@chromium.org Review URL: https://codereview.chromium.org/1572143002 . Patch from Reed Kotler <rkotlerimgtec@gmail.com>.
-
- 08 Jan, 2016 2 commits
-
-
Karl Schimpf authored
Adds vcvt<c>.f32.f64 and vcvt<c>.f64.32 to the ARM integrated assembler. BUG= https://bugs.chromium.org/p/nativeclient/issues/detail?id=4334 R=stichnot@chromium.org Review URL: https://codereview.chromium.org/1567623008 .
-
Reed Kotler authored
currently if you do a make clean-all or have never done a code build, there will be no build directory and doxygen is going to want to create and put files into build/docs/html BUG= R=stichnot@chromium.org Review URL: https://codereview.chromium.org/1567313002 . Patch from Reed Kotler <rkotlerimgtec@gmail.com>.
-
- 07 Jan, 2016 6 commits
-
-
Karl Schimpf authored
BUG= https://bugs.chromium.org/p/nativeclient/issues/detail?id=4334 R=stichnot@chromium.org Review URL: https://codereview.chromium.org/1570543002 .
-
Karl Schimpf authored
Also fixes some badly named locals for VSUBS and VSUBD. BUG= https://bugs.chromium.org/p/nativeclient/issues/detail?id=4334 R=stichnot@chromium.org Review URL: https://codereview.chromium.org/1568933002 .
-
Karl Schimpf authored
Also adds missing test case for the VADDD instruction. BUG= https://bugs.chromium.org/p/nativeclient/issues/detail?id=4334 R=stichnot@chromium.org Review URL: https://codereview.chromium.org/1568623003 .
-
Reed Kotler authored
Move Doxyfile files to docs and associated makefile. This is a prelude to allowing a docs directory for all the RST files as well as expanding the makefile to build the docs for those too, not just the doxygen output. The doxygen html has been moved to build/docs/html so it's not in a source directory. Gitignore has been fixed to allow files in docs now without complaining. BUG= R=stichnot@chromium.org Review URL: https://codereview.chromium.org/1562703002 . Patch from Reed Kotler <rkotlerimgtec@gmail.com>.
-
Karl Schimpf authored
BUG= https://bugs.chromium.org/p/nativeclient/issues/detail?id=4334 R=stichnot@chromium.org Review URL: https://codereview.chromium.org/1540653003 .
-
Reed Kotler authored
BUG= R=stichnot@chromium.org Review URL: https://codereview.chromium.org/1562543002 . Patch from Reed Kotler <rkotlerimgtec@gmail.com>.
-
- 06 Jan, 2016 1 commit
-
-
Jim Stichnoth authored
The driver programs for vector tests use a loop to initialize vector-type values one element at a time. The PNaCl ABI requires the vector element index to be a constant, and the createConstantInsertExtractElementIndexPass() transformation creates an alloca instruction. When this alloca is inside a loop, it can (and does in the cross tests) cause a stack overflow. The workaround here is to use a noinline helper function to do the insertelement. We didn't run into this problem until now because native and sandbox cross tests build the driver in a different way that presumably avoids running the PNaCl ABI simplification passes. BUG= none R=jpp@chromium.org Review URL: https://codereview.chromium.org/1560933002 .
-
- 04 Jan, 2016 4 commits
-
-
Jim Stichnoth authored
The basic model is that each translated function begins with a special "GotVar = getIP" instruction, and each ConstantRelocatable reference is changed to GotVar+ConstantRelocatable@GOTOFF (assuming GotVar is legalized into a physical register). The getIP instruction is late-lowered into: call __Sz_getIP_<reg> add <reg>, $_GLOBAL_OFFSET_TABLE_ mov GotVar, <reg> Note that _GLOBAL_OFFSET_TABLE_ gets a special relocation type. The register allocator takes GotVar uses into account, giving appropriate weight toward register allocation. If there are no uses of GotVar, the getIP instruction gets naturally dead-code eliminated. Special treatment is needed to prevent this elimination when the only GotVar uses are for (floating point) constant pool values from Phi instructions, since the Phi lowering with its GotVar legalization happens after the main round of register allocation. The x86 mem operand now has a IsPIC field to indicate whether it has been PIC-legalized. Mem operands are sometimes legalized more than once, and this IsPIC field keeps GotVar from being added more than once. We have to limit the aggressiveness of address mode inference, to make sure a register slot is left for the GotVar. The Subzero runtime has new asm files to implement all possible __Sz_getIP_<reg> helpers. The szbuild.py script and the spec2k version support Non-SFI builds. Running spec2k depends on a pending change to the spec2k run_all.sh script. Read-only data sections need to be named .data.rel.ro instead of .rodata because of PIC rules. Most cross tests are working, but there is some problem with vector types that seems to be not Subzero related, so most vector tests are disabled for now. Still to do: * Fix "--nonsfi --filetype=iasm". The llvm-mc assembler doesn't properly apply the _GLOBAL_OFFSET_TABLE_ relocation in iasm mode. Maybe I can find a different syntactic trick that works, or use hybrid iasm for this limited case. BUG= https://bugs.chromium.org/p/nativeclient/issues/detail?id=4327 R=jpp@chromium.org Review URL: https://codereview.chromium.org/1506653002 .
-
John Porto authored
This CL modifies the ARM32 backend so that the REGARM32_TABLE is only expanded once (to initialize a constexpr array.) This change decreased the backend size in roughly ~80k. BUG= https://code.google.com/p/nativeclient/issues/detail?id=4076 R=kschimpf@google.com Review URL: https://codereview.chromium.org/1554263002 .
-
John Porto authored
BUG= https://code.google.com/p/nativeclient/issues/detail?id=4076 R=kschimpf@google.com Review URL: https://codereview.chromium.org/1554203002 .
-
John Porto authored
This CL does more than any CL should. First, it moves all target-specific classes (TargetLowering, Assembler, and Instructions) to a target-specific namespace. For example, the ::Ice::TargetX8632 class now lives in ::Ice::X8632::TargetX8632. Same goes for ARM32, X8664, and MIPS32. Now, we have a ton of redundant prefixes (it should be pretty obvious that ::Ice::X8632::TargetLowering is an X8632 target lowering), but this is definitively not something for this CL. Second, this CL gets rid of the excessive use of 'typename Foo::Bar' in the X86 templates. These changes appear more intimidating than they really are, and they were fairly mechanical. Third, the x86?? Traitses (gollum!) classes are no longer template instatiation. The previous X86 templates were parameterized with a X86 TargetLowering, and they assumed that a MachineTraits<Target> was defined for that TargetLowering. The X86 templates are now parameterized with a TraitsType, and different backends may have completely unrelated traits. Fourth, the X86 templates are no longer members of ::Ice::X86Internal. Instead, each file #include'ing a Ice*X86Base.h file need to #define X86NAMESPACE to the namespace where the backend is being defined. With this change, the template instantiation for X8632 live in ::Ice::X8632, and, for X8664, in ::Ice::X8664. BUG= R=stichnot@chromium.org Review URL: https://codereview.chromium.org/1548363002 .
-
- 30 Dec, 2015 2 commits
-
-
John Porto authored
initRegisterSet() for x8632 and x8664 were both huge. This CL refactors those methods to use a pre-initialized table instead of the result of expanding the x-macros. BUG= R=stichnot@chromium.org Review URL: https://codereview.chromium.org/1546373003 .
-
John Porto authored
This is the first step towards hiding backend-specific stuff from the rest of subzero. In this CL, all the references to target-specific files (e.g., IceTargetLoweringX8632.h) are removed from target-independent files. This CL also changes the named constructors in the Target-specific classes (e.g., TargetX8632::create()) to return unique_ptrs. BUG= R=stichnot@chromium.org Review URL: https://codereview.chromium.org/1551633002 .
-
- 28 Dec, 2015 2 commits
-
-
Reed Kotler authored
This assumes patch from 1534883005 though still needs to rename validateAndGenerateBuildAttributes to dumpBuildAttributes BUG= R=stichnot@chromium.org Review URL: https://codereview.chromium.org/1541063002 . Patch from Reed Kotler <rkotlerimgtec@gmail.com>.
-
Reed Kotler authored
This is a first cut at this. More can be done and much of this is just moving what is already in the help for the commands into Doxygen comments. The documentation can be expanded to better describe the role of the various command line options. BUG= R=stichnot@chromium.org Review URL: https://codereview.chromium.org/1547743002 . Patch from Reed Kotler <rkotlerimgtec@gmail.com>.
-
- 24 Dec, 2015 1 commit
-
-
John Porto authored
Fixes filetype=asm for x8664. BUG= https://bugs.chromium.org/p/nativeclient/issues/detail?id=4077 R=stichnot@chromium.org Review URL: https://codereview.chromium.org/1543573002 .
-
- 22 Dec, 2015 2 commits
-
-
Reed Kotler authored
there is no way for these values of build attributes to be other than 0,1 by c++ rules since they are constexpr bool. BUG= R=stichnot@chromium.org Review URL: https://codereview.chromium.org/1534883005 . Patch from Reed Kotler <rkotlerimgtec@gmail.com>.
-
John Porto authored
After a hiatus while x32 was not available in nacl's llvm, x8664 is being revived. Rejoice! The Target is now back to where it was before: the crosstests pass, and SPEC2k builds and verifies. Makefile.standalone still has the crosstests for x8664 disabled while we wait for all the plumbing that's needed for x32 support on nacl's toolchain to be available. BUG= https://bugs.chromium.org/p/nativeclient/issues/detail?id=4077 R=stichnot@chromium.org Review URL: https://codereview.chromium.org/1537703002 .
-
- 20 Dec, 2015 1 commit
-
-
Reed Kotler authored
BUG= R=stichnot@chromium.org Review URL: https://codereview.chromium.org/1538173002 . Patch from Reed Kotler <rkotlerimgtec@gmail.com>.
-
- 18 Dec, 2015 1 commit
-
-
Karl Schimpf authored
BUG=None R=sehr@chromium.org Review URL: https://codereview.chromium.org/1534133003 .
-