aboutsummaryrefslogtreecommitdiff
path: root/include
AgeCommit message (Collapse)Author
2014-02-26NoExitRuntimeAlon Zakai
2014-02-25Introduce the asmjs-unknown-emscripten target triple.Dan Gohman
2014-01-19initial work on setjmp/longjmp for emscriptenAlon Zakai
2014-01-09exception handling supportAlon Zakai
2013-12-04boilerplate for ExpandI64PassAlon Zakai
2013-11-21Clean up handling of PNaCl bitcode headers.Karl Schimpf
Write out all of PNaCl bitcode headers using a single interface function. BUG= https://code.google.com/p/nativeclient/issues/detail?id=3720 R=jvoung@chromium.org Review URL: https://codereview.chromium.org/61753017
2013-11-21Define comparison for PNaCl bitcode abbreviations.Karl Schimpf
Define comparison of bitcode abbreviations so that we can add bitcode abbreviations to collections. BUG= https://code.google.com/p/nativeclient/issues/detail?id=3720
2013-11-07Factor out bitcode parser from pnacl-bcanalyzer.Karl Schimpf
Factors out bitcode parser from pnacl-bcanalyzer, so that it can also be used for PNaCl bitcode to bitcode rewriters. BUG= https://code.google.com/p/nativeclient/issues/detail?id=3720 R=jvoung@chromium.org Review URL: https://codereview.chromium.org/48623003
2013-10-30Move global FlagSfi variables to common modulePetar Jovanovic
When built as nexe, llc is configured and built for one arch only. Variables FlagSfiData, FlagSfiLoad, FlagSfiStore, FlagSfiStack, and FlagSfiBranch have to availabe for MIPS as well, so this change moves them from ARM-only code to common code. BUG= building pnacl-llc.nexe for MIPS fails TEST= build sandboxed tools for MIPS R=mseaborn@chromium.org Review URL: https://codereview.chromium.org/46193002
2013-10-23Remove obsolete bitcode wrapper codeDerek Schuff
We are using our own bitcode reader now, and no longer need this. R=jvoung@chromium.org, kschimpf@google.com BUG=cleanup Review URL: https://codereview.chromium.org/32943005
2013-10-16Add PNaClSjLjEH pass to implement C++ exception handling using ↵Mark Seaborn
setjmp()+longjmp() There are two parts to this: * PNaClSjLjEH.cpp expands out the "invoke", "landingpad" and "resume" instructions, modifying the control flow to use setjmp(). * ExceptionInfoWriter.cpp lowers landingpads' clause lists to data that PNaCl's C++ runtime library will interpret. This part will be reused when we drop the SjLj part and create a stable ABI for zero-cost EH. This pass isn't enabled in PNaClABISimplify yet: I'll do that in a separate change. BUG=https://code.google.com/p/nativeclient/issues/detail?id=3696 TEST=*.ll tests (also tested end-to-end: plumbing for this will follow later) Review URL: https://codereview.chromium.org/24777002
2013-10-11Cherry-pick LLVM 187787 to prevent tail calls on x86-32 when not appropriate.Jan Voung
See: http://llvm.org/viewvc/llvm-project?view=revision&revision=187787 The newer version of newlib tickles this x86-32 bug when building the exception handling tests, which don't strip the "tail" attribute. BUG=https://code.google.com/p/nativeclient/issues/detail?id=3702 Waiting on trybots, but it seems to have fixed the minimal reproducer I have: http://chromegw.corp.google.com/i/tryserver.nacl/builders/nacl-toolchain-linux-pnacl-x86_64/builds/922 http://chromegw.corp.google.com/i/tryserver.nacl/builders/nacl-toolchain-linux-pnacl-x86_32/builds/870 http://chromegw.corp.google.com/i/tryserver.nacl/builders/nacl-toolchain-mac-pnacl-x86_32/builds/875 R=jfb@chromium.org Review URL: https://codereview.chromium.org/26538008
2013-10-05[MIPS] Define PnaclTargetArchitectureMips_32Petar Jovanovic
LowerNaClTargetArch has to return const PnaclTargetArchitectureMips_32 for MIPS. The constant is later used in ResolvePNaClIntrinsics pass. BUG= https://code.google.com/p/nativeclient/issues/detail?id=3602 R=jfb@chromium.org Review URL: https://codereview.chromium.org/25887007
2013-10-03PNaCl bitcode: Reject CAST_PTRTOINT and CAST_INTTOPTRMark Seaborn
Make the reader and writer stricter so that we can be sure we're not accidentally generating ptrtoint or inttoptr instructions in pexe files. BUG=https://code.google.com/p/nativeclient/issues/detail?id=3590 TEST=toolchain trybots Review URL: https://codereview.chromium.org/25607006
2013-09-18Remove code referring to PNaCl version 1, since it is no longer used.Karl Schimpf
BUG= https://code.google.com/p/nativeclient/issues/detail?id=3590 R=mseaborn@chromium.org Review URL: https://codereview.chromium.org/24232002
2013-09-16Work around a gcc 4.6.3 / 4.7 bug.Jim Stichnoth
GCC bug http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58416 causes the bf64-1.c test to fail in the GCC torture test suite. This provides an upstreamable workaround. Inspection of the LLVM code base showed no other instances of the pattern that triggers the gcc bug. This can also be upstreamed as soon as I can get a working x86-32 upstream build working to verify/test against. In the meantime, we can make one pnacl-fyi bot go green again. BUG= https://code.google.com/p/nativeclient/issues/detail?id=3685 R=jfb@chromium.org, jfb@google.com Review URL: https://codereview.chromium.org/23437037
2013-09-13Report fatal translator errors to the browserDerek Schuff
Install a fatal error handler for the translator, which stores the error string, signals an error to the RPC thread, and terminates the thread (instead of terminating the whole program). This will cause the error to go to the Javascript console in Chrome BUG= https://code.google.com/p/nativeclient/issues/detail?id=3519 R=jvoung@chromium.org Review URL: https://codereview.chromium.org/23753003
2013-09-06Clean up vestigial code for constants in PNaCl bitcode files.Karl Schimpf
* Removes code that is no longer used because global variables are handled separately. * Removes CST_CODE_NULL. * Adds special abbreviations for constant integer 0, replacing most of what was lost when CST_CODE_NULL is removed. * Adds abbreviation for floating point constants. * Removes CST_CODE_AGGREGATE and CST_CODE_DATA, except for reading old PNaCl version 1 bitcode files. * Removes call to ParseConstants() in ParseModule() since the module block no longer contains a constants block (globals are handled separately). * Removes getConstantFwdRef() method, since it is no longer needed. * Remove ConstantPlaceHolder class, since it is no longer needed. * Remove ResolvedConstants and ResolveConstantForwardRefs() from the bitcode reader, since it is no longer needed. BUG= https://code.google.com/p/nativeclient/issues/detail?id=3668 R=mseaborn@chromium.org Review URL: https://codereview.chromium.org/23522024
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-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-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-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-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-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-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-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-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-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-29Remove handling of nongenerable instructions in PNaCl reader.Karl Schimpf
The PNaCl bitcode writer doesn't generate certain forms of instructions that the PNaCl bitcode writer accepts. Since these instructions do not get generated, remove them from the bitcode reader. BUG= https://code.google.com/p/nativeclient/issues/detail?id=3590 R=jvoung@chromium.org Review URL: https://codereview.chromium.org/20442002
2013-07-25Remove block address constants form PNaCl bitcode.Karl Schimpf
Removes block address constants because they are not part of the PNaClABI. Suggested in CL https://codereview.chromium.org/20172002 BUG= https://code.google.com/p/nativeclient/issues/detail?id=3590 R=mseaborn@chromium.org Review URL: https://codereview.chromium.org/20402002
2013-07-25Remove dead instructions from the PNaCl bitcode reader/writer:Karl Schimpf
VAArg Invoke GetElementPtr LandingPad Resume IndirectBr ExtractElement InsertElement ShuffleVector ExtractValue InsertValue AtomicCmpXchg AtomicRMW BUG= https://code.google.com/p/nativeclient/issues/detail?id=3590 R=mseaborn@chromium.org Review URL: https://codereview.chromium.org/20124002
2013-07-25Remove constant expressions and constant inline assembly from the PNaClKarl Schimpf
reader/writer, since they can't appear in PNaCl bitcode. BUG= https://code.google.com/p/nativeclient/issues/detail?id=3590 R=mseaborn@chromium.org Review URL: https://codereview.chromium.org/20172002
2013-07-22Enable ability to have multiple PNaCl wire format versions.Karl Schimpf
Modifies PNaCl bitcode reader/writer to accept PNaClVersion=1 as supported, and all other versions are unsupported and unreadable. The PNaCl bitcode reader/writer will generate appropriate messages (including what version is unsupported if applicable). Also allows command-line option --pnacl-version for setting the 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=None R=jvoung@chromium.org Review URL: https://codereview.chromium.org/19400002