Rafael Espindola [Thu, 29 Jan 2015 17:33:21 +0000 (17:33 +0000)]
Compute the ELF SectionKind from the flags.
Any code creating an MCSectionELF knows ELF and already provides the flags.
SectionKind is an abstraction used by common code that uses a plain
MCSection.
Use the flags to compute the SectionKind. This removes a lot of
guessing and boilerplate from the MCSectionELF construction.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227476
91177308-0d34-0410-b5e6-
96231b3b80d8
Colin LeMahieu [Thu, 29 Jan 2015 17:26:56 +0000 (17:26 +0000)]
[Hexagon] Deleting old variants of intrinsics and adding missing tests.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227474
91177308-0d34-0410-b5e6-
96231b3b80d8
Michael J. Spencer [Thu, 29 Jan 2015 17:20:41 +0000 (17:20 +0000)]
[lto] Disable dialog boxes on crash on Windows.
This has to be done in the DLL because the state doesn't cross DLL boundaries.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227471
91177308-0d34-0410-b5e6-
96231b3b80d8
Michael J. Spencer [Thu, 29 Jan 2015 17:20:29 +0000 (17:20 +0000)]
[Support][Windows] Unify dialog box suppression and print stack traces on abort.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227470
91177308-0d34-0410-b5e6-
96231b3b80d8
Kostya Serebryany [Thu, 29 Jan 2015 17:16:23 +0000 (17:16 +0000)]
[fuzzer] minor cleanup based on reviews: remove redundant includes, fix a copy-pasto in tests
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227468
91177308-0d34-0410-b5e6-
96231b3b80d8
Kostya Serebryany [Thu, 29 Jan 2015 17:11:30 +0000 (17:11 +0000)]
[fuzzer] add FAQ section to the README.txt
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227466
91177308-0d34-0410-b5e6-
96231b3b80d8
Aaron Ballman [Thu, 29 Jan 2015 16:58:29 +0000 (16:58 +0000)]
Reverting r227452, which adds back the fuzzer library. Now excluding the fuzzer library based on LLVM_USE_SANITIZE_COVERAGE being set or unset.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227464
91177308-0d34-0410-b5e6-
96231b3b80d8
Colin LeMahieu [Thu, 29 Jan 2015 16:55:37 +0000 (16:55 +0000)]
[Hexagon] Adding CR intrinsic tests.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227463
91177308-0d34-0410-b5e6-
96231b3b80d8
Tom Stellard [Thu, 29 Jan 2015 16:55:28 +0000 (16:55 +0000)]
R600/SI: Remove stray debug statements
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227462
91177308-0d34-0410-b5e6-
96231b3b80d8
Tom Stellard [Thu, 29 Jan 2015 16:55:25 +0000 (16:55 +0000)]
R600/SI: Define a schedule model and enable the generic machine scheduler
The schedule model is not complete yet, and could be improved.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227461
91177308-0d34-0410-b5e6-
96231b3b80d8
Colin LeMahieu [Thu, 29 Jan 2015 16:35:38 +0000 (16:35 +0000)]
[Hexagon] Deleting unused classes.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227460
91177308-0d34-0410-b5e6-
96231b3b80d8
Aaron Ballman [Thu, 29 Jan 2015 16:18:59 +0000 (16:18 +0000)]
Oops -- accidentally commit some debug code! Removing that code; NFC (this time for real).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227459
91177308-0d34-0410-b5e6-
96231b3b80d8
Robert Lougher [Thu, 29 Jan 2015 16:18:29 +0000 (16:18 +0000)]
[X86] Use single add/sub for large stack offsets
For large stack offsets the compiler generates multiple immediate mode
sub/add instructions in the prologue/epilogue. This patch makes the
compiler place the final amount to be added/subtracted into a register,
which is then added/substracted with a single operation.
Differential Revision: http://reviews.llvm.org/D7226
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227458
91177308-0d34-0410-b5e6-
96231b3b80d8
Colin LeMahieu [Thu, 29 Jan 2015 16:08:43 +0000 (16:08 +0000)]
[Hexagon] Adding XTYPE/PRED intrinsic tests. Converting predicate types to i32 instead of i1.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227457
91177308-0d34-0410-b5e6-
96231b3b80d8
Aaron Ballman [Thu, 29 Jan 2015 16:02:06 +0000 (16:02 +0000)]
Attempting to fix a build issue with MSVC 2012; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227456
91177308-0d34-0410-b5e6-
96231b3b80d8
Bill Schmidt [Thu, 29 Jan 2015 15:59:09 +0000 (15:59 +0000)]
[PowerPC] Complete setting the baseline for ppc64le
Patch by Nemanja Ivanovic.
As was uncovered by the failing test case (when run on non-PPC
platforms), the feature set when compiling with -march=ppc64le was not
being picked up. This change ensures that if the -mcpu option is not
specified, the correct feature set is picked up regardless of whether
we are on PPC or not.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227455
91177308-0d34-0410-b5e6-
96231b3b80d8
Aaron Ballman [Thu, 29 Jan 2015 15:49:22 +0000 (15:49 +0000)]
Temporarily reverting the fuzzer library as it causes too many build issues for MSVC users. This reverts: 227445, 227395, 227389, 227357, 227254, 227252
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227452
91177308-0d34-0410-b5e6-
96231b3b80d8
Alex Rosenberg [Thu, 29 Jan 2015 15:19:54 +0000 (15:19 +0000)]
Make the test actually test what it's supposed to test. Add a test for the from memory variant of vcvtph2ps for 256-bit.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227446
91177308-0d34-0410-b5e6-
96231b3b80d8
Aaron Ballman [Thu, 29 Jan 2015 15:19:13 +0000 (15:19 +0000)]
Adding missing #includes to try to get this to compile on Windows with Visual Studio.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227445
91177308-0d34-0410-b5e6-
96231b3b80d8
Sean Silva [Thu, 29 Jan 2015 14:45:09 +0000 (14:45 +0000)]
Remove unused tokens in the ll lexer.
Patch by Robin Eklind!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227442
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Thu, 29 Jan 2015 14:23:28 +0000 (14:23 +0000)]
Use isMergeableConst now that it is sane.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227441
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Thu, 29 Jan 2015 14:12:41 +0000 (14:12 +0000)]
Remove MergeableConst.
Only the specific ones (MergeableConst4, MergeableConst8, MergeableConst16) are
handled specially.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227440
91177308-0d34-0410-b5e6-
96231b3b80d8
James Molloy [Thu, 29 Jan 2015 13:48:05 +0000 (13:48 +0000)]
[LoopReroll] Refactor most of reroll() into a helper class
reroll() was slightly monolithic and a pain to modify. Refactor
a bunch of its state from local variables to member variables
of a helper class, and do some trivial simplification while we're
there.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227439
91177308-0d34-0410-b5e6-
96231b3b80d8
Alex Rosenberg [Thu, 29 Jan 2015 13:31:32 +0000 (13:31 +0000)]
Cleanup a few tests on sse4a machines and FileCheckize along the way.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227437
91177308-0d34-0410-b5e6-
96231b3b80d8
Benjamin Kramer [Thu, 29 Jan 2015 13:26:50 +0000 (13:26 +0000)]
EHPrepare: Remove leftover initialization code for DomTrees.
While there modernize some loops. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227436
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Thu, 29 Jan 2015 13:25:44 +0000 (13:25 +0000)]
Use enum values. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227435
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Thu, 29 Jan 2015 12:43:28 +0000 (12:43 +0000)]
Don't create multiple mergeable sections with -fdata-sections.
ELF has support for sections that can be split into fixed size or
null terminated entities.
Since these sections can be split by the linker, it is not necessary
to split them in codegen.
This reduces the combined .o size in a llvm+clang build from
202,394,570 to 173,819,098 bytes.
The time for linking clang with gold (on a VM, on a laptop) goes
from 2.
250089985 to 1.
383001792 seconds.
The flip side is the size of rodata in clang goes from 10,926,785
to 10,929,345 bytes.
The increase seems to be because of http://sourceware.org/bugzilla/show_bug.cgi?id=17902.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227431
91177308-0d34-0410-b5e6-
96231b3b80d8
Vladimir Medic [Thu, 29 Jan 2015 11:33:41 +0000 (11:33 +0000)]
[Mips][Disassembler] When disassembler meets cache/pref instructions for r6 it crashes as the access to operands array is out of range. This patch adds dedicated decoder method for R6 CACHE_HINT_DESC class that properly handles decoding of these instructions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227430
91177308-0d34-0410-b5e6-
96231b3b80d8
Charlie Turner [Thu, 29 Jan 2015 11:19:54 +0000 (11:19 +0000)]
Add a missing Tag_DIV_use test for Cortex-M7.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227429
91177308-0d34-0410-b5e6-
96231b3b80d8
NAKAMURA Takumi [Thu, 29 Jan 2015 11:06:59 +0000 (11:06 +0000)]
CommandLineParser: Avoid non-static member nitializer(s).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227428
91177308-0d34-0410-b5e6-
96231b3b80d8
Owen Anderson [Thu, 29 Jan 2015 07:53:13 +0000 (07:53 +0000)]
Fix the preprocessor checks used to determine if backtraces have been enabled.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227424
91177308-0d34-0410-b5e6-
96231b3b80d8
Owen Anderson [Thu, 29 Jan 2015 07:35:31 +0000 (07:35 +0000)]
Use the existing build configuration parameter ENABLE_BACKTRACE to compile out all pretty stack trace support when backtraces are disabled.
This has the nice secondary effect of allowing LLVM to continue to build
for targets without __thread or thread_local support to continue to work
so long as they build without support for backtraces.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227423
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Atanasyan [Thu, 29 Jan 2015 06:56:24 +0000 (06:56 +0000)]
[ELFYAML] Provide default value 0 for YAML relocation addendum field
Follow up to r227318.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227422
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Thu, 29 Jan 2015 02:44:53 +0000 (02:44 +0000)]
Remove an unused private field added r227405 to fix a Clang warning.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227415
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Thu, 29 Jan 2015 02:34:17 +0000 (02:34 +0000)]
[LPM] Try again to appease powerpc64 in its self host. I've been unable
to get a powerpc64 host so that I can reproduce and test this, but it
only impacts that platform so trying the only other realistic option.
According to Ulrich, who debugged this initially, initial-exec is likely
to be sufficient for our needs and not subject to this bug. Will watch
the build bots to see.
If this doesn't work, I'll be forced to cut a really ugly pthread-based
approach into the primary user (our stack trace printing) as that user
cannot use the ThreadLocal implementation due to lifetime issues.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227414
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Thu, 29 Jan 2015 01:29:22 +0000 (01:29 +0000)]
[LPM] Fix an "obvious" typo from r227411. Really sorry for the noise.
Too many cases to compile everything quickly.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227412
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Thu, 29 Jan 2015 01:23:04 +0000 (01:23 +0000)]
[LPM] Clean up the use of TLS in pretty stack trace and disable it
entirely when threads are not enabled. This should allow anyone who
needs to bootstrap or cope with a host loader without TLS support to
limp along without threading support.
There is still some bug in the PPC TLS stuff that is not worked around.
I'm getting access to a machine to reproduce and debug this further.
There is some chance that I'll have to add a terrible workaround for
PPC.
There is also some problem with iOS, but I have no ability to really
evaluate what the issue is there. I'm leaving it to folks maintaining
that platform to suggest a path forward -- personally I don't see any
useful path forward that supports threading in LLVM but does so without
support for *very basic* TLS. Note that we don't need more than some
pointers, and we don't need constructors, destructors, or any of the
other fanciness which remains widely unimplemented.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227411
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Kleckner [Thu, 29 Jan 2015 00:55:44 +0000 (00:55 +0000)]
Remove unused variable
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227408
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Kleckner [Thu, 29 Jan 2015 00:41:44 +0000 (00:41 +0000)]
Add a Windows EH preparation pass that zaps resumes
If the personality is not a recognized MSVC personality function, this
pass delegates to the dwarf EH preparation pass. This chaining supports
people on *-windows-itanium or *-windows-gnu targets.
Currently this recognizes some personalities used by MSVC and turns
resume instructions into traps to avoid link errors. Even if cleanups
are not used in the source program, LLVM requires the frontend to emit a
code path that resumes unwinding after an exception. Clang does this,
and we get unreachable resume instructions. PR20300 covers cleaning up
these unreachable calls to resume.
Reviewers: majnemer
Differential Revision: http://reviews.llvm.org/D7216
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227405
91177308-0d34-0410-b5e6-
96231b3b80d8
Eric Christopher [Thu, 29 Jan 2015 00:19:42 +0000 (00:19 +0000)]
Remove getSubtargetImpl from AArch64ISelLowering and cache the
correct subtarget by passing it in during the constructor as
TargetLowering is Subtarget specific.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227402
91177308-0d34-0410-b5e6-
96231b3b80d8
Eric Christopher [Thu, 29 Jan 2015 00:19:39 +0000 (00:19 +0000)]
Remove getSubtargetImpl from ARMISelLowering and cache the
correct subtarget by passing it in during the constructor as
TargetLowering is Subtarget specific.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227401
91177308-0d34-0410-b5e6-
96231b3b80d8
Eric Christopher [Thu, 29 Jan 2015 00:19:37 +0000 (00:19 +0000)]
Small cleanup in ARMFastISel initialization.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227400
91177308-0d34-0410-b5e6-
96231b3b80d8
Eric Christopher [Thu, 29 Jan 2015 00:19:33 +0000 (00:19 +0000)]
Migrate ARM except for TTI, AsmPrinter, and frame lowering
away from getSubtargetImpl.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227399
91177308-0d34-0410-b5e6-
96231b3b80d8
Manuel Jacob [Wed, 28 Jan 2015 23:50:40 +0000 (23:50 +0000)]
Add nullptr checks for TargetSelectionDAGInfo in SelectionDAG.
TSI is not guaranteed be non-null in SelectionDAG.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227397
91177308-0d34-0410-b5e6-
96231b3b80d8
Kostya Serebryany [Wed, 28 Jan 2015 23:48:39 +0000 (23:48 +0000)]
[fuzzer] add option -save_minimized_corpus
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227395
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Wed, 28 Jan 2015 23:10:57 +0000 (23:10 +0000)]
[LPM] Fix the PPC attribute to be spelled 'global-dynamic'. This should
let the build bot make finish compiling stage2.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227391
91177308-0d34-0410-b5e6-
96231b3b80d8
Philip Reames [Wed, 28 Jan 2015 23:06:47 +0000 (23:06 +0000)]
Teach SplitBlockPredecessors how to handle landingpad blocks.
Patch by: Igor Laevsky <igor@azulsystems.com>
"Currently SplitBlockPredecessors generates incorrect code in case if basic block we are going to split has a landingpad. Also seems like it is fairly common case among it's users to conditionally call either SplitBlockPredecessors or SplitLandingPadPredecessors. Because of this I think it is reasonable to add this condition directly into SplitBlockPredecessors."
Differential Revision: http://reviews.llvm.org/D7157
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227390
91177308-0d34-0410-b5e6-
96231b3b80d8
Kostya Serebryany [Wed, 28 Jan 2015 22:49:25 +0000 (22:49 +0000)]
Add lit-style tests for the Fuzzer library
Summary: Add test targets and the lit-style runner.
Test Plan: Run the tests on bot.
Reviewers: samsonov
Reviewed By: samsonov
Subscribers: llvm-commits
Differential Revision: http://reviews.llvm.org/D7217
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227389
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Wed, 28 Jan 2015 22:37:32 +0000 (22:37 +0000)]
fix typos; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227386
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Bieneman [Wed, 28 Jan 2015 22:25:00 +0000 (22:25 +0000)]
Build fix for Visual Studio. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227385
91177308-0d34-0410-b5e6-
96231b3b80d8
Frederic Riss [Wed, 28 Jan 2015 22:15:14 +0000 (22:15 +0000)]
[dsymutil] Gather the DIE tree child->parent relationships.
The libDebugInfo DIE parsing doesn't store these relationships, we have to
recompute them. This commit introduces the CompileUnit bookkeeping class to
store this data. It will be expanded with more fields in the future.
No tests as this produces no visible output.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227382
91177308-0d34-0410-b5e6-
96231b3b80d8
Frederic Riss [Wed, 28 Jan 2015 22:15:07 +0000 (22:15 +0000)]
Add DWARFUnit::getNumDIEs() and getDIEIndex()
Parsed DIEs are stored in a vector and that makes it easy to get their
indices. Having easy access to a DIE's index makes it possible to use
arrays or vectors to efficiently store/access DIE related information.
There's no test for that new functionality (I don't see how to test
it standalone), but it'll be used in a subsequent dsymutil commit.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227381
91177308-0d34-0410-b5e6-
96231b3b80d8
Colin LeMahieu [Wed, 28 Jan 2015 22:08:16 +0000 (22:08 +0000)]
[Hexagon] Updating several V5 intrinsics and adding FP tests.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227379
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Wed, 28 Jan 2015 22:03:52 +0000 (22:03 +0000)]
Spelling fixes. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227376
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Wed, 28 Jan 2015 21:56:52 +0000 (21:56 +0000)]
Line endings fix. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227374
91177308-0d34-0410-b5e6-
96231b3b80d8
Zoran Jovanovic [Wed, 28 Jan 2015 21:52:27 +0000 (21:52 +0000)]
[mips][microMIPS] Implement SWM and LWM aliases
Differential Revision: http://reviews.llvm.org/D5820
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227373
91177308-0d34-0410-b5e6-
96231b3b80d8
Kostya Serebryany [Wed, 28 Jan 2015 19:51:58 +0000 (19:51 +0000)]
[fuzzer] instructions for building/running clang-format-fuzzer
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227357
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Wed, 28 Jan 2015 19:44:21 +0000 (19:44 +0000)]
invert check for less indentation; use local vars to reduce duplication; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227355
91177308-0d34-0410-b5e6-
96231b3b80d8
Colin LeMahieu [Wed, 28 Jan 2015 19:39:09 +0000 (19:39 +0000)]
[Hexagon] Updating many V4 intrinsic patterns. Adding missing instruction and deleting unused classes.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227353
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Wed, 28 Jan 2015 19:29:22 +0000 (19:29 +0000)]
[LPM] Try to work around a bug with local-dynamic TLS on PowerPC 64.
Sadly, this precludes optimizing it down to initial-exec or local-exec
when statically linking, and in general makes the code slower on PPC 64,
but there's nothing else for it until we can arrange to produce the
correct bits for the linker.
Lots of thanks to Ulirch for tracking this down and Bill for working on
the long-term fix to LLVM so that we can relegate this to old host
clang versions.
I'll be watching the PPC build bots to make sure this effectively
revives them.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227352
91177308-0d34-0410-b5e6-
96231b3b80d8
Philip Reames [Wed, 28 Jan 2015 19:28:03 +0000 (19:28 +0000)]
Remove gc.root's performCustomLowering
This is a refactoring to restructure the single user of performCustomLowering as a specific lowering pass and remove the custom lowering hook entirely.
Before this change, the LowerIntrinsics pass (note to self: rename!) was essentially acting as a pass manager, but without being structured in terms of passes. Instead, it proxied calls to a set of GCStrategies internally. This adds a lot of conceptual complexity (i.e. GCStrategies are stateful!) for very little benefit. Since there's been interest in keeping the ShadowStackGC working, I extracting it's custom lowering pass into a dedicated pass and just added that to the pass order. It will only run for functions which opt-in to that gc.
I wasn't able to find an easy way to preserve the runtime registration of custom lowering functionality. Given that no user of this exists that I'm aware of, I made the choice to just remove that. If someone really cares, we can look at restoring it via dynamic pass registration in the future.
Note that despite the large diff, none of the lowering code actual changes. I added the framing needed to make it a pass and rename the class, but that's it.
Differential Revision: http://reviews.llvm.org/D7218
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227351
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Bieneman [Wed, 28 Jan 2015 19:17:09 +0000 (19:17 +0000)]
Moving AddLiteralOption's declaration higher up in the header to make gcc happy.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227348
91177308-0d34-0410-b5e6-
96231b3b80d8
Colin LeMahieu [Wed, 28 Jan 2015 19:16:17 +0000 (19:16 +0000)]
[Hexagon] Adding XTYPE/MPY intrinsic tests and some missing multiply instructions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227347
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Bieneman [Wed, 28 Jan 2015 19:00:25 +0000 (19:00 +0000)]
Refactoring llvm command line parsing and option registration.
Summary:
The primary goal of this patch is to remove the need for MarkOptionsChanged(). That goal is accomplished by having addOption and removeOption properly sort the options.
This patch puts the new add and remove functionality on a CommandLineParser class that is a placeholder. Some of the functionality in this class will need to be merged into the OptionRegistry, and other bits can hopefully be in a better abstraction.
This patch also removes the RegisteredOptionList global, and the need for cl::Option objects to be linked list nodes.
The changes in CommandLineTest.cpp are required because these changes shift when we validate that options are not duplicated. Before this change duplicate options were only found during certain cl API calls (like cl::ParseCommandLine). With this change duplicate options are found during option construction.
Reviewers: dexonsmith, chandlerc, pete
Reviewed By: pete
Subscribers: pete, majnemer, llvm-commits
Differential Revision: http://reviews.llvm.org/D7132
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227345
91177308-0d34-0410-b5e6-
96231b3b80d8
Alex Rosenberg [Wed, 28 Jan 2015 18:33:39 +0000 (18:33 +0000)]
Assume code ownership for the PS4 to ensure patches get reviewed, per the Developer Policy.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227340
91177308-0d34-0410-b5e6-
96231b3b80d8
Bjorn Steinbrink [Wed, 28 Jan 2015 18:32:31 +0000 (18:32 +0000)]
Fix build breakage caused by memory leaks in llvm-c-test
I accidently introduced those in r227319.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227339
91177308-0d34-0410-b5e6-
96231b3b80d8
Colin LeMahieu [Wed, 28 Jan 2015 18:29:11 +0000 (18:29 +0000)]
[Hexagon] Deleting a lot of old variants of intrinsics and updating references.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227338
91177308-0d34-0410-b5e6-
96231b3b80d8
Frederic Riss [Wed, 28 Jan 2015 18:27:01 +0000 (18:27 +0000)]
[dsymutil] Add DwarfLinker class.
It's an empty shell for now. It's main method just opens the debug
map objects and parses their Dwarf info. Test that we at least do
that correctly.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227337
91177308-0d34-0410-b5e6-
96231b3b80d8
Colin LeMahieu [Wed, 28 Jan 2015 18:06:23 +0000 (18:06 +0000)]
[Hexagon] Converting XTYPE/BIT intrinsic patterns and adding tests.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227335
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Wed, 28 Jan 2015 18:01:31 +0000 (18:01 +0000)]
use SDValue methods directly instead of getNode()->* ; NFCI
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227334
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Wed, 28 Jan 2015 17:54:19 +0000 (17:54 +0000)]
Simplify code. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227333
91177308-0d34-0410-b5e6-
96231b3b80d8
Colin LeMahieu [Wed, 28 Jan 2015 17:37:59 +0000 (17:37 +0000)]
[Hexagon] Replacing XTYPE/SHIFT intrinsic patternss. Adding tests and missing instructions with tests.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227330
91177308-0d34-0410-b5e6-
96231b3b80d8
Jozef Kolek [Wed, 28 Jan 2015 17:27:26 +0000 (17:27 +0000)]
[mips][microMIPS] Implement LWGP instruction
Differential Revision: http://reviews.llvm.org/D6650
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227325
91177308-0d34-0410-b5e6-
96231b3b80d8
Colin LeMahieu [Wed, 28 Jan 2015 17:06:40 +0000 (17:06 +0000)]
[Hexagon] Replacing intrinsics for halfword adds and max/min word/dword.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227322
91177308-0d34-0410-b5e6-
96231b3b80d8
Colin LeMahieu [Wed, 28 Jan 2015 16:58:05 +0000 (16:58 +0000)]
[Hexagon] Replacing old intrinsic tests with organized versions that match the reference manual.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227321
91177308-0d34-0410-b5e6-
96231b3b80d8
Bjorn Steinbrink [Wed, 28 Jan 2015 16:35:59 +0000 (16:35 +0000)]
Fix LLVMSetMetadata and LLVMAddNamedMetadataOperand for single value MDNodes
Summary:
MetadataAsValue uses a canonical format that strips the MDNode if it
contains only a single constant value. This triggers an assertion when
trying to cast the value to a MDNode.
Subscribers: llvm-commits
Differential Revision: http://reviews.llvm.org/D7165
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227319
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Atanasyan [Wed, 28 Jan 2015 16:22:50 +0000 (16:22 +0000)]
[ELFYAML] Provide explicit value for relocation addendums in the test
The `Addend` is an optional field of the `Relocation` YAML record. But
we do not provide its default value while reading it from a YAML file
and so it might keep uninitialized.
I am going to fix the code by a separate commit. We might either make
this field mandatory (at least for .rela sections) or specify 0 as
a default value explicitly.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227318
91177308-0d34-0410-b5e6-
96231b3b80d8
Michael Kuperstein [Wed, 28 Jan 2015 16:11:35 +0000 (16:11 +0000)]
[x32] Change the condition from bitness to LP64 for TCRETURNdi64.
TCRETURNmi64, which was mistakenly changed in r227307 will wait for another day.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227317
91177308-0d34-0410-b5e6-
96231b3b80d8
Tom Stellard [Wed, 28 Jan 2015 16:04:26 +0000 (16:04 +0000)]
R600: Move DataLayout to AMDGPUTargetMachine
This is a follow up to r227113.
It is now required to use the amdgcn target for SI and newer GPUs.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227316
91177308-0d34-0410-b5e6-
96231b3b80d8
Tom Stellard [Wed, 28 Jan 2015 15:38:42 +0000 (15:38 +0000)]
R600: Use a Southern Islands GPU as the default for the amdgcn target
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227314
91177308-0d34-0410-b5e6-
96231b3b80d8
Hal Finkel [Wed, 28 Jan 2015 14:44:14 +0000 (14:44 +0000)]
Correct the AggressiveAntiDepBreaker's handling of subregisters defining super registers
As the AggressiveAntiDepBreaker iterated backward through a scheduling region,
we must leave super registers live through subregister definitions so that all
relevant subregister definitions are renamed together. The problem was that we
were also discarding sub-register use locations as the sub-registers are
redefined. The result is that we'd rename the super register along with some,
but not all, subregister definitions.
R0_D = {R0_L, R1_L}
R0_L = {R0_S, R1_S}
%R0_L<def> = TRLi9 16, pred:8, pred:%noreg
%R1_L<def> = LSRLrr %R1_L<kill>, %R0_S, pred:8, pred:%noreg
%R0_L<def> = LSRLrr %R2_L, %R0_S, pred:8, pred:%noreg, %R0_L<imp-use,kill>
%R1_L<def> = ANDLri %R1_L<kill>, 2047, pred:8, pred:%noreg
%R0_L<def> = ANDLri %R0_L<kill>, 2047, pred:8, pred:%noreg
%R4_D<def> = ASRDrr %R0_D<kill>, %R6_S
Anti: %R4_D<def> = ASRDrr %R0_D<kill>, %R6_S
Def Groups: R4_D=g213->g215(via R4_S)->g214(via R4_L)->g216(via R5_S)->g216(via R4_L)->g217(via R5_L)
Use Groups: R0_D=g0->g218(last-use) R1_L->g219(last-use) R6_S=g204->g220(last-use)
Anti: %R0_L<def> = ANDLri %R0_L<kill>, 2047, pred:8, pred:%noreg
Def Groups: R0_L=g208->g209(via R0_S)->g218(via R0_D)->g210(via R1_S)->g210(via R0_D)
Antidep reg: R0_L (real dependency)
Use Groups: R0_L=g210->g224(last-use) R0_S->g225(last-use) R1_S->g226(last-use)
Anti: %R1_L<def> = ANDLri %R1_L<kill>, 2047, pred:8, pred:%noreg
Def Groups: R1_L=g219->g210(via R0_D)
Antidep reg: R1_L (real dependency)
Use Groups: R1_L=g210->g229(last-use)
Anti: %R0_L<def> = LSRLrr %R2_L, %R0_S, pred:8, pred:%noreg, %R0_L<imp-use,kill>
Def Groups: R0_L=g224->g225(via R0_S)->g210(via R0_D)->g226(via R1_S)->g226(via R0_D)
Antidep reg: R0_L Use Groups: R2_L=g192 R0_S=g226->g230(last-use) R0_L=g226->g231(last-use) R1_S->g232(last-use)
Anti: %R1_L<def> = LSRLrr %R1_L<kill>, %R0_S, pred:8, pred:%noreg
Def Groups: R1_L=g229->g226(via R0_D)
Antidep reg: R1_L Use Groups: R1_L=g226->g233(last-use) R0_S=g230
Anti: %R0_L<def> = TRLi9 16, pred:8, pred:%noreg
Def Groups: R0_L=g231->g230(via R0_S)->g226(via R0_D)->g232(via R1_S)->g232(via R0_D)
Antidep reg: R0_L
Rename Candidates for Group g232:
R0_D: elcInt64Regs :: R0_D R1_D R2_D R3_D R4_D R5_D R8_D R9_D R10_D R11_D R12_D R13_D R14_D R15_D R16_D R17_D R18_D R19_D R20_D R21_D R22_D R23_D R24_D R25_D
R0_L: elcIntRegs :: R0_L R1_L R2_L R3_L R4_L R5_L R8_L R9_L R10_L R11_L R12_L R13_L R14_L R15_L R16_L R17_L R18_L R19_L R20_L R21_L R22_L R23_L R24_L R25_L
R0_S: elcShrtRegs elcShrtRegs :: R0_S R1_S R2_S R3_S R4_S R5_S R8_S R9_S R10_S R11_S R12_S R13_S R14_S R15_S R16_S R17_S R18_S R19_S R20_S R21_S R22_S R23_S R24_S R25_S
Find Registers: [R12_D: R12_D R12_L R12_S]
Breaking anti-dependence edge on R0_L: R0_D->R12_D(1 refs) R0_L->R12_L(2 refs) R0_S->R12_S(2 refs)
Use Groups:
...
%R12_L<def> = TRLi9 16, pred:8, pred:%noreg
%R1_L<def> = LSRLrr %R1_L<kill>, %R12_S, pred:8, pred:%noreg
%R0_L<def> = LSRLrr %R2_L<kill>, %R12_S, pred:8, pred:%noreg, %R12_L<imp-use>
%R1_L<def> = ANDLri %R1_L<kill>, 2047, pred:8, pred:%noreg
%R0_L<def> = ANDLri %R0_L<kill>, 2047, pred:8, pred:%noreg
%R4_D<def> = ASRDrr %R12_D<kill>, %R6_S
With this change, we now produce:
Anti: %R4_D<def> = ASRDrr %R0_D<kill>, %R6_S
Def Groups: R4_D=g213->g215(via R4_S)->g214(via R4_L)->g216(via R5_S)->g216(via R4_L)->g217(via R5_L)
Use Groups: R0_D=g0->g218(last-use) R1_L->g219(last-use) R6_S=g204->g220(last-use)
Anti: %R0_L<def> = ANDLri %R0_L<kill>, 2047, pred:8, pred:%noreg
Def Groups: R0_L=g208->g209(via R0_S)->g218(via R0_D)->g210(via R1_S)->g210(via R0_D)
Antidep reg: R0_L (real dependency)
Use Groups: R0_L=g210
Anti: %R1_L<def> = ANDLri %R1_L<kill>, 2047, pred:8, pred:%noreg
Def Groups: R1_L=g219->g210(via R0_D)
Antidep reg: R1_L (real dependency)
Use Groups: R1_L=g210
Anti: %R0_L<def> = LSRLrr %R2_L, %R0_S, pred:8, pred:%noreg, %R0_L<imp-use,kill>
Def Groups: R0_L=g210->g210(via R0_D)->g210(via R0_D)
Antidep reg: R0_L Use Groups: R2_L=g192 R0_S=g210 R0_L=g210
Anti: %R1_L<def> = LSRLrr %R1_L<kill>, %R0_S, pred:8, pred:%noreg
Def Groups: R1_L=g210->g210(via R0_D)
Antidep reg: R1_L Use Groups: R1_L=g210 R0_S=g210
Anti: %R0_L<def> = TRLi9 16, pred:8, pred:%noreg
Def Groups: R0_L=g210->g210(via R0_D)->g210(via R0_D)
Antidep reg: R0_L
Rename Candidates for Group g210:
R0_D: elcInt64Regs :: R0_D R1_D R2_D R3_D R4_D R5_D R8_D R9_D R10_D R11_D R12_D R13_D R14_D R15_D R16_D R17_D R18_D R19_D R20_D R21_D R22_D R23_D R24_D R25_D
R0_L: elcIntRegs elcIntAIRegs elcIntRegs elcIntRegs elcIntRegs elcIntRegs :: R0_L R1_L R2_L R3_L R4_L R5_L R8_L R9_L R10_L R11_L R12_L R13_L R14_L R15_L R16_L R17_L R18_L R19_L R20_L R21_L R22_L R23_L R24_L R25_L
R1_L: elcIntRegs elcIntRegs elcIntRegs elcIntRegs elcIntRegs :: R0_L R1_L R2_L R3_L R4_L R5_L R8_L R9_L R10_L R11_L R12_L R13_L R14_L R15_L R16_L R17_L R18_L R19_L R20_L R21_L R22_L R23_L R24_L R25_L
R0_S: elcShrtRegs elcShrtRegs :: R0_S R1_S R2_S R3_S R4_S R5_S R8_S R9_S R10_S R11_S R12_S R13_S R14_S R15_S R16_S R17_S R18_S R19_S R20_S R21_S R22_S R23_S R24_S R25_S
Find Registers: [R12_D: R12_D R12_L R13_L R12_S]
Breaking anti-dependence edge on R0_L: R0_D->R12_D(1 refs) R0_L->R12_L(7 refs) R1_L->R13_L(5 refs) R0_S->R12_S(2 refs)
Use Groups:
...
%R12_L<def> = TRLi9 16, pred:8, pred:%noreg
%R13_L<def> = LSRLrr %R13_L<kill>, %R12_S, pred:8, pred:%noreg
%R12_L<def> = LSRLrr %R2_L<kill>, %R12_S<kill>, pred:8, pred:%noreg, %R12_L<imp-use,kill>
%R13_L<def> = ANDLri %R13_L<kill>, 2047, pred:8, pred:%noreg
%R12_L<def> = ANDLri %R12_L<kill>, 2047, pred:8, pred:%noreg
%R4_D<def> = ASRDrr %R12_D, %R6_S, %R12_L<imp-def>, %R12_S<imp-def>, %R13_S<imp-def>
As demonstrated by this example, this is also somewhat unfortunate, because
there is actually no need to rename the super register in this case (it is
fully covered by later subregister definitions), but we don't seem to track
enough information here to exploit that either.
Thanks to Daniil Troshkov for reporting the issue. The debug outputs in this
commit message are from Daniil.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227311
91177308-0d34-0410-b5e6-
96231b3b80d8
Michael Kuperstein [Wed, 28 Jan 2015 14:08:22 +0000 (14:08 +0000)]
[X86] Reduce some 32-bit imuls into lea + shl
Reduce integer multiplication by a constant of the form k*2^c, where k is in {3,5,9} into a lea + shl. Previously it was only done for imulq on 64-bit platforms, but it makes sense for imull and 32-bit as well.
Differential Revision: http://reviews.llvm.org/D7196
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227308
91177308-0d34-0410-b5e6-
96231b3b80d8
Michael Kuperstein [Wed, 28 Jan 2015 13:38:48 +0000 (13:38 +0000)]
[x32] Enable sibcall optimization on x32.
This includes two things:
1) Fix TCRETURNdi and TCRETURN64di patterns to check the right thing (LP64 as opposed to target bitness).
2) Allow LEA64_32 in MatchingStackOffset.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227307
91177308-0d34-0410-b5e6-
96231b3b80d8
Sean Silva [Wed, 28 Jan 2015 10:36:41 +0000 (10:36 +0000)]
[docs] Use slightly more proper .rst markup
Again, I'd like to emphasize to everyone that this sort of markup change
is *not* what you should be concerned about when writing docs. Focus on
*content*.
I applaud Chandler for focusing on the fantastic content of this new
section!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227305
91177308-0d34-0410-b5e6-
96231b3b80d8
Sean Silva [Wed, 28 Jan 2015 10:26:29 +0000 (10:26 +0000)]
[docs] [cleanup] No need for a comment around C++11 override
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227304
91177308-0d34-0410-b5e6-
96231b3b80d8
Elena Demikhovsky [Wed, 28 Jan 2015 10:21:27 +0000 (10:21 +0000)]
AVX-512: Added FMA intrinsics with rounding mode
By Asaf Badouh and Elena Demikhovsky
Added special nodes for rounding: FMADD_RND, FMSUB_RND..
It will prevent merge between nodes with rounding and other standard nodes.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227303
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Wed, 28 Jan 2015 10:09:56 +0000 (10:09 +0000)]
[X86] Teach disassembler to handle illegal immediates on AVX512 integer compare instructions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227302
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Wed, 28 Jan 2015 10:09:52 +0000 (10:09 +0000)]
[X86] Merge printSSECC and printAVXCC. They only differed by an assertion.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227301
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Wed, 28 Jan 2015 09:52:14 +0000 (09:52 +0000)]
[LPM] Rip all of ManagedStatic and ThreadLocal out of the pretty stack
tracing code.
Managed static was just insane overhead for this. We took memory fences
and external function calls in every path that pushed a pretty stack
frame. This includes a multitude of layers setting up and tearing down
passes, the parser in Clang, everywhere. For the regression test suite
or low-overhead JITs, this was contributing to really significant
overhead.
Even the LLVM ThreadLocal is really overkill here because it uses
pthread_{set,get}_specific logic, and has careful code to both allocate
and delete the thread local data. We don't actually want any of that,
and this code in particular has problems coping with deallocation. What
we want is a single TLS pointer that is valid to use during global
construction and during global destruction, any time we want. That is
exactly what every host compiler and OS we use has implemented for
a long time, and what was standardized in C++11. Even though not all of
our host compilers support the thread_local keyword, we can directly use
the platform-specific keywords to get the minimal functionality needed.
Provided this limited trial survives the build bots, I will move this to
Compiler.h so it is more widely available as a light weight if limited
alternative to the ThreadLocal class. Many thanks to David Majnemer for
helping me think through the implications across platforms and craft the
MSVC-compatible syntax.
The end result is *substantially* faster. When running llc in a tight
loop over a small IR file targeting the aarch64 backend, this improves
its performance by over 10% for me. It also seems likely to fix the
remaining regressions seen by JIT users with threading enabled.
This may actually have more impact on real-world compile times due to
the use of the pretty stack tracing utility throughout the rest of Clang
or LLVM, but I've not collected any detailed measurements.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227300
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Wed, 28 Jan 2015 09:47:21 +0000 (09:47 +0000)]
[LPM] A targeted but somewhat horrible fix to the legacy pass manager's
querying of the pass registry.
The pass manager relies on the static registry of PassInfo objects to
perform all manner of its functionality. I don't understand why it does
much of this. My very vague understanding is that this registry is
touched both during static initialization *and* while each pass is being
constructed. As a consequence it is hard to make accessing it not
require a acquiring some lock. This lock ends up in the hot path of
setting up, tearing down, and invaliditing analyses in the legacy pass
manager.
On most systems you can observe this as a non-trivial % of the time
spent in 'ninja check-llvm'. However, I haven't really seen it be more
than 1% in extreme cases of compiling more real-world software,
including LTO.
Unfortunately, some of the GPU JITs are seeing this taking essentially
all of their time because they have very small IR running through
a small pass pipeline very many times (at least, this is the vague
understanding I have of it).
This patch tries to minimize the cost of looking up PassInfo objects by
leveraging the fact that the objects themselves are immutable and they
are allocated separately on the heap and so don't have their address
change. It also requires a change I made the last time I tried to debug
this problem which removed the ability to de-register a pass from the
registry. This patch creates a single access path to these objects
inside the PMTopLevelManager which memoizes the result of querying the
registry. This is somewhat gross as I don't really know if
PMTopLevelManager is the *right* place to put it, and I dislike using
a mutable member to memoize things, but it seems to work.
For long-lived pass managers this should completely eliminate
the cost of acquiring locks to look into the pass registry once the
memoized cache is warm. For 'ninja check' I measured about 1.5%
reduction in CPU time and in total time on a machine with 32 hardware
threads. For normal compilation, I don't know how much this will help,
sadly. We will still pay the cost while we populate the memoized cache.
I don't think it will hurt though, and for LTO or compiles with many
small functions it should still be a win. However, for tight loops
around a pass manager with many passes and small modules, this will help
tremendously. On the AArch64 backend I saw nearly 50% reductions in time
to complete 2000 cycles of spinning up and tearing down the pipeline.
Measurements from Owen of an actual long-lived pass manager show more
along the lines of 10% improvements.
Differential Revision: http://reviews.llvm.org/D7213
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227299
91177308-0d34-0410-b5e6-
96231b3b80d8
Elena Demikhovsky [Wed, 28 Jan 2015 08:03:58 +0000 (08:03 +0000)]
Fold fcmp in cases where value is provably non-negative. By Arch Robison.
This patch folds fcmp in some cases of interest in Julia. The patch adds a function CannotBeOrderedLessThanZero that returns true if a value is provably not less than zero. I.e. the function returns true if the value is provably -0, +0, positive, or a NaN. The patch extends InstructionSimplify.cpp to fold instances of fcmp where:
- the predicate is olt or uge
- the first operand is provably not less than zero
- the second operand is zero
The motivation for handling these cases optimizing away domain checks for sqrt in Julia for common idioms such as sqrt(x*x+y*y)..
http://reviews.llvm.org/D6972
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227298
91177308-0d34-0410-b5e6-
96231b3b80d8
David Majnemer [Wed, 28 Jan 2015 06:00:01 +0000 (06:00 +0000)]
llvm-ar: Remove unimplemented -N option from -help
This fixes PR22358.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227296
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Wed, 28 Jan 2015 04:57:56 +0000 (04:57 +0000)]
[LPM] Stop using the string based preservation API. It is an
abomination.
For starters, this API is incredibly slow. In order to lookup the name
of a pass it must take a memory fence to acquire a pointer to the
managed static pass registry, and then potentially acquire locks while
it consults this registry for information about what passes exist by
that name. This stops the world of LLVMs in your process no matter
how little they cared about the result.
To make this more joyful, you'll note that we are preserving many passes
which *do not exist* any more, or are not even analyses which one might
wish to have be preserved. This means we do all the work only to say
"nope" with no error to the user.
String-based APIs are a *bad idea*. String-based APIs that cannot
produce any meaningful error are an even worse idea. =/
I have a patch that simply removes this API completely, but I'm hesitant
to commit it as I don't really want to perniciously break out-of-tree
users of the old pass manager. I'd rather they just have to migrate to
the new one at some point. If others disagree and would like me to kill
it with fire, just say the word. =]
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227294
91177308-0d34-0410-b5e6-
96231b3b80d8
Eric Christopher [Wed, 28 Jan 2015 03:51:33 +0000 (03:51 +0000)]
Migrate AArch64 except for TTI and AsmPrinter away from getSubtargetImpl.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227293
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Wed, 28 Jan 2015 03:04:54 +0000 (03:04 +0000)]
Introduce a section to the programmers manual about type hierarchies,
polymorphism, and virtual dispatch.
This is essentially trying to explain the emerging design techniques
being used in LLVM these days somewhere more accessible than the
comments on a particular piece of infrastructure. It covers the
"concepts-based polymorphism" that caused some confusion during initial
reviews of the new pass manager as well as the tagged-dispatch mechanism
used pervasively in LLVM and Clang.
Perhaps most notably, I've tried to provide some criteria to help
developers choose between these options when designing new pieces of
infrastructure.
Differential Revision: http://reviews.llvm.org/D7191
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227292
91177308-0d34-0410-b5e6-
96231b3b80d8
David Blaikie [Wed, 28 Jan 2015 02:43:15 +0000 (02:43 +0000)]
Add description to assert
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227291
91177308-0d34-0410-b5e6-
96231b3b80d8
David Blaikie [Wed, 28 Jan 2015 02:34:53 +0000 (02:34 +0000)]
PR22356: DebugInfo: Handle the size of a member where the type of that member is a typedef (or other sugar) of a declaration.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227290
91177308-0d34-0410-b5e6-
96231b3b80d8
Lang Hames [Wed, 28 Jan 2015 01:30:37 +0000 (01:30 +0000)]
Revert r227247 and r227228: "Add weak symbol support to RuntimeDyld".
This has wider implications than I expected when I reviewed the patch: It can
cause JIT crashes where clients have used the default value for AbortOnFailure
during symbol lookup. I'm currently investigating alternative approaches and I
hope to have this back in tree soon.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227287
91177308-0d34-0410-b5e6-
96231b3b80d8
Zachary Turner [Wed, 28 Jan 2015 01:22:33 +0000 (01:22 +0000)]
[llvm-pdbdump] Add basic symbol dumping.
This adds two command line options:
--symbols dumps a list of all symbols found in the PDB.
--symbol-details dumps the same list, but with detailed information
for every symbol such as type, attributes, etc.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227286
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Kleckner [Wed, 28 Jan 2015 01:17:38 +0000 (01:17 +0000)]
Move EH personality type classification to Analysis/LibCallSemantics.h
Summary:
Also add enum types for __C_specific_handler and _CxxFrameHandler3 for
which we know a few things.
Reviewers: majnemer
Subscribers: llvm-commits
Differential Revision: http://reviews.llvm.org/D7214
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227284
91177308-0d34-0410-b5e6-
96231b3b80d8