@@ -1135,8 +1135,7 @@ define arm_aapcs_vfpcc void @ssatmul_4_q15(i16* nocapture readonly %pSrcA, i16*
1135
1135
; CHECK-NEXT: vldrh.s32 q0, [r0], #8
1136
1136
; CHECK-NEXT: vldrh.s32 q1, [r1], #8
1137
1137
; CHECK-NEXT: vmul.i32 q0, q1, q0
1138
- ; CHECK-NEXT: vshr.s32 q0, q0, #15
1139
- ; CHECK-NEXT: vqmovnb.s32 q0, q0
1138
+ ; CHECK-NEXT: vqshrnb.s32 q0, q0, #15
1140
1139
; CHECK-NEXT: vstrh.32 q0, [r2], #8
1141
1140
; CHECK-NEXT: le lr, .LBB5_4
1142
1141
; CHECK-NEXT: @ %bb.5: @ %middle.block
@@ -1274,13 +1273,11 @@ define arm_aapcs_vfpcc void @ssatmul_8_q15(i16* nocapture readonly %pSrcA, i16*
1274
1273
; CHECK-NEXT: vldrh.s32 q1, [r1, #8]
1275
1274
; CHECK-NEXT: vmul.i32 q0, q1, q0
1276
1275
; CHECK-NEXT: vldrh.s32 q1, [r1], #16
1277
- ; CHECK-NEXT: vshr.s32 q0, q0, #15
1278
- ; CHECK-NEXT: vqmovnb.s32 q0, q0
1276
+ ; CHECK-NEXT: vqshrnb.s32 q0, q0, #15
1279
1277
; CHECK-NEXT: vstrh.32 q0, [r2, #8]
1280
1278
; CHECK-NEXT: vldrh.s32 q0, [r0], #16
1281
1279
; CHECK-NEXT: vmul.i32 q0, q1, q0
1282
- ; CHECK-NEXT: vshr.s32 q0, q0, #15
1283
- ; CHECK-NEXT: vqmovnb.s32 q0, q0
1280
+ ; CHECK-NEXT: vqshrnb.s32 q0, q0, #15
1284
1281
; CHECK-NEXT: vstrh.32 q0, [r2], #16
1285
1282
; CHECK-NEXT: le lr, .LBB6_4
1286
1283
; CHECK-NEXT: @ %bb.5: @ %middle.block
@@ -1418,11 +1415,9 @@ define arm_aapcs_vfpcc void @ssatmul_8i_q15(i16* nocapture readonly %pSrcA, i16*
1418
1415
; CHECK-NEXT: vldrh.u16 q1, [r1], #16
1419
1416
; CHECK-NEXT: vmullt.s16 q2, q1, q0
1420
1417
; CHECK-NEXT: vmullb.s16 q0, q1, q0
1421
- ; CHECK-NEXT: vshr.s32 q0, q0, #15
1422
- ; CHECK-NEXT: vshr.s32 q2, q2, #15
1423
- ; CHECK-NEXT: vqmovnb.s32 q0, q0
1418
+ ; CHECK-NEXT: vqshrnb.s32 q0, q0, #15
1424
1419
; CHECK-NEXT: vmovlb.s16 q0, q0
1425
- ; CHECK-NEXT: vqmovnt .s32 q0, q2
1420
+ ; CHECK-NEXT: vqshrnt .s32 q0, q2, #15
1426
1421
; CHECK-NEXT: vstrb.8 q0, [r2], #16
1427
1422
; CHECK-NEXT: le lr, .LBB7_4
1428
1423
; CHECK-NEXT: @ %bb.5: @ %middle.block
@@ -1570,8 +1565,7 @@ define arm_aapcs_vfpcc void @ssatmul_s4t_q15(i16* nocapture readonly %pSrcA, i16
1570
1565
; CHECK-NEXT: vldrht.s32 q2, [r0], #8
1571
1566
; CHECK-NEXT: vldrht.s32 q3, [r1], #8
1572
1567
; CHECK-NEXT: vmul.i32 q2, q3, q2
1573
- ; CHECK-NEXT: vshr.s32 q2, q2, #15
1574
- ; CHECK-NEXT: vqmovnb.s32 q2, q2
1568
+ ; CHECK-NEXT: vqshrnb.s32 q2, q2, #15
1575
1569
; CHECK-NEXT: vmovlb.s16 q2, q2
1576
1570
; CHECK-NEXT: vpst
1577
1571
; CHECK-NEXT: vstrht.32 q2, [r2], #8
@@ -1705,8 +1699,7 @@ define arm_aapcs_vfpcc void @ssatmul_8t_q15(i16* nocapture readonly %pSrcA, i16*
1705
1699
; CHECK-NEXT: vmov.u16 r4, q7[3]
1706
1700
; CHECK-NEXT: vmov.32 q0[3], r4
1707
1701
; CHECK-NEXT: vmullb.s16 q0, q0, q5
1708
- ; CHECK-NEXT: vshr.s32 q0, q0, #15
1709
- ; CHECK-NEXT: vqmovnb.s32 q0, q0
1702
+ ; CHECK-NEXT: vqshrnb.s32 q0, q0, #15
1710
1703
; CHECK-NEXT: vmovlb.s16 q0, q0
1711
1704
; CHECK-NEXT: vmov r4, s0
1712
1705
; CHECK-NEXT: vmov.16 q5[0], r4
@@ -1733,8 +1726,7 @@ define arm_aapcs_vfpcc void @ssatmul_8t_q15(i16* nocapture readonly %pSrcA, i16*
1733
1726
; CHECK-NEXT: vmov.u16 r4, q7[7]
1734
1727
; CHECK-NEXT: vmov.32 q6[3], r4
1735
1728
; CHECK-NEXT: vmullb.s16 q0, q6, q0
1736
- ; CHECK-NEXT: vshr.s32 q0, q0, #15
1737
- ; CHECK-NEXT: vqmovnb.s32 q0, q0
1729
+ ; CHECK-NEXT: vqshrnb.s32 q0, q0, #15
1738
1730
; CHECK-NEXT: vmovlb.s16 q0, q0
1739
1731
; CHECK-NEXT: vmov r4, s0
1740
1732
; CHECK-NEXT: vmov.16 q5[4], r4
@@ -1863,11 +1855,9 @@ define arm_aapcs_vfpcc void @ssatmul_8ti_q15(i16* nocapture readonly %pSrcA, i16
1863
1855
; CHECK-NEXT: vldrht.u16 q6, [r1], #16
1864
1856
; CHECK-NEXT: vmullt.s16 q7, q6, q5
1865
1857
; CHECK-NEXT: vmullb.s16 q5, q6, q5
1866
- ; CHECK-NEXT: vshr.s32 q7, q7, #15
1867
- ; CHECK-NEXT: vshr.s32 q5, q5, #15
1868
- ; CHECK-NEXT: vqmovnb.s32 q5, q5
1858
+ ; CHECK-NEXT: vqshrnb.s32 q5, q5, #15
1869
1859
; CHECK-NEXT: vmovlb.s16 q5, q5
1870
- ; CHECK-NEXT: vqmovnt .s32 q5, q7
1860
+ ; CHECK-NEXT: vqshrnt .s32 q5, q7, #15
1871
1861
; CHECK-NEXT: vpst
1872
1862
; CHECK-NEXT: vstrht.16 q5, [r2], #16
1873
1863
; CHECK-NEXT: le lr, .LBB10_2
@@ -1973,8 +1963,7 @@ define arm_aapcs_vfpcc void @usatmul_4_q15(i16* nocapture readonly %pSrcA, i16*
1973
1963
; CHECK-NEXT: vldrh.u32 q0, [r0], #8
1974
1964
; CHECK-NEXT: vldrh.u32 q1, [r1], #8
1975
1965
; CHECK-NEXT: vmul.i32 q0, q1, q0
1976
- ; CHECK-NEXT: vshr.u32 q0, q0, #15
1977
- ; CHECK-NEXT: vqmovnb.u32 q0, q0
1966
+ ; CHECK-NEXT: vqshrnb.u32 q0, q0, #15
1978
1967
; CHECK-NEXT: vstrh.32 q0, [r2], #8
1979
1968
; CHECK-NEXT: le lr, .LBB11_4
1980
1969
; CHECK-NEXT: @ %bb.5: @ %middle.block
@@ -2104,13 +2093,11 @@ define arm_aapcs_vfpcc void @usatmul_8_q15(i16* nocapture readonly %pSrcA, i16*
2104
2093
; CHECK-NEXT: vldrh.u32 q1, [r1, #8]
2105
2094
; CHECK-NEXT: vmul.i32 q0, q1, q0
2106
2095
; CHECK-NEXT: vldrh.u32 q1, [r1], #16
2107
- ; CHECK-NEXT: vshr.u32 q0, q0, #15
2108
- ; CHECK-NEXT: vqmovnb.u32 q0, q0
2096
+ ; CHECK-NEXT: vqshrnb.u32 q0, q0, #15
2109
2097
; CHECK-NEXT: vstrh.32 q0, [r2, #8]
2110
2098
; CHECK-NEXT: vldrh.u32 q0, [r0], #16
2111
2099
; CHECK-NEXT: vmul.i32 q0, q1, q0
2112
- ; CHECK-NEXT: vshr.u32 q0, q0, #15
2113
- ; CHECK-NEXT: vqmovnb.u32 q0, q0
2100
+ ; CHECK-NEXT: vqshrnb.u32 q0, q0, #15
2114
2101
; CHECK-NEXT: vstrh.32 q0, [r2], #16
2115
2102
; CHECK-NEXT: le lr, .LBB12_4
2116
2103
; CHECK-NEXT: @ %bb.5: @ %middle.block
@@ -2381,8 +2368,7 @@ define arm_aapcs_vfpcc void @ssatmul_8_q7(i8* nocapture readonly %pSrcA, i8* noc
2381
2368
; CHECK-NEXT: vldrb.s16 q0, [r0], #8
2382
2369
; CHECK-NEXT: vldrb.s16 q1, [r1], #8
2383
2370
; CHECK-NEXT: vmul.i16 q0, q1, q0
2384
- ; CHECK-NEXT: vshr.s16 q0, q0, #7
2385
- ; CHECK-NEXT: vqmovnb.s16 q0, q0
2371
+ ; CHECK-NEXT: vqshrnb.s16 q0, q0, #7
2386
2372
; CHECK-NEXT: vstrb.16 q0, [r2], #8
2387
2373
; CHECK-NEXT: le lr, .LBB14_4
2388
2374
; CHECK-NEXT: @ %bb.5: @ %middle.block
@@ -2518,13 +2504,11 @@ define arm_aapcs_vfpcc void @ssatmul_16_q7(i8* nocapture readonly %pSrcA, i8* no
2518
2504
; CHECK-NEXT: vldrb.s16 q1, [r1, #8]
2519
2505
; CHECK-NEXT: vmul.i16 q0, q1, q0
2520
2506
; CHECK-NEXT: vldrb.s16 q1, [r1], #16
2521
- ; CHECK-NEXT: vshr.s16 q0, q0, #7
2522
- ; CHECK-NEXT: vqmovnb.s16 q0, q0
2507
+ ; CHECK-NEXT: vqshrnb.s16 q0, q0, #7
2523
2508
; CHECK-NEXT: vstrb.16 q0, [r2, #8]
2524
2509
; CHECK-NEXT: vldrb.s16 q0, [r0], #16
2525
2510
; CHECK-NEXT: vmul.i16 q0, q1, q0
2526
- ; CHECK-NEXT: vshr.s16 q0, q0, #7
2527
- ; CHECK-NEXT: vqmovnb.s16 q0, q0
2511
+ ; CHECK-NEXT: vqshrnb.s16 q0, q0, #7
2528
2512
; CHECK-NEXT: vstrb.16 q0, [r2], #16
2529
2513
; CHECK-NEXT: le lr, .LBB15_4
2530
2514
; CHECK-NEXT: @ %bb.5: @ %middle.block
@@ -2660,11 +2644,9 @@ define arm_aapcs_vfpcc void @ssatmul_16i_q7(i8* nocapture readonly %pSrcA, i8* n
2660
2644
; CHECK-NEXT: vldrb.u8 q1, [r1], #16
2661
2645
; CHECK-NEXT: vmullt.s8 q2, q1, q0
2662
2646
; CHECK-NEXT: vmullb.s8 q0, q1, q0
2663
- ; CHECK-NEXT: vshr.s16 q0, q0, #7
2664
- ; CHECK-NEXT: vshr.s16 q2, q2, #7
2665
- ; CHECK-NEXT: vqmovnb.s16 q0, q0
2647
+ ; CHECK-NEXT: vqshrnb.s16 q0, q0, #7
2666
2648
; CHECK-NEXT: vmovlb.s8 q0, q0
2667
- ; CHECK-NEXT: vqmovnt .s16 q0, q2
2649
+ ; CHECK-NEXT: vqshrnt .s16 q0, q2, #7
2668
2650
; CHECK-NEXT: vstrb.8 q0, [r2], #16
2669
2651
; CHECK-NEXT: le lr, .LBB16_4
2670
2652
; CHECK-NEXT: @ %bb.5: @ %middle.block
@@ -2837,8 +2819,7 @@ define arm_aapcs_vfpcc void @ssatmul_8t_q7(i8* nocapture readonly %pSrcA, i8* no
2837
2819
; CHECK-NEXT: vldrbt.s16 q5, [r0], #8
2838
2820
; CHECK-NEXT: vldrbt.s16 q6, [r1], #8
2839
2821
; CHECK-NEXT: vmul.i16 q5, q6, q5
2840
- ; CHECK-NEXT: vshr.s16 q5, q5, #7
2841
- ; CHECK-NEXT: vqmovnb.s16 q5, q5
2822
+ ; CHECK-NEXT: vqshrnb.s16 q5, q5, #7
2842
2823
; CHECK-NEXT: vmovlb.s8 q5, q5
2843
2824
; CHECK-NEXT: vpst
2844
2825
; CHECK-NEXT: vstrbt.16 q5, [r2], #8
@@ -3060,8 +3041,7 @@ define arm_aapcs_vfpcc void @ssatmul_16t_q7(i8* nocapture readonly %pSrcA, i8* n
3060
3041
; CHECK-NEXT: vmov.u8 r4, q4[7]
3061
3042
; CHECK-NEXT: vmov.16 q5[7], r4
3062
3043
; CHECK-NEXT: vmullb.s8 q5, q5, q7
3063
- ; CHECK-NEXT: vshr.s16 q5, q5, #7
3064
- ; CHECK-NEXT: vqmovnb.s16 q5, q5
3044
+ ; CHECK-NEXT: vqshrnb.s16 q5, q5, #7
3065
3045
; CHECK-NEXT: vmovlb.s8 q5, q5
3066
3046
; CHECK-NEXT: vmov.u16 r4, q5[0]
3067
3047
; CHECK-NEXT: vmov.8 q7[0], r4
@@ -3112,8 +3092,7 @@ define arm_aapcs_vfpcc void @ssatmul_16t_q7(i8* nocapture readonly %pSrcA, i8* n
3112
3092
; CHECK-NEXT: vmov.u8 r4, q4[15]
3113
3093
; CHECK-NEXT: vmov.16 q0[7], r4
3114
3094
; CHECK-NEXT: vmullb.s8 q0, q0, q5
3115
- ; CHECK-NEXT: vshr.s16 q0, q0, #7
3116
- ; CHECK-NEXT: vqmovnb.s16 q0, q0
3095
+ ; CHECK-NEXT: vqshrnb.s16 q0, q0, #7
3117
3096
; CHECK-NEXT: vmovlb.s8 q0, q0
3118
3097
; CHECK-NEXT: vmov.u16 r4, q0[0]
3119
3098
; CHECK-NEXT: vmov.8 q7[8], r4
@@ -3330,11 +3309,9 @@ define arm_aapcs_vfpcc void @ssatmul_16ti_q7(i8* nocapture readonly %pSrcA, i8*
3330
3309
; CHECK-NEXT: vldrbt.u8 q4, [r1], #16
3331
3310
; CHECK-NEXT: vmullt.s8 q5, q4, q0
3332
3311
; CHECK-NEXT: vmullb.s8 q0, q4, q0
3333
- ; CHECK-NEXT: vshr.s16 q0, q0, #7
3334
- ; CHECK-NEXT: vshr.s16 q5, q5, #7
3335
- ; CHECK-NEXT: vqmovnb.s16 q0, q0
3312
+ ; CHECK-NEXT: vqshrnb.s16 q0, q0, #7
3336
3313
; CHECK-NEXT: vmovlb.s8 q0, q0
3337
- ; CHECK-NEXT: vqmovnt .s16 q0, q5
3314
+ ; CHECK-NEXT: vqshrnt .s16 q0, q5, #7
3338
3315
; CHECK-NEXT: vpst
3339
3316
; CHECK-NEXT: vstrbt.8 q0, [r2], #16
3340
3317
; CHECK-NEXT: le lr, .LBB19_2
@@ -3451,8 +3428,7 @@ define arm_aapcs_vfpcc void @usatmul_8_q7(i8* nocapture readonly %pSrcA, i8* noc
3451
3428
; CHECK-NEXT: vldrb.u16 q0, [r0], #8
3452
3429
; CHECK-NEXT: vldrb.u16 q1, [r1], #8
3453
3430
; CHECK-NEXT: vmul.i16 q0, q1, q0
3454
- ; CHECK-NEXT: vshr.u16 q0, q0, #7
3455
- ; CHECK-NEXT: vqmovnb.u16 q0, q0
3431
+ ; CHECK-NEXT: vqshrnb.u16 q0, q0, #7
3456
3432
; CHECK-NEXT: vstrb.16 q0, [r2], #8
3457
3433
; CHECK-NEXT: le lr, .LBB20_4
3458
3434
; CHECK-NEXT: @ %bb.5: @ %middle.block
@@ -3581,14 +3557,12 @@ define arm_aapcs_vfpcc void @usatmul_16_q7(i8* nocapture readonly %pSrcA, i8* no
3581
3557
; CHECK-NEXT: vldrb.u16 q1, [r1, #8]
3582
3558
; CHECK-NEXT: vmul.i16 q0, q1, q0
3583
3559
; CHECK-NEXT: vldrb.u16 q1, [r1], #16
3584
- ; CHECK-NEXT: vshr.u16 q0, q0, #7
3585
- ; CHECK-NEXT: vqmovnb.u16 q0, q0
3560
+ ; CHECK-NEXT: vqshrnb.u16 q0, q0, #7
3586
3561
; CHECK-NEXT: vmovlb.u8 q0, q0
3587
3562
; CHECK-NEXT: vstrb.16 q0, [r2, #8]
3588
3563
; CHECK-NEXT: vldrb.u16 q0, [r0], #16
3589
3564
; CHECK-NEXT: vmul.i16 q0, q1, q0
3590
- ; CHECK-NEXT: vshr.u16 q0, q0, #7
3591
- ; CHECK-NEXT: vqmovnb.u16 q0, q0
3565
+ ; CHECK-NEXT: vqshrnb.u16 q0, q0, #7
3592
3566
; CHECK-NEXT: vmovlb.u8 q0, q0
3593
3567
; CHECK-NEXT: vstrb.16 q0, [r2], #16
3594
3568
; CHECK-NEXT: le lr, .LBB21_4
0 commit comments