llvm-project/llvm/test/CodeGen/Thumb2/mve-intrinsics
Sebastian Neubauer 2a6c871596 [InstCombine] Move target-specific inst combining
For a long time, the InstCombine pass handled target specific
intrinsics. Having target specific code in general passes was noted as
an area for improvement for a long time.

D81728 moves most target specific code out of the InstCombine pass.
Applying the target specific combinations in an extra pass would
probably result in inferior optimizations compared to the current
fixed-point iteration, therefore the InstCombine pass resorts to newly
introduced functions in the TargetTransformInfo when it encounters
unknown intrinsics.
The patch should not have any effect on generated code (under the
assumption that code never uses intrinsics from a foreign target).

This introduces three new functions:
TargetTransformInfo::instCombineIntrinsic
TargetTransformInfo::simplifyDemandedUseBitsIntrinsic
TargetTransformInfo::simplifyDemandedVectorEltsIntrinsic

A few target specific parts are left in the InstCombine folder, where
it makes sense to share code. The largest left-over part in
InstCombineCalls.cpp is the code shared between arm and aarch64.

This allows to move about 3000 lines out from InstCombine to the targets.

Differential Revision: https://reviews.llvm.org/D81728
2020-07-22 15:59:49 +02:00
..
absneg-predicated.ll [ARM,MVE] Add predicated intrinsics for many unary functions. 2020-02-26 15:12:07 +00:00
bitwise-imm.ll [ARM,MVE] Support immediate vbicq,vorrq,vmvnq intrinsics. 2020-01-23 11:53:52 +00:00
dup.ll [ARM] Convert floating point splats to integer 2020-05-13 15:24:16 +01:00
idup.ll [ARM,MVE] Add intrinsics for v[id]dupq and v[id]wdupq. 2020-02-03 11:20:06 +00:00
load-store.ll [ARM] Enable MVE masked loads and stores 2019-12-09 11:37:34 +00:00
longshift-const.ll [ARM] Replace arm vendor with none. NFC 2020-04-22 18:19:35 +01:00
longshift-demand.ll [ARM] Replace arm vendor with none. NFC 2020-04-22 18:19:35 +01:00
predicates.ll [InstCombine] Move target-specific inst combining 2020-07-22 15:59:49 +02:00
scalar-shifts.ll [ARM,MVE] Add intrinsics for scalar shifts. 2019-11-19 14:47:29 +00:00
scatter-gather.ll [MVE] Fixup order of gather writeback intrinsic outputs 2020-01-27 14:08:06 +00:00
ternary.ll [ARM] Convert floating point splats to integer 2020-05-13 15:24:16 +01:00
vabavq.ll [ARM][MVE] Add vector reduction intrinsics with two vector operands 2019-12-13 13:17:29 +00:00
vabdq.ll [ARM,MVE] Fix many signedness errors in MVE intrinsics. 2020-01-06 16:33:16 +00:00
vadc-multiple.ll [InstCombine] Move target-specific inst combining 2020-07-22 15:59:49 +02:00
vadc.ll [ARM,MVE] Add the `vsbciq` intrinsics. 2020-03-04 08:49:27 +00:00
vaddq.ll [ARM] Convert floating point splats to integer 2020-05-13 15:24:16 +01:00
vaddv.ll [ARM,MVE] Add ACLE intrinsics for the vaddv/vaddlv family. 2020-03-20 15:42:33 +00:00
vandq.ll [ARM][MVE][Intrinsics] Add *_x() variants of my *_m() intrinsics. 2019-12-13 11:51:23 +00:00
vbicq.ll [ARM][MVE][Intrinsics] Add *_x() variants of my *_m() intrinsics. 2019-12-13 11:51:23 +00:00
vbrsrq.ll [ARM,MVE] Add vbrsrq intrinsics family 2020-02-18 17:31:21 +00:00
vcaddq.ll [ARM][MVE] Refactor complex vector intrinsics [NFCI] 2019-12-10 16:21:52 +00:00
vcls.ll [ARM,MVE] Add intrinsics vclzq and vclsq. 2020-02-18 09:34:50 +00:00
vclzcls-predicated.ll [ARM,MVE] Add predicated intrinsics for many unary functions. 2020-02-26 15:12:07 +00:00
vcmlaq.ll [ARM][MVE] Add complex vector intrinsics 2019-12-09 12:05:59 +00:00
vcmulq.ll [ARM][MVE] Add complex vector intrinsics 2019-12-09 12:05:59 +00:00
vcvt-fp-int.ll [ARM,MVE] Add predicated intrinsics for many unary functions. 2020-02-26 15:12:07 +00:00
vcvt.ll [ARM,MVE] Add ACLE intrinsics for VCVT.F32.F16 family. 2020-03-02 10:33:30 +00:00
vcvt_anpm.ll [ARM,MVE] Add ACLE intrinsics for VCVT[ANPM] family. 2020-03-02 10:33:30 +00:00
vector-shift-imm-dyadic.ll [ARM,MVE] Intrinsics for partial-overwrite imm shifts. 2020-01-08 14:42:24 +00:00
vector-shift-imm.ll [ARM,MVE] Fix predicate types of some intrinsics 2020-02-19 16:24:54 +00:00
vector-shift-var.ll [ARM,MVE] Intrinsics for variable shift instructions. 2020-01-08 14:42:24 +00:00
veorq.ll [ARM][MVE][Intrinsics] Add *_x() variants of my *_m() intrinsics. 2019-12-13 11:51:23 +00:00
vhaddq.ll [ARM,MVE] Add vector-scalar intrinsics 2020-02-17 17:47:05 +00:00
vhsubq.ll [ARM,MVE] Add vector-scalar intrinsics 2020-02-17 17:47:05 +00:00
vld24.ll [ARM] MVE VLDn postinc 2020-01-20 06:57:07 +00:00
vldr.ll [MVE] Fixup order of gather writeback intrinsic outputs 2020-01-27 14:08:06 +00:00
vmaxaq.ll [ARM][MVE][Intrinsics] Add VMINAQ, VMINNMAQ, VMAXAQ, VMAXNMAQ intrinsics. 2020-01-15 17:20:15 +00:00
vmaxnmaq.ll [ARM][MVE][Intrinsics] Take abs() of VMINNMAQ, VMAXNMAQ intrinsics' first arguments. 2020-01-20 14:33:26 +00:00
vmaxnmq.ll [ARM,MVE] Fix many signedness errors in MVE intrinsics. 2020-01-06 16:33:16 +00:00
vmaxq.ll [ARM,MVE] Fix many signedness errors in MVE intrinsics. 2020-01-06 16:33:16 +00:00
vminaq.ll [ARM][MVE][Intrinsics] Add VMINAQ, VMINNMAQ, VMAXAQ, VMAXNMAQ intrinsics. 2020-01-15 17:20:15 +00:00
vminnmaq.ll [ARM][MVE][Intrinsics] Take abs() of VMINNMAQ, VMAXNMAQ intrinsics' first arguments. 2020-01-20 14:33:26 +00:00
vminnmq.ll [ARM,MVE] Fix many signedness errors in MVE intrinsics. 2020-01-06 16:33:16 +00:00
vminq.ll [ARM,MVE] Fix many signedness errors in MVE intrinsics. 2020-01-06 16:33:16 +00:00
vminvq.ll [ARM] Always replace FP16 bitcasts with VMOVhr or VMOVrh 2020-04-28 16:12:53 +01:00
vmldav.ll [ARM][MVE] Add vector reduction intrinsics with two vector operands 2019-12-13 13:17:29 +00:00
vmlldav.ll [ARM][MVE] Add vector reduction intrinsics with two vector operands 2019-12-13 13:17:29 +00:00
vmovl.ll [ARM,MVE] Add predicated intrinsics for many unary functions. 2020-02-26 15:12:07 +00:00
vmovn.ll [ARM,MVE] Add predicated intrinsics for many unary functions. 2020-02-26 15:12:07 +00:00
vmulhq.ll [ARM,MVE] Fix many signedness errors in MVE intrinsics. 2020-01-06 16:33:16 +00:00
vmullbq.ll [ARM,MVE] Fix predicate types of some intrinsics 2020-02-19 16:24:54 +00:00
vmulltq.ll [ARM,MVE] Fix predicate types of some intrinsics 2020-02-19 16:24:54 +00:00
vmulq.ll [ARM] Convert floating point splats to integer 2020-05-13 15:24:16 +01:00
vornq.ll [ARM][MVE][Intrinsics] Add *_x() variants of my *_m() intrinsics. 2019-12-13 11:51:23 +00:00
vorrq.ll [ARM][MVE][Intrinsics] Add *_x() variants of my *_m() intrinsics. 2019-12-13 11:51:23 +00:00
vqaddq.ll [ARM,MVE] Add vector-scalar intrinsics 2020-02-17 17:47:05 +00:00
vqdmlad.ll [ARM,MVE] Add intrinsics for the VQDMLAD family. 2020-03-18 17:11:22 +00:00
vqdmulhq.ll [ARM,MVE] Add vector-scalar intrinsics 2020-02-17 17:47:05 +00:00
vqdmull.ll [ARM,MVE] Add vqdmull[b,t]q intrinsic families 2020-02-20 10:51:19 +00:00
vqmovn.ll [ARM,MVE] Add ACLE intrinsics for VQMOV[U]N family. 2020-03-02 10:33:30 +00:00
vqrdmulhq.ll [ARM,MVE] Add vector-scalar intrinsics 2020-02-17 17:47:05 +00:00
vqsubq.ll [ARM,MVE] Add vector-scalar intrinsics 2020-02-17 17:47:05 +00:00
vrev.ll [ARM,MVE] Add predicated intrinsics for many unary functions. 2020-02-26 15:12:07 +00:00
vrhaddq.ll [ARM,MVE] Fix many signedness errors in MVE intrinsics. 2020-01-06 16:33:16 +00:00
vrint-predicated.ll [ARM,MVE] Add predicated intrinsics for many unary functions. 2020-02-26 15:12:07 +00:00
vrintn.ll [ARM,MVE] Add intrinsics for FP rounding operations. 2020-02-18 09:34:50 +00:00
vrmulhq.ll [ARM,MVE] Fix many signedness errors in MVE intrinsics. 2020-01-06 16:33:16 +00:00
vshlc.ll [ARM,MVE] Add the `vshlcq` intrinsics. 2020-03-04 08:49:27 +00:00
vsubq.ll [ARM] Convert floating point splats to integer 2020-05-13 15:24:16 +01:00