summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* [ELF] Pass a pointer to InputFile to the getRelocTargetVA to escape ↵Simon Atanasyan2018-06-113-23/+22
| | | | | | dereferencing of nullptr. NFC llvm-svn: 334392
* [ExynosM1][Sched] Fix resource usage in scheduling model.Clement Courbet2018-06-111-16/+16
| | | | | | This is part of https://reviews.llvm.org/D46356. llvm-svn: 334391
* [ELF][MIPS] Multi-GOT implementationSimon Atanasyan2018-06-1122-459/+851
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Almost all entries inside MIPS GOT are referenced by signed 16-bit index. Zero entry lies approximately in the middle of the GOT. So the total number of GOT entries cannot exceed ~16384 for 32-bit architecture and ~8192 for 64-bit architecture. This limitation makes impossible to link rather large application like for example LLVM+Clang. There are two workaround for this problem. The first one is using the -mxgot compiler's flag. It enables using a 32-bit index to access GOT entries. But each access requires two assembly instructions two load GOT entry index to a register. Another workaround is multi-GOT. This patch implements it. Here is a brief description of multi-GOT for detailed one see the following link https://dmz-portal.mips.com/wiki/MIPS_Multi_GOT. If the sum of local, global and tls entries is less than 64K only single got is enough. Otherwise, multi-got is created. Series of primary and multiple secondary GOTs have the following layout: ``` - Primary GOT Header Local entries Global entries Relocation only entries TLS entries - Secondary GOT Local entries Global entries TLS entries ... ``` All GOT entries required by relocations from a single input file entirely belong to either primary or one of secondary GOTs. To reference GOT entries each GOT has its own _gp value points to the "middle" of the GOT. In the code this value loaded to the register which is used for GOT access. MIPS 32 function's prologue: ``` lui v0,0x0 0: R_MIPS_HI16 _gp_disp addiu v0,v0,0 4: R_MIPS_LO16 _gp_disp ``` MIPS 64 function's prologue: ``` lui at,0x0 14: R_MIPS_GPREL16 main ``` Dynamic linker does not know anything about secondary GOTs and cannot use a regular MIPS mechanism for GOT entries initialization. So we have to use an approach accepted by other architectures and create dynamic relocations R_MIPS_REL32 to initialize global entries (and local in case of PIC code) in secondary GOTs. But ironically MIPS dynamic linker requires GOT entries and correspondingly ordered dynamic symbol table entries to deal with dynamic relocations. To handle this problem relocation-only section in the primary GOT contains entries for all symbols referenced in global parts of secondary GOTs. Although the sum of local and normal global entries of the primary got should be less than 64K, the size of the primary got (including relocation-only entries can be greater than 64K, because parts of the primary got that overflow the 64K limit are used only by the dynamic linker at dynamic link-time and not by 16-bit gp-relative addressing at run-time. The patch affects common LLD code in the following places: - Added new hidden -mips-got-size flag. This flag required to set low maximum size of a single GOT to be able to test the implementation using small test cases. - Added InputFile argument to the getRelocTargetVA function. The same symbol referenced by GOT relocation from different input file might be allocated in different GOT. So result of relocation depends on the file. - Added new ctor to the DynamicReloc class. This constructor records settings of dynamic relocation which used to adjust address of 64kb page lies inside a specific output section. With the patch LLD is able to link all LLVM+Clang+LLD applications and libraries for MIPS 32/64 targets. Differential revision: https://reviews.llvm.org/D31528 llvm-svn: 334390
* [X86] Explicitly mark unsupported classes in scheduling models.Clement Courbet2018-06-119-111/+131
| | | | | | | | | | | | | Summary: In preparation for D47721. HSW and SNB still define unsupported classes as they are used by KNL and generic models respectively. Reviewers: RKSimon Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D47763 llvm-svn: 334389
* [MS ABI] Mangle unnamed empty enums (PR37723)Hans Wennborg2018-06-112-4/+14
| | | | | | Differential Revision: https://reviews.llvm.org/D47875 llvm-svn: 334388
* [X86] Add encoding tests for avx5124fmaps and avx5124vnni instructions.Craig Topper2018-06-112-0/+91
| | | | | | I forgot to git add these in r333812 llvm-svn: 334387
* [X86] Add test files for upgrade of vbmi2 expand load and compress store ↵Craig Topper2018-06-112-0/+651
| | | | | | intrinsics that was done in r334381. llvm-svn: 334386
* [X86] Remove masking from dbpsadbw builtins, use select builtin instead.Craig Topper2018-06-116-51/+45
| | | | llvm-svn: 334385
* [X86] Remove masking from dbpsadbw intrinsics, use select in IR instead.Craig Topper2018-06-118-53/+167
| | | | llvm-svn: 334384
* [Sparc] Add support for 13-bit PICDaniel Cederman2018-06-1110-7/+91
| | | | | | | | | | | | | | | | | Summary: When compiling with -fpic, in contrast to -fPIC, use only the immediate field to index into the GOT. This saves space if the GOT is known to be small. The linker will warn if the GOT is too large for this method. Reviewers: jyknight, venkatra Reviewed By: jyknight Subscribers: brad, fedor.sergeev, jrtc27, llvm-commits Differential Revision: https://reviews.llvm.org/D47136 llvm-svn: 334383
* [CodeView] Omit forward references for unnamed structs and unionsBrock Wyma2018-06-115-38/+486
| | | | | | | | | | Codeview references to unnamed structs and unions are expected to refer to the complete type definition instead of a forward reference so Visual Studio can resolve the type properly. Differential Revision: https://reviews.llvm.org/D32498 llvm-svn: 334382
* [X86] Remove and autoupgrade the expandload and compressstore intrinsics.Craig Topper2018-06-1110-1817/+1181
| | | | | | We use the target independent intrinsics now. llvm-svn: 334381
* [TableGen] Make better use of std::map::emplace and emplace construct the ↵Craig Topper2018-06-101-9/+10
| | | | | | object in the map rather than moving it into it. Remove a use std::map::find by remembering the return from emplace. llvm-svn: 334380
* [TableGen] Combine two constructors by taking vectors by value instead of ↵Craig Topper2018-06-101-11/+3
| | | | | | trying to support combininations for rvalue and lvalue references. llvm-svn: 334379
* [DAGCombiner] match vector compare and select sizes with extload operand ↵Sanjay Patel2018-06-102-36/+61
| | | | | | | | | | | | | | | | | | | | | | | | | | | | (PR37427) This patch started off much more general and ambitious, but it's been a nightmare seeing all the ways x86 vector codegen can go wrong. So the code is still structured to allow extending easily, but it's currently limited in several ways: 1. Only handle cases with an extending load. 2. Only handle cases with a zero constant compare. 3. Ignore setcc with vector bitmask (SetCCWidth != 1) - so AVX512 should be unaffected. The motivating case from PR37427: https://bugs.llvm.org/show_bug.cgi?id=37427 ...is the 1st test, and that shows the expected win - we eliminated the unnecessary intermediate cast. There's a clear regression in the last test (sgt_zero_fp_select) because we longer recognize a 'SHRUNKBLEND' opportunity. I think that general problem is also present in sgt_zero, so I'll try to fix that in a follow-up. We need to match a sign-bit setcc from a sign-extended operand and remove it. Differential Revision: https://reviews.llvm.org/D47330 llvm-svn: 334378
* [X86] Miscellaneous fixes to get the load folding table generator to work again.Craig Topper2018-06-103-9/+9
| | | | llvm-svn: 334377
* Revert r334374 [TableGen] Move some shared_ptrs to avoid unnecessary copies ↵Florian Hahn2018-06-102-26/+21
| | | | | | | | (NFC). This breaks some builders. llvm-svn: 334376
* Attempt 3: Resubmit "[Support] Expose flattenWindowsCommandLine."Zachary Turner2018-06-105-122/+99
| | | | | | | | | | | | | | | | | | I took some liberties and quoted fewer characters than before, based on an article from MSDN which says that only certain characters cause an arg to require quoting. This seems to be incorrect, though, and worse it seems to be a difference in Windows version. The bot that fails is Windows 7, and I can't reproduce the failure on Win 10. But it's definitely related to quoting and special characters, because both tests that fail have a * in the argument, which is one of the special characters that would cause an argument to be quoted before but not any longer after the new patch. Since I don't have Win 7, all I can do is just guess that I need to restore the old quoting rules. So this patch does that in hopes that it fixes the problem on Windows 7. llvm-svn: 334375
* [TableGen] Move some shared_ptrs to avoid unnecessary copies (NFC).Florian Hahn2018-06-102-21/+26
| | | | | | Those changes were suggested post-commit for D47463. llvm-svn: 334374
* Revert rL334371 / D47980: "[InstCombine] Fold (x << y) >> y -> x & (-1 >> y)"Roman Lebedev2018-06-102-14/+6
| | | | | | | test/Transforms/InstCombine/AMDGPU/amdgcn-intrinsics.ll broke, and i did not notice because i did not build that backend. llvm-svn: 334373
* [InstCombine] Fold (x >> y) << y -> x & (-1 << y)Roman Lebedev2018-06-103-13/+20
| | | | | | | | | | | | | | | | | | | | | | | Summary: We already do it for matching splat constants, but not just values. Further improvements for non-matching splat constants, as noted in https://reviews.llvm.org/D46760#1123713 will be needed, but i'd prefer to do that as a follow-up. https://bugs.llvm.org/show_bug.cgi?id=37603 https://rise4fun.com/Alive/cplX https://rise4fun.com/Alive/0HF Reviewers: spatel, craig.topper Reviewed By: spatel Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D47981 llvm-svn: 334372
* [InstCombine] Fold (x << y) >> y -> x & (-1 >> y)Roman Lebedev2018-06-102-6/+14
| | | | | | | | | | | | | | | | | | | Summary: We already do it for splat constants, but not just values. Also, undef cases are mostly non-functional. https://bugs.llvm.org/show_bug.cgi?id=37603 https://rise4fun.com/Alive/cplX Reviewers: spatel, craig.topper Reviewed By: spatel Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D47980 llvm-svn: 334371
* [NFC][InstCombine] Revisit tests for D47980 / D47981 once more.Roman Lebedev2018-06-103-4/+176
| | | | llvm-svn: 334370
* [debuginfo-tests] Always use the system python to invoke llgdb.py.Ahmed Bougacha2018-06-101-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | /usr/bin/env is recommended as a cross-platform way to find python. But: - we're only using lldb on darwin, where we know python (or at least, the xcrun-style shortcut) is in /usr/bin/ - the python interpreter in LLDB comes from /S/L/F: $ otool -L Contents/SharedFrameworks/LLDB.framework/LLDB | grep Python /System/Library/Frameworks/Python.framework/Versions/2.7/Python so when we use the lldb python module, it calls into the swig/python support in the lldb framework, and if there's a mismatch between the interpreter and the linked python, weird things occur. In theory, I believe this should be done by: - looking for the LLDB framework (llgdb.py does some of that) - finding the binary inside the framework - looking for the Python it was linked against (otool -L) - finding the interpreter executable inside the Python.framework But in practice, that's only different if we use a custom LLDB framework/pythonpath when running these tests, and AFAIK nobody does that right now, so the code would be dead anyway. Don't pretend we can use any arbitrary python: just use the system one. Differential Revision: https://reviews.llvm.org/D47967 llvm-svn: 334369
* [X86] Add expandload and compresstore fast-isel tests for avx512f and ↵Craig Topper2018-06-104-54/+902
| | | | | | avx512vl. Update existing tests for avx512vbmi2 to use target independent intrinsics. llvm-svn: 334368
* [x86] add tests for potentially miscompiling cvttp2si (PR37751); NFCSanjay Patel2018-06-102-0/+149
| | | | llvm-svn: 334367
* [X86] Use target independent masked expandload and compressstore intrinsics ↵Craig Topper2018-06-105-52/+138
| | | | | | | | | | | | | | | | to implement expandload/compressstore builtins. Summary: We've had these target independent intrinsics for at least a year and a half. Looks like they do exactly what we need here and the backend already supports them. Reviewers: RKSimon, delena, spatel, GBuella Reviewed By: RKSimon Subscribers: cfe-commits, llvm-commits Differential Revision: https://reviews.llvm.org/D47693 llvm-svn: 334366
* [X86] Remove GCCBuiltin from some intrinsics so we can custom handle them in ↵Craig Topper2018-06-101-72/+36
| | | | | | clang. llvm-svn: 334365
* [lldb-mi] Re-implement MI -exec-step command.Alexander Polyakov2018-06-104-25/+53
| | | | | | | | | | | | | | Summary: Now -exec-step uses SB API instead of HandleCommand hack. Reviewers: aprantl, clayborg, labath, stella.stamenova Reviewed By: aprantl Subscribers: ki.stfu, lldb-commits Differential Revision: https://reviews.llvm.org/D47838 llvm-svn: 334364
* [ASAN] Fix crash on i?86-linux (32-bit) against glibc 2.27 and laterPeter Wu2018-06-101-7/+38
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Summary: Running sanitized 32-bit x86 programs on glibc 2.27 crashes at startup, with: ERROR: AddressSanitizer: SEGV on unknown address 0xf7a8a250 (pc 0xf7f807f4 bp 0xff969fc8 sp 0xff969f7c T16777215) The signal is caused by a WRITE memory access. #0 0xf7f807f3 in _dl_get_tls_static_info (/lib/ld-linux.so.2+0x127f3) #1 0xf7a92599 (/lib/libasan.so.5+0x112599) #2 0xf7a80737 (/lib/libasan.so.5+0x100737) #3 0xf7f7e14f in _dl_init (/lib/ld-linux.so.2+0x1014f) #4 0xf7f6eb49 (/lib/ld-linux.so.2+0xb49) The problem is that glibc changed the calling convention for the GLIBC_PRIVATE symbol that sanitizer uses (even when it should not, GLIBC_PRIVATE is exactly for symbols that can change at any time, be removed etc.), see https://sourceware.org/ml/libc-alpha/2017-08/msg00497.html Fixes https://github.com/google/sanitizers/issues/954 Patch By: Jakub Jelinek Reviewed By: vitalybuka, Lekensteyn Differential Revison: https://reviews.llvm.org/D44623 llvm-svn: 334363
* [NEON] Support VST1xN intrinsics in AArch32 mode (Clang part)Ivan A. Kosarev2018-06-104-2122/+2350
| | | | | | | | | We currently support them only in AArch64. The NEON Reference, however, says they are 'ARMv7, ARMv8' intrinsics. Differential Revision: https://reviews.llvm.org/D47446 llvm-svn: 334362
* [NEON] Support VST1xN intrinsics in AArch32 mode (LLVM part)Ivan A. Kosarev2018-06-106-8/+542
| | | | | | | | | We currently support them only in AArch64. The NEON Reference, however, says they are 'ARMv7, ARMv8' intrinsics. Differential Revision: https://reviews.llvm.org/D47447 llvm-svn: 334361
* [X86] Fix forward declaration in a test case that was messed up in r334358Craig Topper2018-06-101-1/+1
| | | | llvm-svn: 334360
* [X86] Remove masking from the 512-bit packed floating point add/sub/mul/div ↵Craig Topper2018-06-104-142/+126
| | | | | | builtins. Use select in IR instead. llvm-svn: 334359
* [X86] Remove masking from the 512-bit masked floating point add/sub/mul/div ↵Craig Topper2018-06-108-338/+1319
| | | | | | intrinsics. Use a select in IR instead. llvm-svn: 334358
* Cleanup. NFCFangrui Song2018-06-103-4/+3
| | | | llvm-svn: 334357
* Revert "Resubmit "[Support] Expose flattenWindowsCommandLine.""Zachary Turner2018-06-105-99/+122
| | | | | | | | | This reverts commit 65243b6d19143cb7a03f68df0169dcb63e8b4632. Seems like it's not a flake. It might have something to do with the '*' character being in a command line. llvm-svn: 334356
* Resubmit "[Support] Expose flattenWindowsCommandLine."Zachary Turner2018-06-105-122/+99
| | | | | | | | | There were a few linux compilation failures, but other than that I think this was just a flake that caused the tests to fail. I'm going to resubmit and see if the failures go away, if not I'll revert again. llvm-svn: 334355
* Revert "[Support] Expose flattenWindowsCommandLine."Zachary Turner2018-06-093-90/+114
| | | | | | | | | This reverts commit 10d2e88e87150a35dc367ba30716189d2af26774. This is causing some test failures for some reason, reverting while I investigate. llvm-svn: 334354
* [Support] Expose flattenWindowsCommandLine.Zachary Turner2018-06-093-114/+90
| | | | | | | | | | | This function was internal to Program.inc, but I've needed this on several occasions when I've had to use CreateProcess without llvm's sys::Execute functions. In doing so, I noticed that the function was written using unsafe C-string access and was pretty hard to understand / make sense of, so I've also re-written the functions to use more modern LLVM constructs. llvm-svn: 334353
* [analyzer] Clean up the program state map of DanglingInternalBufferChecker.Reka Kovacs2018-06-091-1/+22
| | | | | | | | | | Symbols are cleaned up from the program state map when they go out of scope. Memory regions are cleaned up when the corresponding object is destroyed, and additionally in 'checkDeadSymbols' in case destructor modeling was incomplete. Differential Revision: https://reviews.llvm.org/D47416 llvm-svn: 334352
* [CostModel][X86] Add 'select' style shuffle costs tests (PR33744)Simon Pilgrim2018-06-091-2/+324
| | | | llvm-svn: 334351
* [lldb, lldb-mi] Re-implement MI -exec-continue command.Alexander Polyakov2018-06-093-34/+30
| | | | | | | | | | | | | | Summary: Now -exec-continue command uses SB API to resume target's process. Reviewers: aprantl, clayborg, labath Reviewed By: clayborg Subscribers: apolyakov, labath, ki.stfu, llvm-commits, lldb-commits Differential Revision: https://reviews.llvm.org/D47415 llvm-svn: 334350
* [NFC][InstCombine] More tests for (x >> y) << y -> x & (-1 << y) fold.Roman Lebedev2018-06-091-0/+316
| | | | | | | | | | | | Followup for rL334347. The fold is also valid for ashr. https://rise4fun.com/Alive/0HF https://bugs.llvm.org/show_bug.cgi?id=37603 https://reviews.llvm.org/D46760#1123713 https://rise4fun.com/Alive/cplX llvm-svn: 334349
* [analyzer] Add dangling internal buffer check.Reka Kovacs2018-06-096-2/+215
| | | | | | | | | | | | This check will mark raw pointers to C++ standard library container internal buffers 'released' when the objects themselves are destroyed. Such information can be used by MallocChecker to warn about use-after-free problems. In this first version, 'std::basic_string's are supported. Differential Revision: https://reviews.llvm.org/D47135 llvm-svn: 334348
* [NFC][InstCombine] Tests for (x >> y) << y -> x & (-1 << y) fold.Roman Lebedev2018-06-091-0/+316
| | | | | | | | | | | We already do it for splat constants, but not just values. Also, undef cases are mostly non-functional. https://bugs.llvm.org/show_bug.cgi?id=37603 https://reviews.llvm.org/D46760#1123713 https://rise4fun.com/Alive/cplX llvm-svn: 334347
* [NFC][InstCombine] Tests for (x << y) >> y -> x & (-1 >> y) fold.Roman Lebedev2018-06-091-0/+315
| | | | | | | | | | We already do it for splat constants, but not just values. Also, undef cases are mostly non-functional. https://bugs.llvm.org/show_bug.cgi?id=37603 https://rise4fun.com/Alive/cplX llvm-svn: 334346
* [X86] NFC Use member initialization in X86SubtargetGabor Buella2018-06-092-215/+107
| | | | | | | | The separate initializeEnvironment function was sort of useless since r217071. ARM did this move already with r273556. llvm-svn: 334345
* Use uniform mechanism for OOM errors handlingSerge Pavlov2018-06-0910-80/+69
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is a recommit of r333506, which was reverted in r333518. The original commit message is below. In r325551 many calls of malloc/calloc/realloc were replaces with calls of their safe counterparts defined in the namespace llvm. There functions generate crash if memory cannot be allocated, such behavior facilitates handling of out of memory errors on Windows. If the result of *alloc function were checked for success, the function was not replaced with the safe variant. In these cases the calling function made the error handling, like: T *NewElts = static_cast<T*>(malloc(NewCapacity*sizeof(T))); if (NewElts == nullptr) report_bad_alloc_error("Allocation of SmallVector element failed."); Actually knowledge about the function where OOM occurred is useless. Moreover having a single entry point for OOM handling is convenient for investigation of memory problems. This change removes custom OOM errors handling and replaces them with calls to functions `llvm::safe_*alloc`. Declarations of `safe_*alloc` are moved to a separate include file, to avoid cyclic dependency in SmallVector.h Differential Revision: https://reviews.llvm.org/D47440 llvm-svn: 334344
* Use SmallPtrSet instead of SmallSet in places where we iterate over the set.Craig Topper2018-06-095-7/+7
| | | | | | | | SmallSet forwards to SmallPtrSet for pointer types. SmallPtrSet supports iteration, but a normal SmallSet doesn't. So if it wasn't for the forwarding, this wouldn't work. These places were found by hiding the begin/end methods in the SmallSet forwarding llvm-svn: 334343
OpenPOWER on IntegriCloud