OSDN Git Service
Davide Italiano [Mon, 29 May 2017 20:13:22 +0000 (20:13 +0000)]
[GlobalIsel] Fix a warning with GCC 7 -Wpedantic. NFCI.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304174
91177308-0d34-0410-b5e6-
96231b3b80d8
Zvi Rackover [Mon, 29 May 2017 19:00:57 +0000 (19:00 +0000)]
[X86] Add tests for (ix bitcast (vxi1 and ...)). NFC.
To be improved by D33311.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304171
91177308-0d34-0410-b5e6-
96231b3b80d8
Zvi Rackover [Mon, 29 May 2017 18:27:00 +0000 (18:27 +0000)]
[X86] Replace undef value in flaky test
D33311 exposes the flakiness in this test. Replacing the undef placed by
bugpoint, makes it more interesting and robust.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304168
91177308-0d34-0410-b5e6-
96231b3b80d8
Benjamin Kramer [Mon, 29 May 2017 18:00:33 +0000 (18:00 +0000)]
[ManagedStatic] Make object_creator/object_deleter visible again.
They're now exposed as template args, which creates complications when
ManagedStatics are used across .so boundaries.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304166
91177308-0d34-0410-b5e6-
96231b3b80d8
Benjamin Kramer [Mon, 29 May 2017 17:25:37 +0000 (17:25 +0000)]
Don't destroy ManagedStatics in a unit test.
Turns out this is very hostile towards other unit tests running in the
same process, it unregisters all flags.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304165
91177308-0d34-0410-b5e6-
96231b3b80d8
Benjamin Kramer [Mon, 29 May 2017 16:32:52 +0000 (16:32 +0000)]
[wasm] Fix test after r304117.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304164
91177308-0d34-0410-b5e6-
96231b3b80d8
Benjamin Kramer [Mon, 29 May 2017 16:25:20 +0000 (16:25 +0000)]
[X86] Don't fold away the memory operand of an xchg.
xchg with a mem operand has different locking semantics. If we unfold it
into a xchg r,r we will loose the implicit lock. Likewise we never want
to fold a register xchg into a memory one as it would be a lot slower.
This triggers during LLVM selfhost.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304163
91177308-0d34-0410-b5e6-
96231b3b80d8
Ayal Zaks [Mon, 29 May 2017 15:36:23 +0000 (15:36 +0000)]
[Docs] Add VectorizationPlan to docs/Proposals.
Following the request made in https://reviews.llvm.org/D32871, the
general documentation of the Vectorization Plan is hereby placed
under docs/Proposals.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304161
91177308-0d34-0410-b5e6-
96231b3b80d8
Benjamin Kramer [Mon, 29 May 2017 14:28:04 +0000 (14:28 +0000)]
Try to work around MSVC being buggy. Attempt #1.
error C2971: 'llvm::ManagedStatic': template parameter 'Creator': 'CreateDefaultTimerGroup': a variable with non-static storage duration cannot be used as a non-type argument
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304157
91177308-0d34-0410-b5e6-
96231b3b80d8
Benjamin Kramer [Mon, 29 May 2017 14:05:29 +0000 (14:05 +0000)]
[Timer] Move DefaultTimerGroup into a ManagedStatic.
This used to be just leaked. r295370 made it use magic statics. This adds
a global destructor, which is something we'd like to avoid. It also creates
a weird situation where the mutex used by TimerGroup is re-created during
global shutdown and leaked.
Using a ManagedStatic here is also subtle as it relies on the mutex
inside of ManagedStatic to be recursive. I've added a test for that
in a previous change.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304156
91177308-0d34-0410-b5e6-
96231b3b80d8
Benjamin Kramer [Mon, 29 May 2017 14:05:26 +0000 (14:05 +0000)]
[ManagedStatic] Add a way to pass custom creators/deleters.
Also add a test case verifying that nested ManagedStatics work correctly.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304155
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Mon, 29 May 2017 13:24:58 +0000 (13:24 +0000)]
[DAGCombiner] fix load narrowing transform to exclude loads with extension
The extending load possibility was missed in:
https://reviews.llvm.org/rL304072
We might want to handle this cases as a follow-up, but bailing out for now
to avoid miscompiling.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304153
91177308-0d34-0410-b5e6-
96231b3b80d8
Jonas Paulsson [Mon, 29 May 2017 13:22:23 +0000 (13:22 +0000)]
[SystemZ] Improve buildVector() in SystemZISelLowering.cpp.
Use VLREP when inserting one or more loads into a vector. This is more
efficient than to first load and then use a VLVGP.
Review: Ulrich Weigand
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304152
91177308-0d34-0410-b5e6-
96231b3b80d8
Mattias Eriksson [Mon, 29 May 2017 11:46:44 +0000 (11:46 +0000)]
Test commit: fix typos
Just fixing a few typos in comments to test commit access.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304149
91177308-0d34-0410-b5e6-
96231b3b80d8
Nikolai Bozhenov [Mon, 29 May 2017 09:48:30 +0000 (09:48 +0000)]
[Nios2] Target registration
Reviewers: craig.topper, hfinkel, joerg, lattner, zvi
Reviewed By: craig.topper
Subscribers: oren_ben_simhon, igorb, belickim, tvvikram, mgorny, llvm-commits, pavel.v.chupin, DavidKreitzer
Differential Revision: https://reviews.llvm.org/D32669
Patch by AndreiGrischenko <andrei.l.grischenko@intel.com>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304144
91177308-0d34-0410-b5e6-
96231b3b80d8
Diana Picus [Mon, 29 May 2017 09:09:54 +0000 (09:09 +0000)]
[ARM] GlobalISel: Extract helper. NFCI.
Create a helper to deal with the common code for merging incoming values
together after they've been split during call lowering. There's likely
more stuff that can be commoned up here, but we'll leave that for later.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304143
91177308-0d34-0410-b5e6-
96231b3b80d8
Hiroshi Inoue [Mon, 29 May 2017 08:37:42 +0000 (08:37 +0000)]
[trivial] fix a typo in comment, NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304139
91177308-0d34-0410-b5e6-
96231b3b80d8
Diana Picus [Mon, 29 May 2017 08:19:19 +0000 (08:19 +0000)]
[ARM] GlobalISel: Support array returns
These are a bit rare in practice, but they don't require anything
special compared to array parameters, so support them as well.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304137
91177308-0d34-0410-b5e6-
96231b3b80d8
Hiroshi Inoue [Mon, 29 May 2017 07:12:39 +0000 (07:12 +0000)]
[PPC] Fix assertion failure during binary encoding with -mcpu=pwr9
Summary
clang -c -mcpu=pwr9 test/CodeGen/PowerPC/build-vector-tests.ll causes an assertion failure during the binary encoding.
The failure occurs when a D-form load instruction takes two register operands instead of a register + an immediate.
This patch fixes the problem and also adds an assertion to catch this failure earlier before the binary encoding (i.e. during lit test).
The fix is from Nemanja Ivanovic @nemanjai.
Differential Revision: https://reviews.llvm.org/D33482
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304133
91177308-0d34-0410-b5e6-
96231b3b80d8
Diana Picus [Mon, 29 May 2017 07:01:52 +0000 (07:01 +0000)]
[ARM] GlobalISel: Support array parameters/arguments
Clang coerces structs into arrays, so it's a good idea to support them.
Most of the support boils down to getting the splitToValueTypes helper
to actually split types. We then use G_INSERT/G_EXTRACT to deal with the
parts.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304132
91177308-0d34-0410-b5e6-
96231b3b80d8
Mehdi Amini [Mon, 29 May 2017 06:32:34 +0000 (06:32 +0000)]
DebugInfo: Include .dwo file name when hashing multiple CUs in a single file
This is really a workaround for ThinLTO in particular - since it can
import partial CUs that may end up looking very similar/the same as
the same partial import in another ThinLTO compile.
An alternative fix would be to change the DICompileUnit metadata to
include a "primary file" or the like - and when importing for ThinLTO
set the primary file to the name of the DICompileUnit that is being
imported into. This involves changing the schema and would reduce the
excessive uniqueness in the hash that this change creates - allowing
diagnosing of more duplicate CUs than will be caught with this change.
But duplicate CUs can still be caught in non-ThinLTO builds & are mostly
a nuisance rather than a particularly deliberate/effective tool for
finding broken code. (arguably the hash could always include the dwo
file and nothing in fission would break, I think..)
Reapply of r304119 after adding a triple to the test and moving it
to the X86 directory.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304130
91177308-0d34-0410-b5e6-
96231b3b80d8
Mehdi Amini [Mon, 29 May 2017 06:25:30 +0000 (06:25 +0000)]
DebugInfo: Omit an empty CU when a subprogram was moved into its use
When the only use of a CU is for a subprogram that's only emitted into
the using CU (to avoid cross-CU references in DWO files), avoid creating
that CU at all.
Reapply of r304111 after adding a triple to the test and moving it
to the X86 directory.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304129
91177308-0d34-0410-b5e6-
96231b3b80d8
Tobias Grosser [Mon, 29 May 2017 06:12:18 +0000 (06:12 +0000)]
Revert "[IfConversion] Keep the CFG updated incrementally in IfConvertTriangle"
The reverted change introdued assertions ala:
"MachineBasicBlock::succ_iterator
llvm::MachineBasicBlock::removeSuccessor(succ_iterator, bool): Assertion
`I != Successors.end() && "Not a current successor!"'
Mikael, the original committer, wrote me that he is working on a fix, but that
it likely will take some time to get this resolved. As this bug is one of the
last two issues that keep the AOSP buildbot from turning green, I revert the
original commit r302876.
I am looking forward to see this recommitted after the assertion has been
resolved.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304128
91177308-0d34-0410-b5e6-
96231b3b80d8
Mehdi Amini [Mon, 29 May 2017 05:17:57 +0000 (05:17 +0000)]
Revert "DebugInfo: Omit an empty CU when a subprogram was moved into its use"
This reverts commit r304111.
GreenDragon is broken.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304126
91177308-0d34-0410-b5e6-
96231b3b80d8
Mehdi Amini [Mon, 29 May 2017 05:17:54 +0000 (05:17 +0000)]
Revert "DebugInfo: Include .dwo file name when hashing multiple CUs in a single file"
This reverts commit r304119 and r304118. GreenDragon is broken.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304125
91177308-0d34-0410-b5e6-
96231b3b80d8
Zachary Turner [Mon, 29 May 2017 02:20:12 +0000 (02:20 +0000)]
Don't capture a temporary std::string in a StringRef.
This fixes the breakages in llvm-tblgen.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304123
91177308-0d34-0410-b5e6-
96231b3b80d8
Zachary Turner [Mon, 29 May 2017 02:19:37 +0000 (02:19 +0000)]
Resubmit "[X86] Adding new LLVM TableGen backend that generates the X86 backend memory folding tables."
This was reverted due to buildbot breakages and I was not familiar
with this code to investigate it. But while trying to get a
useful backtrace for the author, it turns out the fix was very
obvious. Resubmitting this patch as is, and will submit the
fix in a followup so that the fix is not hidden in the larger
CL.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304122
91177308-0d34-0410-b5e6-
96231b3b80d8
Zachary Turner [Mon, 29 May 2017 01:48:53 +0000 (01:48 +0000)]
Revert "[X86] Adding new LLVM TableGen backend that generates the X86 backend memory folding tables."
This reverts commit
28cb1003507f287726f43c771024a1dc102c45fe as well
as all subsequent followups. llvm-tblgen currently segfaults with
this change, and it seems it has been broken on the bots all
day with no fixes in preparation. See, for example:
http://lab.llvm.org:8011/builders/clang-x86-windows-msvc2015/
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304121
91177308-0d34-0410-b5e6-
96231b3b80d8
Galina Kistanova [Mon, 29 May 2017 01:34:26 +0000 (01:34 +0000)]
Disabled implicit-fallthrough warnings for ConvertUTF.cpp.
ConvertUTF.cpp has a little dependency on LLVM, and since the code extensively uses fall-through switches,
I prefer disabling the warning for the whole file, rather than adding attributes for each case.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304120
91177308-0d34-0410-b5e6-
96231b3b80d8
David Blaikie [Mon, 29 May 2017 00:48:45 +0000 (00:48 +0000)]
DebugInfo: Include .dwo file name when hashing multiple CUs in a single file
This is really a workaround for ThinLTO in particular - since it can
import partial CUs that may end up looking very similar/the same as
the same partial import in another ThinLTO compile.
An alternative fix would be to change the DICompileUnit metadata to
include a "primary file" or the like - and when importing for ThinLTO
set the primary file to the name of the DICompileUnit that is being
imported into. This involves changing the schema and would reduce the
excessive uniqueness in the hash that this change creates - allowing
diagnosing of more duplicate CUs than will be caught with this change.
But duplicate CUs can still be caught in non-ThinLTO builds & are mostly
a nuisance rather than a particularly deliberate/effective tool for
finding broken code. (arguably the hash could always include the dwo
file and nothing in fission would break, I think..)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304119
91177308-0d34-0410-b5e6-
96231b3b80d8
David Blaikie [Mon, 29 May 2017 00:24:01 +0000 (00:24 +0000)]
Attempt to fix buildbots...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304118
91177308-0d34-0410-b5e6-
96231b3b80d8
Saleem Abdulrasool [Mon, 29 May 2017 00:14:57 +0000 (00:14 +0000)]
Support: adjust the default obj format for wasm
WebAssemly uses a custom object file format. For the wasm targets,
default to the `Wasm` object file format.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304117
91177308-0d34-0410-b5e6-
96231b3b80d8
Dylan McKay [Mon, 29 May 2017 00:10:14 +0000 (00:10 +0000)]
[AVR] Remove SREG from CPI's Uses; authored by Florian Zeitz
Summary: CPI does not read the status register, but only writes it.
Reviewers: dylanmckay
Reviewed By: dylanmckay
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D33223
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304116
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sun, 28 May 2017 23:47:17 +0000 (23:47 +0000)]
[TableGen][X86] Fix formatting I accidentally messed up in r304099. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304115
91177308-0d34-0410-b5e6-
96231b3b80d8
Erik Pilkington [Sun, 28 May 2017 23:24:52 +0000 (23:24 +0000)]
[ItaniumDemangle] Fix a exponential string copying bug
This is a port of libcxxabi's r304113.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304114
91177308-0d34-0410-b5e6-
96231b3b80d8
NAKAMURA Takumi [Sun, 28 May 2017 22:54:25 +0000 (22:54 +0000)]
Prune trailing whitespace. (To regenerate makefiles)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304112
91177308-0d34-0410-b5e6-
96231b3b80d8
David Blaikie [Sun, 28 May 2017 22:51:37 +0000 (22:51 +0000)]
DebugInfo: Omit an empty CU when a subprogram was moved into its use
When the only use of a CU is for a subprogram that's only emitted into
the using CU (to avoid cross-CU references in DWO files), avoid creating
that CU at all.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304111
91177308-0d34-0410-b5e6-
96231b3b80d8
Geoff Berry [Sun, 28 May 2017 22:20:44 +0000 (22:20 +0000)]
[AArch64][Falkor] Combine sched details files into one. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304109
91177308-0d34-0410-b5e6-
96231b3b80d8
Geoff Berry [Sun, 28 May 2017 21:48:31 +0000 (21:48 +0000)]
[AArch64][Falkor] Fix some sched details.
- Remove all uses of base sched model entries and set them all to
Unsupported so all the opcodes are described in
AArch64SchedFalkorDetails.td.
- Remove entries for unsupported half-float opcodes.
- Remove entries for unsupported LSE extension opcodes.
- Add entry for MOVbaseTLS (and set Sched in base td file entry to
WriteSys) and a few other pseudo ops.
- Fix a few FP load/store with reg offset entries to use the LSLfast
predicates.
- Add Q size BIF/BIT/BSL entries.
- Fix swapped Q/D sized CLS/CLZ/CNT/RBIT entires.
- Fix pre/post increment address register latency (this operand is
always dest 0).
- Fix swapped FCVTHD/FCVTHS/FCVTDH/FCVTDS entries.
- Fix XYZ resource over usage on LD[1-4] opcodes.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304108
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sun, 28 May 2017 18:24:43 +0000 (18:24 +0000)]
[TableGen][X86] Use CHAR_BIT with sizeof instead of hardcoded 8. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304100
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sun, 28 May 2017 18:24:41 +0000 (18:24 +0000)]
[TableGen][X86] Mark a couple global tables as const. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304099
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sun, 28 May 2017 18:24:39 +0000 (18:24 +0000)]
[TableGen][X86] Improve formatting of the fold table output by indenting the body of the table and adding blank lines between tables. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304098
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sun, 28 May 2017 18:24:37 +0000 (18:24 +0000)]
[TableGen][X86] Add an llvm_unreachable to a switch so we get an error if we need expansion in the future.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304097
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sun, 28 May 2017 18:24:35 +0000 (18:24 +0000)]
[TableGen][X86] Remove unnecessary std::string creations. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304096
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sun, 28 May 2017 18:24:32 +0000 (18:24 +0000)]
[TableGen][X86] Replace a global std::vector with a regular array. llvm::find works on arrays, just need to use std::end to check the result.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304095
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sun, 28 May 2017 17:48:41 +0000 (17:48 +0000)]
[TableGen][X86] getValueAsString returns a std::string not a StringRef. Capture it that way to avoid a StringRef to a temporary.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304093
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Sun, 28 May 2017 13:57:59 +0000 (13:57 +0000)]
[x86] auto-generate better checks; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304090
91177308-0d34-0410-b5e6-
96231b3b80d8
Benjamin Kramer [Sun, 28 May 2017 13:23:02 +0000 (13:23 +0000)]
[InstrProf] Use more ArrayRef/StringRef.
No functional change intended.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304089
91177308-0d34-0410-b5e6-
96231b3b80d8
Ayman Musa [Sun, 28 May 2017 12:55:36 +0000 (12:55 +0000)]
[X86] Adding new LLVM TableGen backend that generates the X86 backend memory folding tables.
X86 backend holds huge tables in order to map between the register and memory forms of each instruction.
This TableGen Backend automatically generated all these tables with the appropriate flags for each entry.
Differential Revision: https://reviews.llvm.org/D32684
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304088
91177308-0d34-0410-b5e6-
96231b3b80d8
Ayman Musa [Sun, 28 May 2017 12:39:37 +0000 (12:39 +0000)]
[X86] Adding FoldGenRegForm helper field (for memory folding tables tableGen backend) to X86Inst class and set its value for the relevant instructions.
Some register-register instructions can be encoded in 2 different ways, this happens when 2 register operands can be folded (separately).
For example if we look at the MOV8rr and MOV8rr_REV, both instructions perform exactly the same operation, but are encoded differently. Here is the relevant information about these instructions from Intel's 64-ia-32-architectures-software-developer-manual:
Opcode Instruction Op/En 64-Bit Mode Compat/Leg Mode Description
8A /r MOV r8,r/m8 RM Valid Valid Move r/m8 to r8.
88 /r MOV r/m8,r8 MR Valid Valid Move r8 to r/m8.
Here we can see that in order to enable the folding of the output and input registers, we had to define 2 "encodings", and as a result we got 2 move 8-bit register-register instructions.
In the X86 backend, we define both of these instructions, usually one has a regular name (MOV8rr) while the other has "_REV" suffix (MOV8rr_REV), must be marked with isCodeGenOnly flag and is not emitted from CodeGen.
Automatically generating the memory folding tables relies on matching encodings of instructions, but in these cases where we want to map both memory forms of the mov 8-bit (MOV8rm & MOV8mr) to MOV8rr (not to MOV8rr_REV) we have to somehow point from the MOV8rr_REV to the "regular" appropriate instruction which in this case is MOV8rr.
This field enable this "pointing" mechanism - which is used in the TableGen backend for generating memory folding tables.
Differential Revision: https://reviews.llvm.org/D32683
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304087
91177308-0d34-0410-b5e6-
96231b3b80d8
Oren Ben Simhon [Sun, 28 May 2017 11:26:11 +0000 (11:26 +0000)]
[X86] Fixing VPOPCNTDQ feature set lookup.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304086
91177308-0d34-0410-b5e6-
96231b3b80d8
Galina Kistanova [Sun, 28 May 2017 05:50:22 +0000 (05:50 +0000)]
Reverted r304083 as it seems there is a desire to address this in the googletest.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304084
91177308-0d34-0410-b5e6-
96231b3b80d8
Galina Kistanova [Sun, 28 May 2017 03:50:52 +0000 (03:50 +0000)]
Added braces to address gcc warning: suggest explicit braces to avoid ambiguous 'else' [-Wdangling-else]. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304083
91177308-0d34-0410-b5e6-
96231b3b80d8
David Blaikie [Sat, 27 May 2017 19:52:20 +0000 (19:52 +0000)]
DebugInfo: Add source code/build instructions for split-dwarf-dwp symbolizer test
Addressing post-commit code review feedback from Paul Robinson on
r303609.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304080
91177308-0d34-0410-b5e6-
96231b3b80d8
Gor Nishanov [Sat, 27 May 2017 19:41:09 +0000 (19:41 +0000)]
Cloning: Fix debug info cloning
Summary:
I believe https://reviews.llvm.org/rL302576 introduced two bugs:
1) it produces duplicate distinct variables for every: dbg.value describing the same variable.
To fix the problme I switched form getDistinct() to get() in DebugLoc.cpp: auto reparentVar = [&](DILocalVariable *Var) {
return DILocalVariable::getDistinct(
2) It passes NewFunction plain name as a linkagename parameter to Subprogram constructor. Breaks assert in:
|| DeclLinkageName.empty()) || LinkageName == DeclLinkageName) && "decl has a linkage name and it is different"' failed.
#9 0x00007f5010261b75 llvm::DwarfUnit::applySubprogramDefinitionAttributes(llvm::DISubprogram const*, llvm::DIE&) /home/gor/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp:1173:3
#
(Edit: reproducer added)
Here how https://reviews.llvm.org/rL302576 broke coroutine debug info.
Coroutine body of the original function is split into several parts by cloning and removing unneeded code.
All parts describe the original function and variables present in the original function.
For a simple case, prior to Split, original function has these two blocks:
```
PostSpill: ; preds = %AllocaSpillBB
call void @llvm.dbg.value(metadata i32 %x, i64 0, metadata !14, metadata !15), !dbg !13
store i32 %x, i32* %x.addr, align 4
...
and
sw.epilog: ; preds = %sw.bb
%x.addr.reload.addr = getelementptr inbounds %f.Frame, %f.Frame* %FramePtr, i32 0, i32 4, !dbg !20
%4 = load i32, i32* %x.addr.reload.addr, align 4, !dbg !20
call void @llvm.dbg.value(metadata i32 %4, i64 0, metadata !14, metadata !15), !dbg !13
!14 = !DILocalVariable(name: "x", arg: 1, scope: !6, file: !7, line: 55, type: !11)
```
Note that in two blocks different expression represent the same original user variable X.
Before rL302576, for every cloned function there was exactly one cloned DILocalVariable(name: "x" as in:
```
define i8* @f(i32 %x) #0 !dbg !6 {
...
!6 = distinct !DISubprogram(name: "f", scope: !7, file: !7, line: 55, type: !8, isLocal: false, isDefinition: true, scopeLine: 55, flags: DIFlagPrototyped,
...
!14 = !DILocalVariable(name: "x", arg: 1, scope: !6, file: !7, line: 55, type: !11)
define internal fastcc void @f.resume(%f.Frame* %FramePtr) #0 !dbg !25 {
...
!25 = distinct !DISubprogram(name: "f", scope: !7, file: !7, line: 55, type: !8, isLocal: false, isDefinition: true, scopeLine: 55, flags: DIFlagPrototyped, isOptimized: false, unit: !0, variables: !2)
!28 = !DILocalVariable(name: "x", arg: 1, scope: !25, file: !7, line: 55, type: !11)
```
After rL302576, for every cloned function there were as many DILocalVariable(name: "x" as there were "call void @llvm.dbg.value" for that variable.
This was causing asserts in VerifyDebugInfo and AssemblyPrinter.
Example:
```
!27 = distinct !DISubprogram(name: "f", linkageName: "f.resume", scope: !7, file: !7, line: 55, type: !8, isLocal: false, isDefinition: true, scopeLine: 55,
!29 = distinct !DILocalVariable(name: "x", arg: 1, scope: !27, file: !7, line: 55, type: !11)
!39 = distinct !DILocalVariable(name: "x", arg: 1, scope: !27, file: !7, line: 55, type: !11)
!41 = distinct !DILocalVariable(name: "x", arg: 1, scope: !27, file: !7, line: 55, type: !11)
```
Second problem:
Prior to rL302576, all clones were described by DISubprogram referring to original function.
```
define i8* @f(i32 %x) #0 !dbg !6 {
...
!6 = distinct !DISubprogram(name: "f", scope: !7, file: !7, line: 55, type: !8, isLocal: false, isDefinition: true, scopeLine: 55, flags: DIFlagPrototyped,
define internal fastcc void @f.resume(%f.Frame* %FramePtr) #0 !dbg !25 {
...
!25 = distinct !DISubprogram(name: "f", scope: !7, file: !7, line: 55, type: !8, isLocal: false, isDefinition: true, scopeLine: 55, flags: DIFlagPrototyped,
```
After rL302576, DISubprogram for clones is of two minds, plain name refers to the original name, linkageName refers to plain name of the clone.
```
!27 = distinct !DISubprogram(name: "f", linkageName: "f.resume", scope: !7, file: !7, line: 55, type: !8, isLocal: false, isDefinition: true, scopeLine: 55,
```
I think the assumption in AsmPrinter is that both name and linkageName should refer to the same entity. It asserts here when they are not:
```
|| DeclLinkageName.empty()) || LinkageName == DeclLinkageName) && "decl has a linkage name and it is different"' failed.
#9 0x00007f5010261b75 llvm::DwarfUnit::applySubprogramDefinitionAttributes(llvm::DISubprogram const*, llvm::DIE&) /home/gor/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp:1173:3
```
After this fix, behavior (with respect to coroutines) reverts to exactly as it was before and therefore making them debuggable again, or even more importantly, compilable, with "-g"
Reviewers: dblaikie, echristo, aprantl
Reviewed By: dblaikie
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D33614
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304079
91177308-0d34-0410-b5e6-
96231b3b80d8
George Rimar [Sat, 27 May 2017 18:10:23 +0000 (18:10 +0000)]
Recommit "[DWARF] - Make collectAddressRanges() return section index in addition to Low/High PC"
With fix of uninitialized variable.
Original commit message:
This change is intended to use for LLD in D33183.
Problem we have in LLD when building .gdb_index is that we need to know section which address range belongs to.
Previously it was solved on LLD side by providing fake section addresses with use of llvm::LoadedObjectInfo
interface. We assigned file offsets as addressed. Then after obtaining ranges lists, for each range we had to find section ID's.
That not only was slow, but also complicated implementation and was the reason of incorrect behavior when
sections share the same offsets, like D33176 shows.
This patch makes DWARF parsers to return section index as well. That solves problem mentioned above.
Differential revision: https://reviews.llvm.org/D33184
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304078
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sat, 27 May 2017 17:36:50 +0000 (17:36 +0000)]
[TableGen] Prevent DagInit from leaking its Args and ArgNames when they exceed the size of the SmallVector.
DagInits are allocated in a BumpPtrAllocator so they are never destructed. This means the destructor for the SmallVector never runs.
To fix this we now allocate the vectors in the BumpPtrAllocator too using TrailingObjects.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304077
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sat, 27 May 2017 17:36:47 +0000 (17:36 +0000)]
[TableGen] Use the correct type for the first template for the ListInit TrailingObjects.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304076
91177308-0d34-0410-b5e6-
96231b3b80d8
Tobias Grosser [Sat, 27 May 2017 15:17:49 +0000 (15:17 +0000)]
[SCEV] Assume parameters coming from function calls contain IVs
The optimistic delinearization implemented in LLVM detects array sizes by
looking for non-linear products between parameters and induction variables.
In OpenCL code, such products often look like:
A[get_global_id(0) * N + get_global_id(1)]
Hence, the IV is hidden in the get_global_id() call and consequently
delinearization would fail as no induction variable is available that helps
us to identify N as array size parameter.
We now use a very simple heuristic to change this. We assume that each parameter
that comes directly from a function call is a hidden induction variable. As
a result, we can delinearize the access above to:
A[get_global_id(0)][get_global_id(1]
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304073
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Sat, 27 May 2017 14:07:03 +0000 (14:07 +0000)]
[DAGCombiner] use narrow load to avoid vector extract
If we have (extract_subvector(load wide vector)) with no other users,
that can just be (load narrow vector). This is intentionally conservative.
Follow-ups may loosen the one-use constraint to account for the extract cost
or just remove the one-use check.
The memop chain updating is based on code that already exists multiple times
in x86 lowering, so that should be pulled into a helper function as a follow-up.
Background: this is a potential improvement noticed via regressions caused by
making x86's peekThroughBitcasts() not loop on consecutive bitcasts (see
comments in D33137).
Differential Revision: https://reviews.llvm.org/D33578
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304072
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sat, 27 May 2017 06:14:12 +0000 (06:14 +0000)]
[TableGen] Remove all the static vectors named TheActualPool.
These used to hold std::unique_ptrs that managed the allocation for the various *Init object so that they would be deleted on exit. Everything is allocated in a BumpPtrAllocator name so there is no reason for these to still exist.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304066
91177308-0d34-0410-b5e6-
96231b3b80d8
Gor Nishanov [Sat, 27 May 2017 05:54:30 +0000 (05:54 +0000)]
[coroutines] Define getPassName() for coroutine passes
Reviewers: GorNishanov
Reviewed By: GorNishanov
Subscribers: EricWF, llvm-commits
Differential Revision: https://reviews.llvm.org/D33622
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304065
91177308-0d34-0410-b5e6-
96231b3b80d8
Vitaly Buka [Sat, 27 May 2017 05:32:09 +0000 (05:32 +0000)]
[PartialInlining] Replace delete with unique_ptr in computeCallsiteToProfCountMap
Reviewers: davidxl
Reviewed By: davidxl
Subscribers: vsk, llvm-commits
Differential Revision: https://reviews.llvm.org/D33220
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304064
91177308-0d34-0410-b5e6-
96231b3b80d8
Gor Nishanov [Sat, 27 May 2017 05:24:30 +0000 (05:24 +0000)]
ScalarEvolution unit test: fix typo that breaks check-all
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304063
91177308-0d34-0410-b5e6-
96231b3b80d8
Adam Nemet [Sat, 27 May 2017 04:05:52 +0000 (04:05 +0000)]
Rearrange Dom unittest to accommodate multiple tests
I've taken the approach from the LoopInfo test:
* Rather than running in the pass manager just build the analyses manually
* Split out the common parts (makeLLVMModule, runWithDomTree) into helpers
Differential Revision: https://reviews.llvm.org/D33617
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304061
91177308-0d34-0410-b5e6-
96231b3b80d8
Adam Nemet [Sat, 27 May 2017 04:05:50 +0000 (04:05 +0000)]
clang-format DomTree unittest
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304060
91177308-0d34-0410-b5e6-
96231b3b80d8
Matthias Braun [Sat, 27 May 2017 03:38:02 +0000 (03:38 +0000)]
AArch64/PEI: Do not add reserved regs to liveins
We do not track liveness for reserved registers. It is unnecessary to
add them to block livein lists.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304059
91177308-0d34-0410-b5e6-
96231b3b80d8
Keno Fischer [Sat, 27 May 2017 03:22:55 +0000 (03:22 +0000)]
[SCEVExpander] Try harder to avoid introducing inttoptr
Summary:
This fixes introduction of an incorrect inttoptr/ptrtoint pair in
the included test case which makes use of non-integral pointers. I
suspect there are more cases like this left, but this takes care of
the one I was seeing at the moment.
Reviewers: sanjoy
Subscribers: mzolotukhin, llvm-commits
Differential Revision: https://reviews.llvm.org/D33129
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304058
91177308-0d34-0410-b5e6-
96231b3b80d8
Matthias Braun [Sat, 27 May 2017 02:50:50 +0000 (02:50 +0000)]
ScheduleDAGInstrs: Fix fixupKills()
Rewrite fixupKills() to use the LivePhysRegs class. Simplifies the code
and fixes a bug where the CSR registers in return blocks where missed
leading to invalid kill flags. Also remove the unnecessary rule that we
wouldn't set kill flags on tied operands.
No tests as I have an upcoming commit improving MachineVerifier checks
to catch these cases in multiple existing lit tests.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304055
91177308-0d34-0410-b5e6-
96231b3b80d8
Erik Pilkington [Sat, 27 May 2017 01:48:34 +0000 (01:48 +0000)]
[Demangler] copy changes made in libcxxabi's r303718 to ItaniumDemangle
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304053
91177308-0d34-0410-b5e6-
96231b3b80d8
Quentin Colombet [Sat, 27 May 2017 01:34:07 +0000 (01:34 +0000)]
[AArch64][GlobalISel] Add the Localizer pass for the O0 pipeline
This should fix most of the issue we have right now with constants being
spilled all over the place.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304052
91177308-0d34-0410-b5e6-
96231b3b80d8
Quentin Colombet [Sat, 27 May 2017 01:34:00 +0000 (01:34 +0000)]
[GlobalISel] Add a localizer pass for target to use
This reverts commit r299287 plus clean-ups.
The localizer pass is a helper pass that could be run at O0 in the GISel
pipeline to work around the deficiency of the fast register allocator.
It basically shortens the live-ranges of the constants so that the
allocator does not spill all over the place.
Long term fix would be to make the greedy allocator fast.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304051
91177308-0d34-0410-b5e6-
96231b3b80d8
Wei Mi [Sat, 27 May 2017 00:54:19 +0000 (00:54 +0000)]
[GVN] Recommit the patch "Add phi-translate support in scalarpre".
The recommit is to fix a bug about ExtractValue and InsertValue ops. For those
ops, some varargs inside GVN::Expression are not value numbers but raw index
numbers. It is wrong to do phi-translate for raw index numbers, and the fix is
to stop doing that.
Right now scalarpre doesn't have phi-translate support, so it will miss some
simple pre opportunities. Like the following testcase, current scalarpre cannot
recognize the last "a * b" is fully redundent because a and b used by the last
"a * b" expr are both defined by phis.
long a[100], b[100], g1, g2, g3;
__attribute__((pure)) long goo();
void foo(long a, long b, long c, long d) {
g1 = a * b;
if (__builtin_expect(g2 > 3, 0)) {
a = c;
b = d;
g2 = a * b;
}
g3 = a * b; // fully redundant.
}
The patch adds phi-translate support in scalarpre. This is only a temporary
solution before the newpre based on newgvn is available.
Differential Revision: https://reviews.llvm.org/D32252
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304050
91177308-0d34-0410-b5e6-
96231b3b80d8
Matthias Braun [Sat, 27 May 2017 00:53:48 +0000 (00:53 +0000)]
BranchRelaxation: computeLiveIns() after creating new block
One case in BranchRelaxation did not compute liveins after creating a
new block. This is catched by existing tests with an upcoming commit
that will improve MachineVerifier checking of livein lists.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304049
91177308-0d34-0410-b5e6-
96231b3b80d8
Matthias Braun [Fri, 26 May 2017 23:48:59 +0000 (23:48 +0000)]
AArch64: Fix cmpxchg O0 expansion
- Rewrite livein calculation to use the computeLiveIns() helper
function. This is slightly less efficient but easier to reason about
and doesn't unnecessarily add pristine and reserved registers[1]
- Zero the status register at the beginning of the loop to make sure it
has a defined value.
- Remove kill flags of values that need to stay alive throughout the loop.
[1] An upcoming commit of mine will tighten the MachineVerifier to catch
these.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304048
91177308-0d34-0410-b5e6-
96231b3b80d8
Bob Haarman [Fri, 26 May 2017 23:46:20 +0000 (23:46 +0000)]
[llvm-pdbdump] pdb2yaml: add an -all option to dump everything we can
Reviewers: amccarth, rnk, zturner
Reviewed By: zturner
Subscribers: fhahn, llvm-commits
Differential Revision: https://reviews.llvm.org/D33613
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304047
91177308-0d34-0410-b5e6-
96231b3b80d8
Peter Collingbourne [Fri, 26 May 2017 23:21:40 +0000 (23:21 +0000)]
Bitcode: Remove some dead code. Spotted by Teresa.
Differential Revision: https://reviews.llvm.org/D33609
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304046
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Fri, 26 May 2017 22:42:34 +0000 (22:42 +0000)]
[InstSimplify] Push commuted op checks for and/or of icmp further down to avoid duplicate work
Previously, we called simplifyPossiblyCastedAndOrOfICmps twice with the operands commuted, but the call to simplifyAndOrOfICmpsWithConstants further down already handles commuting and doesn't need to be called both ways.
This patch pushes double calls further down to just the individual routines that need to be called twice.
Differential Revision: https://reviews.llvm.org/D33603
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304044
91177308-0d34-0410-b5e6-
96231b3b80d8
Alexei Starovoitov [Fri, 26 May 2017 22:32:41 +0000 (22:32 +0000)]
[bpf] disallow global_addr+off folding
Wrong assembly code is generated for a simple program with
clang. If clang only produces IR and llc is used
for IR lowering and optimization, correct assembly
code is generated.
The main reason is that clang feeds default Reloc::Static
to llvm and llc feeds no RelocMode to llvm, where
for llc case, BPF backend picks up Reloc::PIC_ mode.
This leads different IR lowering behavior and clang
permits global_addr+off folding while llc doesn't.
This patch introduces isOffsetFoldingLegal function into
BPF backend and the function always return false.
This will make clang and llc behave the same for
the lowering.
Bug https://bugs.llvm.org//show_bug.cgi?id=33183
has more detailed explanation.
Signed-off-by: Yonghong Song <yhs@fb.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304043
91177308-0d34-0410-b5e6-
96231b3b80d8
David Blaikie [Fri, 26 May 2017 22:11:18 +0000 (22:11 +0000)]
Fix test broken by r304020
It's a workaround because the test was flakey passing to begin with, but
it looks like (going off commit history) it really did want to test in
the presence of debug info, so keep that behavior (by adding something
to the CU so it's not dropped) & restore the flakey pass in the process.
(added a FIXME in case someone else decides to look at it later)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304042
91177308-0d34-0410-b5e6-
96231b3b80d8
Davide Italiano [Fri, 26 May 2017 21:56:19 +0000 (21:56 +0000)]
[Mips] Placate GCC's -Wmisleading-indentation. NFCI.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304041
91177308-0d34-0410-b5e6-
96231b3b80d8
Davide Italiano [Fri, 26 May 2017 21:56:14 +0000 (21:56 +0000)]
[lib/LTO] Don't reinvent the code for switching linkage.
Differential Revision: https://reviews.llvm.org/D33582
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304040
91177308-0d34-0410-b5e6-
96231b3b80d8
Matthias Braun [Fri, 26 May 2017 21:51:00 +0000 (21:51 +0000)]
LivePhysRegs: Rework constructor + documentation; NFC
- Take reference instead of pointer to a TRI that cannot be nullptr.
- Improve documentation comments.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304038
91177308-0d34-0410-b5e6-
96231b3b80d8
Matthias Braun [Fri, 26 May 2017 21:50:54 +0000 (21:50 +0000)]
LivePhysRegs: Doxygen cleanup; NFC
- Remove unnecessary \brief
- @p -> \p
- Add \file and /// to introduction
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304037
91177308-0d34-0410-b5e6-
96231b3b80d8
Matthias Braun [Fri, 26 May 2017 21:50:51 +0000 (21:50 +0000)]
LivePhysRegs: Add default for removeRegsInMask(Clobbers); NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304036
91177308-0d34-0410-b5e6-
96231b3b80d8
Matthias Braun [Fri, 26 May 2017 21:50:48 +0000 (21:50 +0000)]
MachineVerifier: Remove unused set; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304035
91177308-0d34-0410-b5e6-
96231b3b80d8
Sumanth Gundapaneni [Fri, 26 May 2017 21:09:54 +0000 (21:09 +0000)]
[Hexagon] Cleanup of unused function isCalleeSaveReg (NFC)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304034
91177308-0d34-0410-b5e6-
96231b3b80d8
Vitaly Buka [Fri, 26 May 2017 20:50:49 +0000 (20:50 +0000)]
allow_user_segv_handler was already removed
New default behavior matches previous allow_user_segv_handler=1
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304032
91177308-0d34-0410-b5e6-
96231b3b80d8
Konstantin Zhuravlyov [Fri, 26 May 2017 20:38:26 +0000 (20:38 +0000)]
Resubmit r303859 with test fixed.
[AMDGPU] add intrinsic for s_getpc
Summary: The s_getpc instruction is exposed as intrinsic llvm.amdgcn.s.getpc.
Patch by Tim Corringham
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304031
91177308-0d34-0410-b5e6-
96231b3b80d8
Benjamin Kramer [Fri, 26 May 2017 20:09:00 +0000 (20:09 +0000)]
Make helper functions static. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304029
91177308-0d34-0410-b5e6-
96231b3b80d8
Frederich Munch [Fri, 26 May 2017 19:43:23 +0000 (19:43 +0000)]
Fix the ManagedStatic list ordering when using DynamicLibrary::addPermanentLibrary.
Summary:
r295737 included a fix for leaking libraries loaded via. DynamicLibrary::addPermanentLibrary.
This created a problem where static constructors in a library could insert llvm::ManagedStatic objects before DynamicLibrary would register it's own ManagedStatic, meaning a crash could occur at shutdown.
r301562 exasperated this problem by cleaning up the DynamicLibrary ManagedStatic during llvm_shutdown.
Reviewers: v.g.vassilev, lhames, efriedma
Reviewed By: efriedma
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D33581
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304027
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Fri, 26 May 2017 19:04:02 +0000 (19:04 +0000)]
[InstSimplify] Move a variable declaration to make simplifyAndOfICmps look more like simplifyOrOfICmps. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304023
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Fri, 26 May 2017 19:03:59 +0000 (19:03 +0000)]
[InstSimplify] Use commutable matchers to shorten some code
This code was replicated two additional times to handle commuted cases, but I think a commutable matcher can take care of it.
Differential Revision: https://reviews.llvm.org/D33585
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304022
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Fri, 26 May 2017 19:03:53 +0000 (19:03 +0000)]
[InstSimplify] Use m_APInt instead of m_ConstantInt in ((V + N) & C1) | (V & C2) handling in order to support splat vectors.
The tests here are have operands commuted to provide more coverage. I also commuted one of the instructions in the scalar tests so the 4 tests cover the 4 commuted variations
Differential Revision: https://reviews.llvm.org/D33599
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304021
91177308-0d34-0410-b5e6-
96231b3b80d8
David Blaikie [Fri, 26 May 2017 18:52:56 +0000 (18:52 +0000)]
DebugInfo: Do not emit empty CUs
Consistent with GCC and addresses a shortcoming with ThinLTO where many
imported CUs may end up being empty (because the functions imported from
them either ended up not being used (and were then discarded, since
they're imported as available_externally) or optimized away entirely).
Test cases previously testing empty CUs (either intentionally, or
because they didn't need anything more complicated) had a trivial 'int'
or similar basic type added to their retained types list.
This is a first order approximation - a deeper implementation could do
things like:
1) Be more lazy about construction of the CU - for example if two CUs
containing a single identical retained type are linked together, with
this change one of the two CUs will be produced but empty (since a
duplicate type won't be produced).
2) Go further and invert all the CU links the same way the subprogram
link is inverted - keep named CU lists of retained types, macros, etc,
and have those link back to the CU. Then if they're emitted, the CU is
emitted, but never otherwise - this would allow the metadata itself to
be dropped earlier too, though it seems unlikely that's an important
optimization as there shouldn't be many CUs relative to the number of
other entities.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304020
91177308-0d34-0410-b5e6-
96231b3b80d8
Peter Collingbourne [Fri, 26 May 2017 18:27:13 +0000 (18:27 +0000)]
PMB: Run the whole-program-devirt pass during LTO at --lto-O0.
The whole-program-devirt pass needs to run at -O0 because only it
knows about the llvm.type.checked.load intrinsic: it needs to both
lower the intrinsic itself and handle it in the summary.
Differential Revision: https://reviews.llvm.org/D33571
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304019
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Fri, 26 May 2017 18:23:57 +0000 (18:23 +0000)]
[InstCombine] Pass the DominatorTree, AssumptionCache, and context instruction to a few calls to isKnownPositive, isKnownNegative, and isKnownNonZero
Every other place in InstCombine that uses these methods in ValueTracking already pass this information. This makes the remaining sites consistent.
Differential Revision: https://reviews.llvm.org/D33567
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304018
91177308-0d34-0410-b5e6-
96231b3b80d8
Dmitry Preobrazhensky [Fri, 26 May 2017 18:01:29 +0000 (18:01 +0000)]
[AMDGPU][MC][GFX9] Corrected encoding of flat_scratch* for SDWA opcodes
See bug 33171: https://bugs.llvm.org/show_bug.cgi?id=33171
Reviewers: Sam Kolton
Differential Revision: https://reviews.llvm.org/D33553
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304015
91177308-0d34-0410-b5e6-
96231b3b80d8
George Rimar [Fri, 26 May 2017 17:36:23 +0000 (17:36 +0000)]
Revert r304002 "[DWARF] - Make collectAddressRanges() return section index in addition to Low/High PC"
Revert it again. Now another bot unhappy: http://lab.llvm.org:8011/builders/clang-s390x-linux/builds/8750
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304011
91177308-0d34-0410-b5e6-
96231b3b80d8
Roger Ferrer Ibanez [Fri, 26 May 2017 17:08:49 +0000 (17:08 +0000)]
Revert "Export the required symbol from DynamicLibraryTests"
This breaks sanitizer-x86_64-linux-fast buildbot.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304005
91177308-0d34-0410-b5e6-
96231b3b80d8