llvm-project/llvm/lib/Target/AArch64
Diana Picus c3dbe23977 [GlobalISel] Accept multiple vregs in lowerFormalArgs
Change the interface of CallLowering::lowerFormalArguments to accept
several virtual registers for each formal argument, instead of just one.
This is a follow-up to D46018.

CallLowering::lowerReturn was similarly refactored in D49660. lowerCall
will be refactored in the same way in follow-up patches.

With this change, we forward the virtual registers generated for
aggregates to CallLowering. Therefore, the target can decide itself
whether it wants to handle them as separate pieces or use one big
register. We also copy the pack/unpackRegs helpers to CallLowering to
facilitate this.

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.

AArch64 seems to have had a bug when lowering e.g. [1 x i8*], which was
put into a s64 instead of a p0. Added a test-case which illustrates the
problem more clearly (it crashes without this patch) and fixed the
existing test-case to expect p0.

AMDGPU has been updated to unpack into the virtual registers for
kernels. I think the other code paths fall back for aggregates, so this
should be NFC.

Mips doesn't support aggregates yet, so it's also NFC.

x86 seems to have code for dealing with aggregates, but I couldn't find
the tests for it, so I just added a fallback to DAGISel if we get more
than one virtual register for an argument.

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

llvm-svn: 364510
2019-06-27 08:54:17 +00:00
..
AsmParser Revert CMake: Make most target symbols hidden by default 2019-06-11 03:21:13 +00:00
Disassembler Revert CMake: Make most target symbols hidden by default 2019-06-11 03:21:13 +00:00
MCTargetDesc Revert CMake: Make most target symbols hidden by default 2019-06-11 03:21:13 +00:00
TargetInfo Revert CMake: Make most target symbols hidden by default 2019-06-11 03:21:13 +00:00
Utils AArch64: annotate atomics with dropped acquire semantics when printing. 2019-02-06 15:07:59 +00:00
AArch64.h Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
AArch64.td [AArch64][SVE2] Add SVE2 target features to backend and TargetParser 2019-05-13 10:10:24 +00:00
AArch64A53Fix835769.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
AArch64A57FPLoadBalancing.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
AArch64AdvSIMDScalarPass.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
AArch64AsmPrinter.cpp hwasan: Shrink outlined checks by 1 instruction. 2019-06-19 20:40:03 +00:00
AArch64BranchTargets.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
AArch64CallLowering.cpp [GlobalISel] Accept multiple vregs in lowerFormalArgs 2019-06-27 08:54:17 +00:00
AArch64CallLowering.h [GlobalISel] Accept multiple vregs in lowerFormalArgs 2019-06-27 08:54:17 +00:00
AArch64CallingConvention.cpp [AArch64] Include AArch64GenCallingConv.inc once 2019-01-28 21:28:40 +00:00
AArch64CallingConvention.h [AArch64] Include AArch64GenCallingConv.inc once 2019-01-28 21:28:40 +00:00
AArch64CallingConvention.td [COFF, ARM64] Fix ABI implementation of struct returns 2019-05-03 21:12:36 +00:00
AArch64CleanupLocalDynamicTLSPass.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
AArch64CollectLOH.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
AArch64CompressJumpTables.cpp [AArch64] Fix scan-build null/uninitialized pointer warnings. NFCI. 2019-05-08 16:27:24 +00:00
AArch64CondBrTuning.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
AArch64ConditionOptimizer.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
AArch64ConditionalCompares.cpp [IR] Refactor attribute methods in Function class (NFC) 2019-04-04 22:40:06 +00:00
AArch64DeadRegisterDefinitionsPass.cpp [AArch64] Fix bug 35094 atomicrmw on Armv8.1-A+lse 2019-03-18 09:21:06 +00:00
AArch64ExpandImm.cpp [AArch64] Prefer "mov" over "orr" to materialize constants. 2019-03-25 21:25:28 +00:00
AArch64ExpandImm.h [AArch64] Refactor floating point materialization. NFC 2019-03-18 18:23:23 +00:00
AArch64ExpandPseudoInsts.cpp [AArch64] Allow -mattr=tpidr-el[1|2|3] 2019-03-21 11:30:17 +00:00
AArch64FalkorHWPFFix.cpp CodeGen: Introduce a class for registers 2019-06-24 15:50:29 +00:00
AArch64FastISel.cpp [COFF, ARM64] Fix encoding of debugtrap for Windows 2019-06-21 23:38:05 +00:00
AArch64FrameLowering.cpp Don't look for the TargetFrameLowering in the implementation 2019-06-25 20:53:35 +00:00
AArch64FrameLowering.h AArch64: Prefer FP-relative debug locations in HWASANified functions. 2019-06-22 00:06:51 +00:00
AArch64GenRegisterBankInfo.def Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
AArch64ISelDAGToDAG.cpp AArch64: Add support for reading pc using llvm.read_register. 2019-06-22 03:03:25 +00:00
AArch64ISelLowering.cpp [COFF, ARM64] Fix encoding of debugtrap for Windows 2019-06-21 23:38:05 +00:00
AArch64ISelLowering.h [TargetLowering] Add MachineMemOperand::Flags to allowsMemoryAccess tests (PR42123) 2019-06-12 17:14:03 +00:00
AArch64InstrAtomics.td Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
AArch64InstrFormats.td [AArch64] Add support for MTE intrinsics 2019-04-23 09:39:58 +00:00
AArch64InstrInfo.cpp [SystemZ, RegAlloc] Favor 3-address instructions during instruction selection. 2019-06-08 06:19:15 +00:00
AArch64InstrInfo.h [SystemZ, RegAlloc] Favor 3-address instructions during instruction selection. 2019-06-08 06:19:15 +00:00
AArch64InstrInfo.td [COFF, ARM64] Fix encoding of debugtrap for Windows 2019-06-21 23:38:05 +00:00
AArch64InstructionSelector.cpp GlobalISel: Remove unsigned variant of SrcOp 2019-06-24 16:16:12 +00:00
AArch64LegalizerInfo.cpp [AArch64][GlobalISel] Implement selection support for the new G_JUMP_TABLE and G_BRJT ops. 2019-06-21 18:10:41 +00:00
AArch64LegalizerInfo.h [AArch64][GlobalISel] Legalization and ISel support for load/stores of vectors of pointers. 2019-04-11 20:32:24 +00:00
AArch64LoadStoreOptimizer.cpp [AArch64] Remove scan-build "Value stored during its initialization is never read" warnings. NFCI. 2019-05-08 16:29:39 +00:00
AArch64MCInstLower.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
AArch64MCInstLower.h Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
AArch64MachineFunctionInfo.h [COFF, ARM64] Fix ABI implementation of struct returns 2019-05-03 21:12:36 +00:00
AArch64MacroFusion.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
AArch64MacroFusion.h Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
AArch64PBQPRegAlloc.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
AArch64PBQPRegAlloc.h Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
AArch64PerfectShuffle.h Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
AArch64PfmCounters.td Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
AArch64PreLegalizerCombiner.cpp [AArch64][GlobalISel] Enable copy elision in the pre-legalizer combine and fix a crash. 2019-04-13 00:33:25 +00:00
AArch64PromoteConstant.cpp [opaque pointer types] Pass value type to LoadInst creation. 2019-02-01 20:44:24 +00:00
AArch64RedundantCopyElimination.cpp CodeGen: Introduce a class for registers 2019-06-24 15:50:29 +00:00
AArch64RegisterBankInfo.cpp [GlobalISel][AArch64] Make FP constraint checks consider possible use/def banks 2019-05-24 23:08:45 +00:00
AArch64RegisterBankInfo.h [GlobalISel][AArch64] Make FP constraint checks consider possible use/def banks 2019-05-24 23:08:45 +00:00
AArch64RegisterBanks.td Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
AArch64RegisterInfo.cpp CodeGen: Introduce a class for registers 2019-06-24 15:50:29 +00:00
AArch64RegisterInfo.h CodeGen: Introduce a class for registers 2019-06-24 15:50:29 +00:00
AArch64RegisterInfo.td [AArch64] Support reserving arbitrary general purpose registers 2019-02-13 17:28:47 +00:00
AArch64SIMDInstrOpt.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
AArch64SVEInstrInfo.td [AArch64][SVE2] Asm: support WHILE instructions 2019-05-31 09:13:55 +00:00
AArch64SchedA53.td [AArch64][SVE2] Add SVE2 target features to backend and TargetParser 2019-05-13 10:10:24 +00:00
AArch64SchedA57.td [AArch64][SVE2] Add SVE2 target features to backend and TargetParser 2019-05-13 10:10:24 +00:00
AArch64SchedA57WriteRes.td Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
AArch64SchedCyclone.td [AArch64][SVE2] Add SVE2 target features to backend and TargetParser 2019-05-13 10:10:24 +00:00
AArch64SchedExynosM1.td [AArch64][SVE2] Add SVE2 target features to backend and TargetParser 2019-05-13 10:10:24 +00:00
AArch64SchedExynosM3.td [AArch64][SVE2] Add SVE2 target features to backend and TargetParser 2019-05-13 10:10:24 +00:00
AArch64SchedExynosM4.td [AArch64][SVE2] Add SVE2 target features to backend and TargetParser 2019-05-13 10:10:24 +00:00
AArch64SchedFalkor.td [AArch64][SVE2] Add SVE2 target features to backend and TargetParser 2019-05-13 10:10:24 +00:00
AArch64SchedFalkorDetails.td Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
AArch64SchedKryo.td [AArch64][SVE2] Add SVE2 target features to backend and TargetParser 2019-05-13 10:10:24 +00:00
AArch64SchedKryoDetails.td Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
AArch64SchedPredExynos.td [AArch64] Update for Exynos 2019-05-02 22:01:39 +00:00
AArch64SchedPredicates.td [AArch64] Update for Exynos 2019-05-02 22:01:39 +00:00
AArch64SchedThunderX.td [AArch64][SVE2] Add SVE2 target features to backend and TargetParser 2019-05-13 10:10:24 +00:00
AArch64SchedThunderX2T99.td [AArch64][SVE2] Add SVE2 target features to backend and TargetParser 2019-05-13 10:10:24 +00:00
AArch64Schedule.td Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
AArch64SelectionDAGInfo.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
AArch64SelectionDAGInfo.h Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
AArch64SpeculationHardening.cpp [SLH] AArch64: correctly pick temporary register to mask SP 2019-01-23 08:18:39 +00:00
AArch64StorePairSuppress.cpp [CodeGen] Add "const" to MachineInstr::mayAlias 2019-04-19 09:08:38 +00:00
AArch64Subtarget.cpp [AArch64] Add support for Cortex-A76 and Cortex-A76AE 2019-02-25 15:08:27 +00:00
AArch64Subtarget.h [AArch64] Subtarget crypto extension defaults 2019-05-22 07:10:27 +00:00
AArch64SystemOperands.td [AArch64] Add v8.5-a Memory Tagging GMID_EL1 register 2019-04-01 14:41:14 +00:00
AArch64TargetMachine.cpp [AArch64] Merge globals when optimising for size 2019-06-12 08:28:35 +00:00
AArch64TargetMachine.h Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
AArch64TargetObjectFile.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
AArch64TargetObjectFile.h Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
AArch64TargetTransformInfo.cpp [NFC] Test commit, delete trailing whitespace 2019-05-28 12:36:39 +00:00
AArch64TargetTransformInfo.h [GlobalISel][Localizer] Rewrite localizer to run in 2 phases, inter & intra block. 2019-06-17 23:20:29 +00:00
CMakeLists.txt [AArch64] Move InstPrinter files to MCTargetDesc. NFC 2019-05-10 23:50:01 +00:00
LLVMBuild.txt [AArch64] Move InstPrinter files to MCTargetDesc. NFC 2019-05-10 23:50:01 +00:00
SVEInstrFormats.td [AArch64][SVE2] Asm: support WHILE instructions 2019-05-31 09:13:55 +00:00