Commit Graph

53251 Commits

Author SHA1 Message Date
Simon Pilgrim
08a4b34e50 [X86] CombineShuffleWithExtract - recurse through EXTRACT_SUBVECTOR chain
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364667 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-28 17:57:32 +00:00
Dmitry Preobrazhensky
539c69ef52 [AMDGPU][MC] Fix 2 for sanitizer failure in 364645
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364656 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-28 16:28:46 +00:00
Sam Tebbs
a71ac42554 [ARM] Add support for the MVE long shift instructions
MVE adds the lsll, lsrl and asrl instructions, which perform a shift on a 64 bit value separated into two 32 bit registers.

The Expand64BitShift function is modified to accept ISD::SHL, ISD::SRL and ISD::SRA and convert it into the appropriate opcode in ARMISD. An SHL is converted into an lsll, an SRL is converted into an lsrl for the immediate form and a negation and lsll for the register form, and SRA is converted into an asrl.

test/CodeGen/ARM/shift_parts.ll is added to test the logic of emitting these instructions.

Differential Revision: https://reviews.llvm.org/D63430

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364654 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-28 15:43:31 +00:00
Dmitry Preobrazhensky
c8753f157b [AMDGPU][MC] Fix for sanitizer failure in 364645
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364651 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-28 15:22:47 +00:00
Dmitry Preobrazhensky
3c357a49a3 [AMDGPU][MC] Enabled constant expressions as operands of sendmsg
See bug 40820: https://bugs.llvm.org/show_bug.cgi?id=40820

Reviewers: artem.tamazov, arsenm

Differential Revision: https://reviews.llvm.org/D62735

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364645 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-28 14:14:02 +00:00
Simon Pilgrim
ef0e051c6d [X86] CombineShuffleWithExtract - only require 1 source to be EXTRACT_SUBVECTOR
We were requiring that both shuffle operands were EXTRACT_SUBVECTORs, but we can relax this to only require one of them to be.

Also, we shouldn't bother attempting this if both operands are from the lowest subvector (or not EXTRACT_SUBVECTOR at all).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364644 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-28 12:24:49 +00:00
David Green
5f0953343c [ARM] Add MVE mul patterns
This simply adds integer and floating point VMUL patterns for MVE, same as we
have add and sub.

Differential Revision: https://reviews.llvm.org/D63866


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364643 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-28 11:44:03 +00:00
David Green
2dd6a9d6de [ARM] Mark math routines as non-legal for MVE
This adds handling and tests for a number of floating point math routines,
which have no MVE instructions.

Differential Revision: https://reviews.llvm.org/D63725


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364641 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-28 11:17:38 +00:00
David Green
4cbe79049c [ARM] MVE patterns for VABS and VNEG
This simply adds the required patterns for fp neg and abs.

Differential Revision: https://reviews.llvm.org/D63861


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364640 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-28 10:25:35 +00:00
David Green
0272917d5a [ARM] Widening loads and narrowing stores
MVE has instructions to widen as it loads, and narrow as it stores. This adds
the required patterns and legalisation to make them work including specifying
that they are legal, patterns to select them and test changes.

Patch by David Sherwood.

Differential Revision: https://reviews.llvm.org/D63839


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364636 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-28 09:47:55 +00:00
Simon Tatham
4f77b3ddf3 [ARM] Fix integer UB in MVE load/store immediate handling.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364635 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-28 09:28:39 +00:00
David Green
c2c9f7413e [ARM] MVE loads and stores
This fills in the gaps for basic MVE loads and stores, allowing unaligned
access and adding far too many tests. These will become important as
narrowing/expanding and pre/post inc are added. Big endian might still not be
handled very well, because we have not yet added bitcasts (and I'm not sure how
we want it to work yet). I've included the alignment code anyway which maps
with our current patterns. We plan to return to that later.

Code written by Simon Tatham, with additional tests from Me and Mikhail Maltsev.

Differential Revision: https://reviews.llvm.org/D63838


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364633 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-28 08:41:40 +00:00
Dylan McKay
54003d0c08 [AVR] Don't look for the TargetFrameLowering in the FrameLowering implementation
c.f. r364349

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364632 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-28 08:35:21 +00:00
David Green
67091fc7e1 [ARM] Mark div and rem as expand for MVE
We don't have vector operations for these, so they need to be expanded for both
integer and float.

Differential Revision: https://reviews.llvm.org/D63595


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364631 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-28 08:18:55 +00:00
David Green
03b8387d14 [ARM] Select MVE fp add and sub
The same as integer arithmetic, we can add simple floating point MVE addition and
subtraction patterns.

Initial code by David Sherwood

Differential Revision: https://reviews.llvm.org/D63257


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364629 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-28 07:41:09 +00:00
David Green
93744b32bb [ARM] Select MVE add and sub
This adds the first few patterns for MVE code generation, adding simple integer
add and sub patterns.

Initial code by David Sherwood

Differential Revision: https://reviews.llvm.org/D63255


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364627 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-28 07:21:11 +00:00
David Green
3b9e91d904 [ARM] MVE vector shuffles
This patch adds necessary shuffle vector and buildvector support for ARM MVE.
It essentially adds support for VDUP, VREVs and some VMOVs, which are often
required by other code (like upcoming patches).

This mostly uses the same code from Neon that already generated
NEONvdup/NEONvduplane/NEONvrev's. These have been renamed to ARMvdup/etc and
moved to ARMInstrInfo as they are common to both architectures. Most of the
selection code seems to be applicable to both, but NEON does have some more
instructions making some parts specific.

Most code originally by David Sherwood.

Differential Revision: https://reviews.llvm.org/D63567


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364626 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-28 07:08:42 +00:00
Craig Topper
5dcd620f4b [X86] Connect the output chain properly when combining vzext_movl+load into vzext_load.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364625 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-28 06:58:50 +00:00
Craig Topper
90bbc45f62 [X86] Remove some duplicate patterns that already exist as part of their instruction definition. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364623 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-28 05:03:47 +00:00
Zi Xuan Wu
8a35ae4e3b [NFC][PowerPC] Move XS*QP series instruction apart from XS*QPO series in position of td file
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364620 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-28 02:51:03 +00:00
Stanislav Mekhanoshin
41e9ec03c7 [AMDGPU] Packed thread ids in function call ABI
Differential Revision: https://reviews.llvm.org/D63851

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364619 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-28 01:52:13 +00:00
Kai Luo
6408bc58aa [PowerPC][NFC] Use |= to update Simplified flag
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364617 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-28 01:38:42 +00:00
Matt Arsenault
30321492f6 AMDGPU/GlobalISel: Convert to using Register
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364616 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-28 01:16:46 +00:00
Sanjay Patel
df3cc01106 [x86] prevent crashing from select narrowing with AVX512
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364585 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-27 20:16:58 +00:00
Jinsong Ji
cbdf90b993 [PowerPC][NFC] Remove unused (and unsupported) fusion feature bits.
FeatureFusion bits was first introduced in
https://reviews.llvm.org/rL253724. for add/load integer fusion for P8.
The only use of `hasFusion` was https://reviews.llvm.org/rL255319.

However, this was removed later in https://reviews.llvm.org/rL280440.

So, there is NO any reference to fusion in code now.

Leaving it there is misleading and confusing, so remove it for now.
We can alwasy add back if we ever support fusion in the future.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364581 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-27 19:35:11 +00:00
Wouter van Oortmerssen
b389cd0209 [WebAssembly] AsmParser: better atomic inst detection
Summary:
Previously missed atomic.notify.

Fixes https://bugs.llvm.org/show_bug.cgi?id=40728

Reviewers: aheejin

Subscribers: sbc100, jgravelle-google, sunfish, jfb, llvm-commits, dschuff

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D63747

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364576 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-27 18:58:26 +00:00
Wouter van Oortmerssen
c1056cbe8b [WebAssembly] Fix p2align in assembler.
Summary:
- Match the syntax output by InstPrinter.
- Fix it always emitting 0 for align. Had to work around fact that
  opcode is not available for GetDefaultP2Align while parsing.
- Updated tests that were erroneously happy with a p2align=0

Fixes https://bugs.llvm.org/show_bug.cgi?id=40752

Reviewers: aheejin, sbc100

Subscribers: jgravelle-google, sunfish, jfb, llvm-commits, dschuff

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D63633

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364570 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-27 18:11:15 +00:00
Simon Pilgrim
9a5e06d961 [X86] combineX86ShufflesRecursively - merge shuffles with more than 2 inputs
We already had the infrastructure for this, but were waiting for the fix for a number of regressions which were handled by the recent shuffle(extract_subvector(),extract_subvector()) -> extract_subvector(shuffle()) shuffle combines

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364569 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-27 17:30:51 +00:00
Nicolai Haehnle
c71a1c3902 AMDGPU: Make fixing i1 copies robust against re-ordering
Summary:
The new test case led to incorrect code.

Change-Id: Ief48b227e97aa662dd3535c9bafb27d4a184efca

Reviewers: arsenm, david-salinas

Subscribers: kzhuravl, jvesely, wdng, yaxunl, dstuttard, tpr, t-tye, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D63871

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364566 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-27 16:56:44 +00:00
Simon Pilgrim
b2caa05202 Use getConstantOperandAPInt instead of getConstantOperandVal for comparisons.
getConstantOperandAPInt avoids any large integer issues - these are unlikely but the fuzzers do like to mess around.....

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364564 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-27 16:46:00 +00:00
Simon Pilgrim
08c5274803 [X86] getTargetVShiftByConstNode - reduce variable scope. NFCI.
Fixes cppcheck warning.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364561 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-27 16:33:44 +00:00
Sam Tebbs
731fa4b917 [ARM] Fix formatting issue in ARMISelLowering.cpp
Fix a formatting error in ARMISelLowering.cpp::Expand64BitShift. My test
commit after receiving write access.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364560 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-27 16:28:28 +00:00
Roland Froese
d3e9a826c5 Recommit [PowerPC] Update P9 vector costs for insert/extract element
Recommit patch D60160 after regression fix patch D63463.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364557 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-27 16:20:24 +00:00
Jinsong Ji
e946fcb412 [PowerPC][HTM] Fix disassembling buffer overflow for tabortdc and others
This was reported in https://bugs.llvm.org/show_bug.cgi?id=41751
llvm-mc aborted when disassembling tabortdc.

This patch try to clean up TM related DAGs.

* Fixes the problem by remove explicit output of cr0, and put it as implicit def.
* Update int_ppc_tbegin pattern to accommodate the implicit def of cr0.
* Update the TCHECK operand and int_ppc_tcheck accordingly.
* Add some builtin test and disassembly tests.
* Remove unused CRRC0/crrc0

Differential Revision: https://reviews.llvm.org/D61935

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364544 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-27 14:11:31 +00:00
Simon Atanasyan
e1c550127b [mips] Mark pseudo select instructions by the hasNoSchedulingInfo tag
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364540 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-27 13:41:30 +00:00
Simon Atanasyan
8671e122e2 [mips] Add new items to the list of features unsupported by P5600
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364539 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-27 13:41:23 +00:00
Djordje Todorovic
856ec6e1b0 [Backend] Keep call site info valid through the backend
Handle call instruction replacements and deletions in order to preserve
valid state of the call site info of the MachineFunction.

NOTE: If the call site info is enabled for a new target, the assertion from
the MachineFunction::DeleteMachineInstr() should help to locate places
where the updateCallSiteInfo() should be called in order to preserve valid
state of the call site info.

([10/13] Introduce the debug entry values.)

Co-authored-by: Ananth Sowda <asowda@cisco.com>
Co-authored-by: Nikola Prica <nikola.prica@rt-rk.com>
Co-authored-by: Ivan Baev <ibaev@cisco.com>

Differential Revision: https://reviews.llvm.org/D61062

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364536 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-27 13:10:29 +00:00
Simon Tatham
3a2501e0a0 [ARM] Fix bogus assertions in copyPhysReg v8.1-M cases.
The code to generate register move instructions in and out of VPR and
FPSCR_NZCV had assertions checking that the other register involved
was a GPR _pair_, instead of a single GPR as it should have been.

Reviewers: miyuki, ostannard

Subscribers: javed.absar, kristof.beyls, hiraditya, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D63865

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364534 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-27 12:41:12 +00:00
Simon Tatham
c82b7efc96 [ARM] Fix handling of zero offsets in LOB instructions.
The BF and WLS/WLSTP instructions have various branch-offset fields
occupying different positions and lengths in the instruction encoding,
and all of them were decoded at disassembly time by the function
DecodeBFLabelOffset() which returned SoftFail if the offset was zero.

In fact, it's perfectly fine and not even a SoftFail for most of those
offset fields to be zero. The only one that can't be zero is the 4-bit
field labelled `boff` in the architecture spec, occupying bits {26-23}
of the BF instruction family. If that one is zero, the encoding
overlaps other instructions (WLS, DLS, LETP, VCTP), so it ought to be
a full Fail.

Fixed by adding an extra template parameter to DecodeBFLabelOffset
which controls whether a zero offset is accepted or rejected. Adjusted
existing tests (only in error messages for bad disassemblies); added
extra tests to demonstrate zero offsets being accepted in all the
right places, and a few demonstrating rejection of zero `boff`.

Reviewers: DavidSpickett, ostannard

Subscribers: javed.absar, kristof.beyls, hiraditya, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D63864

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364533 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-27 12:41:07 +00:00
Simon Tatham
c27a34eed4 [ARM] Make coprocessor number restrictions consistent.
Different versions of the Arm architecture disallow the use of generic
coprocessor instructions like MCR and CDP on different sets of
coprocessors. This commit centralises the check of the coprocessor
number so that it's consistent between assembly and disassembly, and
also updates it for the new restrictions in Arm v8.1-M.

New tests added that check all the coprocessor numbers; old tests
updated, where they used a number that's now become illegal in the
context in question.

Reviewers: DavidSpickett, ostannard

Subscribers: javed.absar, kristof.beyls, hiraditya, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D63863

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364532 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-27 12:40:55 +00:00
Simon Tatham
dbfb2af621 [ARM] Tighten restrictions on use of SP in v8.1-M CSEL.
In the `CSEL Rd,Rm,Rn` instruction family (also including CSINC, CSINV
and CSNEG), the architecture lists it as CONSTRAINED UNPREDICTABLE
(i.e. SoftFail) to use SP in the Rd or Rm slot, but outright illegal
to use it in the Rn slot, not least because some encodings of that
form are used by MVE instructions such as UQRSHLL.

MC was treating all three slots the same, as SoftFail. So the only
reason UQRSHLL was disassembled correctly at all was because the MVE
decode table is separate from the Thumb2 one and takes priority; if
you turned off MVE, then encodings such as `[0x5f,0xea,0x0d,0x83]`
would disassemble as spurious CSELs.

Fixed by inventing another version of the `GPRwithZR` register class,
which disallows SP completely instead of just SoftFailing it.

Reviewers: DavidSpickett, ostannard

Subscribers: javed.absar, kristof.beyls, hiraditya, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D63862

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364531 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-27 12:40:40 +00:00
Simon Pilgrim
98ce5f9f8c [X86] getFauxShuffle - add DemandedElts as a filter
This is currently benign but will be used in the future based on the elements referenced by the parent shuffle(s).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364530 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-27 12:35:52 +00:00
Simon Atanasyan
b2f5c9e2fd [mips] Add GPR_64 predicate to some mov[zn] instructions
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364527 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-27 12:08:17 +00:00
Simon Atanasyan
9429cf789d [mips] Fix indentation and split long lines. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364526 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-27 12:08:10 +00:00
Simon Atanasyan
20eeea4fce [mips] Reformat MSA instruction definitions. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364525 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-27 12:08:03 +00:00
Simon Pilgrim
d56a9b8674 [X86][AVX] SimplifyDemandedVectorElts - combine PERMPD(x) -> EXTRACTF128(X)
If we only use the bottom lane, see if we can simplify this to extract_subvector - which is always at least as quick as PERMPD/PERMQ.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364518 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-27 11:16:03 +00:00
Djordje Todorovic
e02e5c6f21 [ISEL][X86] Tracking of registers that forward call arguments
While lowering calls, collect info about registers that forward arguments
into following function frame. We store such info into the MachineFunction
of the call. This is used very late when dumping DWARF info about
call site parameters.

([9/13] Introduce the debug entry values.)

Co-authored-by: Ananth Sowda <asowda@cisco.com>
Co-authored-by: Nikola Prica <nikola.prica@rt-rk.com>
Co-authored-by: Ivan Baev <ibaev@cisco.com>

Differential Revision: https://reviews.llvm.org/D60715

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364516 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-27 10:51:15 +00:00
Diana Picus
7acc5e9186 [AArch64 GlobalISel] Cleanup CallLowering. NFCI
Now that lowerCall and lowerFormalArgs have been refactored, we can
simplify splitToValueTypes.

Differential Revision: https://reviews.llvm.org/D63552

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364513 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-27 09:24:30 +00:00
Diana Picus
65c682330e [GlobalISel] Accept multiple vregs for lowerCall's args
Change the interface of CallLowering::lowerCall to accept several
virtual registers for each argument, instead of just one.  This is a
follow-up to D46018.

CallLowering::lowerReturn was similarly refactored in D49660 and
lowerFormalArguments in D63549.

With this change, we no longer pack the virtual registers generated for
aggregates into one big lump before delegating to the target. Therefore,
the target can decide itself whether it wants to handle them as separate
pieces or use one big register.

ARM and AArch64 have been updated to use the passed in virtual registers
directly, which means we no longer need to generate so many
merge/extract instructions.

NFCI for AMDGPU, Mips and X86.

Differential Revision: https://reviews.llvm.org/D63551

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364512 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-27 09:18:03 +00:00
Diana Picus
d3b26382a9 [GlobalISel] Accept multiple vregs for lowerCall's result
Change the interface of CallLowering::lowerCall to accept several
virtual registers for the call result, instead of just one.  This is a
follow-up to D46018.

CallLowering::lowerReturn was similarly refactored in D49660 and
lowerFormalArguments in D63549.

With this change, we no longer pack the virtual registers generated for
aggregates into one big lump before delegating to the target. Therefore,
the target can decide itself whether it wants to handle them as separate
pieces or use one big register.

ARM and AArch64 have been updated to use the passed in virtual registers
directly, which means we no longer need to generate so many
merge/extract instructions.

NFCI for AMDGPU, Mips and X86.

Differential Revision: https://reviews.llvm.org/D63550

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364511 91177308-0d34-0410-b5e6-96231b3b80d8
2019-06-27 09:15:53 +00:00