llvm-project/llvm/test/Analysis
David Sherwood 748ae5281d [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
..
AliasSet [noalias.decl] Look through llvm.experimental.noalias.scope.decl 2021-01-19 20:09:42 +01:00
AssumptionCache Revert "[AssumptionCache] Avoid dangling llvm.assume calls in the cache" 2021-02-11 12:17:38 -06:00
BasicAA [BasicAA] Drop dependency on Loop Info. PR43276 2021-03-17 11:43:44 +07:00
BlockFrequencyInfo [BPI] Improve static heuristics for "cold" paths. 2020-12-23 22:47:36 +07:00
BranchProbabilityInfo [test] Pin some tests to legacy PM 2020-12-26 13:46:02 -08:00
CFLAliasAnalysis [BasicAA] Rename -disable-basicaa to -disable-basic-aa to be consistent with the canonical name "basic-aa" 2020-06-26 20:55:44 -07:00
CallGraph Option to ignore llvm[.compiler].used uses in hasAddressTaken() 2021-02-25 10:06:24 -08:00
CostModel [IR][SVE] Add new llvm.experimental.stepvector intrinsic 2021-03-23 10:43:35 +00:00
DDG Fix print-dot-ddg.ll so it doesn't try to write to the source tree (& uses the test temp paths instead) 2021-01-07 19:57:14 -08:00
Delinearization [Delinearization][NewPM] Port delinearization to NPM 2020-09-21 17:59:08 -07:00
DemandedBits Precommit analysis/etc tests for inselt poison placeholder 2020-12-24 12:14:24 +09:00
DependenceAnalysis [DependenceAnalysis][NewPM] Fix tests to work under NPM 2020-09-15 11:11:23 -07:00
DivergenceAnalysis [NewPM] Introduce (GPU)DivergenceAnalysis in the new pass manager 2021-02-16 10:26:45 +05:30
DominanceFrontier
Dominators [Dominators][NewPM] Pin tests with -analyze to legacy PM 2020-09-15 11:59:00 -07:00
FunctionPropertiesAnalysis Add new function properties to FunctionPropertiesAnalysis 2020-07-23 12:46:47 -07:00
GlobalsModRef [GlobalsAA] Teach to handle `addrspacecast`. 2020-11-09 00:04:52 -05:00
IRSimilarityIdentifier [IROutliner] Adding instruction strings to IRSimilarityPrinting diagnostics. 2021-02-09 12:11:47 -06:00
IVUsers [SCEV] Strenthen nowrap flags after constant folding for mul exprs 2020-10-25 19:43:58 +01:00
LazyCallGraph [LazyCallGraph] Build SCCs of the reference graph in order 2020-11-02 13:22:42 -08:00
LazyValueAnalysis [JumpThreading] Make -print-lvi-after-jump-threading work with NPM 2020-11-17 23:15:20 -08:00
LegacyDivergenceAnalysis [NewPM] Introduce (GPU)DivergenceAnalysis in the new pass manager 2021-02-16 10:26:45 +05:30
Lint OpaquePtr: Update more tests to use typed sret 2020-11-20 20:08:43 -05:00
LoopAccessAnalysis [llvm][NFC] Disallow all warnings in TypeSize tests 2021-01-06 17:17:07 +00:00
LoopCacheAnalysis/PowerPC
LoopInfo [LoopInfo][NewPM] Fix tests in Analysis/LoopInfo under NPM 2020-09-22 11:31:00 -07:00
LoopNestAnalysis [LoopNest] Use `getUniqueSuccessor()` instead when checking empty blocks 2021-02-24 09:53:12 +08:00
MemoryDependenceAnalysis OpaquePtr: Update more tests to use typed sret 2020-11-20 20:08:43 -05:00
MemorySSA [MemorySSA] Don't treat lifetime.end as NoAlias 2021-02-04 20:58:28 +01:00
MustExecute Port print-must-be-executed-contexts and print-mustexecute to NPM 2020-11-03 21:06:46 -08:00
PhiValues
PostDominators [PostDominators][NewPM] Fix tests to work under NPM 2020-09-15 11:19:01 -07:00
ProfileSummary
RegionInfo [RegionInfo][NewPM] Fix RegionInfo tests to work under NPM 2020-09-15 11:12:14 -07:00
ScalarEvolution [SCEV] Use trip count information to improve shift recurrence ranges 2021-03-22 09:38:43 -07:00
ScopedNoAliasAA [MemCpyOpt] Correctly merge alias scopes during call slot optimization 2020-12-03 09:23:37 -08:00
StackSafetyAnalysis [SCEV] Use both known bits and sign bits when computing range of SCEV unknowns 2021-02-19 08:29:12 -08:00
TypeBasedAliasAnalysis Reland "[Libcalls, Attrs] Annotate libcalls with noundef" 2021-02-20 06:18:48 +01:00
ValueTracking [test] precommit another test for point-in-time deref semantics 2021-03-22 19:11:19 -07:00
alias-analysis-uses.ll [NewPM] Pin tests with -debug-pass to legacy PM 2020-09-22 17:54:25 -07:00