mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-07 14:33:15 +00:00
442f620296
Add a pass AArch64InterleavedAccess to identify and match interleaved memory accesses. This pass transforms an interleaved load/store into ldN/stN intrinsic. As Loop Vectorizor disables optimization on interleaved accesses by default, this optimization is also disabled by default. To enable it by "-aarch64-interleaved-access-opt=true" E.g. Transform an interleaved load (Factor = 2): %wide.vec = load <8 x i32>, <8 x i32>* %ptr %v0 = shuffle %wide.vec, undef, <0, 2, 4, 6> ; Extract even elements %v1 = shuffle %wide.vec, undef, <1, 3, 5, 7> ; Extract odd elements Into: %ld2 = { <4 x i32>, <4 x i32> } call aarch64.neon.ld2(%ptr) %v0 = extractelement { <4 x i32>, <4 x i32> } %ld2, i32 0 %v1 = extractelement { <4 x i32>, <4 x i32> } %ld2, i32 1 E.g. Transform an interleaved store (Factor = 2): %i.vec = shuffle %v0, %v1, <0, 4, 1, 5, 2, 6, 3, 7> ; Interleaved vec store <8 x i32> %i.vec, <8 x i32>* %ptr Into: %v0 = shuffle %i.vec, undef, <0, 1, 2, 3> %v1 = shuffle %i.vec, undef, <4, 5, 6, 7> call void aarch64.neon.st2(%v0, %v1, %ptr) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239514 91177308-0d34-0410-b5e6-96231b3b80d8
57 lines
1.9 KiB
CMake
57 lines
1.9 KiB
CMake
set(LLVM_TARGET_DEFINITIONS AArch64.td)
|
|
|
|
tablegen(LLVM AArch64GenRegisterInfo.inc -gen-register-info)
|
|
tablegen(LLVM AArch64GenInstrInfo.inc -gen-instr-info)
|
|
tablegen(LLVM AArch64GenMCCodeEmitter.inc -gen-emitter)
|
|
tablegen(LLVM AArch64GenMCPseudoLowering.inc -gen-pseudo-lowering)
|
|
tablegen(LLVM AArch64GenAsmWriter.inc -gen-asm-writer)
|
|
tablegen(LLVM AArch64GenAsmWriter1.inc -gen-asm-writer -asmwriternum=1)
|
|
tablegen(LLVM AArch64GenAsmMatcher.inc -gen-asm-matcher)
|
|
tablegen(LLVM AArch64GenDAGISel.inc -gen-dag-isel)
|
|
tablegen(LLVM AArch64GenFastISel.inc -gen-fast-isel)
|
|
tablegen(LLVM AArch64GenCallingConv.inc -gen-callingconv)
|
|
tablegen(LLVM AArch64GenSubtargetInfo.inc -gen-subtarget)
|
|
tablegen(LLVM AArch64GenDisassemblerTables.inc -gen-disassembler)
|
|
add_public_tablegen_target(AArch64CommonTableGen)
|
|
|
|
add_llvm_target(AArch64CodeGen
|
|
AArch64A57FPLoadBalancing.cpp
|
|
AArch64AddressTypePromotion.cpp
|
|
AArch64AdvSIMDScalarPass.cpp
|
|
AArch64AsmPrinter.cpp
|
|
AArch64BranchRelaxation.cpp
|
|
AArch64CleanupLocalDynamicTLSPass.cpp
|
|
AArch64CollectLOH.cpp
|
|
AArch64ConditionalCompares.cpp
|
|
AArch64DeadRegisterDefinitionsPass.cpp
|
|
AArch64ExpandPseudoInsts.cpp
|
|
AArch64FastISel.cpp
|
|
AArch64A53Fix835769.cpp
|
|
AArch64FrameLowering.cpp
|
|
AArch64ConditionOptimizer.cpp
|
|
AArch64ISelDAGToDAG.cpp
|
|
AArch64ISelLowering.cpp
|
|
AArch64InstrInfo.cpp
|
|
AArch64LoadStoreOptimizer.cpp
|
|
AArch64MCInstLower.cpp
|
|
AArch64PromoteConstant.cpp
|
|
AArch64PBQPRegAlloc.cpp
|
|
AArch64RegisterInfo.cpp
|
|
AArch64SelectionDAGInfo.cpp
|
|
AArch64InterleavedAccess.cpp
|
|
AArch64StorePairSuppress.cpp
|
|
AArch64Subtarget.cpp
|
|
AArch64TargetMachine.cpp
|
|
AArch64TargetObjectFile.cpp
|
|
AArch64TargetTransformInfo.cpp
|
|
)
|
|
|
|
add_dependencies(LLVMAArch64CodeGen intrinsics_gen)
|
|
|
|
add_subdirectory(TargetInfo)
|
|
add_subdirectory(AsmParser)
|
|
add_subdirectory(Disassembler)
|
|
add_subdirectory(InstPrinter)
|
|
add_subdirectory(MCTargetDesc)
|
|
add_subdirectory(Utils)
|