David Blaikie [Mon, 30 Sep 2019 23:19:10 +0000 (23:19 +0000)]
DebugInfo: Simplify section label caching/usage
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373273
91177308-0d34-0410-b5e6-
96231b3b80d8
Amaury Sechet [Mon, 30 Sep 2019 22:52:28 +0000 (22:52 +0000)]
Add partial bswap test to the X86 backend. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373271
91177308-0d34-0410-b5e6-
96231b3b80d8
Amaury Sechet [Mon, 30 Sep 2019 21:41:52 +0000 (21:41 +0000)]
[DAGCombiner] Clang format MatchRotate. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373269
91177308-0d34-0410-b5e6-
96231b3b80d8
David Blaikie [Mon, 30 Sep 2019 21:02:06 +0000 (21:02 +0000)]
Remove else-after-return
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373266
91177308-0d34-0410-b5e6-
96231b3b80d8
Florian Hahn [Mon, 30 Sep 2019 21:00:50 +0000 (21:00 +0000)]
[bugpoint] Update runPasses to take ArrayRef instead of a pointer (NFC)
This makes it slightly easier to pass extra arguments to runPasses
and simplifies the code slightly.
Reviewers: efriedma, bogner, dblaikie, diegotf, hiraditya
Reviewed By: dblaikie, hiraditya
Differential Revision: https://reviews.llvm.org/D68228
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373265
91177308-0d34-0410-b5e6-
96231b3b80d8
Daniel Sanders [Mon, 30 Sep 2019 20:55:53 +0000 (20:55 +0000)]
[globalisel][knownbits] Allow targets to call GISelKnownBits::computeKnownBitsImpl()
Summary:
It seems we missed that the target hook can't query the known-bits for the
inputs to a target instruction. Fix that oversight
Reviewers: aditya_nandakumar
Subscribers: rovka, hiraditya, volkan, Petar.Avramovic, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D67380
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373264
91177308-0d34-0410-b5e6-
96231b3b80d8
Evandro Menezes [Mon, 30 Sep 2019 20:53:23 +0000 (20:53 +0000)]
[ConstantFolding] Fold constant calls to log2()
Somehow, folding calls to `log2()` with a constant was missing.
Differential revision: https://reviews.llvm.org/D67300
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373262
91177308-0d34-0410-b5e6-
96231b3b80d8
Evandro Menezes [Mon, 30 Sep 2019 20:52:21 +0000 (20:52 +0000)]
[InstCombine] Expand the simplification of log()
Expand the simplification of special cases of `log()` to include `log2()`
and `log10()` as well as intrinsics and more types.
Differential revision: https://reviews.llvm.org/D67199
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373261
91177308-0d34-0410-b5e6-
96231b3b80d8
Amaury Sechet [Mon, 30 Sep 2019 20:47:23 +0000 (20:47 +0000)]
[DAGCombiner] Update MatchRotate so that it returns an SDValue. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373260
91177308-0d34-0410-b5e6-
96231b3b80d8
Alina Sbirlea [Mon, 30 Sep 2019 20:17:23 +0000 (20:17 +0000)]
[LegacyPassManager] Deprecate the BasicBlockPass/Manager.
Summary:
The BasicBlockManager is potentially broken and should not be used.
Replace all uses of the BasicBlockPass with a FunctionBlockPass+loop on
blocks.
Reviewers: chandlerc
Subscribers: jholewinski, sanjoy.google, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D68234
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373254
91177308-0d34-0410-b5e6-
96231b3b80d8
Saleem Abdulrasool [Mon, 30 Sep 2019 20:03:59 +0000 (20:03 +0000)]
build: serialise `LLVM_ENABLE_UNWIND_TABLES` into LLVMConfig
Serialize the value of the configuration option into the configuration so that
builds which integrate LLVM can identify the value of the flag that was used to
build the libraries. This is intended to be used by Swift to control tests
which rely on the unwind information.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373253
91177308-0d34-0410-b5e6-
96231b3b80d8
David Bolvansky [Mon, 30 Sep 2019 19:43:48 +0000 (19:43 +0000)]
[FunctionAttrs] Added noalias for memccpy/mempcpy arguments
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373251
91177308-0d34-0410-b5e6-
96231b3b80d8
Roman Lebedev [Mon, 30 Sep 2019 19:16:00 +0000 (19:16 +0000)]
[InstCombine][NFC] visitShl(): call SimplifyQuery::getWithInstruction() once
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373249
91177308-0d34-0410-b5e6-
96231b3b80d8
Roman Lebedev [Mon, 30 Sep 2019 19:15:51 +0000 (19:15 +0000)]
[NFC][InstCombine] Redundant-left-shift-input-masking: add some more undef tests
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373248
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Mon, 30 Sep 2019 18:43:44 +0000 (18:43 +0000)]
[X86] Mask off upper bits of splat element in LowerBUILD_VECTORvXi1 when forming a SELECT.
The i1 scalar would have been type legalized to i8, but that
doesn't guarantee anything about the upper bits. If we're going
to use it as condition we need to make sure the upper bits are 0.
I've special cased ISD::SETCC conditions since that should
guarantee zero upper bits. We could go further and use
computeKnownBits, but we have no tests that would need that.
Fixes PR43507.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373246
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Mon, 30 Sep 2019 18:43:27 +0000 (18:43 +0000)]
[X86] Address post-commit review from code I accidentally commited in r373136.
See https://reviews.llvm.org/D68167
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373245
91177308-0d34-0410-b5e6-
96231b3b80d8
Yuanfang Chen [Mon, 30 Sep 2019 18:32:38 +0000 (18:32 +0000)]
Fix build warning for r373240.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373244
91177308-0d34-0410-b5e6-
96231b3b80d8
Nico Weber [Mon, 30 Sep 2019 18:13:48 +0000 (18:13 +0000)]
Revert "[MC] Emit unused undefined symbol even if its binding is not set"
This reverts r373168. It caused PR43511.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373242
91177308-0d34-0410-b5e6-
96231b3b80d8
Rong Xu [Mon, 30 Sep 2019 18:11:22 +0000 (18:11 +0000)]
[PGO] Don't group COMDAT variables for compiler generated profile variables in ELF
With this patch, compiler generated profile variables will have its own COMDAT
name for ELF format, which syncs the behavior with COFF. Tested with clang
PGO bootstrap. This shows a modest reduction in object sizes in ELF format.
Differential Revision: https://reviews.llvm.org/D68041
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373241
91177308-0d34-0410-b5e6-
96231b3b80d8
Yuanfang Chen [Mon, 30 Sep 2019 17:54:50 +0000 (17:54 +0000)]
[NewPM] Port MachineModuleInfo to the new pass manager.
Existing clients are converted to use MachineModuleInfoWrapperPass. The
new interface is for defining a new pass manager API in CodeGen.
Reviewers: fedor.sergeev, philip.pfaffe, chandlerc, arsenm
Reviewed By: arsenm, fedor.sergeev
Differential Revision: https://reviews.llvm.org/D64183
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373240
91177308-0d34-0410-b5e6-
96231b3b80d8
Andrea Di Biagio [Mon, 30 Sep 2019 17:24:25 +0000 (17:24 +0000)]
[MCA] Use references to LSUnitBase in class Scheduler and add helper methods to acquire/release LS queue entries. NFCI
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373236
91177308-0d34-0410-b5e6-
96231b3b80d8
Alina Sbirlea [Mon, 30 Sep 2019 17:23:49 +0000 (17:23 +0000)]
[LegacyPassManager] Attempt to fix BasicBlockManager
Temporarily fix BaiscBlockManager based on the code in the other
managers.
Replacement of all uses of the BasicBlockPass to follow.
Resolves PR42264.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373235
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Mon, 30 Sep 2019 17:14:22 +0000 (17:14 +0000)]
[X86] Add ANY_EXTEND to switch in ReplaceNodeResults, but just fall back to default handling.
ANY_EXTEND of v8i8 is marked Custom on AVX512 for handling extends
from v8i8. But the type legalization infrastructure will call
ReplaceNodeResults for v8i8 results. We should just defer it the
default handling instead of asserting in the default of the switch.
Fixes PR43509.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373234
91177308-0d34-0410-b5e6-
96231b3b80d8
Kerry McLaughlin [Mon, 30 Sep 2019 17:10:21 +0000 (17:10 +0000)]
[AArch64][SVE] Implement punpk[hi|lo] intrinsics
Summary:
Adds the following two intrinsics:
- int_aarch64_sve_punpkhi
- int_aarch64_sve_punpklo
This patch also contains a fix which allows LLVMHalfElementsVectorType
to forward reference overloadable arguments.
Reviewers: sdesmalen, rovka, rengolin
Reviewed By: sdesmalen
Subscribers: tschuett, kristof.beyls, hiraditya, rkruppe, psnobl, greened, cfe-commits, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D67830
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373232
91177308-0d34-0410-b5e6-
96231b3b80d8
Alina Sbirlea [Mon, 30 Sep 2019 17:08:40 +0000 (17:08 +0000)]
[EarlyCSE] Pass preserves AA.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373231
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Mon, 30 Sep 2019 17:02:26 +0000 (17:02 +0000)]
[InstCombine] fold negate disguised as select+mul
Name: negate if true
%sel = select i1 %cond, i32 -1, i32 1
%r = mul i32 %sel, %x
=>
%m = sub i32 0, %x
%r = select i1 %cond, i32 %m, i32 %x
Name: negate if false
%sel = select i1 %cond, i32 1, i32 -1
%r = mul i32 %sel, %x
=>
%m = sub i32 0, %x
%r = select i1 %cond, i32 %x, i32 %m
https://rise4fun.com/Alive/Nlh
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373230
91177308-0d34-0410-b5e6-
96231b3b80d8
Pablo Barrio [Mon, 30 Sep 2019 16:55:10 +0000 (16:55 +0000)]
Fix doc for t inline asm constraints for ARM/Thumb
Summary: The constraint goes up to regs d15 and q7, not d16 and q8.
Subscribers: kristof.beyls, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D68090
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373228
91177308-0d34-0410-b5e6-
96231b3b80d8
Jessica Paquette [Mon, 30 Sep 2019 16:49:13 +0000 (16:49 +0000)]
[AArch64][GlobalISel] Support lowering variadic musttail calls
This adds support for lowering variadic musttail calls. To do this, we have
to...
- Detect a musttail call in a variadic function before attempting to lower the
call's formal arguments. This is done in the IRTranslator.
- Compute forwarded registers in `lowerFormalArguments`, and add copies for
those registers.
- Restore the forwarded registers in `lowerTailCall`.
Because there doesn't seem to be any nice way to wrap these up into the outgoing
argument handler, the restore code in `lowerTailCall` is done separately.
Also, irritatingly, you have to make sure that the registers don't overlap with
any passed parameters. Otherwise, the scheduler doesn't know what to do with the
extra copies and asserts.
Add call-translator-variadic-musttail.ll to test this. This is pretty much the
same as the X86 musttail-varargs.ll test. We didn't have as nice of a test to
base this off of, but the idea is the same.
Differential Revision: https://reviews.llvm.org/D68043
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373226
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Atanasyan [Mon, 30 Sep 2019 16:47:21 +0000 (16:47 +0000)]
[mips] Fix code indentation. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373225
91177308-0d34-0410-b5e6-
96231b3b80d8
Amaury Sechet [Mon, 30 Sep 2019 16:26:09 +0000 (16:26 +0000)]
Add tests for rotate with demanded bits. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373223
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Mon, 30 Sep 2019 15:43:27 +0000 (15:43 +0000)]
[InstCombine] add tests for negate disguised as mul; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373222
91177308-0d34-0410-b5e6-
96231b3b80d8
Alexander Timofeev [Mon, 30 Sep 2019 15:31:17 +0000 (15:31 +0000)]
[AMDGPU] SIFoldOperands should not fold register acrocc the EXEC definition
Reviewers: rampitec
Differential Revision: https://reviews.llvm.org/D67662
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373221
91177308-0d34-0410-b5e6-
96231b3b80d8
Paul Robinson [Mon, 30 Sep 2019 15:11:23 +0000 (15:11 +0000)]
[SSP] [3/3] cmpxchg and addrspacecast instructions can now
trigger stack protectors. Fixes PR42238.
Add test coverage for llvm.memset, as proxy for all llvm.mem*
intrinsics. There are two issues here: (1) they could be lowered to a
libc call, which could be intercepted, and do Bad Stuff; (2) with a
non-constant size, they could overwrite the current stack frame.
The test was mostly written by Matt Arsenault in r363169, which was
later reverted; I tweaked what he had and added the llvm.memset part.
Differential Revision: https://reviews.llvm.org/D67845
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373220
91177308-0d34-0410-b5e6-
96231b3b80d8
Paul Robinson [Mon, 30 Sep 2019 15:08:38 +0000 (15:08 +0000)]
[SSP] [2/3] Refactor an if/dyn_cast chain to switch on opcode. NFC
Differential Revision: https://reviews.llvm.org/D67844
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373219
91177308-0d34-0410-b5e6-
96231b3b80d8
Paul Robinson [Mon, 30 Sep 2019 15:01:35 +0000 (15:01 +0000)]
[SSP] [1/3] Revert "StackProtector: Use PointerMayBeCaptured"
"Captured" and "relevant to Stack Protector" are not the same thing.
This reverts commit
f29366b1f594f48465c5a2754bcffac6d70fd0b1.
aka r363169.
Differential Revision: https://reviews.llvm.org/D67842
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373216
91177308-0d34-0410-b5e6-
96231b3b80d8
Kevin P. Neal [Mon, 30 Sep 2019 14:51:59 +0000 (14:51 +0000)]
Fix breakage of sphinx builders. Sorry for leaving this broken over the
weekend!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373215
91177308-0d34-0410-b5e6-
96231b3b80d8
Tamas Berghammer [Mon, 30 Sep 2019 14:44:24 +0000 (14:44 +0000)]
Support MemoryLocation::UnknownSize in TargetLowering::IntrinsicInfo
Summary:
Previously IntrinsicInfo::size was an unsigned what can't represent the
64 bit value used by MemoryLocation::UnknownSize.
Reviewers: jmolloy
Subscribers: hiraditya, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D68219
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373214
91177308-0d34-0410-b5e6-
96231b3b80d8
Thomas Preud'homme [Mon, 30 Sep 2019 14:12:03 +0000 (14:12 +0000)]
[FileCheck] Remove implementation types from API
Summary:
Remove use of FileCheckPatternContext and FileCheckString concrete types
from FileCheck API to allow moving it and the other implementation only
only declarations into a private header file.
Reviewers: jhenderson, chandlerc, jdenny, probinson, grimar, arichardson, rnk
Subscribers: hiraditya, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D68186
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373211
91177308-0d34-0410-b5e6-
96231b3b80d8
Clement Courbet [Mon, 30 Sep 2019 13:53:50 +0000 (13:53 +0000)]
[llvm-exegesis][NFC] Move BenchmarkFailure to own file.
Summary: And rename to exegesis::Failure, as it's used everytwhere.
Reviewers: gchatelet
Subscribers: tschuett, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D68217
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373209
91177308-0d34-0410-b5e6-
96231b3b80d8
Guillaume Chatelet [Mon, 30 Sep 2019 13:34:44 +0000 (13:34 +0000)]
[Alignment][NFC] Remove AllocaInst::setAlignment(unsigned)
Summary:
This is patch is part of a series to introduce an Alignment type.
See this thread for context: http://lists.llvm.org/pipermail/llvm-dev/2019-July/133851.html
See this patch for the introduction of the type: https://reviews.llvm.org/D64790
Reviewers: courbet
Subscribers: jholewinski, arsenm, jvesely, nhaehnle, eraman, hiraditya, cfe-commits, llvm-commits
Tags: #clang, #llvm
Differential Revision: https://reviews.llvm.org/D68141
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373207
91177308-0d34-0410-b5e6-
96231b3b80d8
Chen Zheng [Mon, 30 Sep 2019 12:57:53 +0000 (12:57 +0000)]
[ConstantRange] add helper function addWithNoWrap().
Differential Revision: https://reviews.llvm.org/D67339
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373205
91177308-0d34-0410-b5e6-
96231b3b80d8
GN Sync Bot [Mon, 30 Sep 2019 12:57:04 +0000 (12:57 +0000)]
gn build: Merge r373202
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373204
91177308-0d34-0410-b5e6-
96231b3b80d8
Clement Courbet [Mon, 30 Sep 2019 12:50:25 +0000 (12:50 +0000)]
[llvm-exegesis][NFC] Refactor snippet file reading out of tool main.
Summary: Add unit tests.
Reviewers: gchatelet
Subscribers: mgorny, tschuett, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D68212
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373202
91177308-0d34-0410-b5e6-
96231b3b80d8
Djordje Todorovic [Mon, 30 Sep 2019 11:19:11 +0000 (11:19 +0000)]
Revert "Reland "[utils] Implement the llvm-locstats tool""
This reverts commit rL373183.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373200
91177308-0d34-0410-b5e6-
96231b3b80d8
Guillaume Chatelet [Mon, 30 Sep 2019 09:59:31 +0000 (09:59 +0000)]
[Alignment][NFC] Adding a max function.
Summary:
This is patch is part of a series to introduce an Alignment type.
See this thread for context: http://lists.llvm.org/pipermail/llvm-dev/2019-July/133851.html
See this patch for the introduction of the type: https://reviews.llvm.org/D64790
Reviewers: courbet
Subscribers: llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D68201
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373196
91177308-0d34-0410-b5e6-
96231b3b80d8
Guillaume Chatelet [Mon, 30 Sep 2019 09:37:05 +0000 (09:37 +0000)]
[Alignment][NFC] Remove LoadInst::setAlignment(unsigned)
Summary:
This is patch is part of a series to introduce an Alignment type.
See this thread for context: http://lists.llvm.org/pipermail/llvm-dev/2019-July/133851.html
See this patch for the introduction of the type: https://reviews.llvm.org/D64790
Reviewers: courbet, jdoerfert
Subscribers: hiraditya, asbirlea, cfe-commits, llvm-commits
Tags: #clang, #llvm
Differential Revision: https://reviews.llvm.org/D68142
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373195
91177308-0d34-0410-b5e6-
96231b3b80d8
Sam Parker [Mon, 30 Sep 2019 08:49:42 +0000 (08:49 +0000)]
[NFC][ARM][MVE] More tests
Add some loop tests that cover different float operations and types.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373192
91177308-0d34-0410-b5e6-
96231b3b80d8
Hans Wennborg [Mon, 30 Sep 2019 08:47:53 +0000 (08:47 +0000)]
NFC changes to SelectionDAGBuilder::visitBitTestHeader(), preparing for PR43129
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373191
91177308-0d34-0410-b5e6-
96231b3b80d8
Hans Wennborg [Mon, 30 Sep 2019 08:47:46 +0000 (08:47 +0000)]
Pre-commit a test case for PR43129.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373190
91177308-0d34-0410-b5e6-
96231b3b80d8
Djordje Todorovic [Mon, 30 Sep 2019 08:43:00 +0000 (08:43 +0000)]
[llvm-locstats] Fix the test for the Hexagon target
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373189
91177308-0d34-0410-b5e6-
96231b3b80d8
Sam Parker [Mon, 30 Sep 2019 08:03:23 +0000 (08:03 +0000)]
[ARM][MVE] Change VCTP operand
The VCTP instruction will calculate the predicate masked based upon
the number of elements that need to be processed. I had inserted the
sub before the vctp intrinsic and supplied it as the operand, but
this is incorrect as the phi should directly feed the vctp. The sub
is calculating the value for the next iteration.
Differential Revision: https://reviews.llvm.org/D67921
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373188
91177308-0d34-0410-b5e6-
96231b3b80d8
Roger Ferrer Ibanez [Mon, 30 Sep 2019 07:58:50 +0000 (07:58 +0000)]
[TargetLowering] Simplify expansion of S{ADD,SUB}O
ISD::SADDO uses the suggested sequence described in the section §2.4 of
the RISCV Spec v2.2. ISD::SSUBO uses the dual approach but checking for
(non-zero) positive.
Differential Revision: https://reviews.llvm.org/D47927
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373187
91177308-0d34-0410-b5e6-
96231b3b80d8
Sam Parker [Mon, 30 Sep 2019 07:52:10 +0000 (07:52 +0000)]
[ARM][CGP] Allow signext arguments
As we perform a zext on any arguments used in the promoted tree, it
doesn't matter if they're marked as signext. The only permitted
user(s) in the tree which would interpret the sign bits are signed
icmps. For these instructions, their promoted operands are truncated
before the icmp uses them.
Differential Revision: https://reviews.llvm.org/D68019
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373186
91177308-0d34-0410-b5e6-
96231b3b80d8
Tim Northover [Mon, 30 Sep 2019 07:46:52 +0000 (07:46 +0000)]
Revert "[SCEV] add no wrap flag for SCEVAddExpr."
This reverts r366419 because the analysis performed is within the context of
the loop and it's only valid to add wrapping flags to "global" expressions if
they're always correct.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373184
91177308-0d34-0410-b5e6-
96231b3b80d8
Djordje Todorovic [Mon, 30 Sep 2019 07:35:17 +0000 (07:35 +0000)]
Reland "[utils] Implement the llvm-locstats tool"
The tool reports verbose output for the DWARF debug location coverage.
The llvm-locstats for each variable or formal parameter DIE computes what
percentage from the code section bytes, where it is in scope, it has
location description. The line 0 shows the number (and the percentage) of
DIEs with no location information, but the line 100 shows the number (and
the percentage) of DIEs where there is location information in all code
section bytes (where the variable or parameter is in the scope). The line
50..59 shows the number (and the percentage) of DIEs where the location
information is in between 50 and 59 percentage of its scope covered.
Differential Revision: https://reviews.llvm.org/D66526
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373183
91177308-0d34-0410-b5e6-
96231b3b80d8
Jonas Paulsson [Mon, 30 Sep 2019 07:29:54 +0000 (07:29 +0000)]
[SystemZ] Add SystemZPostRewrite in addPostRegAlloc() instead at -O0.
SystemZPostRewrite needs to be run before (it may emit COPYs) the Post-RA
pseudo pass also at -O0, so it should be added in addPostRegAlloc().
Review: Ulrich Weigand
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373182
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Mon, 30 Sep 2019 06:47:03 +0000 (06:47 +0000)]
[X86] Remove some redundant isel patterns. NFCI
These are all also implemented in avx512_logical_lowering_types
with support for masking.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373181
91177308-0d34-0410-b5e6-
96231b3b80d8
Matt Arsenault [Mon, 30 Sep 2019 06:31:30 +0000 (06:31 +0000)]
AMDGPU/GlobalISel: Fix select for v2s16 and/or/xor
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373180
91177308-0d34-0410-b5e6-
96231b3b80d8
Fangrui Song [Mon, 30 Sep 2019 04:45:14 +0000 (04:45 +0000)]
[test] Change llvm-readobj --arm-attributes to --arch-specific after r373125
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373179
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Mon, 30 Sep 2019 03:14:38 +0000 (03:14 +0000)]
[X86] Split v16i32/v8i64 bitreverse on avx512f targets without avx512bw to enable the use of vpshufb on the 256-bit halves.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373177
91177308-0d34-0410-b5e6-
96231b3b80d8
Aditya Kumar [Mon, 30 Sep 2019 02:46:56 +0000 (02:46 +0000)]
Undef the macros after their use
Summary:
Reviewers:
t.p.northover
Subscribers:
Differential Revision: https://reviews.llvm.org/D46378
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373176
91177308-0d34-0410-b5e6-
96231b3b80d8
Fangrui Song [Mon, 30 Sep 2019 02:06:23 +0000 (02:06 +0000)]
[X86] Fix -Wunused-variable in -DLLVM_ENABLE_ASSERTIONS=off builds after r373174
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373175
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sun, 29 Sep 2019 23:32:37 +0000 (23:32 +0000)]
[X86] Remove -x86-experimental-vector-widening-legalization command line flag
This was added back to allow some performance regressions to be
investigated. The main perf issue was fixed shortly after adding
this back and no other major issues have been reported. So I
think its safe to remove this again.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373174
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sun, 29 Sep 2019 18:43:08 +0000 (18:43 +0000)]
[X86] Add custom isel logic to match VPTERNLOG from 2 logic ops.
There's room from improvement here, but this is a decent
starting point.
There are a few minor regressions in the vector-rotate tests,
where we are now forming a vpternlog from an and before we get
a chance to form it for a bitselect that we were matching
previously. This results in an AND and an ANDN feeding the
vpternlog where previously we just had an AND after the
vpternlog. I think we can probably DAG combine the AND with
the bitselect to get back to similar codegen.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373172
91177308-0d34-0410-b5e6-
96231b3b80d8
Amaury Sechet [Sun, 29 Sep 2019 17:54:03 +0000 (17:54 +0000)]
Add test case peeking through vector concat when combining insert into shuffles. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373171
91177308-0d34-0410-b5e6-
96231b3b80d8
Aditya Kumar [Sun, 29 Sep 2019 16:06:22 +0000 (16:06 +0000)]
[LLVM-C][Ocaml] Add MergeFunctions and DCE pass
MergeFunctions and DCE pass are missing from OCaml/C-api. This patch
adds them.
Differential Revision: https://reviews.llvm.org/D65071
Reviewers: whitequark, hiraditya, deadalnix
Reviewed By: whitequark
Subscribers: llvm-commits
Tags: #llvm
Authored by: kren1
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373170
91177308-0d34-0410-b5e6-
96231b3b80d8
DeForest Richards [Sun, 29 Sep 2019 15:31:52 +0000 (15:31 +0000)]
[Docs] Moves article links to new pages
Moves existing article links on the Programming, Subsystem, and Reference documentation pages to new locations. Also moves Github Repository and Publications links to the sidebar.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373169
91177308-0d34-0410-b5e6-
96231b3b80d8
Fangrui Song [Sun, 29 Sep 2019 15:26:12 +0000 (15:26 +0000)]
[MC] Emit unused undefined symbol even if its binding is not set
For the following two cases, we currently suppress the symbols. This
patch emits them (compatible with GNU as).
* `test2_a = undef`: if `undef` is otherwise unused.
* `.hidden hidden`: if `hidden` is unused. This is the main point of the
patch, because omitting the symbol would cause a linker semantic
difference.
It causes a behavior change that is not compatible with GNU as:
.weakref foo1, bar1
When neither foo1 nor bar1 is used, we now emit bar1, which is arguably
more consistent.
Another change is that we will emit .TOC. for .TOC.@tocbase . For this
directive, suppressing .TOC. can be seen as a size optimization, but we
choose to drop it for simplicity and consistency.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373168
91177308-0d34-0410-b5e6-
96231b3b80d8
Roman Lebedev [Sun, 29 Sep 2019 15:25:24 +0000 (15:25 +0000)]
[DivRemPairs] Don't assert that we won't ever get expanded-form rem pairs in different BB's (PR43500)
If we happen to have the same div in two basic blocks,
and in one of those we also happen to have the rem part,
we'd match the div-rem pair, but the wrong ones.
So let's drop overly-ambiguous assert.
Fixes https://bugs.llvm.org/show_bug.cgi?id=43500
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373167
91177308-0d34-0410-b5e6-
96231b3b80d8
Alexey Bataev [Sun, 29 Sep 2019 14:18:06 +0000 (14:18 +0000)]
[SLP] Fix for PR31847: Assertion failed: (isLoopInvariant(Operands[i], L) && "SCEVAddRecExpr operand is not loop-invariant!")
Initially SLP vectorizer replaced all going-to-be-vectorized
instructions with Undef values. It may break ScalarEvaluation and may
cause a crash.
Reworked SLP vectorizer so that it does not replace vectorized
instructions by UndefValue anymore. Instead vectorized instructions are
marked for deletion inside if BoUpSLP class and deleted upon class
destruction.
Reviewers: mzolotukhin, mkuper, hfinkel, RKSimon, davide, spatel
Subscribers: RKSimon, Gerolf, anemet, hans, majnemer, llvm-commits, sanjoy
Differential Revision: https://reviews.llvm.org/D29641
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373166
91177308-0d34-0410-b5e6-
96231b3b80d8
Jinsong Ji [Sun, 29 Sep 2019 12:43:46 +0000 (12:43 +0000)]
[PowerPC] Fix conditions of assert in PPCAsmPrinter
Summary:
g++ build emits warning:
llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp:667:77: error: suggest parentheses around ?&&? within ?||? [-Werror=parentheses]
assert(MO.isGlobal() || MO.isCPI() || MO.isJTI() || MO.isBlockAddress() &&
~~~~~~~~~~~~~~~~~~~~^~
"Unexpected operand type for LWZtoc pseudo.");
I believe the intension is to assert all different types,
so we should add a parentheses to include all '||'.
Reviewers: #powerpc, sfertile, hubert.reinterpretcast, Xiangling_L
Reviewed By: Xiangling_L
Subscribers: wuzish, nemanjai, hiraditya, kbarton, MaskRay, shchenz, steven.zhang, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D68180
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373164
91177308-0d34-0410-b5e6-
96231b3b80d8
David Green [Sun, 29 Sep 2019 08:38:48 +0000 (08:38 +0000)]
[ARM] Cortex-M4 schedule additions
This is an attempt to fill in some of the missing instructions from the
Cortex-M4 schedule, and make it easier to do the same for other ARM cpus.
- Some instructions are marked as hasNoSchedulingInfo as they are pseudos or
otherwise do not require scheduling info
- A lot of features have been marked not supported
- Some WriteRes's have been added for cvt instructions.
- Some extra instruction latencies have been added, notably by relaxing the
regex for dsp instruction to catch more cases, and some fp instructions.
This goes a long way to get the CompleteModel working for this CPU. It does not
go far enough as to get all scheduling info for all output operands correct.
Differential Revision: https://reviews.llvm.org/D67957
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373163
91177308-0d34-0410-b5e6-
96231b3b80d8
DeForest Richards [Sun, 29 Sep 2019 02:16:38 +0000 (02:16 +0000)]
[Docs] Adds sections for Command Line and LibFuzzer articles
Adds sections for Command Line and Libfuzzer articles on Programming Documentation page.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373158
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sun, 29 Sep 2019 01:24:33 +0000 (01:24 +0000)]
[X86] Enable isel to fold broadcast loads that have been bitcasted from FP into a vpternlog.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373157
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sun, 29 Sep 2019 01:24:29 +0000 (01:24 +0000)]
[X86] Move bitselect matching to vpternlog into X86ISelDAGToDAG.cpp
This allows us to reduce the use count on the condition node before
the match. This enables load folding for that operand without
relying on the peephole pass. This will be improved on for
broadcast load folding in a subsequent commit.
This still requires a bunch of isel patterns for vXi16/vXi8 types
though.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373156
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sun, 29 Sep 2019 01:24:22 +0000 (01:24 +0000)]
[X86] Enable canonicalizeBitSelect for AVX512 since we can use VPTERNLOG now.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373155
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sun, 29 Sep 2019 01:24:16 +0000 (01:24 +0000)]
[X86] Match (or (and A, B), (andn (A, C))) to VPTERNLOG with AVX512.
This uses a similar isel pattern as we used for vpcmov with XOP.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373154
91177308-0d34-0410-b5e6-
96231b3b80d8
Aditya Kumar [Sat, 28 Sep 2019 18:13:33 +0000 (18:13 +0000)]
[NFC] Move hot cold splitting class to header file
Summary: This is to facilitate unittests
Reviewers: compnerd, vsk, tejohnson, sebpop, brzycki, SirishP
Reviewed By: tejohnson
Subscribers: llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D68079
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373151
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Sat, 28 Sep 2019 13:34:53 +0000 (13:34 +0000)]
[PowerPC] make tests immune to improved undef handling
The fma mutate test will not exercise what it was intended to test
once we simplify those ops immediately, but the test will still
pass with the existing CHECKs, so I'm leaving it in case that
still has minimal value.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373149
91177308-0d34-0410-b5e6-
96231b3b80d8
Amara Emerson [Sat, 28 Sep 2019 07:55:42 +0000 (07:55 +0000)]
[GlobalISel Enable memcpy inlining with optsize.
We should be disabling inline for minsize, not optsize.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373143
91177308-0d34-0410-b5e6-
96231b3b80d8
Anton Afanasyev [Sat, 28 Sep 2019 07:14:12 +0000 (07:14 +0000)]
[TimeProfiler] Fix "OptModule" section and add new "Backend" sections
Remove unnecessary "OptModule" section. Add "PerFunctionPasses",
"PerModulePasses" and "CodeGenPasses" sections under "Backend" section.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373142
91177308-0d34-0410-b5e6-
96231b3b80d8
Amara Emerson [Sat, 28 Sep 2019 05:33:21 +0000 (05:33 +0000)]
Add an operand to memory intrinsics to denote the "tail" marker.
We need to propagate this information from the IR in order to be able to safely
do tail call optimizations on the intrinsics during legalization. Assuming
it's safe to do tail call opt without checking for the marker isn't safe because
the mem libcall may use allocas from the caller.
This adds an extra immediate operand to the end of the intrinsics and fixes the
legalizer to handle it.
Differential Revision: https://reviews.llvm.org/D68151
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373140
91177308-0d34-0410-b5e6-
96231b3b80d8
Matt Arsenault [Sat, 28 Sep 2019 03:41:13 +0000 (03:41 +0000)]
AMDGPU/GlobalISel: Avoid getting MRI in every function
Store it in AMDGPUInstructionSelector to avoid boilerplate in nearly
every select function.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373139
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sat, 28 Sep 2019 01:56:36 +0000 (01:56 +0000)]
[X86] Add broadcast load unfolding support for VPTESTMD/Q and VPTESTNMD/Q.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373138
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sat, 28 Sep 2019 01:08:46 +0000 (01:08 +0000)]
[X86] Stop using UpdateNodeOperands in combineGatherScatter. Create new nodes like most other DAG combines.
Creating new nodes is what we usually do. Have to explicitly
check that we don't update to an existing node and having
to manually manage the worklist is unusual.
We can probably add a helper function to reduce the duplication
of having to check if we should create a gather or scatter, but
I wanted to just get the simple thing done.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373137
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sat, 28 Sep 2019 01:06:58 +0000 (01:06 +0000)]
[X86] Split combineGatherScatter into a version for generic ISD nodes and another version for X86 specific nodes.
The majority of the code doesn't run on the X86 nodes today since
its gated by isBeforeLegalizeOps and we don't formm X86 nodes
until after that. Except for a couple special case in type
legalization. But I think we would probably break those if
some of the transforms fire on them.
I want to remove the hardcoded operand numbers and the unusual
use of UpdateNodeOperands. Being able to know which ISD opcodes
are present should help with that.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373136
91177308-0d34-0410-b5e6-
96231b3b80d8
Wei Mi [Fri, 27 Sep 2019 22:33:59 +0000 (22:33 +0000)]
[SampleFDO] Create a separate flag profile-accurate-for-symsinlist to handle
profile symbol list.
Currently many existing users using profile-sample-accurate want to reduce
code size as much as possible. Their use cases are different from the scenario
profile symbol list tries to handle -- the major motivation of adding profile
symbol list is to get the major memory/code size saving without introduce
performance regression. So to keep the behavior of profile-sample-accurate
unchanged, we think decoupling these two things and using a new flag to
control the handling of profile symbol list may be better.
When profile-sample-accurate and the new flag profile-accurate-for-symsinlist
are both present, since profile-sample-accurate is a user assertion we let it
have a higher precedence.
Differential Revision: https://reviews.llvm.org/D68047
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373133
91177308-0d34-0410-b5e6-
96231b3b80d8
Alexander Shaposhnikov [Fri, 27 Sep 2019 22:33:18 +0000 (22:33 +0000)]
[llvm-lipo] Add support for -arch
Add support for -arch.
Differential revision: https://reviews.llvm.org/D68116
Test plan: make check-all
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373132
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Fri, 27 Sep 2019 22:30:24 +0000 (22:30 +0000)]
[X86] Add test case to show missed opportunity to turn (add (zext (vXi1 X)), Y) -> (sub Y, (sext (vXi1 X))) with avx512.
With avx512, the vXi1 type is legal. And we can more easily sign
extend them to vector registers. zext requires a sign extend and
a shift.
If we can easily turn the zext into a sext we should.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373131
91177308-0d34-0410-b5e6-
96231b3b80d8
Roman Lebedev [Fri, 27 Sep 2019 21:53:04 +0000 (21:53 +0000)]
[PatternMatch] Add m_SExtOrSelf(), m_ZExtOrSExtOrSelf() matchers + unittests
m_SExtOrSelf() is for consistency.
m_ZExtOrSExtOrSelf() is motivated by the D68103/r373106 :
sometimes it is useful to look past any extensions of the shift amount,
and m_ZExtOrSExtOrSelf() may be exactly the tool to do that.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373128
91177308-0d34-0410-b5e6-
96231b3b80d8
Yi Kong [Fri, 27 Sep 2019 20:38:18 +0000 (20:38 +0000)]
[llvm-readobj] Rename --arm-attributes to --arch-specific
This is for compatibility with GNU readobj. --arm-attributes option is
left as a hidden alias due to large number of tests using it.
Differential Revision: https://reviews.llvm.org/D68110
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373125
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Fri, 27 Sep 2019 20:09:09 +0000 (20:09 +0000)]
[InstSimplify] generalize FP folds with undef/NaN; NFC
We can reuse this logic for things like fma.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373119
91177308-0d34-0410-b5e6-
96231b3b80d8
Jakub Kuderski [Fri, 27 Sep 2019 19:33:39 +0000 (19:33 +0000)]
Revert [Dominators][CodeGen] Clean up MachineDominators
This reverts r373101 (git commit
72c57ec3e6b320c31274dadb888dc16772b8e7b6)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373117
91177308-0d34-0410-b5e6-
96231b3b80d8
Jakub Kuderski [Fri, 27 Sep 2019 19:33:35 +0000 (19:33 +0000)]
Revert XFAIL a codegen test AArch64/tailmerging_in_mbp.ll
This reverts r373103 (git commit
a524e630a793e18e7d5fabc2262781f310eb0279)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373116
91177308-0d34-0410-b5e6-
96231b3b80d8
Roman Lebedev [Fri, 27 Sep 2019 19:32:43 +0000 (19:32 +0000)]
[NFC][PhaseOrdering] Add end-to-end tests for the 'two shifts by sext' problem
We start with two separate sext's, but EarlyCSE runs before InstCombine,
so when we get them, they are a single sext, and we just ignore that.
Likewise, if we had a single sext, we don't do anything there.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373115
91177308-0d34-0410-b5e6-
96231b3b80d8
DeForest Richards [Fri, 27 Sep 2019 19:12:00 +0000 (19:12 +0000)]
[Docs] Adds new section to User Guides page
Adds a section to the User Guides page for articles related to building, packaging, and distributing LLVM. Includes sub-sections for CMake, Clang, and Docker.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373113
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Fri, 27 Sep 2019 18:38:51 +0000 (18:38 +0000)]
[InstSimplify] add tests for fma/fmuladd with undef operand; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373109
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Fri, 27 Sep 2019 18:23:55 +0000 (18:23 +0000)]
[X86] Call SimplifyDemandedBits in combineGatherScatter any time the mask element is wider than i1, not just when AVX512 is disabled.
The AVX2 intrinsics can still be used when AVX512 is enabled and
those go through this path. So we should simplify them.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373108
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Fri, 27 Sep 2019 18:23:46 +0000 (18:23 +0000)]
[X86] Add test case to show failure to perform SimplifyDemandedBits on mask of avx2 gather intrinsics when avx512 is enabled.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373107
91177308-0d34-0410-b5e6-
96231b3b80d8
Roman Lebedev [Fri, 27 Sep 2019 18:12:15 +0000 (18:12 +0000)]
[InstCombine] Simplify shift-by-sext to shift-by-zext
Summary:
This is valid for any `sext` bitwidth pair:
```
Processing /tmp/opt.ll..
----------------------------------------
%signed = sext %y
%r = shl %x, %signed
ret %r
=>
%unsigned = zext %y
%r = shl %x, %unsigned
ret %r
%signed = sext %y
Done: 2016
Optimization is correct!
```
(This isn't so for funnel shifts, there it's illegal for e.g. i6->i7.)
Main motivation is the C++ semantics:
```
int shl(int a, char b) {
return a << b;
}
```
ends as
```
%3 = sext i8 %1 to i32
%4 = shl i32 %0, %3
```
https://godbolt.org/z/0jgqUq
which is, as this shows, too pessimistic.
There is another problem here - we can only do the fold
if sext is one-use. But we can trivially have cases
where several shifts have the same sext shift amount.
This should be resolved, later.
Reviewers: spatel, nikic, RKSimon
Reviewed By: spatel
Subscribers: efriedma, hiraditya, nlopes, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D68103
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373106
91177308-0d34-0410-b5e6-
96231b3b80d8