1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-23 11:13:28 +01:00
llvm-mirror/lib/IR
David Sherwood 42a72164a2 [IR][SVE] Add new llvm.experimental.stepvector intrinsic
This patch adds a new llvm.experimental.stepvector intrinsic,
which takes no arguments and returns a linear integer sequence of
values of the form <0, 1, ...>. It is primarily intended for
scalable vectors, although it will work for fixed width vectors
too. It is intended that later patches will make use of this
new intrinsic when vectorising induction variables, currently only
supported for fixed width. I've added a new CreateStepVector
method to the IRBuilder, which will generate a call to this
intrinsic for scalable vectors and fall back on creating a
ConstantVector for fixed width.

For scalable vectors this intrinsic is lowered to a new ISD node
called STEP_VECTOR, which takes a single constant integer argument
as the step. During lowering this argument is set to a value of 1.
The reason for this additional argument at the codegen level is
because in future patches we will introduce various generic DAG
combines such as

  mul step_vector(1), 2 -> step_vector(2)
  add step_vector(1), step_vector(1) -> step_vector(2)
  shl step_vector(1), 1 -> step_vector(2)
  etc.

that encourage a canonical format for all targets. This hopefully
means all other targets supporting scalable vectors can benefit
from this too.

I've added cost model tests for both fixed width and scalable
vectors:

  llvm/test/Analysis/CostModel/AArch64/neon-stepvector.ll
  llvm/test/Analysis/CostModel/AArch64/sve-stepvector.ll

as well as codegen lowering tests for fixed width and scalable
vectors:

  llvm/test/CodeGen/AArch64/neon-stepvector.ll
  llvm/test/CodeGen/AArch64/sve-stepvector.ll

See this thread for discussion of the intrinsic:
https://lists.llvm.org/pipermail/llvm-dev/2021-January/147943.html
2021-03-23 10:43:35 +00:00
..
AbstractCallSite.cpp
AsmWriter.cpp [DebugInfo] Add DIArgList MD to store multple values in DbgVariableIntrinsics 2021-03-05 17:02:24 +00:00
Assumptions.cpp
AttributeImpl.h [IR] Add vscale_range IR function attribute 2021-03-22 12:05:06 +00:00
Attributes.cpp [IR] Add vscale_range IR function attribute 2021-03-22 12:05:06 +00:00
AutoUpgrade.cpp [AArch64][SVE/NEON] Add support for FROUNDEVEN for both NEON and fixed length SVE 2021-03-17 11:41:22 +00:00
BasicBlock.cpp [IR] Use range-based for loops (NFC) 2021-02-27 10:09:25 -08:00
CMakeLists.txt
Comdat.cpp
ConstantFold.cpp [ConstantFold] Handle icmp of global and null consistently 2021-03-08 17:18:01 +01:00
ConstantFold.h
ConstantRange.cpp [ConstantRange] Handle wrapping ranges in min/max (PR48643) 2021-02-20 22:52:09 +01:00
Constants.cpp Reapply [ConstantFold] Handle vectors in ConstantFoldLoadThroughBitcast() 2021-03-21 17:48:21 +01:00
ConstantsContext.h
Core.cpp Add type attributes to LLVM C API 2021-03-19 19:07:04 -04:00
DataLayout.cpp
DebugInfo.cpp Support !heapallocsite attachments in StripDebugInfo(). 2021-03-16 10:05:13 -07:00
DebugInfoMetadata.cpp Revert "[DebugInfo] Use variadic debug values to salvage BinOps and GEP instrs with non-const operands" 2021-03-11 14:48:01 +00:00
DebugLoc.cpp
DiagnosticHandler.cpp
DiagnosticInfo.cpp [Diagnose] Unify MCContext and LLVMContext diagnosing 2021-03-01 15:58:37 -08:00
DiagnosticPrinter.cpp
DIBuilder.cpp
Dominators.cpp [gvn] Precisely propagate equalities to phi operands 2021-03-08 08:59:00 -08:00
FPEnv.cpp
Function.cpp Support intrinsic overloading on unnamed types 2021-03-19 14:34:25 +01:00
Globals.cpp
GVMaterializer.cpp
InlineAsm.cpp
Instruction.cpp
Instructions.cpp Revert "[DebugInfo] Use variadic debug values to salvage BinOps and GEP instrs with non-const operands" 2021-03-11 14:48:01 +00:00
IntrinsicInst.cpp Reapply "[DebugInfo] Handle multiple variable location operands in IR" 2021-03-17 16:45:25 +00:00
IRBuilder.cpp [IR][SVE] Add new llvm.experimental.stepvector intrinsic 2021-03-23 10:43:35 +00:00
IRPrintingPasses.cpp
LegacyPassManager.cpp [opt] Error if -debug-pass is specified alongside the new PM 2021-03-02 15:59:28 -08:00
LLVMContext.cpp [ObjC][ARC] Use operand bundle 'clang.arc.attachedcall' instead of 2021-03-04 11:22:30 -08:00
LLVMContextImpl.cpp
LLVMContextImpl.h [DebugInfo] Add DIArgList MD to store multple values in DbgVariableIntrinsics 2021-03-05 17:02:24 +00:00
LLVMRemarkStreamer.cpp
Mangler.cpp [IR] Use range-based for loops (NFC) 2021-02-27 10:09:25 -08:00
MDBuilder.cpp
Metadata.cpp [DebugInfo] Add DIArgList MD to store multple values in DbgVariableIntrinsics 2021-03-05 17:02:24 +00:00
MetadataImpl.h
Module.cpp Support intrinsic overloading on unnamed types 2021-03-19 14:34:25 +01:00
ModuleSummaryIndex.cpp [IR] Use range-based for loops (NFC) 2021-03-01 23:40:33 -08:00
Operator.cpp Revert "[DebugInfo] Use variadic debug values to salvage BinOps and GEP instrs with non-const operands" 2021-03-11 14:48:01 +00:00
OptBisect.cpp
Pass.cpp
PassInstrumentation.cpp
PassManager.cpp
PassRegistry.cpp
PassTimingInfo.cpp
PrintPasses.cpp
ProfileSummary.cpp
PseudoProbe.cpp [CSSPGO] Deduplicating dangling pseudo probes. 2021-03-03 22:44:42 -08:00
ReplaceConstant.cpp [HIP] Fix managed variable linkage 2021-02-23 22:34:45 -05:00
SafepointIRVerifier.cpp
Statepoint.cpp
StructuralHash.cpp
SymbolTableListTraitsImpl.h
Type.cpp [X86][AMX] Prevent transforming load pointer from <256 x i32>* to x86_amx*. 2021-03-14 09:24:56 +08:00
TypeFinder.cpp
Use.cpp
User.cpp Reapply "[DebugInfo] Handle multiple variable location operands in IR" 2021-03-17 16:45:25 +00:00
Value.cpp Update basic deref API to account for possiblity of free [NFC] 2021-03-19 11:17:19 -07:00
ValueSymbolTable.cpp
Verifier.cpp [IR][SVE] Add new llvm.experimental.stepvector intrinsic 2021-03-23 10:43:35 +00:00