Igor Breger [Thu, 15 Oct 2015 12:33:24 +0000 (12:33 +0000)]
AVX512: Implemented encoding and intrinsics for vpternlogd/q.
Differential Revision: http://reviews.llvm.org/D13768
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250396
91177308-0d34-0410-b5e6-
96231b3b80d8
Elena Demikhovsky [Thu, 15 Oct 2015 11:35:33 +0000 (11:35 +0000)]
AVX-512: Fixed a bug in shuffle lowering 32-bit mode
AVX-512 bit shuffle fails on 32 bit since we create a vector of 64-bit constants.
I split 8x64-bit const vector to 16x32 on 32-bit mode.
Differential Revision: http://reviews.llvm.org/D13644
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250390
91177308-0d34-0410-b5e6-
96231b3b80d8
Andrea Di Biagio [Thu, 15 Oct 2015 09:54:25 +0000 (09:54 +0000)]
[x86] Merge test pr24562.ll into x86-fold-pshufb.ll. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250387
91177308-0d34-0410-b5e6-
96231b3b80d8
Benjamin Kramer [Thu, 15 Oct 2015 09:38:45 +0000 (09:38 +0000)]
Make windows.h less evil.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250386
91177308-0d34-0410-b5e6-
96231b3b80d8
Benjamin Kramer [Thu, 15 Oct 2015 09:32:54 +0000 (09:32 +0000)]
[llvm-pdbdump] Remove oddly placed parens that MSVC doesn't like
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250385
91177308-0d34-0410-b5e6-
96231b3b80d8
Artyom Skrobov [Thu, 15 Oct 2015 09:18:47 +0000 (09:18 +0000)]
Don't pretend AMDGPU backend knows how to custom-lower UDIVREM for vector types; it can't
Reviewers: arsenm, jvesely, tstellarAMD
Subscribers: arsenm, llvm-commits
Differential Revision: http://reviews.llvm.org/D13734
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250384
91177308-0d34-0410-b5e6-
96231b3b80d8
David Majnemer [Thu, 15 Oct 2015 09:17:15 +0000 (09:17 +0000)]
Speculatively unbreak Windows build
<windows.h> defines macros named min and max in conflict with
<algorithm>. Prevent macro expansion by wrapping std::min in
parenthesis.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250383
91177308-0d34-0410-b5e6-
96231b3b80d8
Zlatko Buljan [Thu, 15 Oct 2015 08:59:45 +0000 (08:59 +0000)]
[mips][microMIPS] Implement DPA.W.PH, DPAQ_S.W.PH, DPAQ_SA.L.W, DPAQX_S.W.PH, DPAQX_SA.W.PH, DPAU.H.QBL, DPAU.H.QBR and DPAX.W.PH instructions
Differential Revision: http://reviews.llvm.org/D13376
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250382
91177308-0d34-0410-b5e6-
96231b3b80d8
Hrvoje Varga [Thu, 15 Oct 2015 08:39:07 +0000 (08:39 +0000)]
[mips][microMIPS] Implement BREAK16, LI16, MOVE16, SDBBP16, SUBU16 and XOR16 instructions
Differential Revision: http://reviews.llvm.org/D11292#inline-103143
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250381
91177308-0d34-0410-b5e6-
96231b3b80d8
Hrvoje Varga [Thu, 15 Oct 2015 08:11:50 +0000 (08:11 +0000)]
[mips][microMIPS] Implement LLE and SCE instructions
Differential Revision: http://reviews.llvm.org/D11630
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250379
91177308-0d34-0410-b5e6-
96231b3b80d8
Hrvoje Varga [Thu, 15 Oct 2015 07:23:06 +0000 (07:23 +0000)]
[mips][microMIPS] Implement LWLE, LWRE, SWLE and SWRE instructions
Differential Revision: http://reviews.llvm.org/D11631
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250377
91177308-0d34-0410-b5e6-
96231b3b80d8
Lang Hames [Thu, 15 Oct 2015 07:16:40 +0000 (07:16 +0000)]
[RuntimeDyld] Drop the '.s' suffix off the COFF test case - the MIPS bot started
failing when the suffix was added.
I assume the lack of a '.s' suffix means that the test case just wasn't running
before, and it has never worked on MIPS. I'll investigate that tomorrow.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250376
91177308-0d34-0410-b5e6-
96231b3b80d8
Eric Christopher [Thu, 15 Oct 2015 07:01:16 +0000 (07:01 +0000)]
Update for llvm API change.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250375
91177308-0d34-0410-b5e6-
96231b3b80d8
Eric Christopher [Thu, 15 Oct 2015 06:56:10 +0000 (06:56 +0000)]
Remove DIFile from createSubroutineType.
Patch by Amaury Sechet with a small modification by me.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250374
91177308-0d34-0410-b5e6-
96231b3b80d8
Lang Hames [Thu, 15 Oct 2015 06:41:45 +0000 (06:41 +0000)]
[RuntimeDyld] Don't try to get the contents of sections that don't have any
(e.g. bss sections).
MachO and ELF have been silently letting this pass, but COFFObjectFile contains
an assertion to catch this kind of (ab)use of the getSectionContents, and this
was causing the JIT to crash on COFF objects with BSS sections. This patch
should fix that.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250371
91177308-0d34-0410-b5e6-
96231b3b80d8
Akira Hatanaka [Thu, 15 Oct 2015 05:28:38 +0000 (05:28 +0000)]
[MachO] Stop generating *coal* sections.
Recommit r250342: move coal-sections-powerpc.s to subdirectory for powerpc.
Some background on why we don't have to use *coal* sections anymore:
Long ago when C++ was new and "weak" had not been standardized, an attempt was
made in cctools to support C++ inlines that can be coalesced by putting them
into their own section (TEXT/textcoal_nt instead of TEXT/text).
The current macho linker supports the weak-def bit on any symbol to allow it to
be coalesced, but the compiler still puts weak-def functions/data into alternate
section names, which the linker must map back to the base section name.
This patch makes changes that are necessary to prevent the compiler from using
the "coal" sections and have it use the non-coal sections instead when the
target architecture is not powerpc:
TEXT/textcoal_nt instead use TEXT/text
TEXT/const_coal instead use TEXT/const
DATA/datacoal_nt instead use DATA/data
If the target is powerpc, we continue to use the *coal* sections since anyone
targeting powerpc is probably using an old linker that doesn't have support for
the weak-def bits.
Also, have the assembler issue a warning if it encounters a *coal* section in
the assembly file and inform the users to use the non-coal sections instead.
rdar://problem/
14265330
Differential Revision: http://reviews.llvm.org/D13188
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250370
91177308-0d34-0410-b5e6-
96231b3b80d8
Hrvoje Varga [Thu, 15 Oct 2015 05:20:51 +0000 (05:20 +0000)]
Test commit.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250367
91177308-0d34-0410-b5e6-
96231b3b80d8
Manman Ren [Thu, 15 Oct 2015 04:58:24 +0000 (04:58 +0000)]
Temporarily revert r250345 to sort out bot failure.
With r250345 and r250343, we start to observe the following failure
when bootstrap clang with lto and pgo:
PHI node entries do not match predecessors!
%.sroa.029.3.i = phi %"class.llvm::SDNode.13298"* [ null, %30953 ], [ null, %31017 ], [ null, %30998 ], [ null, %_ZN4llvm8dyn_castINS_14ConstantSDNodeENS_7SDValueEEENS_10cast_rettyIT_T0_E8ret_typeERS5_.exit.i.1804 ], [ null, %30975 ], [ null, %30991 ], [ null, %_ZNK4llvm3EVT13getScalarTypeEv.exit.i.1812 ], [ %..sroa.029.0.i, %_ZN4llvm11SmallVectorIiLj8EED1Ev.exit.i.1826 ], !dbg !451895
label %30998
label %_ZNK4llvm3EVTeqES0_.exit19.thread.i
LLVM ERROR: Broken function found, compilation aborted!
I will re-commit this if the bot does not recover.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250366
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Thu, 15 Oct 2015 03:56:54 +0000 (03:56 +0000)]
Add XSAVE/XSAVEOPT to KNL processor.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250362
91177308-0d34-0410-b5e6-
96231b3b80d8
David Majnemer [Thu, 15 Oct 2015 01:39:00 +0000 (01:39 +0000)]
s/NumFiles/NumStreams/
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250357
91177308-0d34-0410-b5e6-
96231b3b80d8
David Majnemer [Thu, 15 Oct 2015 01:27:19 +0000 (01:27 +0000)]
[llvm-pdbdump] Provide a mechanism to dump the raw contents of a PDB
A PDB can be thought of as a very simple file system. It is
occasionally illuminating to see the contents of the underlying files.
Differential Revision: http://reviews.llvm.org/D13674
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250356
91177308-0d34-0410-b5e6-
96231b3b80d8
Richard Smith [Thu, 15 Oct 2015 01:15:26 +0000 (01:15 +0000)]
Fix -Wmismatched-tags error in modules build by removing unused forward declaration.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250355
91177308-0d34-0410-b5e6-
96231b3b80d8
Davide Italiano [Thu, 15 Oct 2015 01:12:01 +0000 (01:12 +0000)]
[bugpoint] llvm-gcc doesn't exist anymore ...
... so this comment is stale. Remove it. Range-loopify while here.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250354
91177308-0d34-0410-b5e6-
96231b3b80d8
Quentin Colombet [Thu, 15 Oct 2015 00:41:26 +0000 (00:41 +0000)]
[ARM] Make sure we do not dereference the end iterator when accessing debug
information.
Although the problem was always here, it would only be exposed when
shrink-wrapping is enable.
rdar://problem/
23110493
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250352
91177308-0d34-0410-b5e6-
96231b3b80d8
Akira Hatanaka [Thu, 15 Oct 2015 00:11:03 +0000 (00:11 +0000)]
Revert r250349.
Test case coal-sections-powerpc.s is still failing on some buildbots.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250351
91177308-0d34-0410-b5e6-
96231b3b80d8
Davide Italiano [Thu, 15 Oct 2015 00:05:32 +0000 (00:05 +0000)]
[JIT] TrivialMemoryManager: Fail if we can't allocate memory.
TrivialMemoryManager currently doesn't check the return type of AllocateRWX --
and returns a 'null' MemoryBlock to its caller. As pointed out by Lang,
this exposes some serious issues with the MemoryManager interface. There's,
in fact, no way to report back an error to clients rather than aborting in
case memory can't be allocated. Eventually the interface will grow to support
this, but for now, fail sooner rather than later.
Differential Revision: http://reviews.llvm.org/D13627
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250350
91177308-0d34-0410-b5e6-
96231b3b80d8
Akira Hatanaka [Wed, 14 Oct 2015 23:48:10 +0000 (23:48 +0000)]
[MachO] Stop generating *coal* sections.
Recommit r250342: add -arch=ppc32 to the RUN lines of powerpc tests.
Some background on why we don't have to use *coal* sections anymore:
Long ago when C++ was new and "weak" had not been standardized, an attempt was
made in cctools to support C++ inlines that can be coalesced by putting them
into their own section (TEXT/textcoal_nt instead of TEXT/text).
The current macho linker supports the weak-def bit on any symbol to allow it to
be coalesced, but the compiler still puts weak-def functions/data into alternate
section names, which the linker must map back to the base section name.
This patch makes changes that are necessary to prevent the compiler from using
the "coal" sections and have it use the non-coal sections instead when the
target architecture is not powerpc:
TEXT/textcoal_nt instead use TEXT/text
TEXT/const_coal instead use TEXT/const
DATA/datacoal_nt instead use DATA/data
If the target is powerpc, we continue to use the *coal* sections since anyone
targeting powerpc is probably using an old linker that doesn't have support for
the weak-def bits.
Also, have the assembler issue a warning if it encounters a *coal* section in
the assembly file and inform the users to use the non-coal sections instead.
rdar://problem/
14265330
Differential Revision: http://reviews.llvm.org/D13188
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250349
91177308-0d34-0410-b5e6-
96231b3b80d8
Akira Hatanaka [Wed, 14 Oct 2015 23:29:10 +0000 (23:29 +0000)]
Revert r250342.
Investigate why coal-sections-powerpc.s is failing on some buildbots.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250346
91177308-0d34-0410-b5e6-
96231b3b80d8
Cong Hou [Wed, 14 Oct 2015 23:14:17 +0000 (23:14 +0000)]
Update the branch weight metadata in JumpThreading pass.
Currently in JumpThreading pass, the branch weight metadata is not updated after CFG modification. Consider the jump threading on PredBB, BB, and SuccBB. After jump threading, the weight on BB->SuccBB should be adjusted as some of it is contributed by the edge PredBB->BB, which doesn't exist anymore. This patch tries to update the edge weight in metadata on BB->SuccBB by scaling it by 1 - Freq(PredBB->BB) / Freq(BB->SuccBB).
This is the third attempt to submit this patch, while the first two led to failures in some FDO tests. After investigation, it is the edge weight normalization that caused those failures. In this patch the edge weight normalization is fixed so that there is no zero weight in the output and the sum of all weights can fit in 32-bit integer. Several unit tests are added.
Differential revision: http://reviews.llvm.org/D10979
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250345
91177308-0d34-0410-b5e6-
96231b3b80d8
Philip Reames [Wed, 14 Oct 2015 22:47:06 +0000 (22:47 +0000)]
Test case which should have been part of 250343
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250344
91177308-0d34-0410-b5e6-
96231b3b80d8
Philip Reames [Wed, 14 Oct 2015 22:46:19 +0000 (22:46 +0000)]
[SimplifyCFG] Speculatively flatten CFG based on profiling metadata
If we have a series of branches which are all unlikely to fail, we can possibly combine them into a single check on the fastpath combined with a bit of dispatch logic on the slowpath. We don't want to do this unconditionally since it requires speculating instructions past a branch, but if the profiling metadata on the branch indicates profitability, this can reduce the number of checks needed along the fast path.
The canonical example this is trying to handle is removing the second bounds check implied by the Java code: a[i] + a[i+1]. Note that it can currently only do so for really simple conditions and the values of a[i] can't be used anywhere except in the addition. (i.e. the load has to have been sunk already and not prevent speculation.) I plan on extending this transform over the next few days to handle alternate sequences.
Differential Revision: http://reviews.llvm.org/D13070
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250343
91177308-0d34-0410-b5e6-
96231b3b80d8
Akira Hatanaka [Wed, 14 Oct 2015 22:45:36 +0000 (22:45 +0000)]
[MachO] Stop generating *coal* sections.
Some background on why we don't have to use *coal* sections anymore:
Long ago when C++ was new and "weak" had not been standardized, an attempt was
made in cctools to support C++ inlines that can be coalesced by putting them
into their own section (TEXT/textcoal_nt instead of TEXT/text).
The current macho linker supports the weak-def bit on any symbol to allow it to
be coalesced, but the compiler still puts weak-def functions/data into alternate
section names, which the linker must map back to the base section name.
This patch makes changes that are necessary to prevent the compiler from using
the "coal" sections and have it use the non-coal sections instead when the
target architecture is not powerpc:
TEXT/textcoal_nt instead use TEXT/text
TEXT/const_coal instead use TEXT/const
DATA/datacoal_nt instead use DATA/data
If the target is powerpc, we continue to use the *coal* sections since anyone
targeting powerpc is probably using an old linker that doesn't have support for
the weak-def bits.
Also, have the assembler issue a warning if it encounters a *coal* section in
the assembly file and inform the users to use the non-coal sections instead.
rdar://problem/
14265330
Differential Revision: http://reviews.llvm.org/D13188
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250342
91177308-0d34-0410-b5e6-
96231b3b80d8
Philip Reames [Wed, 14 Oct 2015 22:42:12 +0000 (22:42 +0000)]
Tighten known bits for ctpop based on zero input bits
This is a cleaned up patch from the one written by John Regehr based on the findings of the Souper superoptimizer.
The basic idea here is that input bits that are known zero reduce the maximum count that the intrinsic could return. We know that the number of bits required to represent a particular count is at most log2(N)+1.
Differential Revision: http://reviews.llvm.org/D13253
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250338
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Bieneman [Wed, 14 Oct 2015 21:50:09 +0000 (21:50 +0000)]
[CMake] Make LLVM_VERSION_* variables user definable
CMake's set command overwrites existing values. Package maintainers may want or need to set the version variables manually, so we need to only set them if they are not already defined. Note I use the "if(NOT DEFINED ...)" syntax deliberately in the last case because empty string is a valid value for the suffx, but not the other variables.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250333
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Wed, 14 Oct 2015 21:47:03 +0000 (21:47 +0000)]
add x86 codegen tests for 'add nsw' followed by 'sext'
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250332
91177308-0d34-0410-b5e6-
96231b3b80d8
Bill Schmidt [Wed, 14 Oct 2015 20:45:00 +0000 (20:45 +0000)]
[PowerPC] Fix invalid lxvdsx optimization (PR25157)
PR25157 identifies a bug where a load plus a vector shuffle is
incorrectly converted into an LXVDSX instruction. That optimization
is only valid if the load is of a doubleword, and in the noted case,
it was not. This corrects that problem.
Joint patch with Eric Schweitz, who provided the bugpoint-reduced test
case.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250324
91177308-0d34-0410-b5e6-
96231b3b80d8
Davide Italiano [Wed, 14 Oct 2015 20:29:54 +0000 (20:29 +0000)]
[Bugpoint] Use 'CC' instead of 'GCC' for variable naming.
We now use clang by default and fallback to gcc when requested.
With this commit, names reflect reality. No functional change
intended.
Discussed with: Rafael Espindola.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250321
91177308-0d34-0410-b5e6-
96231b3b80d8
Daniel Berlin [Wed, 14 Oct 2015 19:54:24 +0000 (19:54 +0000)]
[IDFCalculator] Use DominatorTreeBase instead of DominatorTree
Summary:
IDFCalculator used a DominatorTree instance for its calculations. Since the PostDominatorTree struct is not a subclass of DominatorTree, it wasn't possible to use PDT in IDFCalculator to compute post-dominance frontiers.
This patch makes IDFCalculator work with a DominatorTreeBase<BasicBlock> instead, which enables PDTs to be utilized.
Patch by Victor Campos (vhscampos@gmail.com)
Reviewers: dberlin
Subscribers: dberlin, llvm-commits
Differential Revision: http://reviews.llvm.org/D13725
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250320
91177308-0d34-0410-b5e6-
96231b3b80d8
Davide Italiano [Wed, 14 Oct 2015 19:48:01 +0000 (19:48 +0000)]
[Bugpoint] Use clang by default.
We now rely on gcc only if either of the following is true:
1) -gcc option is passed by the user
2) clang is not found in the default path.
Differential Revision: http://reviews.llvm.org/D13642
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250318
91177308-0d34-0410-b5e6-
96231b3b80d8
Chen Li [Wed, 14 Oct 2015 19:47:43 +0000 (19:47 +0000)]
[LoopUnswitch] Correct misleading comments.
Reviewers: reames
Subscribers: llvm-commits
Differential Revision: http://reviews.llvm.org/D13738
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250317
91177308-0d34-0410-b5e6-
96231b3b80d8
Arch D. Robison [Wed, 14 Oct 2015 19:10:45 +0000 (19:10 +0000)]
Add 'other' in description of extractvalue operands.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250314
91177308-0d34-0410-b5e6-
96231b3b80d8
Diego Novillo [Wed, 14 Oct 2015 18:36:30 +0000 (18:36 +0000)]
Sample profiles - Add documentation for binary profile encoding. NFC.
This adds documentation for the binary profile encoding and moves the
documentation for the text encoding into the header file
SampleProfReader.h.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250309
91177308-0d34-0410-b5e6-
96231b3b80d8
Artyom Skrobov [Wed, 14 Oct 2015 17:18:35 +0000 (17:18 +0000)]
A doccomment for CombineTo, and some NFC refactorings
Summary:
Caching SDLoc(N), instead of recreating it in every single
function call, keeps the code denser, and allows to unwrap long lines.
Reviewers: sunfish, atrick, sdmitrouk
Subscribers: llvm-commits
Differential Revision: http://reviews.llvm.org/D13726
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250305
91177308-0d34-0410-b5e6-
96231b3b80d8
Artyom Skrobov [Wed, 14 Oct 2015 16:54:14 +0000 (16:54 +0000)]
Merge DAGCombiner::visitSREM and DAGCombiner::visitUREM (NFC)
Summary: The two implementations had more code in common than not.
Reviewers: sunfish, MatzeB, sdmitrouk
Subscribers: llvm-commits
Differential Revision: http://reviews.llvm.org/D13724
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250302
91177308-0d34-0410-b5e6-
96231b3b80d8
Igor Kudrin [Wed, 14 Oct 2015 12:21:30 +0000 (12:21 +0000)]
[llvm-readobj/ELF] fix: add correct test inputs
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250292
91177308-0d34-0410-b5e6-
96231b3b80d8
Igor Kudrin [Wed, 14 Oct 2015 12:11:50 +0000 (12:11 +0000)]
[llvm-readobj/ELF] Print GNU Hash section
Add a new command line switch, -gnu-hash-table, to print the content of that section.
Differential Revision: http://reviews.llvm.org/D13696
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250291
91177308-0d34-0410-b5e6-
96231b3b80d8
Andrea Di Biagio [Wed, 14 Oct 2015 10:03:13 +0000 (10:03 +0000)]
[x86][FastISel] Teach how to select nontemporal stores.
This patch teaches x86 fast-isel how to select nontemporal stores.
On x86, we can use MOVNTI for nontemporal stores of doublewords/quadwords.
Instructions (V)MOVNTPS/PD/DQ can be used for SSE2/AVX aligned nontemporal
vector stores.
Before this patch, fast-isel always selected 'movd/movq' instead of 'movnti'
for doubleword/quadword nontemporal stores. In the case of nontemporal stores
of aligned vectors, fast-isel always selected movaps/movapd/movdqa instead of
movntps/movntpd/movntdq.
With this patch, if we use SSE2/AVX intrinsics for nontemporal stores we now
always get the expected (V)MOVNT instructions.
The lack of fast-isel support for nontemporal stores was spotted when analyzing
the -O0 codegen for nontemporal stores.
Differential Revision: http://reviews.llvm.org/D13698
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250285
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Bieneman [Wed, 14 Oct 2015 07:50:21 +0000 (07:50 +0000)]
[CMake] Add LLVM_VERSION_PATCH to the -current_version flag for libLTO and libLLVM.
This is to match autoconf where LLVM_SUBMIT_SUBVERSION is usually set to ${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH}.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250277
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Bieneman [Wed, 14 Oct 2015 07:40:34 +0000 (07:40 +0000)]
[CMake] Fixing the bots I broke.
I meant to put the POLICY setting below the version defaults.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250276
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Bieneman [Wed, 14 Oct 2015 07:37:00 +0000 (07:37 +0000)]
[CMake] Set Policy CMP0048 to NEW
CMake 3.0 introduced the VERSION option for the project() command. If you don't specify the VERSION in the function it will clear out variables matching ${PROJECT_NAME}_VERSION_${MAJOR|MINOR|PATCH|TWEAK}.
This makes overriding LLVM_VERSION_* not work properly with newer versions of CMake. To make this work properly we need to:
(1) Optionally set the policy to NEW
(2) Move default versions and setting PACKAGE_VERSION to before the call to project()
(3) If the policy is set, pass the VERSION and LANGUAGES options in the new format
This change should have no behavioral change for CMake versions before 3.0, and it makes the behavior of later versions match the earlier versions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250275
91177308-0d34-0410-b5e6-
96231b3b80d8
Xinliang David Li [Wed, 14 Oct 2015 07:24:14 +0000 (07:24 +0000)]
Add a instrumentation test for Linux
Make sure __llvm_profile_init is not emitted.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250274
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Wed, 14 Oct 2015 05:37:42 +0000 (05:37 +0000)]
[X86] Update CPU detection to only enable XSAVE features if the OS has enabled them and the saving of YMM state. This seems to be consistent with gcc behavior.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250269
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Wed, 14 Oct 2015 05:37:38 +0000 (05:37 +0000)]
[X86] Add XSAVE feature flags to their various processors.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250268
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Wed, 14 Oct 2015 04:36:00 +0000 (04:36 +0000)]
Use range-based for loops. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250266
91177308-0d34-0410-b5e6-
96231b3b80d8
Manman Ren [Wed, 14 Oct 2015 03:04:03 +0000 (03:04 +0000)]
Revert r250204 and r250240 due to bot failure. We failed to build PGO-ed clang.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250264
91177308-0d34-0410-b5e6-
96231b3b80d8
Evgeniy Stepanov [Wed, 14 Oct 2015 00:21:13 +0000 (00:21 +0000)]
[msan] Fix crash on multiplication by a non-integer constant.
Fixes PR25160.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250260
91177308-0d34-0410-b5e6-
96231b3b80d8
Kostya Serebryany [Wed, 14 Oct 2015 00:21:05 +0000 (00:21 +0000)]
[asan] Disabling speculative loads under asan. Patch by Mike Aizatsky
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250259
91177308-0d34-0410-b5e6-
96231b3b80d8
Richard Smith [Wed, 14 Oct 2015 00:04:19 +0000 (00:04 +0000)]
Rename one of our two llvm::GCOVOptions classes to llvm::GCOV::Options. We used
to get away with this because llvm/Support/GCOV.h was an implementation detail
of the llvm-gcov tool, but it's now being used by FDO.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250258
91177308-0d34-0410-b5e6-
96231b3b80d8
Eric Fiselier [Tue, 13 Oct 2015 23:51:58 +0000 (23:51 +0000)]
Split -pedantic and -Wno-long-long into two separate flags so libc++ can remove -pedantic
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250255
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjoy Das [Tue, 13 Oct 2015 23:28:31 +0000 (23:28 +0000)]
[SCEV] Use `SCEV::isAllOnesValue` directly; NFC.
Instead of `dyn_cast` ing to `SCEVConstant` and checking the contained
`ConstantInteger.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250251
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Bieneman [Tue, 13 Oct 2015 22:54:29 +0000 (22:54 +0000)]
[CMake] Add compatibility and current versioning to libLTO to match autoconf support.
This also adds LLVM_LTO_VERSION_OFFSET to support functional equivalence to autoconf.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250245
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Bieneman [Tue, 13 Oct 2015 22:54:27 +0000 (22:54 +0000)]
[CMake] libLLVM's compatibility version should be 1.
This is in matching with the autoconf build system.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250244
91177308-0d34-0410-b5e6-
96231b3b80d8
Diego Novillo [Tue, 13 Oct 2015 22:48:48 +0000 (22:48 +0000)]
Sample profile reader - remove dead code. NFC.
This removes old remnants from the gcov reader. I missed these when I
re-wrote it recently.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250242
91177308-0d34-0410-b5e6-
96231b3b80d8
Diego Novillo [Tue, 13 Oct 2015 22:48:46 +0000 (22:48 +0000)]
Sample profiles - Add a name table to the binary encoding.
Binary encoded profiles used to encode all function names inline at
every reference. This is clearly suboptimal in terms of space. This
patch fixes this by adding a name table to the header of the file.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250241
91177308-0d34-0410-b5e6-
96231b3b80d8
Cong Hou [Tue, 13 Oct 2015 22:27:41 +0000 (22:27 +0000)]
Update MachineBranchProbabilityInfo::normalizeEdgeWeights to make sure there is no zero weight in the output, and also add a missing test for JumpThreading.
The test is for the patch in http://reviews.llvm.org/D10979 but was missing when committing that patch.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250240
91177308-0d34-0410-b5e6-
96231b3b80d8
Richard Smith [Tue, 13 Oct 2015 22:24:10 +0000 (22:24 +0000)]
Add missing #include, found by modules build.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250239
91177308-0d34-0410-b5e6-
96231b3b80d8
David Majnemer [Tue, 13 Oct 2015 22:08:17 +0000 (22:08 +0000)]
[InlineFunction] Correctly inline TerminatePadInst
We forgot to append the terminatepad's arguments which resulted in us
treating the old terminatepad as an argument to the new terminatepad
causing us to crash immediately. Instead, add the old terminatepad's
arguments to the new terminatepad.
This fixes PR25155.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250234
91177308-0d34-0410-b5e6-
96231b3b80d8
Dan Gohman [Tue, 13 Oct 2015 22:06:40 +0000 (22:06 +0000)]
[WebAssembly] Remove a TODO comment which is no longer needed. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250233
91177308-0d34-0410-b5e6-
96231b3b80d8
Vedant Kumar [Tue, 13 Oct 2015 21:51:02 +0000 (21:51 +0000)]
[uselistorder] Insert blank line, NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250231
91177308-0d34-0410-b5e6-
96231b3b80d8
Richard Smith [Tue, 13 Oct 2015 21:32:32 +0000 (21:32 +0000)]
Fix layering violation: Analysis should not include headers from Transforms
(and in this case isn't even using anything from those headers).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250228
91177308-0d34-0410-b5e6-
96231b3b80d8
Chad Rosier [Tue, 13 Oct 2015 20:59:16 +0000 (20:59 +0000)]
Typo.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250224
91177308-0d34-0410-b5e6-
96231b3b80d8
Kevin Enderby [Tue, 13 Oct 2015 20:48:04 +0000 (20:48 +0000)]
Tweak to r250117 and change to use ErrorOr and drop isSizeValid for
ArchiveMemberHeader, suggestion by Rafael Espíndola.
Also The clang-x86-win2008-selfhost bot still does not like the
malformed-machos
00000031.a test, so removing it for now. All
the other bots are fine with it however.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250222
91177308-0d34-0410-b5e6-
96231b3b80d8
Joseph Tremoulet [Tue, 13 Oct 2015 20:18:27 +0000 (20:18 +0000)]
[WinEH] Add CoreCLR EH table emission
Summary:
Emit the handler and clause locations immediately after the standard
xdata.
Clauses are emitted in the same order and format used to communiate them
to the CLR Execution Engine.
Add a lit test to verify correct table generation on a small but
interesting example function.
Reviewers: majnemer, andrew.w.kaylor, rnk
Subscribers: pgavlin, AndyAyers, llvm-commits
Differential Revision: http://reviews.llvm.org/D13451
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250219
91177308-0d34-0410-b5e6-
96231b3b80d8
Duncan P. N. Exon Smith [Tue, 13 Oct 2015 20:07:10 +0000 (20:07 +0000)]
AMDGPU: Remove implicit ilist iterator conversions, NFC
One of the changes in lib/Target/AMDGPU/AMDGPUMCInstLower.cpp was a new
one. Previously, bundle iterators and single-instruction iterators
could be compared to each other (comparing on underlying pointers).
I changed a comparison from using `MBB->end()` to using
`MBB->instr_end()`, since both end iterators should point at the some
place anyway.
I don't think the implicit conversion between the two iterator types is
a good idea since it's fairly easy to accidentally compare to the wrong
thing (they aren't always end iterators). Otherwise I would have just
added the conversion.
Even with that, no there should be functionality change here.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250218
91177308-0d34-0410-b5e6-
96231b3b80d8
Duncan P. N. Exon Smith [Tue, 13 Oct 2015 20:02:15 +0000 (20:02 +0000)]
AArch64: Remove implicit ilist iterator conversions, NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250216
91177308-0d34-0410-b5e6-
96231b3b80d8
Duncan P. N. Exon Smith [Tue, 13 Oct 2015 19:47:46 +0000 (19:47 +0000)]
SelectionDAG: Remove implicit ilist iterator conversions, NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250214
91177308-0d34-0410-b5e6-
96231b3b80d8
Duncan P. N. Exon Smith [Tue, 13 Oct 2015 19:26:58 +0000 (19:26 +0000)]
Scalar: Remove remaining ilist iterator implicit conversions
Remove remaining `ilist_iterator` implicit conversions from
LLVMScalarOpts.
This change exposed some scary behaviour in
lib/Transforms/Scalar/SCCP.cpp around line 1770. This patch changes a
call from `Function::begin()` to `&Function::front()`, since the return
was immediately being passed into another function that takes a
`Function*`. `Function::front()` started to assert, since the function
was empty. Note that `Function::end()` does not point at a legal
`Function*` -- it points at an `ilist_half_node` -- so the other
function was getting garbage before. (I added the missing check for
`Function::isDeclaration()`.)
Otherwise, no functionality change intended.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250211
91177308-0d34-0410-b5e6-
96231b3b80d8
Akira Hatanaka [Tue, 13 Oct 2015 18:55:34 +0000 (18:55 +0000)]
[AArch64] Check the size of the vector before accessing its elements.
This fixes an assert in AArch64AsmParser::MatchAndEmitInstruction.
rdar://problem/
23081753
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250207
91177308-0d34-0410-b5e6-
96231b3b80d8
Cong Hou [Tue, 13 Oct 2015 18:43:10 +0000 (18:43 +0000)]
Update the branch weight metadata in JumpThreading pass.
Currently in JumpThreading pass, the branch weight metadata is not updated after CFG modification. Consider the jump threading on PredBB, BB, and SuccBB. After jump threading, the weight on BB->SuccBB should be adjusted as some of it is contributed by the edge PredBB->BB, which doesn't exist anymore. This patch tries to update the edge weight in metadata on BB->SuccBB by scaling it by 1 - Freq(PredBB->BB) / Freq(BB->SuccBB).
Differential revision: http://reviews.llvm.org/D10979
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250204
91177308-0d34-0410-b5e6-
96231b3b80d8
Xinliang David Li [Tue, 13 Oct 2015 18:39:48 +0000 (18:39 +0000)]
[PGO]: Eliminate calls to __llvm_profile_register_function for Linux.
On Linux, the profile runtime can use __start_SECTNAME and __stop_SECTNAME
symbols defined by the linker to locate the start and end location of
a named section (with C name). This eliminates the need for instrumented
binary to call __llvm_profile_register_function during start-up time.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250199
91177308-0d34-0410-b5e6-
96231b3b80d8
Duncan P. N. Exon Smith [Tue, 13 Oct 2015 18:26:00 +0000 (18:26 +0000)]
Scalar: Remove some implicit ilist iterator conversions, NFC
Remove some of the implicit ilist iterator conversions in
LLVMScalarOpts. More to go.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250197
91177308-0d34-0410-b5e6-
96231b3b80d8
Duncan P. N. Exon Smith [Tue, 13 Oct 2015 18:11:02 +0000 (18:11 +0000)]
ExecutionEngine: Remove implicit ilist iterator conversions, NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250193
91177308-0d34-0410-b5e6-
96231b3b80d8
Duncan P. N. Exon Smith [Tue, 13 Oct 2015 18:10:59 +0000 (18:10 +0000)]
OrcJIT: Remove implicit ilist iterator conversions, NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250192
91177308-0d34-0410-b5e6-
96231b3b80d8
Duncan P. N. Exon Smith [Tue, 13 Oct 2015 17:51:03 +0000 (17:51 +0000)]
IPO: Remove implicit ilist iterator conversions, NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250187
91177308-0d34-0410-b5e6-
96231b3b80d8
Duncan P. N. Exon Smith [Tue, 13 Oct 2015 17:39:10 +0000 (17:39 +0000)]
Instrumentation: Remove ilist iterator implicit conversions, NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250186
91177308-0d34-0410-b5e6-
96231b3b80d8
Duncan P. N. Exon Smith [Tue, 13 Oct 2015 17:33:41 +0000 (17:33 +0000)]
Interpreter: Remove implicit ilist iterator conversions, NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250185
91177308-0d34-0410-b5e6-
96231b3b80d8
Kevin Enderby [Tue, 13 Oct 2015 17:06:34 +0000 (17:06 +0000)]
The issue with the malformed-machos
00000031.a test is that it needed ‘-arch x86_64’
flag as it was a Mach-O universal file.
The default as to which architecture slice that is dumped without an -arch flag
depends on the host architecture and the contents of the universal file. The
malformed archive
00000031.a file has both an x86_64 and i386 slice. So for
for x86_64 hosts only that slice is dumped, for non-x86_64 hosts, which is many
of the bots both slices are dumped.
The test is intended to only check that the malformation of the x86_64 which
has a non-decimal characters in the size field of the archive header so it no
longer crashes.
The problem turned out that the i388 slice of the malformed archive had a
different malformation which was causing the non-x86_64 bots to get this error:
llvm-objdump -macho -disassemble -arch i386
00000031.a
Archive : .
00000031.a
00000031.a(c_start.o):
LLVM ERROR: Symbol name entry points before beginning or past end of file.
and causing the test as it was written to fail. So by adding ‘-arch x86_64’ it
should correct the test and the malformation on the i388 slice will not be
dumped.
Also the removal of the malformed-machos mem-crup-0261.macho was not causing
the issue so that is put back in.
Sorry for the churn on these tests, Kev
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250184
91177308-0d34-0410-b5e6-
96231b3b80d8
Duncan P. N. Exon Smith [Tue, 13 Oct 2015 16:59:33 +0000 (16:59 +0000)]
InstCombine: Remove ilist iterator implicit conversions, NFC
Stop relying on implicit conversions of ilist iterators in
LLVMInstCombine. No functionality change intended.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250183
91177308-0d34-0410-b5e6-
96231b3b80d8
Duncan P. N. Exon Smith [Tue, 13 Oct 2015 16:48:55 +0000 (16:48 +0000)]
BitcodeReader: Remove ilist iterator implicit conversions, NFC
Get LLVMBitReader building without relying on `ilist_iterator` implicit
conversions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250181
91177308-0d34-0410-b5e6-
96231b3b80d8
Joseph Tremoulet [Tue, 13 Oct 2015 16:44:30 +0000 (16:44 +0000)]
[WinEH] Iterate state changes instead of invokes
Summary:
Add an iterator that can walk across blocks and which visits the state
transitions rather than state ranges, with explicit transitions to -1
indicating the presence of top-level calls that may throw and cause the
current function to unwind to caller. This will simplify code that needs
to identify nested try regions.
Refactor SEH and C++EH table generation to use the new
InvokeStateChangeIterator, and remove the InvokeLabelIterator they were
using.
Reviewers: majnemer, andrew.w.kaylor, rnk
Subscribers: llvm-commits
Differential Revision: http://reviews.llvm.org/D13623
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250179
91177308-0d34-0410-b5e6-
96231b3b80d8
Xinliang David Li [Tue, 13 Oct 2015 16:35:59 +0000 (16:35 +0000)]
Fix a couple of comments; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250177
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Tue, 13 Oct 2015 16:23:00 +0000 (16:23 +0000)]
function names should start with a lower case letter; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250174
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Tue, 13 Oct 2015 15:12:27 +0000 (15:12 +0000)]
don't repeat function/class/variable names in comments; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250162
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Tue, 13 Oct 2015 14:48:54 +0000 (14:48 +0000)]
[InstCombine][SSE4A] Remove broken INSERTQI range combining optimization
As discussed in D13348 - the INSERTQI range combining code is wrong in that it confuses the insertion bit index with an extraction bit index.
The remaining legal combines are very unlikely (especially once we've converted to shuffles in D13348) so I'm removing the optimization.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250160
91177308-0d34-0410-b5e6-
96231b3b80d8
James Molloy [Tue, 13 Oct 2015 10:43:57 +0000 (10:43 +0000)]
[GlobalsAA] Turn GlobalsAA on again by default
Now that all the known faults with GlobalsAA have been fixed, flip the big switch on -enable-non-lto-gmr again.
Feel free to pester me with any more bugs found, and don't hesitate to flip the switch back off.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250157
91177308-0d34-0410-b5e6-
96231b3b80d8
James Molloy [Tue, 13 Oct 2015 10:43:33 +0000 (10:43 +0000)]
[GlobalsAA] Don't assume anything about functions that may be overridden
Weak linkage and friends allow a symbol to be overriden outside the
code generator's model, so GlobalsAA shouldn't assume that anything it
can compute about such a symbol is valid.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250156
91177308-0d34-0410-b5e6-
96231b3b80d8
Christof Douma [Tue, 13 Oct 2015 09:38:21 +0000 (09:38 +0000)]
Test commit
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250154
91177308-0d34-0410-b5e6-
96231b3b80d8
Michael Liao [Tue, 13 Oct 2015 07:26:04 +0000 (07:26 +0000)]
Remove unnecessary argument in ipo iterator
- Otherwise, it won't be compiled if that template is instantiated.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250153
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjoy Das [Tue, 13 Oct 2015 07:17:38 +0000 (07:17 +0000)]
[IndVars] NFC Cleanup.
- Rename methods according to the LLVM Coding Style
- Merge adjacent anonymous namespace block
- Use `auto` in two places
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250152
91177308-0d34-0410-b5e6-
96231b3b80d8
Michael Kuperstein [Tue, 13 Oct 2015 06:22:30 +0000 (06:22 +0000)]
Fix line-ending issue. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250151
91177308-0d34-0410-b5e6-
96231b3b80d8