summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
...
* Add a testcase for PR36268.Rafael Espindola2018-02-081-0/+6
| | | | llvm-svn: 324552
* Fix PR36268.Rafael Espindola2018-02-081-5/+9
| | | | | | | | | | | | | | | The issue is that clang was first creating a extern_weak hidden GV and then changing the linkage to external. Once we know it is not extern_weak we know it must be dso_local. This patch refactors the code that sets the implicit dso_local to a helper private function that is used every time we change the linkage or visibility. I will commit a patch to clang in a minute. llvm-svn: 324551
* AMDGPU: Don't crash when trying to fold implicit operandsMatt Arsenault2018-02-082-0/+15
| | | | llvm-svn: 324550
* [NVPTX] When dying due to a bad address space value, print out the value.Justin Lebar2018-02-081-1/+2
| | | | llvm-svn: 324549
* Remove extra space.Rafael Espindola2018-02-081-1/+1
| | | | | | Should fix the ppc bots. llvm-svn: 324548
* [AMDGPU] Fixed wait count reuseStanislav Mekhanoshin2018-02-081-50/+40
| | | | | | | | | | | | | The code reusing existing wait counts is incorrect since it keeps adding new operands to an old instruction instead of replacing the immediate. It was also effectively switched off by the condition that wait count is not an AMDGPU::S_WAITCNT. Also switched to BuildMI instead of creating instructions directly. Differential Revision: https://reviews.llvm.org/D42997 llvm-svn: 324547
* [x86] Fix nasty bug in the x86 backend that is essentially impossible toChandler Carruth2018-02-072-0/+85
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | hit from IR but creates a minefield for MI passes. The x86 backend has fairly powerful logic to try and fold loads that feed register operands to instructions into a memory operand on the instruction. This is almost always a good thing, but there are specific relocated loads that are only allowed to appear in specific instructions. Notably, R_X86_64_GOTTPOFF is only allowed in `movq` and `addq`. This patch blocks folding of memory operands using this relocation unless the target is in fact `addq`. The particular relocation indicates why we simply don't hit this under normal circumstances. This relocation is only used for TLS, and it gets used in very specific ways in conjunction with %fs-relative addressing. The result is that loads using this relocation are essentially never eligible for folding into an instruction's memory operands. Unless, of course, you have an MI pass that inserts usage of such a load. I have exactly such an MI pass and was greeted by truly mysterious miscompiles where the linker replaced my instruction with a completely garbage byte sequence. Go team. This is the only such relocation I'm aware of in x86, but there may be others that need to be similarly restricted. Fixes PR36165. Differential Revision: https://reviews.llvm.org/D42732 llvm-svn: 324546
* Fix size and alignment of array<T, 0>.Eric Fiselier2018-02-073-4/+22
| | | | | | | | An array T[1] isn't necessarily the same say when it's a member of a struct. This patch addresses that problem and corrects the tests to deal with it. llvm-svn: 324545
* Verify profile data confirms large loop trip counts.Mircea Trofin2018-02-072-5/+141
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Summary: Loops with inequality comparers, such as: // unsigned bound for (unsigned i = 1; i < bound; ++i) {...} have getSmallConstantMaxTripCount report a large maximum static trip count - in this case, 0xffff fffe. However, profiling info may show that the trip count is much smaller, and thus counter-recommend vectorization. This change: - flips loop-vectorize-with-block-frequency on by default. - validates profiled loop frequency data supports vectorization, when static info appears to not counter-recommend it. Absence of profile data means we rely on static data, just as we've done so far. Reviewers: twoh, mkuper, davidxl, tejohnson, Ayal Reviewed By: davidxl Subscribers: bkramer, llvm-commits Differential Revision: https://reviews.llvm.org/D42946 llvm-svn: 324543
* Fix compilation in C++17 mode.Richard Smith2018-02-071-0/+2
| | | | | | | | | | | C++17 removes `std::unexpected_handler`, but libc++abi needs it to define `__cxa_exception`. When building against libc++, this is easily rectified by telling libc++ we're building the library. We already do this in the other places where we need these symbols. Differential Revision: https://reviews.llvm.org/D42987 llvm-svn: 324542
* Update for llvm change.Rafael Espindola2018-02-071-1/+1
| | | | llvm-svn: 324541
* [NFCi] Replace a couple of usages of const StringRef& with StringRefErich Keane2018-02-074-7/+7
| | | | | | | No sense passing these by reference when a copy is about as free, and saves on potential indirection later. llvm-svn: 324540
* Don't try to use copy relocations with tls variables.Rafael Espindola2018-02-072-3/+24
| | | | | | Should fix the lldb bot. llvm-svn: 324539
* [X86] Prune some unreachable 'return SDValue()' paths from ↵Craig Topper2018-02-071-31/+26
| | | | | | | | LowerSIGN_EXTEND/LowerZERO_EXTEND/LowerANY_EXTEND. We were doing a lot of whitelisting of what we handle in these routines, but setOperationAction constrains what we can get here. So just add some asserts and prune the unreachable paths. llvm-svn: 324538
* PR36055: fix computation of *-dependence in nested initializer lists.Richard Smith2018-02-073-12/+59
| | | | | | | | | | | | | | | | When we synthesize an implicit inner initializer list when analyzing an outer initializer list, we add it to the outer list immediately, and then fill in the inner list. This gives the outer list no chance to update its *-dependence bits with those of the completed inner list. To fix this, re-add the inner list to the outer list once it's completed. Note that we do not recompute the *-dependence bits from scratch when we complete an outer list; this would give the wrong result for the case where a designated initializer overwrites a dependent initializer with a non-dependent one. The resulting list in that case should still be dependent, even though all traces of the dependence were removed from the semantic form. llvm-svn: 324537
* [X86] Remove dead code from EmitTest that looked for an i1 type which should ↵Craig Topper2018-02-071-5/+0
| | | | | | have already been type legalized away. NFC llvm-svn: 324536
* Recommit r324107 again.Rafael Espindola2018-02-0722-124/+311
| | | | | | | | | | | | | | | | | | | | | | | | | | | The difference from the previous try is that we no longer directly access function declarations from position independent executables. It should work, but currently doesn't with some linkers. It now includes a fix to not mark available_externally definitions as dso_local. Original message: Start setting dso_local in clang. This starts adding dso_local to clang. The hope is to eventually have TargetMachine::shouldAssumeDsoLocal go away. My objective for now is to move enough of it to clang to remove the need for the TargetMachine one to handle PIE copy relocations and -fno-plt. With that it should then be easy to implement a -fno-copy-reloc in clang. This patch just adds the cases where we assume a symbol to be local based on the file being compiled for an executable or a shared library. llvm-svn: 324535
* Stop using __strtonum_fallback on Android.Dan Albert2018-02-071-1/+0
| | | | | | | Fallback implementations are now provided by bionic when necessary, which these may conflict with. llvm-svn: 324534
* [X86] When doing callee save/restore for k-registers make sure we don't use ↵Craig Topper2018-02-074-243/+369
| | | | | | | | | | | | | | KMOVQ on non-BWI targets If we are saving/restoring k-registers, the default behavior of getMinimalRegisterClass will find the VK64 class with a spill size of 64 bits. This will cause the KMOVQ opcode to be used for save/restore. If we don't have have BWI instructions we need to constrain the class returned to give us VK16 with a 16-bit spill size. We can do this by passing the either v16i1 or v64i1 into getMinimalRegisterClass. Also add asserts to make sure BWI is enabled anytime we use KMOVD/KMOVQ. These are what caught this bug. Fixes PR36256 Differential Revision: https://reviews.llvm.org/D42989 llvm-svn: 324533
* Fix PR#31454 - 'basic_string<T>::push_back() crashes if ↵Marshall Clow2018-02-072-5/+8
| | | | | | sizeof(T)>sizeof(long long)'. We were mishandling the small-string optimization calculations for very large 'characters'. This may be an ABI change (change the size of) strings of very large 'characters', but since they never worked, I'm not too concerned. llvm-svn: 324531
* [X86] Auto-generate complete checks. NFCCraig Topper2018-02-072-81/+1082
| | | | llvm-svn: 324530
* Fix -verify static assert messages for older Clang versionsEric Fiselier2018-02-072-2/+2
| | | | llvm-svn: 324529
* Document --build-id=fast in ld.lld.1Ed Maste2018-02-071-1/+6
| | | | | | | | | | Initial ld.lld.1 man page commit in r324512 crossed paths with r324502 which added --build-id=fast, allowing --build-id to be documented as a synonym for --build-id=fast. Catch up with that change in the man page. Differential Revision: https://reviews.llvm.org/D43039 llvm-svn: 324528
* [clang-import-test] Run clang-format, NFCVedant Kumar2018-02-071-8/+9
| | | | | | | I ran across clang-import-test while looking into testing for lldb. There shouldn't be any harm in running clang-format over it. llvm-svn: 324527
* [libc++] Fix PR35491 - std::array of zero-size doesn't work with non-default ↵Eric Fiselier2018-02-0719-26/+805
| | | | | | | | | | | | | | | | | | | constructible types. Summary: This patch fixes llvm.org/PR35491 and LWG2157 (https://cplusplus.github.io/LWG/issue2157) The fix attempts to maintain ABI compatibility by replacing the array with a instance of `aligned_storage`. Reviewers: mclow.lists, EricWF Reviewed By: EricWF Subscribers: lichray, cfe-commits Differential Revision: https://reviews.llvm.org/D41223 llvm-svn: 324526
* [PR36008] Avoid -Wsign-compare warning for enum constants inAlex Lorenz2018-02-072-0/+23
| | | | | | | | | | | | | typeof expressions This commit looks through typeof type at the original expression when diagnosing -Wsign-compare to avoid an unfriendly diagnostic. rdar://36588828 Differential Revision: https://reviews.llvm.org/D42561 llvm-svn: 324514
* Add ld.lld.1 man page, describing lld's ELF linkerEd Maste2018-02-071-0/+479
| | | | | | | | | | | | | | | One of the FreeBSD requirements for enabling lld as the system linker is that it has a man page. Other FreeBSD developers and I created one using lld's --help output as a starting point. This is an expanded and improved version of that. This man page would benefit from additional content, but it provides basic user-facing coverage of lld's options and serves as a good starting point. Differential Revision: https://reviews.llvm.org/D42963 llvm-svn: 324512
* Revert "[DebugInfo] Improvements to representation of enumeration types ↵Momchil Velikov2018-02-0716-392/+51
| | | | | | | | (PR36168)" Revert commit r324489, it broke LLDB tests. llvm-svn: 324511
* [SLP] Add a tests for PR36280, NFC.Alexey Bataev2018-02-071-0/+28
| | | | llvm-svn: 324510
* Remove an errant ^S Jim Ingham2018-02-071-1/+1
| | | | | | (still can't get over those Emacs habits...) llvm-svn: 324509
* Revert [DebugInfo] Improvements to representation of enumeration types ↵Momchil Velikov2018-02-075-112/+10
| | | | | | | | (PR36168)" Revert due to breaking buildbots (LLDB tests) llvm-svn: 324508
* [analyzer] [NFC] Factor out generating path diagnostics for a statement into ↵George Karpenkov2018-02-071-636/+648
| | | | | | | | a function Differential Revision: https://reviews.llvm.org/D42558 llvm-svn: 324507
* Revert "Recommit r324107."Rafael Espindola2018-02-0722-310/+124
| | | | | | | | | | | | | | This reverts commit r324500. The bots found two failures: ThreadSanitizer-x86_64 :: Linux/pie_no_aslr.cc ThreadSanitizer-x86_64 :: pie_test.cc when using gold. The issue is a limitation in gold when building pie binaries. I will investigate how to work around it. llvm-svn: 324505
* Generate PDB files for profiling even in Release build.Zachary Turner2018-02-071-0/+6
| | | | | | | | | | | | This patch enables PDB generation for Release build, which has slightly different optimize option with RelWithDebInfo on windows. This helps to know slow part of Release build when profiling. Patch by Takuto Ikuta Differential Revision: https://reviews.llvm.org/D42632 llvm-svn: 324504
* Comment on 'Review' issuesMarshall Clow2018-02-071-8/+8
| | | | llvm-svn: 324503
* Add --build-id=fast as a synonym for --build-id.Rui Ueyama2018-02-072-0/+4
| | | | | | | | | | | | When you omit an argument, most options fall back to their defaults. For example, --color-diagnostics is a synonym for --color-diagnostics=auto. We don't have a way to specify the default choice for --build-id, so we can't describe --build-id (without an argument) in that way. This patch adds "fast" for the default build-id choice. Differential Revision: https://reviews.llvm.org/D43032 llvm-svn: 324502
* Fix r324498: the commit removed the '-' before the disable-llvm-verifier flagEric Fiselier2018-02-071-1/+1
| | | | llvm-svn: 324501
* Recommit r324107.Rafael Espindola2018-02-0722-124/+310
| | | | | | | | | | | | | | | | | | | | | | | It now includes a fix to not mark available_externally definitions as dso_local. Original message: Start setting dso_local in clang. This starts adding dso_local to clang. The hope is to eventually have TargetMachine::shouldAssumeDsoLocal go away. My objective for now is to move enough of it to clang to remove the need for the TargetMachine one to handle PIE copy relocations and -fno-plt. With that it should then be easy to implement a -fno-copy-reloc in clang. This patch just adds the cases where we assume a symbol to be local based on the file being compiled for an executable or a shared library. llvm-svn: 324500
* Don't pass ForDefinition_t in places it is redundant.Rafael Espindola2018-02-078-84/+56
| | | | | | | | | | | | | | I found this while looking at the ppc failures caused by the dso_local change. The issue was that the patch would produce the wrong answer for available_externally. Having ForDefinition_t available in places where the code can just check the linkage is a bit of a foot gun. This patch removes the ForDefiniton_t argument in places where the linkage is already know. llvm-svn: 324499
* [Driver] Add option to manually control discarding value names in LLVM IR.Eric Fiselier2018-02-074-4/+45
| | | | | | | | | | | | | | | | | | | Summary: Currently, assertion-disabled Clang builds emit value names when generating LLVM IR. This is controlled by the `NDEBUG` macro, and is not easily overridable. In order to get IR output containing names from a release build of Clang, the user must manually construct the CC1 invocation w/o the `-discard-value-names` option. This is less than ideal. For example, Godbolt uses a release build of Clang, and so when asked to emit LLVM IR the result lacks names, making it harder to read. Manually invoking CC1 on Compiler Explorer is not feasible. This patch adds the driver options `-fdiscard-value-names` and `-fno-discard-value-names` which allow the user to override the default behavior. If neither is specified, the old behavior remains. Reviewers: erichkeane, aaron.ballman, lebedev.ri Reviewed By: aaron.ballman Subscribers: bogner, cfe-commits Differential Revision: https://reviews.llvm.org/D42887 llvm-svn: 324498
* [X86] Regenerate test using update_mir_test_checks.py. NFCCraig Topper2018-02-071-155/+268
| | | | llvm-svn: 324497
* [asan] Fix filename size on linux platforms.Yvan Roux2018-02-071-1/+2
| | | | | | | | | | | | This is a a fix for: https://bugs.llvm.org/show_bug.cgi?id=35996 Use filename limits from system headers to be synchronized with what LD_PRELOAD can handle. Differential Revision: https://reviews.llvm.org/D42900 llvm-svn: 324496
* [OpenMP][libomptarget] Add data sharing support in libomptargetGheorghe-Teodor Bercea2018-02-076-1/+65
| | | | | | | | | | | | | | Summary: This patch extends the libomptarget functionality in patch D14254 with support for the data sharing scheme for supporting implicitly shared variables. The runtime therefore maintains a list of references to shared variables. Reviewers: carlo.bertolli, ABataev, Hahnfeld, grokos, caomhin, hfinkel Reviewed By: Hahnfeld, grokos Subscribers: guansong, llvm-commits, openmp-commits Differential Revision: https://reviews.llvm.org/D41485 llvm-svn: 324495
* Revert "AMDGPU: Add 32-bit constant address space"Rafael Espindola2018-02-0714-375/+19
| | | | | | | | This reverts commit r324487. It broke clang tests. llvm-svn: 324494
* Revert dsymutil -update commitsJonas Devlieghere2018-02-078-341/+45
| | | | | | | Revert "[dsymutil][test] Check the updated dSYM instead of companion file." Revert "[dsymutil] Upstream update feature." llvm-svn: 324493
* [test] Don't drop existing categories for methods.Jonas Devlieghere2018-02-071-7/+10
| | | | | | | | | The change in r324488 dropped the existing category attribute in for instance methods. This patch corrects that. Differential revision: https://reviews.llvm.org/D43024 llvm-svn: 324492
* [SelectionDAG] More Aggressibly prune nodes in AddChains. NFCI.Nirav Dave2018-02-071-1/+3
| | | | | | | | Travel all chains paths to first non-tokenfactor node can be exponential work. Add simple redundency check to avoid this. Fixes PR36264. llvm-svn: 324491
* [DebugInfo] Improvements to representation of enumeration types (PR36168)Momchil Velikov2018-02-075-10/+112
| | | | | | | | | | | | | | | This patch: * fixes an incorrect sign-extension of unsigned values, when emitting debug info metadata for enumerators * the enumerators metadata is created with a flag, which determines interpretation of the value bits (signed or unsigned) * the enumerations metadata contains the underlying integer type and a flag, indicating whether this is a C++ "fixed enum" Differential Revision: https://reviews.llvm.org/D42736 llvm-svn: 324490
* [DebugInfo] Improvements to representation of enumeration types (PR36168)Momchil Velikov2018-02-0716-51/+392
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch is the LLVM part of fixing the issues, described in https://bugs.llvm.org/show_bug.cgi?id=36168 * The representation of enumerator values in the debug info metadata now contains a boolean flag isUnsigned, which determines how the bits of the value are interpreted. * The DW_TAG_enumeration type DIE now always (for DWARF version >= 3) includes a DW_AT_type attribute, which refers to the underlying integer type, as suggested in DWARFv4 (5.7 Enumeration Type Entries). * The debug info metadata for enumeration type contains (in flags) indication whether this is a C++11 "fixed enum". * For C++11 enumeration with a fixed underlying type, the DIE also includes the DW_AT_enum_class attribute (for DWARF version >= 4). * Encoding of enumerator constants uses DW_FORM_sdata for signed values and DW_FORM_udata for unsigned values, as suggested by DWARFv4 (7.5.4 Attribute Encodings). The changes should be backwards compatible: * the isUnsigned attribute is optional and defaults to false. * if the underlying type for the enumeration is not available, the enumerator values are considered signed. * the FixedEnum flag defaults to clear. * the bitcode format for DIEnumerator stores the unsigned flag bit #1 of the first record element, so the format does not change and the zero previously stored there is consistent with the false default for IsUnsigned. Differential Revision: https://reviews.llvm.org/D42734 llvm-svn: 324489
* [test] Enable setting category for inline tests.Jonas Devlieghere2018-02-071-2/+7
| | | | | | | | | Inlined tests have a test function that is actually an instance method, which requires a slightly different approach when it comes to setting the category attribute. The attribute must be set on the actual function, rather than on a particular instance. llvm-svn: 324488
OpenPOWER on IntegriCloud