aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2013-09-06PNaCl bitcode: Fix some tests to not use unsupported pointer-typed argsMark Seaborn
Remove an unused "i32* %ptr" argument from a couple of test cases. BUG=https://code.google.com/p/nativeclient/issues/detail?id=3671 TEST=call-elide.ll Review URL: https://codereview.chromium.org/23945004
2013-09-05PNaCl bitcode: Change test to use an intrinsic to make it more realisticMark Seaborn
Pointer-typed arguments are only allowed for intrinsics, so change the test of pointer-args to call an intrinsic. BUG=https://code.google.com/p/nativeclient/issues/detail?id=3671 TEST=call-elide.ll Review URL: https://codereview.chromium.org/23735008
2013-09-05PNaCl bitcode: Indirect calls: Store return type instead of function typeMark Seaborn
For indirect call instructions (INST_CALL_INDIRECT), it's not necessary to store the full function type. The argument types are already known from the arguments in the instruction. We only need to store the return type to be able to reconstruct the full function type. Storing only the return type ID will make the bitcode a little more compact. Return type IDs will be frequently-used scalar types, which can be given smaller type IDs than function types, which are less frequently used. This potentially makes the writer simpler: In principle, the writer no longer needs to make a pass across all functions' bodies to determine which function types are used in order to build the type table. BUG=https://code.google.com/p/nativeclient/issues/detail?id=3544 TEST=*.ll tests Review URL: https://codereview.chromium.org/23521005
2013-09-05PNaCl bitcode: Don't output the LABEL type in the type tableMark Seaborn
The type ID for the "label" type is never referenced. The "label" type was only being added to the type table because EnumerateType() treats BasicBlock and Value operands the same. However, the rest of the reader and writer treat BasicBlock operands specially and not like other Values. Change some tests to use wildcards for some type IDs. This is so that I don't have to update all the type ID numbers now that the generated type tables have changed. BUG=https://code.google.com/p/nativeclient/issues/detail?id=3590 TEST=run small_tests with v2 bitcode format enabled Review URL: https://codereview.chromium.org/23530031
2013-09-04Remove ARRAY/VECTOR types from PNaCl bitcode files.Karl Schimpf
The value selector list for switch statements are represented using ARRAY/VECTOR constants, but this information is not put into the bitcode file. This CL changes the value enumerator to not emit these constants. BUG= https://code.google.com/p/nativeclient/issues/detail?id=3649 R=mseaborn@chromium.org Review URL: https://codereview.chromium.org/23653013
2013-09-04PNaCl bitcode reader: Disallow pointer-typed arguments in indirect callsMark Seaborn
Make the bitcode reader stricter, so that it disallows pointer arguments in indirect function calls, which are disallowed by the PNaCl ABI checker. Pointer arguments in function calls are only allowed in intrinsic calls, and calls to intrinsics must always be direct calls, not indirect calls. This involves removing two tests that specifically test for pointer args. This is in preparation for tweaking how indirect calls are represented, so that they store the call's return type rather than the function type. BUG=https://code.google.com/p/nativeclient/issues/detail?id=3544 TEST=*.ll tests Review URL: https://codereview.chromium.org/23660005
2013-09-03Remove generating STRUCT_ANON records in PNaCl bitcode files.Karl Schimpf
Don't generate types for elided cast instructions, since they are never put into the bitcode file. In addition, do not generate a type id for the types of global variables, because they are never needed. Don't allow STRUCT_ANON in bitcode files PNaClVersion==2. BUG= https://code.google.com/p/nativeclient/issues/detail?id=3648 R=jvoung@chromium.org Review URL: https://codereview.chromium.org/23455023
2013-09-03Remove all remaining pointer casts from PNaCl bitcode files.Karl Schimpf
For PNaClVersion==2, removes remaining pointer casts from bitcode files. This includes: * Return value can be casted to a scalar value. * Intrinsic calls may return an inherent pointer, which may need casting to a scalar value. Also modifies tests bitcast-elide.ll and inttoptr-elide.ll by removing tests that assumed there were remaining pointer bitcasts that do not get removed. BUG= https://code.google.com/p/nativeclient/issues/detail?id=3544 R=jvoung@chromium.org Review URL: https://codereview.chromium.org/23524003
2013-09-03Allow PNaCl bitcode versions to be automatically extendable.Karl Schimpf
BUG= https://code.google.com/p/nativeclient/issues/detail?id=3656 R=mseaborn@chromium.org Review URL: https://codereview.chromium.org/23496022
2013-08-30PNaCl bitcode: Remove handling of USELIST blocksMark Seaborn
These blocks are never generated by the PNaCl bitcode writer. The code for generating them was removed when BitcodeWriter.cpp was copied to produce NaClBitcodeWriter.cpp in 5712db994c8a4abb8c2512fb2900650f8335af66. The same wasn't done when BitcodeReader.cpp was copied to produce NaClBitcodeReader.cpp, so we do this now. BUG=https://code.google.com/p/nativeclient/issues/detail?id=3590 TEST=PNaCl toolchain trybots Review URL: https://codereview.chromium.org/23598005
2013-08-30Revert some ARM byval localmods since byval+varargs are not in stable pexes.Jan Voung
Localmods came from: https://codereview.chromium.org/10825082/, and earlier. (1) The original change was so that byval parameters always go on the stack. That part was added because the original ARM code was buggy, and did not actually make a copy of the value, modifying the caller's struct (ouch!). (2) Then came a localmod to make all arguments following a byval go on the stack and to make the var-args code aware of that. This is so that arguments stay in the correct order for var-args to pick up. For (1) there has been some work upstream to make it work better. In any case, clang with --target=armv7a-...-gnueabi only used byval in some limited cases -- when the size of the struct is > 64 bytes where the backend will know that part of it could be in regs, and the rest can be memcpy'ed to the stack. For le32, clang will still generate byval without satisfying the same ARM condition (only for structs bigger than 64 bytes), so it could be *very bad* if we didn't have the ABI simpification passes rewrite the byval and try to let the ARM backend do things with byval... TEST=the GCC torture tests: va-arg-4.c, and 20030914-2.c and the example in issue 2746 still pass. BUG=none, cleanup R=dschuff@chromium.org Review URL: https://codereview.chromium.org/23691009
2013-08-30Revert "Remove generating STRUCT_ANON records in PNaCl bitcode files."Karl Schimpf
This reverts commit 2302e5d39e2302962d1a0e45d60e00ed47b9b061. BUG= R=eliben@chromium.org Review URL: https://codereview.chromium.org/23827002
2013-08-30Remove generating STRUCT_ANON records in PNaCl bitcode files.Karl Schimpf
Don't generate types for elided cast instructions, since they are never put into the bitcode file. In addition, do not generate a type id for the types of global variables, because they are never needed. Don't allow and STRUCT records in bitcode files when PNaClVersion==2. BUG= https://code.google.com/p/nativeclient/issues/detail?id=3648 R=mseaborn@chromium.org Review URL: https://codereview.chromium.org/23431008
2013-08-29LLVM: Update OWNERS.JF Bastien
R=dschuff@chromium.org Review URL: https://codereview.chromium.org/23480015
2013-08-29PNaCl bitcode: Remove handling of named struct typesMark Seaborn
Named struct types should not appear in LLVM IR that passes the PNaCl ABI verifier. Remove the test struct-types.ll because it no longer passes. Handling of TYPE_CODE_STRUCT_ANON must remain for now until this issue is fixed: https://code.google.com/p/nativeclient/issues/detail?id=3648 BUG=https://code.google.com/p/nativeclient/issues/detail?id=3590 TEST=PNaCl toolchain trybots Review URL: https://codereview.chromium.org/23490018
2013-08-29PNaCl bitcode: Remove handling of TYPE_CODE_OPAQUEMark Seaborn
Opaque struct types should not appear in LLVM IR that passes the PNaCl ABI verifier. BUG=https://code.google.com/p/nativeclient/issues/detail?id=3590 TEST=PNaCl toolchain trybots Review URL: https://codereview.chromium.org/23738002
2013-08-28PNaCl bitcode: Remove handling of unsupported floating point typesMark Seaborn
The only FP types that PNaCl currently supports are float and double. Clean up error reporting: * Convert an assert() to a report_fatal_error(). * Return an error rather than an "undef" value. * Report the type code value when it is unknown. BUG=https://code.google.com/p/nativeclient/issues/detail?id=3590 TEST=PNaCl toolchain trybots Review URL: https://codereview.chromium.org/23191009
2013-08-28PNaCl bitcode: Remove support for >64-bit int constants (CST_CODE_WIDE_INTEGER)Mark Seaborn
The PNaCl ABI verifier does not allow large integer constants. Remove an argument from EmitAPInt() which is now no longer used. Also make error reporting for unknown Constants more verbose. BUG=https://code.google.com/p/nativeclient/issues/detail?id=3590 TEST=PNaCl toolchain trybots Review URL: https://codereview.chromium.org/22903044
2013-08-28Hardcode NaCl in ADT/Triple.h for NaCl only builds (no Darwin/Windows).Jan Voung
Ideally, OS-specific code would be factored out, but there are currently tons of "if (T.isOSBlah())" everywhere. E.g., 57 hits for isTargetDarwin, 36 hits for isOSDarwin, 45 hits for "getOS(", 23 hits for isMacOSX, etc... Hacking Triple.h gets us most of the way there. The X86 code also requires hacking the getEnvironment() to never return the Darwin enum value. We can't just return GNU always, because for ARM we want GNUEABIHF. There is still *some* MachO and COFF code because of code that handles container-specific relocations without checking the OS first. This prunes between 100KB to 200 KB per target (~100KB for ARM, and ~200KB for x86-64). See https://codereview.chromium.org/23540008/ for the test. BUG=https://code.google.com/p/nativeclient/issues/detail?id=1222 BUG=https://code.google.com/p/nativeclient/issues/detail?id=3321 R=dschuff@chromium.org, jfb@chromium.org Review URL: https://codereview.chromium.org/23453014
2013-08-28Handle pointer conversions for call instructions.Karl Schimpf
This also should complete the changes associated with removing pointer cast instructions from the PNaCl bitcode file. BUG= https://code.google.com/p/nativeclient/issues/detail?id=3544 R=dschuff@chromium.org, jvoung@chromium.org Review URL: https://codereview.chromium.org/23482002
2013-08-28PNaCl bitcode: Remove definition of unused constant, SWITCH_INST_MAGICMark Seaborn
This is unused since I cleaned up the handling of SwitchInsts for PNaCl. BUG=https://code.google.com/p/nativeclient/issues/detail?id=3590 TEST=PNaCl toolchain trybots Review URL: https://codereview.chromium.org/23104008
2013-08-26Revert LOCALMODs in gold plugin and libLTO related to bitcode shared objects ↵Derek Schuff
and symbol wrapping This reverts the local modifications to the gold plugin and liblto for bitcode shared objects and for symbol wrapping, neither of which are used or tested anymore. It depends on a corresponding change to the linker plugin API. R=eliben@chromium.org, jvoung@chromium.org BUG= https://code.google.com/p/nativeclient/issues/detail?id=3520 Review URL: https://codereview.chromium.org/22831032
2013-08-26Elide pointer to int casts on phi nodes.Karl Schimpf
Handles the eliding of pointer to integer casts operands of the phi node. Also caches unelided casts generated in the reader (removing duplicates within the same block). This reduces the size of thawed pnacl-llc.pexe by about 2%. BUG= https://code.google.com/p/nativeclient/issues/detailid=3544 R=mseaborn@chromium.org Review URL: https://codereview.chromium.org/22909016
2013-08-23PNaCl bitcode: Remove support for TYPE_CODE_FUNCTION_OLDMark Seaborn
PNaCl uses TYPE_CODE_FUNCTION instead, as you'd expect. BUG=https://code.google.com/p/nativeclient/issues/detail?id=3590 TEST=PNaCl toolchain trybots Review URL: https://codereview.chromium.org/22819015
2013-08-23PNaCl bitcode: Remove support for string constant valuesMark Seaborn
These are no longer used since we introduced the GLOBALVAR block for PNaCl, in which global variable initialisers are flattened. BUG=https://code.google.com/p/nativeclient/issues/detail?id=3590 TEST=PNaCl toolchain trybots Review URL: https://codereview.chromium.org/22903045
2013-08-19Remove FlagNaClUseM23ArmAbi since M23 was a long time ago.Jan Voung
It was used to support old r9/TLS model: https://codereview.chromium.org/11345042/ BUG=none (cleanup) R=jfb@chromium.org Review URL: https://codereview.chromium.org/23135011
2013-08-14Remove ptrtoint instructions from the PNaCl bitcode file.Karl Schimpf
Removes ptrtoint instructions when applicable (currently only in stores), and add them back just before their use. Note: This code does not handle ptrtoint casts for calls and phi nodes, binary operators, etc. because handling of casts for these instructions has not been added yet. BUG= https://code.google.com/p/nativeclient/issues/detail?id=3544 R=jvoung@chromium.org Review URL: https://codereview.chromium.org/22633002
2013-08-14Correct DCE comment.JF Bastien
Follow-up to https://codereview.chromium.org/22710004/ R=eliben@chromium.org Review URL: https://codereview.chromium.org/23085007
2013-08-14Updating the developer's guide with additional PNaCl information.Eli Bendersky
I don't think this specific format will be what we eventually "ship" to the NaCl documentation website, but it's useful to have a placeholder to add things to. For example, information like language and library versions supported, preprocessor macros and so on. We will have to document these at some point. Feel free to suggest additional such things that need to be documented (here or in subsequent CLs). BUG=None R=jvoung@chromium.org Review URL: https://codereview.chromium.org/23105006
2013-08-14Allow record-level printing by pnacl-bcanalyzer.Karl Schimpf
BUG= https://code.google.com/p/nativeclient/issues/detail?id=3627 R=jvoung@chromium.org Review URL: https://codereview.chromium.org/23060004
2013-08-13Add pnacl-llc CMake dependency on LLVMNaClTransforms.JF Bastien
Some CMake builds fail to build without it. It's probably a race. R=jvoung@chromium.org Review URL: https://codereview.chromium.org/23002005
2013-08-13Add NaClBitReader library dependencies to pnacl-freeze.Karl Schimpf
BUG= https://code.google.com/p/nativeclient/issues/detail?id=3626 R=jvoung@chromium.org Review URL: https://codereview.chromium.org/23072004
2013-08-09Properly support 16-bit atomics on x86-32.JF Bastien
16-bit atomics aren't handled properly by the current validator, this patch changes the translator so that on x86-32 it emulates 16-bit atomics with 32-bit atomics in a compare-exchange loop. TEST= ./scons run_synchronization_sync_test bitcode=1 platform=x86-32 BUG= https://code.google.com/p/nativeclient/issues/detail?id=3579 BUG= https://code.google.com/p/nativeclient/issues/detail?id=2981 BUG= https://code.google.com/p/nativeclient/issues/detail?id=3475 R=dschuff@chromium.org Review URL: https://codereview.chromium.org/22760002
2013-08-08Add simple dead code elimination at the end of post-opt.JF Bastien
This should slightly reduce the size of generate pexes without compromising ABI stability since the code in DCE.cpp is so simple. BUG= https://code.google.com/p/nativeclient/issues/detail?id=3613 TEST= tryjobs R= kschimpf@chromium.org, eliben@chromium.org Review URL: https://codereview.chromium.org/22710004
2013-08-07Add the new @llvm.nacl.atomic.fence.all intrinsicJF Bastien
This is a follow-up to: https://codereview.chromium.org/22240002/ And requires the Clang changes from: https://codereview.chromium.org/22294002/ This new intrinsic represents ``asm("":::"~{memory}")`` as well as ``__sync_synchronize()``, and in IR it corresponds to a sequentially-consistent fence surrounded by ``call void asm sideeffect "", "~{memory}"()``. R=jvoung@chromium.org TEST= ninja check-all BUG= https://code.google.com/p/nativeclient/issues/detail?id=3475 Review URL: https://codereview.chromium.org/22474008
2013-08-07Revert localmod for bitcode linking speedup (different fix upstream).Jan Voung
Original localmod: https://codereview.chromium.org/10808021/ which fixes some quadratic behavior. Xiaofei Wan fixed the quadratic behavior upstream differently, via a series of commits around: http://llvm.org/viewvc/llvm-project?view=revision&revision=181104 and it is actually faster: ~7 seconds to link pnacl-llc w/ just the upstream fix ~11 seconds to link with localmod (used to be ~120 seconds w/ quadratic behavior) BUG=http://code.google.com/p/nativeclient/issues/detail?id=2883 TEST= trybots: http://chromegw.corp.google.com/i/tryserver.nacl/builders/nacl-toolchain-linux-pnacl-x86_64/builds/784 R=eliben@chromium.org Review URL: https://codereview.chromium.org/22509002
2013-08-06Rework PNaCl memory orderingJF Bastien
This CL reworks memory ordering as specified by PNaCl. The documentation needed some clarification, and the implementation needs a bit more work around volatile and __sync_synchronize to offer stronger guarantees than what LLVM intends to offer for legacy code. There is a companion patch with Clang changes: https://codereview.chromium.org/22294002 R=eliben@chromium.org TEST= ninja check-all BUG= https://code.google.com/p/nativeclient/issues/detail?id=3475 Review URL: https://codereview.chromium.org/22240002
2013-08-05Fix handling of the volatile bit of loads/stores in PNaCl bitcode files.Karl Schimpf
Fixes so that the volatile bit is no longer put into the bitcode file, since the volatile bit is not in the PNaCl ABI. BUG= https://code.google.com/p/nativeclient/issues/detail?id=3610 R=jvoung@chromium.org Review URL: https://codereview.chromium.org/21949006
2013-08-02Remove unnecessary pointer casts on store instructions.Karl Schimpf
BUG= https://code.google.com/p/nativeclient/issues/detail?id=3544 R=mseaborn@chromium.org Review URL: https://codereview.chromium.org/21964002
2013-08-02Remove duplicate 'we' in comment.Karl Schimpf
Fixes change in CL https://codereview.chromium.org/21614002 that was overlooked. BUG=None R=jvoung@chromium.org Review URL: https://codereview.chromium.org/21908004
2013-08-02Add missing include to ResolvePNaClIntrinsics.cppJF Bastien
R=dschuff@chromium.org Review URL: https://codereview.chromium.org/21898004
2013-08-02Remove the bitcast (of global values) from load instructions.Karl Schimpf
Adds the eliding of bitcasts that are used as an argument to instructions that expect normalized pointers. Currently, the checked in code only checks normalized pointers for load instructions. Hence, the restriction to load instructions. As more instructions are modified to check for normalized pointers, this code will apply to those instructions. BUG= https://code.google.com/p/nativeclient/issues/detail?id=3544 R=mseaborn@chromium.org Review URL: https://codereview.chromium.org/21614002
2013-08-01Add Intrinsic::nacl_atomic_is_lock_freeJF Bastien
This is part of a bigger CL to fix C++11 in PNaCl, to commit in the following order: - https://codereview.chromium.org/20552002 - https://codereview.chromium.org/20554002 - https://codereview.chromium.org/20560002 - https://codereview.chromium.org/20561002 This should be the last PNaCl ABI change for C11/C+11 atomic support. Note that Clang already has a builtin for lock-free, but it's partly resolved by Clang's ExprConstant.cpp and CGBuiltin.cpp, whereas what we want is a call that becomes a constant at translation-time. I made the translation part fairly general so it's easy to support architectures where ``true`` isn't always the right answer. BUG= https://code.google.com/p/nativeclient/issues/detail?id=3475 TEST= ./scons run_synchronization_cpp11_test --verbose bitcode=1 platform=x86-64 TEST= ninja check-all R=dschuff@chromium.org Review URL: https://codereview.chromium.org/20554002
2013-08-01Remove the inttoptr dependency from load instructions.Karl Schimpf
Elides inttoptr casts used (exclusively) in load instructions when PNaClVersion=2. This is an incremental start on removing the inttoptr instruction from the PNaCl wire format (See issue 3544 for more information on the strategy of removing ptrtoint). Also modifies PNaCl bitcode reader/writer to accept PNaClVersion=1 as supported, and PNaClVersion=2 as unsupported but readable (allowing pnacl-freeze and pnacl-thaw to work on such files). Also allows command-line option --pnacl-version for setting PNaClVersion in the PNaCl bitcode writer. Also fixes some problems on PNaCl bitcode headers, using common support to determine when the read/written PNaCl bitcode file is valid. BUG= https://code.google.com/p/nativeclient/issues/detail?id=3544 R=jvoung@chromium.org Review URL: https://codereview.chromium.org/5812155903377408
2013-07-31Copy (strdup) a command-line arg to avoid use-after-free.Jim Stichnoth
There may be a better way to handle this that avoids leaking the command-line arguments. BUG= https://code.google.com/p/nativeclient/issues/detail?id=3605 R=dschuff@chromium.org Review URL: https://codereview.chromium.org/21375003
2013-07-30Rewrite ``asm("":::"memory")`` to ``fence seq_cst``JF Bastien
This is often used as a compiler barrier and should "just work" in user code. BUG= https://code.google.com/p/nativeclient/issues/detail?id=2345 R=eliben@chromium.org TEST= (cd ./pnacl/build/llvm_x86_64 && ninja check-all) Review URL: https://codereview.chromium.org/21178002
2013-07-30Move alloca into subsection for better formatting.Eli Bendersky
BUG=None R=sehr@chromium.org Review URL: https://codereview.chromium.org/21069006
2013-07-30Clarify that externally_initialized is not supported.Eli Bendersky
BUG= R=sehr@chromium.org Review URL: https://codereview.chromium.org/21046009
2013-07-30Describe NaCl-specific intrinsics.Eli Bendersky
BUG=None R=jfb@chromium.org Review URL: https://codereview.chromium.org/21162002
2013-07-29Beginnings of a "PNaCl Developer's Guide".Eli Bendersky
The first piece of contents is the atomic/memory model "notes" - currently cruderly ripped out of PNaClLangRef.rst and replaced with links. BUG=None R=jfb@chromium.org Review URL: https://codereview.chromium.org/21089005