summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/ARM/vdup.ll
diff options
context:
space:
mode:
authorSimon Pilgrim <llvm-dev@redking.me.uk>2018-11-02 11:06:18 +0000
committerSimon Pilgrim <llvm-dev@redking.me.uk>2018-11-02 11:06:18 +0000
commitcdcbeb4997a85895266b688b6077c48fbe1c4085 (patch)
tree438fa676cd6db4c0b6f1ca30190f431433cacd63 /llvm/test/CodeGen/ARM/vdup.ll
parentdfc56b43fadf5c4f84cdb8706f29ccf1ba68e5f1 (diff)
downloadbcm5719-llvm-cdcbeb4997a85895266b688b6077c48fbe1c4085.tar.gz
bcm5719-llvm-cdcbeb4997a85895266b688b6077c48fbe1c4085.zip
[DAGCombiner] Remove reduceBuildVecConvertToConvertBuildVec and rely on the vectorizers instead (PR35732)
reduceBuildVecConvertToConvertBuildVec vectorizes int2float in the DAGCombiner, which means that even if the LV/SLP has decided to keep scalar code using the cost models, this will override this. While there are cases where vectorization is necessary in the DAG (mainly due to legalization artefacts), I don't think this is the case here, we should assume that the vectorizers know what they are doing. Differential Revision: https://reviews.llvm.org/D53712 llvm-svn: 345964
Diffstat (limited to 'llvm/test/CodeGen/ARM/vdup.ll')
-rw-r--r--llvm/test/CodeGen/ARM/vdup.ll37
1 files changed, 19 insertions, 18 deletions
diff --git a/llvm/test/CodeGen/ARM/vdup.ll b/llvm/test/CodeGen/ARM/vdup.ll
index c16a2a9e3c0..5127dab2656 100644
--- a/llvm/test/CodeGen/ARM/vdup.ll
+++ b/llvm/test/CodeGen/ARM/vdup.ll
@@ -488,11 +488,12 @@ define <2 x float> @check_spr_splat2(<2 x float> %p, i16 %q) {
; CHECK-LABEL: check_spr_splat2:
; CHECK: @ %bb.0:
; CHECK-NEXT: lsl r2, r2, #16
-; CHECK-NEXT: vmov d17, r0, r1
+; CHECK-NEXT: vmov d16, r0, r1
; CHECK-NEXT: asr r2, r2, #16
-; CHECK-NEXT: vdup.32 d16, r2
-; CHECK-NEXT: vcvt.f32.s32 d16, d16
-; CHECK-NEXT: vsub.f32 d16, d16, d17
+; CHECK-NEXT: vmov s0, r2
+; CHECK-NEXT: vcvt.f32.s32 s0, s0
+; CHECK-NEXT: vdup.32 d17, d0[0]
+; CHECK-NEXT: vsub.f32 d16, d17, d16
; CHECK-NEXT: vmov r0, r1, d16
; CHECK-NEXT: mov pc, lr
%conv = sitofp i16 %q to float
@@ -505,13 +506,13 @@ define <2 x float> @check_spr_splat2(<2 x float> %p, i16 %q) {
define <4 x float> @check_spr_splat4(<4 x float> %p, i16 %q) {
; CHECK-LABEL: check_spr_splat4:
; CHECK: @ %bb.0:
-; CHECK-NEXT: mov r12, sp
-; CHECK-NEXT: vmov d19, r2, r3
-; CHECK-NEXT: vld1.16 {d16[]}, [r12:16]
-; CHECK-NEXT: vmov d18, r0, r1
-; CHECK-NEXT: vmovl.s16 q8, d16
-; CHECK-NEXT: vcvt.f32.s32 q8, q8
-; CHECK-NEXT: vsub.f32 q8, q8, q9
+; CHECK-NEXT: ldrsh r12, [sp]
+; CHECK-NEXT: vmov d17, r2, r3
+; CHECK-NEXT: vmov d16, r0, r1
+; CHECK-NEXT: vmov s0, r12
+; CHECK-NEXT: vcvt.f32.s32 s0, s0
+; CHECK-NEXT: vdup.32 q9, d0[0]
+; CHECK-NEXT: vsub.f32 q8, q9, q8
; CHECK-NEXT: vmov r0, r1, d16
; CHECK-NEXT: vmov r2, r3, d17
; CHECK-NEXT: mov pc, lr
@@ -525,13 +526,13 @@ define <4 x float> @check_spr_splat4(<4 x float> %p, i16 %q) {
define <4 x float> @check_spr_splat4_lane1(<4 x float> %p, i16 %q) {
; CHECK-LABEL: check_spr_splat4_lane1:
; CHECK: @ %bb.0:
-; CHECK-NEXT: mov r12, sp
-; CHECK-NEXT: vmov d19, r2, r3
-; CHECK-NEXT: vld1.16 {d16[]}, [r12:16]
-; CHECK-NEXT: vmov d18, r0, r1
-; CHECK-NEXT: vmovl.s16 q8, d16
-; CHECK-NEXT: vcvt.f32.s32 q8, q8
-; CHECK-NEXT: vsub.f32 q8, q8, q9
+; CHECK-NEXT: ldrsh r12, [sp]
+; CHECK-NEXT: vmov d17, r2, r3
+; CHECK-NEXT: vmov d16, r0, r1
+; CHECK-NEXT: vmov s0, r12
+; CHECK-NEXT: vcvt.f32.s32 s0, s0
+; CHECK-NEXT: vdup.32 q9, d0[0]
+; CHECK-NEXT: vsub.f32 q8, q9, q8
; CHECK-NEXT: vmov r0, r1, d16
; CHECK-NEXT: vmov r2, r3, d17
; CHECK-NEXT: mov pc, lr
OpenPOWER on IntegriCloud