aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2013-06-25PNaCl ABI: Disallow various operations on the i1 typeMark Seaborn
Disallow i1 on loads/stores and require the conversions to i8 to be explicit. Add a pass, PromoteI1Ops, that adds the conversions. (Load/store on i1 occur in practice in small_tests for some boolean globals.) Disallow i1 for most arithmetic/comparison operations since these aren't very useful and it's a nuisance for a code generator to have to support these. I haven't seen these occur in practice, but PromoteI1Ops nevertheless expands them. We still allow and/or/xor on i1 because these do occur in practice, and they're less of a nuisance to handle because they never overflow: no truncation to 1 bit is required, unlike with adds. Restrict the type of alloca's argument. Clang always uses i32 here. Disallow i1 in switch instructions. Clang doesn't generate i1 switches for booleans. Move CopyLoadOrStoreAttrs() helper into a header to reuse. BUG=https://code.google.com/p/nativeclient/issues/detail?id=3490 TEST=PNaCl toolchain trybots + GCC torture tests + Spec2k Review URL: https://codereview.chromium.org/17356011
2013-06-24Clarify PNaClLangRef w.r.t. function attributes or varargsEli Bendersky
BUG=https://code.google.com/p/nativeclient/issues/detail?id=3338 BUG=https://code.google.com/p/nativeclient/issues/detail?id=3415 R=mseaborn@chromium.org Review URL: https://codereview.chromium.org/17633003
2013-06-24PNaCl ABI: Strip alignment info from memcpy/memmove/memset intrinsic callsMark Seaborn
Do the same for memcpy/memmove/memset intrinsic calls that we have already done for integer loads and stores: Remove assumptions about pointer alignment by setting the alignment argument to 1. Make the ABI checker require this. BUG=https://code.google.com/p/nativeclient/issues/detail?id=3445 TEST=*.ll tests + PNaCl toolchain trybots Review URL: https://codereview.chromium.org/17563008
2013-06-24PNaCl ABI: Disallow built-in multiplication in "alloca" instructionsMark Seaborn
Simplify the set of "alloca" instructions the ABI verifier allows. Before this change, we used i8 arrays, such as: alloca [8 x i8] After this change, we will just use i8 with an explicit size value, so that becomes: alloca i8, i32 8 Allocation of variable-length arrays will require an explicit multiply instruction. This means that the code generator no longer has to handle an implicit multiplication in "alloca", reducing the burden on fast-and-simple code generators a little. This means the PNaCl ABI doesn't need to specify whether alloca's implicit multiplication checks for overflow. This doesn't affect what the backend generates. See lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp, which handles constant-size AllocaInsts (by filling out StaticAllocaMap) and which is uses for both -O2 (SelectionDAG) and -O0 (FastISel) translation. BUG=https://code.google.com/p/nativeclient/issues/detail?id=3343 TEST=*.ll tests + PNaCl toolchain trybots Review URL: https://codereview.chromium.org/17631004
2013-06-24Move i32/i64 cttz, ctlz, and ctpop to whitelisted intrinsics.Jan Voung
Disallow the other input types. BUG=https://code.google.com/p/nativeclient/issues/detail?id=3378 R=jfb@chromium.org Review URL: https://codereview.chromium.org/17613002
2013-06-24Force user to provide -mptriple to pnacl-llc.Eli Bendersky
We already always provide -mptriple to pnacl-llc, and it's nonsensical to run it without it because pexe don't contain a triple. BUG=None R=dschuff@chromium.org Review URL: https://codereview.chromium.org/17617002
2013-06-24Simplify representation of forward value references in bitcode.Karl Schimpf
Simplify instruction records by adding concept of a forward type reference map that maps ValueID's to types. Used to generate forward reference types for instruction arguments that need a type because the forward reference has not yet been generated. BUG= https://code.google.com/p/nativeclient/issues/detail?id=3507 R=jvoung@chromium.org, mseaborn@chromium.org Review URL: https://codereview.chromium.org/16963004
2013-06-24Merge r179774: Allow misaligned stores in x86 fast-isel.Mark Seaborn
This change will fix the regression in -O0 translation time caused by putting "align 1" on integer loads and stores, which was causing FastISel to fall back to SelectionDAG more often. > In X86FastISel::X86SelectStore(), improperly aligned stores are > rejected and handled by the DAG-based ISel. However, > X86FastISel::X86SelectLoad() makes no such requirement. There > doesn't appear to be an x86 architectural correctness issue with > allowing potentially unaligned store instructions. This patch > removes this restriction. > > Patch by Jim Stichnot. BUG=https://code.google.com/p/nativeclient/issues/detail?id=3445 TEST=PNaCl toolchain trybots Review URL: https://codereview.chromium.org/17575003
2013-06-23PNaCl wire format: Remove the top-level TRIPLE recordMark Seaborn
Currently, the triple that gets put into pexes is "armv7-none-linux-gnueabi". This is a wart that we don't want to keep. We can remove the triple entirely; PNaCl doesn't need it. We don't need to add a triple back at read time: (pnacl-)llc tells the backend explicitly what target to use. I'm leaving MODULE_CODE_TRIPLE defined in the enum for now because pnacl-bcanalyzer still refers to it. BUG=https://code.google.com/p/nativeclient/issues/detail?id=3505 TEST=PNaCl toolchain trybots + GCC torture tests + Spec2k Review URL: https://codereview.chromium.org/17321009
2013-06-21PNaCl wire format: Update comments for function attribute removalMark Seaborn
I missed updating the comments about the bitcode format in NaClLLVMBitCodes.h in my previous change. Note that the comment for FUNC_CODE_INST_CALL was out of date before: it was missing "cc" (calling conventions). BUG=https://code.google.com/p/nativeclient/issues/detail?id=3506 TEST=none Review URL: https://codereview.chromium.org/17516004
2013-06-21Update LangRef.rst to the 3.3 version and add PnaclRef.rstEli Bendersky
PnaclRef.rst is an initial reference manual for PNaCl bitcode. It's using the same documentation system to build as the other LLVM .rst docs and has multiple links into relevant sections of LangRef. BUG=None R=jvoung@chromium.org Review URL: https://codereview.chromium.org/17463004
2013-06-21PNaCl wire format: Remove function attributes from pexe reader/writerMark Seaborn
Remove support for reading and writing the PARAMATTR_BLOCK_ID and PARAMATTR_GROUP_BLOCK_ID blocks. These blocks will no longer be written into pexes. While PNaCl doesn't allow function attributes on normal functions, Function::Create() always inserts them back on intrinsics, so previously the PARAMATTR blocks were being written into pexes. Remove paramattr fields from two record types: * MODULE_CODE_FUNCTION records (function declarations). Also remove the fields that follow paramattr, which PNaCl also does not use. * FUNC_CODE_INST_CALL (function calls). BUG=https://code.google.com/p/nativeclient/issues/detail?id=3506 TEST=PNaCl toolchain trybots + GCC torture tests + Spec2k Review URL: https://codereview.chromium.org/17419013
2013-06-21Fix warning messages in bitcode encoding functions.Karl Schimpf
BUG=None R=jvoung@chromium.org Review URL: https://codereview.chromium.org/17519003
2013-06-20Unbreak CMake+Ninja buildEli Bendersky
BUG=None R=jvoung@chromium.org Review URL: https://codereview.chromium.org/17115012
2013-06-20Clean-up pnacl-llc a bit, now that it's truly PNaCl-only.Eli Bendersky
No changes in functionality. Specific cleanups: * Use OwningPtr instead of bare pointer for FDOut * Command-line help should say pnacl-llc instead of a generic llvm message * Remove support for "skip module" feature * Remove some LOCALMOD comments * Add link to issue for TODO about timing IR parsing BUG=None R=jvoung@chromium.org, kschimpf@google.com Review URL: https://codereview.chromium.org/17101032
2013-06-20PNaCl ABI: Reduce the set of allowed "align" attributes on loads/storesMark Seaborn
Change the ABI verifier to require "align 1" on non-atomic integer accesses to prevent non-portable behaviour. Allow larger alignments on floating point accesses as a concession to performance, because ARM might not be able to do unaligned FP loads/stores efficiently. Change StripAttributes to make pexes pass the ABI verifier. Also update comments in StripAttributes to match some recent changes. BUG=https://code.google.com/p/nativeclient/issues/detail?id=3445 TEST=*.ll tests + PNaCl toolchain trybots Review URL: https://codereview.chromium.org/17094009
2013-06-19PNaCl ABI: Disallow the "externally_initialized" attribute of GlobalVariablesMark Seaborn
BUG=https://code.google.com/p/nativeclient/issues/detail?id=3415 TEST=*.ll tests + PNaCl toolchain trybots Review URL: https://codereview.chromium.org/17470005
2013-06-19Rewrite llvm.flt.rounds to "1" for now, and disallow llvm.flt.rounds.Jan Voung
Until there is an intrinsic to *set* the rounding mode, this intrinsic to *get* the rounding mode isn't so useful. Separately we will add a test that for each platform, the initial rounding mode is "1" (round to nearest). That is the case right now for x86, ARM, and MIPS. (see https://codereview.chromium.org/16785003/) BUG=https://code.google.com/p/nativeclient/issues/detail?id=3491 R=mseaborn@chromium.org Review URL: https://codereview.chromium.org/17229007
2013-06-19Fix an x86-64 fast-isel address calculation overflow.Jim Stichnoth
Disallow large displacements in NaCl addressing modes, by rejecting the fast-isel selection and using the logic in the DAG-based isel. BUG= https://code.google.com/p/nativeclient/issues/detail?id=3502 R=dschuff@chromium.org Review URL: https://codereview.chromium.org/16959013
2013-06-19Insulate calling conventions in PNaCl bitcode files.Karl Schimpf
Creates a bitcode-local enumeration for calling conventions for the PNaCl bitcode file, so that the bitcode file is better protected from (accidental) changes in LLVM code. Also removes invokes from the bitcode. BUG= https://code.google.com/p/nativeclient/issues/detail?id=3497 R=dschuff@chromium.org, mseaborn@chromium.org Review URL: https://codereview.chromium.org/17118002
2013-06-17PNaCl: Turn on ABI verifier by default in sandboxed translatorMark Seaborn
Change pnacl-llc.cpp to enable the verifier. This causes two problems which we fix: * The ABI check for declared-but-not-defined functions fails in streaming mode. Fixing this would involve changing the bitcode reader. For now, disable this check when in streaming mode. Add a flag to PNaClABIVerifyModule. * ARM's GlobalMerge pass modifies functions' global variable references to use ConstantExprs that the ABI checker rejects. Address this by disabling GlobalMerge for now. GlobalMerge does not provide much benefit at the moment anyway, because, with the FlattenGlobals pass applied, GlobalMerge doesn't merge variables with alignment >1. BUG=https://code.google.com/p/nativeclient/issues/detail?id=3465 TEST=PNaCl toolchain trybots Review URL: https://codereview.chromium.org/17190002
2013-06-17When running pnacl-llc sandboxed, force input to always be PNaCl bitcode.Karl Schimpf
BUG= https://code.google.com/p/nativeclient/issues/detail?id=3469 R=jvoung@chromium.org Review URL: https://codereview.chromium.org/17295004
2013-06-16PNaCl ABI: Disallow non-default symbol visibility ("hidden" and "protected")Mark Seaborn
BUG=https://code.google.com/p/nativeclient/issues/detail?id=3495 TEST=*.ll tests + PNaCl toolchain trybots Review URL: https://codereview.chromium.org/16903003
2013-06-14PNaCl ABI: Disallow the "available_externally" linkage typeMark Seaborn
"define available_externally void @foo()" would mean that the definition of foo() can be dropped from the pexe, because a definition of foo() can be found in an external native library. This is not something we support for a PNaCl pexe. Clang generates "available_externally" for non-static inline function definitions at -O1, but not at -O0, and generally not at -O2 either because inlining removes the "available_externally" definition. "available_externally" gets removed at bitcode link time, so we can disallow it in the ABI checker without any further work required. BUG=https://code.google.com/p/nativeclient/issues/detail?id=3495 TEST=*.ll tests + PNaCl toolchain trybots Review URL: https://codereview.chromium.org/17035015
2013-06-14PNaCl ABI: Convert "private" linkage to "internal"Mark Seaborn
This simplifies the ABI by reducing the number of linkage types we have to check for and represent in the wire format. BUG=https://code.google.com/p/nativeclient/issues/detail?id=3495 TEST=*.ll tests + PNaCl toolchain trybots Review URL: https://codereview.chromium.org/17084003
2013-06-13Fix PrologEpilogInserter to save and restore all callee saved registersDerek Schuff
if the function calls _builtin_unwind_init() Also fix the list of callee-saved registers returned by X86RegisterInfo::getCalleeSavedRegisters BUG= https://code.google.com/p/nativeclient/issues/detail?id=3486 R=mseaborn@chromium.org Review URL: https://codereview.chromium.org/16987002
2013-06-13PNaCl: Strip more unwanted attributes: "align" on functions and "unnamed_addr"Mark Seaborn
Do this stripping in the StripAttributes pass. Change the pass to be a ModulePass so that it can modify global variables. Change the ABI verifier to check this. Also update a comment about "nuw" and "nsw". BUG=https://code.google.com/p/nativeclient/issues/detail?id=3415 TEST=*.ll tests + PNaCl toolchain trybots Review URL: https://codereview.chromium.org/16991002
2013-06-13Remove unused function from PNaCl bitcode writer.Karl Schimpf
BUG=none R=dschuff@chromium.org Review URL: https://codereview.chromium.org/16838018
2013-06-13Insulate PNaCl bitcode from LLVM encodings of floating point optimization flags.Karl Schimpf
BUG= https://code.google.com/p/nativeclient/issues/detail?id=3405 R=jvoung@chromium.org Review URL: https://codereview.chromium.org/16836017
2013-06-13Fix reading of headers when using a streamable memory object.Karl Schimpf
Fixes bug where we computed the length of fields buffer on the size of a pointer, rather then the actual length of the field. BUG= https://code.google.com/p/nativeclient/issues/detail?id=3485 R=dschuff@chromium.org Review URL: https://codereview.chromium.org/17003002
2013-06-13PNaCl: Fix new[]/delete mismatch in FlattenGlobals pass by using delete[]Mark Seaborn
BUG=none TEST=*.ll tests Review URL: https://codereview.chromium.org/16865012
2013-06-12Move llvm.expect from dev to blacklist. Convert with -lower-expect.Jan Voung
The backend currently treats llvm.expect as a nop pass-through. Until it becomes more useful, we don't need it in stable bitcode. It sounds like the backend may prefer to use the !prof metadata instead. The -lower-expect pass will convert it into branch weights, which can be consumed by the middle end optimizer's block placement pass. It is already converted to !prof metadata when clang is run with -O2, but not when clang is run at -O0. Also move the llvm.frameaddress from the dev part of the intrinsics test to the disallowed part of the test. BUG=https://code.google.com/p/nativeclient/issues/detail?id=3378 R=mseaborn@chromium.org Review URL: https://codereview.chromium.org/16882002
2013-06-12Take some of the LLVM LibM intrinsics out of the "must be external" list.Jan Voung
Intrinsic::sin, Intrinsic::cos, etc., aren't generated. Intrinsic::sqrt is implemented in hardware we support now. If future hardware does not support it, we can supply a library function in the runtime. BUG=https://code.google.com/p/nativeclient/issues/detail?id=3339 TEST=scons, llvm test suite, gcc torture, spec2k R=eliben@chromium.org Review URL: https://codereview.chromium.org/16868002
2013-06-12Move non-Pow transcendentals back to disallowed list (unused).Jan Voung
Initially whitelisted to satisfy tests/toolchain/llvm_math_intrinsics.c, which tests the intrinsics directly. Those tests now skip ABI verification so they will continue to pass. Outside of those direct uses, they are not used. llvm.powi gets introduced during the llvm sandboxed build. Clang CGBuiltin.cpp has a way to introduce Intrinsic::pow and Intrinsic::powi. It does not introduce any of the other intrinsics. We can add them back later and supply something in compiler_rt when clang or some transformation actually introduces them. For now that is not the case. BUG=https://code.google.com/p/nativeclient/issues/detail?id=3378 TEST= scons, llvm nightly, gcc torture, spec2k, naclports R=eliben@chromium.org Review URL: https://codereview.chromium.org/16794006
2013-06-12PNaCl ABI: Strip out arithmetic attributes "nsw", "nuw" and "exact"Mark Seaborn
"nsw" and "nuw" -- "no signed wrap" and "no unsigned wrap" -- are not used by the backend, which is not surprising because it makes no difference to the hardware if arithmetic overflows. Although "exact" is used by the backend to convert "sdiv exact" to an "ashr" shift, it appears that "sdiv exact" does not get used in practice, and arguably such a transformation belongs in the user toolchain, not the PNaCl translator. BUG=https://code.google.com/p/nativeclient/issues/detail?id=3483 TEST=*.ll tests + PNaCl toolchain trybots Review URL: https://codereview.chromium.org/16746005
2013-06-12Revert llc to upstreamEli Bendersky
tools/llc is reset to revision 279b9184c2ff4fea93b198a3519b8cb3a1d8d195 from which the last LLVM merge was made. NaCl-specific files are removed. BUG=None R=jvoung@chromium.org Review URL: https://codereview.chromium.org/16510008
2013-06-12Remove a stray usage of NACL_SRPCEli Bendersky
BUG=None R=dschuff@chromium.org Review URL: https://codereview.chromium.org/16663008
2013-06-11Apply upstream r183551, r183601, r183624 and r183794JF Bastien
Rename countTrailingZeros to the older CountTrailingZeros_32, mark as localmod. These patches fix correctness issues with ARM FastISel, and should make it faster while generating better code. BUG= none TEST= self R=jvoung@chromium.org Review URL: https://codereview.chromium.org/16712002
2013-06-11Clean-up shared-library related code from pnacl-llc.Eli Bendersky
BUG=None R=dschuff@chromium.org Review URL: https://codereview.chromium.org/16123031
2013-06-10Fix the ninja build by adding naclbitreader to dependencies.Jim Stichnoth
BUG= https://code.google.com/p/nativeclient/issues/detail?id=3485 R=kschimpf@google.com Review URL: https://codereview.chromium.org/16146012
2013-06-10Change NaCl-specific tests from llc to pnacl-llcEli Bendersky
BUG=None R=dschuff@chromium.org Review URL: https://codereview.chromium.org/16273014
2013-06-10Merge the NACL_SRPC preprocessor flag into __native_client__Eli Bendersky
We always build the sandboxed translator with NACL_SRPC. BUG=None R=jvoung@chromium.org Review URL: https://codereview.chromium.org/16667016
2013-06-10PNaCl: Extend ExpandStructRegs to handle "insertvalue" instructionsMark Seaborn
Previously, the pass could expand out struct_load+extractvalue combinations (via ReplaceUsesOfStructWithFields()). This change makes the pass more general by converting struct_loads to scalar_load+insertvalue combinations and then by expanding out insertvalue+extractvalue combinations. This means the pass can now handle the insertvalue instructions that are sometimes generated by the SROA pass. (Clang compiles ScummVM's use of C++ method pointers to struct loads+stores which SROA generates insertvalue instructions from.) To make the pass more general, we also extend it to be able to handle phi nodes of struct type. These are split into extractvalue+scalar_phi+insertvalue combinations. However, the pass is not yet fully general, because it doesn't handle: * nested struct types * array types Change ExpandArithWithOverflow to rely on ExpandStructRegs' insertvalue handling rather than the less general ReplaceUsesOfStructWithFields() helper function, which can now be removed. SplitUpStore() no longer needs to handle Constants, because this case is handled by ExpandExtractValue(). BUG=https://code.google.com/p/nativeclient/issues/detail?id=3476 TEST=*.ll tests + PNaCl toolchain trybots Review URL: https://codereview.chromium.org/16448006
2013-06-07Updated the links in the LLDB 3.3 sub-project (now 3.3 links) to fix the 3.4 ↵Ashok Thirumurthi
merge from trunk. - Also split out a section on build portability and updated the list of features and improvements. --- This now reflects the up-coming merge of patches from trunk into the release_33 branch. git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_33@183554 91177308-0d34-0410-b5e6-96231b3b80d8
2013-06-07Fix Mispelled local variable in llc.Karl Schimpf
BUG= https://code.google.com/p/nativeclient/issues/detail?id=3479 R=dschuff@chromium.org Review URL: https://codereview.chromium.org/16440008
2013-06-07Add CL argument -bitcode-format to llvm-dis, llc, and pnacl-llc.Karl Schimpf
BUG= https://code.google.com/p/nativeclient/issues/detail?id=3469 R=jvoung@chromium.org Review URL: https://codereview.chromium.org/16385002
2013-06-07Add blurb for PowerPC.Bill Wendling
git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_33@183500 91177308-0d34-0410-b5e6-96231b3b80d8
2013-06-06PNaCl ABI: Strip out calling conventions from functions and callsMark Seaborn
Always use the standard C calling conventions. Disallow "fastcc" etc. BUG=https://code.google.com/p/nativeclient/issues/detail?id=2346 TEST=*.ll tests + PNaCl toolchain trybots Review URL: https://codereview.chromium.org/16529004
2013-06-06Make PNaCl bitcode files have a different format from LLVM bitcode files.Karl Schimpf
BUG= https://code.google.com/p/nativeclient/issues/detail?id=3405 R=dschuff@chromium.org Review URL: https://codereview.chromium.org/15907008
2013-06-06Release notes for dragonegg.Duncan Sands
git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_33@183396 91177308-0d34-0410-b5e6-96231b3b80d8