summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* Improve MSVC type visualizationsMike Spertus2019-01-051-7/+47
| | | | | | | | Display TypeBits in a single line. Fix bit rot in template visualizations Rudimentary support for deduced types llvm-svn: 350470
* Enhance MSVC visualization of PointerUnionsMike Spertus2019-01-051-5/+27
| | | | | | | | Add a "deref" view that displays the pointed to objects since other visualizers often need to display data reference by internal PointerUnions llvm-svn: 350469
* [InstCombine] Add cttz/ctlz + icmp ugt/ult tests; NFCNikita Popov2019-01-051-0/+174
| | | | llvm-svn: 350468
* [python] Make the collections import future-proofSerge Guelton2019-01-051-2/+9
| | | | | | | | | | | | | | | On Python 3.7 the old code raises a warning: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working class ArgumentsIterator(collections.Sequence): On Python 3.8 it wouldn't work anymore. Commited on behalf of Jakub Stasiak. Differential Revision: https://reviews.llvm.org/D56341 llvm-svn: 350467
* [Documentation] fix order of checks in checks/list.rstJonas Toth2019-01-051-3/+3
| | | | llvm-svn: 350466
* [docs] Add a known limitation to the comment about lld supporting GCC/MinGW ↵Martin Storsjo2019-01-051-1/+4
| | | | | | | | object files. NFC. Differential Revision: https://reviews.llvm.org/D56335 llvm-svn: 350465
* [MinGW] Expand comment for MinGW driver. NFC.Martin Storsjo2019-01-051-3/+21
| | | | | | | | Originally authored by Rui Ueyama. Differential Revision: https://reviews.llvm.org/D53031 llvm-svn: 350464
* [InstCombine] Relax cttz/ctlz with select on zeroNikita Popov2019-01-052-12/+19
| | | | | | | | | | | | | | The cttz/ctlz intrinsics have a parameter specifying whether the result is undefined for zero. cttz(x, false) can be relaxed to cttz(x, true) if x is known non-zero, and in fact such an optimization is already performed. However, this currently doesn't work if x is non-zero as a result of a select rather than an explicit branch. This patch adds handling for this case, thus allowing x != 0 ? cttz(x, false) : y to simplify to x != 0 ? cttz(x, true) : y. Differential Revision: https://reviews.llvm.org/D55786 llvm-svn: 350463
* [InstCombine] Add vector tests for select + ctlz/cttz; NFCNikita Popov2019-01-051-0/+50
| | | | llvm-svn: 350462
* [CMake][Fuchsia] Enable experimental new pass manager by defaultPetr Hosek2019-01-051-0/+1
| | | | | | | | This change enableds experimental new pass manager. Differential Revision: https://reviews.llvm.org/D56350 llvm-svn: 350461
* [CMake][Fuchsia] Enable x86 relaxation by defaultPetr Hosek2019-01-051-0/+1
| | | | | | | | | | | This enables x86 relaxation by default. This depends on a linker new enough to support the new reloc types but since we default to lld we don't worry about host system linkers that might be too old to support the new reloc types. Differential Revision: https://reviews.llvm.org/D56349 llvm-svn: 350460
* [CMake][Fuchsia] Enable --build-id linker flag by defaultPetr Hosek2019-01-051-0/+2
| | | | | | | | This enables passing --build-id to linker by default. Differential Revision: https://reviews.llvm.org/D56348 llvm-svn: 350459
* [gn build] Merge r350423Nico Weber2019-01-051-0/+1
| | | | llvm-svn: 350458
* [gn build] Add build files for unittests under llvm/unittests/ExecutionEngineNico Weber2019-01-054-5/+81
| | | | | | Differential Revision: https://reviews.llvm.org/D56328 llvm-svn: 350457
* [Inliner] Optimize shouldBeDeferredEaswaran Raman2019-01-051-5/+16
| | | | | | | | | | This has some minor optimizations to shouldBeDeferred. This is not strictly NFC because the early exit inside the loop assumes TotalSecondaryCost is monotonically non-decreasing, which is not true if the threshold used by CostAnalyzer is negative. AFAICT the thresholds do not go below 0 for the default values of the various options we use. llvm-svn: 350456
* [X86] Require second operand of X86vshiftuniform to be an integer. NFCCraig Topper2019-01-051-1/+1
| | | | | | We don't need to require the first operand to be an integer because we already said it was the same type as the result which we also constrained to an integer. llvm-svn: 350455
* [gn build] Add build files for unittests that load shared librariesNico Weber2019-01-053-6/+104
| | | | | | | | | | | | | | | | | | | | | | | | This is slightly ugly for three reasons: - The shlib needs to go next to the binary to be found on all platforms, so the build files refer to target_out_dir - The explicit -fPIC flag needed on the shared lib side, and the -rdynamic flag needed on the host side, on Linux - Plugins that refer to LLVM code and assume that the host will resolve them don't work on Windows -- PluginsTests won't test anything on Windows (but DynamicLibraryTests will, since the dll here doesn't call LLVM code) If we get lots more of these plugin / plugin host targets it might make sense to add a template for them. But for now, these are the last ones we need. (We're at 6 plugin hosts, 2 of them tests, and at 6 shared libraries, 2 of them tests as well. clang is a plugin host by default in the CMake build but not (yet?) in the GN build.) Differential Revision: https://reviews.llvm.org/D56330 llvm-svn: 350454
* Let new test from r350340 still pass even after r350451.Nico Weber2019-01-051-4/+4
| | | | llvm-svn: 350453
* [LLD][COFF] PDB: Parallel sort publicsAlexandre Ganea2019-01-051-4/+5
| | | | | | | | | | | | | | | | Saves up to 1.3 sec on large PDBs. Figures below are for the "Globals Stream Layout" pass: Before This patch Large EXE (PDB is ~2 GB) 3330 ms 2022 ms Large EXE (PDB is ~2 GB) 2680 ms 1608 ms Large DLL (PDB is ~1 GB) 1455 ms 938 ms Large DLL (PDB is ~800 MB) 1215 ms 800 ms Small DLL (PDB is ~200 MB) 224 ms 146 ms Differential Revision: https://reviews.llvm.org/D56334 llvm-svn: 350452
* Move -add-plugin validation after -load was executed.Nico Weber2019-01-052-14/+19
| | | | | | | Moves the code added in r350340 around a bit, to hopefully make the existing plugin tests pass when clang is built with examples enabled. llvm-svn: 350451
* [LLD][COFF] Fix namespace compilation issue with a upcoming patch. NFCAlexandre Ganea2019-01-051-4/+4
| | | | llvm-svn: 350450
* Revert "Revert "Switch Android from TLS_SLOT_TSAN(8) to TLS_SLOT_SANITIZER(6)""Evgeniy Stepanov2019-01-051-5/+5
| | | | | | This reapplies commit r348984. llvm-svn: 350449
* Revert "Revert "[hwasan] Android: Switch from TLS_SLOT_TSAN(8) to ↵Evgeniy Stepanov2019-01-052-3/+5
| | | | | | | | TLS_SLOT_SANITIZER(6)"" This reapplies commit r348983. llvm-svn: 350448
* [gn build] Add build file for DebugInfoPDBTestsNico Weber2019-01-053-4/+37
| | | | | | | | | | | | | | | | | | | | | | | I'm pretty unhappy this patch: DebugInfoPDBTests uses an API that requires some magic txt file to be next to the unit test executable that stores the absolute path to the LLVM source root. The choices here are: 1. Don't use the unittest() template for DebugInfoPDBTests and set output_dir for unit tests in two places (the gni file for every test but this one, and the BUILD.gn file for this specific test). 2. Add another unittest_foo() template variation for this one test. I went with the former, and added a comment to the template to look out for this. (The CMake build has the same issue.) Differential Revision: https://reviews.llvm.org/D56324 llvm-svn: 350447
* [Driver] Some more cleanup. NFCJonas Devlieghere2019-01-052-34/+35
| | | | llvm-svn: 350446
* Bring back the pthread_create interceptor, but only on non-aarch64.Peter Collingbourne2019-01-041-0/+14
| | | | | | | | We still need the interceptor on non-aarch64 to untag the pthread_t and pthread_attr_t pointers and disable tagging on allocations done internally by glibc. llvm-svn: 350445
* Disable system-allocator-fallback.cc test on Android O and earlier.Peter Collingbourne2019-01-042-0/+6
| | | | | | | The dynamic loader on Android O appears to have a bug where it crashes when dlopening DF_1_GLOBAL libraries. llvm-svn: 350444
* [sanitizer] Reduce stack depot size on Android.Evgeniy Stepanov2019-01-042-2/+2
| | | | | | | | | | | | | | | | Summary: The default setting kTabSizeLog=20 results in an 8Mb global hash table, almost all of it in private pages. That is not a sane setting in a mobile, system-wide use case: with ~150 concurrent processes stack depot will account for more than 1Gb of RAM. Reviewers: kcc, pcc Subscribers: srhines, kubamracek, llvm-commits Differential Revision: https://reviews.llvm.org/D56333 llvm-svn: 350443
* [PGO] Use SourceFileName rather module name in PGOFuncNameRong Xu2019-01-041-5/+6
| | | | | | | | | | In LTO or Thin-lto mode (though linker plugin), the module names are of temp file names which are different for different compilations. Using SourceFileName avoids the issue. This should not change any functionality for current PGO as all the current callers of getPGOFuncName() is before LTO. llvm-svn: 350442
* [OpenMP] Refactor const restriction for linearJoel E. Denny2019-01-0416-43/+35
| | | | | | | | | | | | | | As discussed in D56113, this patch refactors the implementation of the const restriction for linear to reuse a function introduced by D56113. A side effect is that, if a variable has mutable members, this diagnostic is now skipped, and the diagnostic for the variable not being an integer or pointer is reported instead. Reviewed By: ABataev Differential Revision: https://reviews.llvm.org/D56299 llvm-svn: 350441
* [OpenMP] Refactor const restriction for reductionsJoel E. Denny2019-01-0434-480/+480
| | | | | | | | | | | | | As discussed in D56113, this patch refactors the implementation of the const restriction for reductions to reuse a function introduced by D56113. A side effect is that diagnostics sometimes now say "variable" instead of "list item" when a list item is a variable. Reviewed By: ABataev Differential Revision: https://reviews.llvm.org/D56298 llvm-svn: 350440
* [OpenMP] Replace predetermined shared for const variableJoel E. Denny2019-01-0440-376/+439
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The following appears in OpenMP 3.1 sec. 2.9.1.1 as a predetermined data-sharing attribute: > Variables with const-qualified type having no mutable member are > shared. It does not appear in OpenmP 4.0, 4.5, or 5.0. This patch removes the implementation of that attribute when the requested OpenMP version is greater than 3.1. One effect of that removal is that `default(none)` affects const variables without mutable members. Also, without this patch, if a const variable without mutable members was explicitly lastprivate or private, it was an error because it was predetermined shared. Now, clang instead complains that it's const without mutable fields, which is a more intelligible diagnostic. That should be fine for all of the above versions because they all have something like the following, which is quoted from OpenMP 5.0 sec. 2.19.3: > A variable that is privatized must not have a const-qualified type > unless it is of class type with a mutable member. This restriction does > not apply to the firstprivate clause. reduction and linear clauses already have separate checks for const variables. Future patches will merge the implementations. Reviewed By: ABataev Differential Revision: https://reviews.llvm.org/D56113 llvm-svn: 350439
* [LLD][COFF] Fix file/line retrieval when a undefined symbol is to be printedAlexandre Ganea2019-01-042-7/+173
| | | | | | Differential Revision: https://reviews.llvm.org/D55951 llvm-svn: 350438
* [X86] Fix warning; NFCNikita Popov2019-01-041-1/+1
| | | | llvm-svn: 350437
* Update the pr_datasz of .note.gnu.property section.Vyacheslav Zakharin2019-01-042-5/+5
| | | | | | | | Patch by Xiang Zhang. Differential Revision: https://reviews.llvm.org/D56080 llvm-svn: 350436
* [BDCE] Remove dead uses of argumentsNikita Popov2019-01-044-48/+52
| | | | | | | | | | | | | | | | | In addition to finding dead uses of instructions, also find dead uses of function arguments, and replace them with zero as well. I'm changing the way the known bits are computed here to remove the coupling between the transfer function and the algorithm. It previously relied on the first op being visited first and computing known bits -- unless the first op is not an instruction, in which case they're computed on the second op. I could have adjusted this to check for "instruction or argument", but I think it's better to avoid the repeated calculation with an explicit flag. Differential Revision: https://reviews.llvm.org/D56247 llvm-svn: 350435
* [AArch64] Adjust the cost model for Exynos M3Evandro Menezes2019-01-041-38/+39
| | | | | | Improve the modeling of ASIMD loads and stores. llvm-svn: 350434
* Fix default-function-attr.c so that it works on Windows.Peter Collingbourne2019-01-041-1/+1
| | | | llvm-svn: 350433
* [X86] Add INSERT_SUBVECTOR to ComputeNumSignBitsCraig Topper2019-01-042-29/+45
| | | | | | | | | | This adds support for calculating sign bits of insert_subvector. I based it on the computeKnownBits. My motivating case is propagating sign bits information across basic blocks on AVX targets where concatenating using insert_subvector is common. Differential Revision: https://reviews.llvm.org/D56283 llvm-svn: 350432
* [OPENMP][NVPTX]General formatting/code improvement, NFC.Alexey Bataev2019-01-0410-81/+57
| | | | | | | | | | | | Summary: Formatting. Reviewers: gtbercea, grokos, kkwli0 Subscribers: guansong, openmp-commits, caomhin Differential Revision: https://reviews.llvm.org/D56290 llvm-svn: 350431
* [x86] add tests for potential horizontal vector ops; NFCSanjay Patel2019-01-041-0/+629
| | | | | | These are modified versions of the FP tests from rL349923. llvm-svn: 350430
* hwasan: Implement lazy thread initialization for the interceptor ABI.Peter Collingbourne2019-01-0413-33/+106
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The problem is similar to D55986 but for threads: a process with the interceptor hwasan library loaded might have some threads started by instrumented libraries and some by uninstrumented libraries, and we need to be able to run instrumented code on the latter. The solution is to perform per-thread initialization lazily. If a function needs to access shadow memory or add itself to the per-thread ring buffer its prologue checks to see whether the value in the sanitizer TLS slot is null, and if so it calls __hwasan_thread_enter and reloads from the TLS slot. The runtime does the same thing if it needs to access this data structure. This change means that the code generator needs to know whether we are targeting the interceptor runtime, since we don't want to pay the cost of lazy initialization when targeting a platform with native hwasan support. A flag -fsanitize-hwaddress-abi={interceptor,platform} has been introduced for selecting the runtime ABI to target. The default ABI is set to interceptor since it's assumed that it will be more common that users will be compiling application code than platform code. Because we can no longer assume that the TLS slot is initialized, the pthread_create interceptor is no longer necessary, so it has been removed. Ideally, lazy initialization should only cost one instruction in the hot path, but at present the call may cause us to spill arguments to the stack, which means more instructions in the hot path (or theoretically in the cold path if the spills are moved with shrink wrapping). With an appropriately chosen calling convention for the per-thread initialization function (TODO) the hot path should always need just one instruction and the cold path should need two instructions with no spilling required. Differential Revision: https://reviews.llvm.org/D56038 llvm-svn: 350429
* [Scalar] Simplify comparison operators and add coverage.Davide Italiano2019-01-042-92/+21
| | | | llvm-svn: 350428
* hwasan: Use system allocator to realloc and free untagged pointers in ↵Peter Collingbourne2019-01-048-14/+106
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | interceptor mode. The Android dynamic loader has a non-standard feature that allows libraries such as the hwasan runtime to interpose symbols even after the symbol already has a value. The new value of the symbol is used to relocate libraries loaded after the interposing library, but existing libraries keep the old value. This behaviour is activated by the DF_1_GLOBAL flag in DT_FLAGS_1, which is set by passing -z global to the linker, which is what we already do to link the hwasan runtime. What this means in practice is that if we have .so files that depend on interceptor-mode hwasan without the main executable depending on it, some of the libraries in the process will be using the hwasan allocator and some will be using the system allocator, and these allocators need to interact somehow. For example, if an instrumented library calls a function such as strdup that allocates memory on behalf of the caller, the instrumented library can reasonably expect to be able to call free to deallocate the memory. We can handle that relatively easily with hwasan by using tag 0 to represent allocations from the system allocator. If hwasan's realloc or free functions are passed a pointer with tag 0, the system allocator is called. One limitation is that this scheme doesn't work in reverse: if an instrumented library allocates memory, it must free the memory itself and cannot pass ownership to a system library. In a future change, we may want to expose an API for calling the system allocator so that instrumented libraries can safely transfer ownership of memory to system libraries. Differential Revision: https://reviews.llvm.org/D55986 llvm-svn: 350427
* [HIP][DRIVER][OFFLOAD] Do not unbundle unsupported file typesAaron Enye Shi2019-01-041-0/+1
| | | | | | | | | | The offload bundler action should not unbundle the input file types that does not match the action type. This fixes an issue where .so files are unbundled when the action type is object files. Reviewers: yaxunl Differential Revision: https://reviews.llvm.org/D56321 llvm-svn: 350426
* [HIP][DRIVER][OFFLOAD] Do not unbundle unsupported file typesAaron Enye Shi2019-01-042-0/+23
| | | | | | The offload bundler action should not unbundle the input file types that does not match the action type. This fixes an issue where .so files are unbundled when the action type is object files. llvm-svn: 350425
* [ThinLTO] Clang changes to utilize new pass to handle chains of aliasesTeresa Johnson2019-01-042-2/+10
| | | | | | | | | | | | | | | | Summary: As with NameAnonGlobals, invoke the new CanonicalizeAliases via clang when using the new PM. Depends on D54507. Reviewers: pcc, davidxl Subscribers: mehdi_amini, inglorion, steven_wu, dexonsmith, cfe-commits Differential Revision: https://reviews.llvm.org/D55620 llvm-svn: 350424
* [ThinLTO] Handle chains of aliasesTeresa Johnson2019-01-0410-7/+192
| | | | | | | | | | | | | | | | | | | At -O0, globalopt is not run during the compile step, and we can have a chain of an alias having an immediate aliasee of another alias. The summaries are constructed assuming aliases in a canonical form (flattened chains), and as a result only the base object but no intermediate aliases were preserved. Fix by adding a pass that canonicalize aliases, which ensures each alias is a direct alias of the base object. Reviewers: pcc, davidxl Subscribers: mehdi_amini, inglorion, eraman, steven_wu, dexonsmith, arphaman, llvm-commits Differential Revision: https://reviews.llvm.org/D54507 llvm-svn: 350423
* [ObjCARC] Add an new attribute, objc_externally_retainedErik Pilkington2019-01-0416-57/+500
| | | | | | | | | | | | | | | | | | | | This attribute, called "objc_externally_retained", exposes clang's notion of pseudo-__strong variables in ARC. Pseudo-strong variables "borrow" their initializer, meaning that they don't retain/release it, instead assuming that someone else is keeping their value alive. If a function is annotated with this attribute, implicitly strong parameters of that function aren't implicitly retained/released in the function body, and are implicitly const. This is useful to expose for performance reasons, most functions don't need the extra safety of the retain/release, so programmers can opt out as needed. This attribute can also apply to declarations of local variables, with similar effect. Differential revision: https://reviews.llvm.org/D55865 llvm-svn: 350422
* [x86] lower extracted fadd/fsub to horizontal vector math; 2nd trySanjay Patel2019-01-043-298/+647
| | | | | | | | | | | | | | | | | | | | The 1st try for this was at rL350369, but it caused IR-level diffs because our cost models differentiate custom vs. legal/promote lowering. So that was reverted at rL350373. The cost models were fixed independently at rL350403, so this is effectively the same patch as last time. Original commit message: This would show up if we fix horizontal reductions to narrow as they go along, but it's an improvement for size and/or Jaguar (fast-hops) independent of that. We need to do this late to not interfere with other pattern matching of larger horizontal sequences. We can extend this to integer ops in a follow-up patch. Differential Revision: https://reviews.llvm.org/D56011 llvm-svn: 350421
OpenPOWER on IntegriCloud