@@ -2022,14 +2022,9 @@ define <vscale x 16 x i64> @vp_ctpop_nxv16i64(<vscale x 16 x i64> %va, <vscale x
2022
2022
; RV32-NEXT: mul a1, a1, a2
2023
2023
; RV32-NEXT: sub sp, sp, a1
2024
2024
; RV32-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x38, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 56 * vlenb
2025
- ; RV32-NEXT: vmv1r.v v24 , v0
2025
+ ; RV32-NEXT: vmv1r.v v7 , v0
2026
2026
; RV32-NEXT: csrr a1, vlenb
2027
- ; RV32-NEXT: slli a1, a1, 5
2028
- ; RV32-NEXT: add a1, sp, a1
2029
- ; RV32-NEXT: addi a1, a1, 16
2030
- ; RV32-NEXT: vs8r.v v16, (a1) # Unknown-size Folded Spill
2031
- ; RV32-NEXT: csrr a1, vlenb
2032
- ; RV32-NEXT: li a2, 48
2027
+ ; RV32-NEXT: li a2, 40
2033
2028
; RV32-NEXT: mul a1, a1, a2
2034
2029
; RV32-NEXT: add a1, sp, a1
2035
2030
; RV32-NEXT: addi a1, a1, 16
@@ -2045,101 +2040,88 @@ define <vscale x 16 x i64> @vp_ctpop_nxv16i64(<vscale x 16 x i64> %va, <vscale x
2045
2040
; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
2046
2041
; RV32-NEXT: vsrl.vi v8, v16, 1, v0.t
2047
2042
; RV32-NEXT: csrr a3, vlenb
2048
- ; RV32-NEXT: li a4, 40
2043
+ ; RV32-NEXT: li a4, 48
2049
2044
; RV32-NEXT: mul a3, a3, a4
2050
2045
; RV32-NEXT: add a3, sp, a3
2051
2046
; RV32-NEXT: addi a3, a3, 16
2052
2047
; RV32-NEXT: vs8r.v v8, (a3) # Unknown-size Folded Spill
2053
2048
; RV32-NEXT: lui a3, 349525
2054
2049
; RV32-NEXT: addi a3, a3, 1365
2055
2050
; RV32-NEXT: vsetvli a4, zero, e32, m8, ta, ma
2056
- ; RV32-NEXT: vmv.v.x v16, a3
2057
- ; RV32-NEXT: csrr a3, vlenb
2058
- ; RV32-NEXT: li a4, 24
2059
- ; RV32-NEXT: mul a3, a3, a4
2060
- ; RV32-NEXT: add a3, sp, a3
2061
- ; RV32-NEXT: addi a3, a3, 16
2062
- ; RV32-NEXT: vs8r.v v16, (a3) # Unknown-size Folded Spill
2051
+ ; RV32-NEXT: vmv.v.x v8, a3
2063
2052
; RV32-NEXT: csrr a3, vlenb
2064
- ; RV32-NEXT: li a4, 40
2065
- ; RV32-NEXT: mul a3, a3, a4
2053
+ ; RV32-NEXT: slli a3, a3, 5
2066
2054
; RV32-NEXT: add a3, sp, a3
2067
2055
; RV32-NEXT: addi a3, a3, 16
2068
- ; RV32-NEXT: vl8r.v v8, (a3) # Unknown-size Folded Reload
2069
- ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
2070
- ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
2056
+ ; RV32-NEXT: vs8r.v v8, (a3) # Unknown-size Folded Spill
2071
2057
; RV32-NEXT: csrr a3, vlenb
2072
2058
; RV32-NEXT: slli a3, a3, 5
2073
2059
; RV32-NEXT: add a3, sp, a3
2074
2060
; RV32-NEXT: addi a3, a3, 16
2075
- ; RV32-NEXT: vl8r.v v16, (a3) # Unknown-size Folded Reload
2076
- ; RV32-NEXT: vsub.vv v8, v16, v8, v0.t
2061
+ ; RV32-NEXT: vl8r.v v8, (a3) # Unknown-size Folded Reload
2077
2062
; RV32-NEXT: csrr a3, vlenb
2078
- ; RV32-NEXT: slli a3, a3, 5
2063
+ ; RV32-NEXT: li a4, 48
2064
+ ; RV32-NEXT: mul a3, a3, a4
2079
2065
; RV32-NEXT: add a3, sp, a3
2080
2066
; RV32-NEXT: addi a3, a3, 16
2081
- ; RV32-NEXT: vs8r.v v8, (a3) # Unknown-size Folded Spill
2067
+ ; RV32-NEXT: vl8r.v v24, (a3) # Unknown-size Folded Reload
2068
+ ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
2069
+ ; RV32-NEXT: vand.vv v8, v24, v8, v0.t
2070
+ ; RV32-NEXT: vsub.vv v16, v16, v8, v0.t
2082
2071
; RV32-NEXT: lui a3, 209715
2083
2072
; RV32-NEXT: addi a3, a3, 819
2084
2073
; RV32-NEXT: vsetvli a4, zero, e32, m8, ta, ma
2085
- ; RV32-NEXT: vmv.v.x v16, a3
2086
- ; RV32-NEXT: csrr a3, vlenb
2087
- ; RV32-NEXT: slli a3, a3, 5
2088
- ; RV32-NEXT: add a3, sp, a3
2089
- ; RV32-NEXT: addi a3, a3, 16
2090
- ; RV32-NEXT: vl8r.v v8, (a3) # Unknown-size Folded Reload
2091
- ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
2092
- ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
2074
+ ; RV32-NEXT: vmv.v.x v8, a3
2093
2075
; RV32-NEXT: csrr a3, vlenb
2094
- ; RV32-NEXT: slli a3, a3, 4
2076
+ ; RV32-NEXT: li a4, 48
2077
+ ; RV32-NEXT: mul a3, a3, a4
2095
2078
; RV32-NEXT: add a3, sp, a3
2096
2079
; RV32-NEXT: addi a3, a3, 16
2097
2080
; RV32-NEXT: vs8r.v v8, (a3) # Unknown-size Folded Spill
2098
2081
; RV32-NEXT: csrr a3, vlenb
2099
- ; RV32-NEXT: slli a3, a3, 5
2082
+ ; RV32-NEXT: li a4, 48
2083
+ ; RV32-NEXT: mul a3, a3, a4
2100
2084
; RV32-NEXT: add a3, sp, a3
2101
2085
; RV32-NEXT: addi a3, a3, 16
2102
2086
; RV32-NEXT: vl8r.v v8, (a3) # Unknown-size Folded Reload
2103
- ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
2087
+ ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
2088
+ ; RV32-NEXT: vand.vv v8, v16, v8, v0.t
2089
+ ; RV32-NEXT: vsrl.vi v16, v16, 2, v0.t
2104
2090
; RV32-NEXT: csrr a3, vlenb
2105
- ; RV32-NEXT: li a4, 40
2091
+ ; RV32-NEXT: li a4, 48
2106
2092
; RV32-NEXT: mul a3, a3, a4
2107
2093
; RV32-NEXT: add a3, sp, a3
2108
2094
; RV32-NEXT: addi a3, a3, 16
2109
- ; RV32-NEXT: vs8r.v v16, (a3) # Unknown-size Folded Spill
2110
- ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
2111
- ; RV32-NEXT: csrr a3, vlenb
2112
- ; RV32-NEXT: slli a3, a3, 4
2113
- ; RV32-NEXT: add a3, sp, a3
2114
- ; RV32-NEXT: addi a3, a3, 16
2115
- ; RV32-NEXT: vl8r.v v16, (a3) # Unknown-size Folded Reload
2116
- ; RV32-NEXT: vadd.vv v8, v16, v8, v0.t
2095
+ ; RV32-NEXT: vl8r.v v24, (a3) # Unknown-size Folded Reload
2096
+ ; RV32-NEXT: vand.vv v16, v16, v24, v0.t
2097
+ ; RV32-NEXT: vadd.vv v8, v8, v16, v0.t
2117
2098
; RV32-NEXT: vsrl.vi v16, v8, 4, v0.t
2118
2099
; RV32-NEXT: vadd.vv v8, v8, v16, v0.t
2119
2100
; RV32-NEXT: lui a3, 61681
2120
2101
; RV32-NEXT: addi a3, a3, -241
2121
2102
; RV32-NEXT: vsetvli a4, zero, e32, m8, ta, ma
2122
2103
; RV32-NEXT: vmv.v.x v16, a3
2123
2104
; RV32-NEXT: csrr a3, vlenb
2124
- ; RV32-NEXT: slli a3, a3, 5
2105
+ ; RV32-NEXT: li a4, 24
2106
+ ; RV32-NEXT: mul a3, a3, a4
2125
2107
; RV32-NEXT: add a3, sp, a3
2126
2108
; RV32-NEXT: addi a3, a3, 16
2127
2109
; RV32-NEXT: vs8r.v v16, (a3) # Unknown-size Folded Spill
2128
2110
; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
2129
- ; RV32-NEXT: vand.vv v16 , v8, v16, v0.t
2111
+ ; RV32-NEXT: vand.vv v8 , v8, v16, v0.t
2130
2112
; RV32-NEXT: lui a3, 4112
2131
2113
; RV32-NEXT: addi a3, a3, 257
2132
2114
; RV32-NEXT: vsetvli a4, zero, e32, m8, ta, ma
2133
- ; RV32-NEXT: vmv.v.x v8 , a3
2115
+ ; RV32-NEXT: vmv.v.x v16 , a3
2134
2116
; RV32-NEXT: csrr a3, vlenb
2135
2117
; RV32-NEXT: slli a3, a3, 4
2136
2118
; RV32-NEXT: add a3, sp, a3
2137
2119
; RV32-NEXT: addi a3, a3, 16
2138
- ; RV32-NEXT: vs8r.v v8 , (a3) # Unknown-size Folded Spill
2120
+ ; RV32-NEXT: vs8r.v v16 , (a3) # Unknown-size Folded Spill
2139
2121
; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
2140
- ; RV32-NEXT: vmul.vv v16, v16, v8 , v0.t
2122
+ ; RV32-NEXT: vmul.vv v8, v8, v16 , v0.t
2141
2123
; RV32-NEXT: li a2, 56
2142
- ; RV32-NEXT: vsrl.vx v8, v16 , a2, v0.t
2124
+ ; RV32-NEXT: vsrl.vx v8, v8 , a2, v0.t
2143
2125
; RV32-NEXT: csrr a3, vlenb
2144
2126
; RV32-NEXT: slli a3, a3, 3
2145
2127
; RV32-NEXT: add a3, sp, a3
@@ -2149,8 +2131,8 @@ define <vscale x 16 x i64> @vp_ctpop_nxv16i64(<vscale x 16 x i64> %va, <vscale x
2149
2131
; RV32-NEXT: # %bb.1:
2150
2132
; RV32-NEXT: mv a0, a1
2151
2133
; RV32-NEXT: .LBB46_2:
2152
- ; RV32-NEXT: vmv1r.v v0, v24
2153
- ; RV32-NEXT: li a3, 48
2134
+ ; RV32-NEXT: vmv1r.v v0, v7
2135
+ ; RV32-NEXT: li a3, 40
2154
2136
; RV32-NEXT: mul a1, a1, a3
2155
2137
; RV32-NEXT: add a1, sp, a1
2156
2138
; RV32-NEXT: addi a1, a1, 16
@@ -2160,71 +2142,64 @@ define <vscale x 16 x i64> @vp_ctpop_nxv16i64(<vscale x 16 x i64> %va, <vscale x
2160
2142
; RV32-NEXT: addi a0, sp, 16
2161
2143
; RV32-NEXT: vs8r.v v8, (a0) # Unknown-size Folded Spill
2162
2144
; RV32-NEXT: csrr a0, vlenb
2163
- ; RV32-NEXT: li a1, 24
2164
- ; RV32-NEXT: mul a0, a0, a1
2165
- ; RV32-NEXT: add a0, sp, a0
2166
- ; RV32-NEXT: addi a0, a0, 16
2167
- ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
2168
- ; RV32-NEXT: addi a0, sp, 16
2169
- ; RV32-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload
2170
- ; RV32-NEXT: vand.vv v16, v8, v16, v0.t
2171
- ; RV32-NEXT: csrr a0, vlenb
2172
- ; RV32-NEXT: li a1, 48
2173
- ; RV32-NEXT: mul a0, a0, a1
2145
+ ; RV32-NEXT: slli a0, a0, 5
2174
2146
; RV32-NEXT: add a0, sp, a0
2175
2147
; RV32-NEXT: addi a0, a0, 16
2176
2148
; RV32-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload
2177
- ; RV32-NEXT: vsub.vv v8, v8, v16, v0.t
2149
+ ; RV32-NEXT: addi a0, sp, 16
2150
+ ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
2151
+ ; RV32-NEXT: vand.vv v8, v16, v8, v0.t
2178
2152
; RV32-NEXT: csrr a0, vlenb
2179
- ; RV32-NEXT: li a1, 48
2153
+ ; RV32-NEXT: li a1, 40
2180
2154
; RV32-NEXT: mul a0, a0, a1
2181
2155
; RV32-NEXT: add a0, sp, a0
2182
2156
; RV32-NEXT: addi a0, a0, 16
2183
- ; RV32-NEXT: vs8r.v v8, (a0) # Unknown-size Folded Spill
2157
+ ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
2158
+ ; RV32-NEXT: vsub.vv v8, v16, v8, v0.t
2184
2159
; RV32-NEXT: csrr a0, vlenb
2185
2160
; RV32-NEXT: li a1, 40
2186
2161
; RV32-NEXT: mul a0, a0, a1
2187
2162
; RV32-NEXT: add a0, sp, a0
2188
2163
; RV32-NEXT: addi a0, a0, 16
2189
- ; RV32-NEXT: vl8r .v v16 , (a0) # Unknown-size Folded Reload
2164
+ ; RV32-NEXT: vs8r .v v8 , (a0) # Unknown-size Folded Spill
2190
2165
; RV32-NEXT: csrr a0, vlenb
2191
2166
; RV32-NEXT: li a1, 48
2192
2167
; RV32-NEXT: mul a0, a0, a1
2193
2168
; RV32-NEXT: add a0, sp, a0
2194
2169
; RV32-NEXT: addi a0, a0, 16
2195
2170
; RV32-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload
2196
- ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
2197
2171
; RV32-NEXT: csrr a0, vlenb
2198
- ; RV32-NEXT: li a1, 24
2172
+ ; RV32-NEXT: li a1, 40
2199
2173
; RV32-NEXT: mul a0, a0, a1
2200
2174
; RV32-NEXT: add a0, sp, a0
2201
2175
; RV32-NEXT: addi a0, a0, 16
2202
- ; RV32-NEXT: vs8r.v v8, (a0) # Unknown-size Folded Spill
2176
+ ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
2177
+ ; RV32-NEXT: vand.vv v16, v16, v8, v0.t
2203
2178
; RV32-NEXT: csrr a0, vlenb
2204
- ; RV32-NEXT: li a1, 48
2205
- ; RV32-NEXT: mul a0, a0, a1
2179
+ ; RV32-NEXT: slli a0, a0, 5
2206
2180
; RV32-NEXT: add a0, sp, a0
2207
2181
; RV32-NEXT: addi a0, a0, 16
2208
- ; RV32-NEXT: vl8r .v v8 , (a0) # Unknown-size Folded Reload
2209
- ; RV32-NEXT: vsrl.vi v16, v8, 2, v0.t
2182
+ ; RV32-NEXT: vs8r .v v16 , (a0) # Unknown-size Folded Spill
2183
+ ; RV32-NEXT: vmv8r.v v16, v8
2210
2184
; RV32-NEXT: csrr a0, vlenb
2211
2185
; RV32-NEXT: li a1, 40
2212
2186
; RV32-NEXT: mul a0, a0, a1
2213
2187
; RV32-NEXT: add a0, sp, a0
2214
2188
; RV32-NEXT: addi a0, a0, 16
2215
2189
; RV32-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload
2216
- ; RV32-NEXT: vand.vv v16, v16, v8, v0.t
2190
+ ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
2191
+ ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
2217
2192
; RV32-NEXT: csrr a0, vlenb
2218
- ; RV32-NEXT: li a1, 24
2219
- ; RV32-NEXT: mul a0, a0, a1
2193
+ ; RV32-NEXT: slli a0, a0, 5
2220
2194
; RV32-NEXT: add a0, sp, a0
2221
2195
; RV32-NEXT: addi a0, a0, 16
2222
- ; RV32-NEXT: vl8r.v v8 , (a0) # Unknown-size Folded Reload
2223
- ; RV32-NEXT: vadd.vv v8, v8, v16 , v0.t
2196
+ ; RV32-NEXT: vl8r.v v16 , (a0) # Unknown-size Folded Reload
2197
+ ; RV32-NEXT: vadd.vv v8, v16, v8 , v0.t
2224
2198
; RV32-NEXT: vsrl.vi v16, v8, 4, v0.t
2225
2199
; RV32-NEXT: vadd.vv v8, v8, v16, v0.t
2226
2200
; RV32-NEXT: csrr a0, vlenb
2227
- ; RV32-NEXT: slli a0, a0, 5
2201
+ ; RV32-NEXT: li a1, 24
2202
+ ; RV32-NEXT: mul a0, a0, a1
2228
2203
; RV32-NEXT: add a0, sp, a0
2229
2204
; RV32-NEXT: addi a0, a0, 16
2230
2205
; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
@@ -2386,23 +2361,23 @@ define <vscale x 16 x i64> @vp_ctpop_nxv16i64_unmasked(<vscale x 16 x i64> %va,
2386
2361
; RV32-NEXT: vs8r.v v0, (a3) # Unknown-size Folded Spill
2387
2362
; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
2388
2363
; RV32-NEXT: vand.vv v24, v24, v0
2389
- ; RV32-NEXT: vsub.vv v24 , v16, v24
2364
+ ; RV32-NEXT: vsub.vv v16 , v16, v24
2390
2365
; RV32-NEXT: lui a3, 209715
2391
2366
; RV32-NEXT: addi a3, a3, 819
2392
2367
; RV32-NEXT: vsetvli a4, zero, e32, m8, ta, ma
2393
2368
; RV32-NEXT: vmv.v.x v0, a3
2394
2369
; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
2395
- ; RV32-NEXT: vand.vv v16, v24 , v0
2396
- ; RV32-NEXT: vsrl.vi v24, v24 , 2
2370
+ ; RV32-NEXT: vand.vv v24, v16 , v0
2371
+ ; RV32-NEXT: vsrl.vi v16, v16 , 2
2397
2372
; RV32-NEXT: csrr a3, vlenb
2398
2373
; RV32-NEXT: slli a3, a3, 4
2399
2374
; RV32-NEXT: add a3, sp, a3
2400
2375
; RV32-NEXT: addi a3, a3, 16
2401
2376
; RV32-NEXT: vs8r.v v0, (a3) # Unknown-size Folded Spill
2402
- ; RV32-NEXT: vand.vv v24, v24, v0
2403
- ; RV32-NEXT: vadd.vv v24, v16, v24
2404
- ; RV32-NEXT: vsrl.vi v16, v24, 4
2377
+ ; RV32-NEXT: vand.vv v16, v16, v0
2405
2378
; RV32-NEXT: vadd.vv v16, v24, v16
2379
+ ; RV32-NEXT: vsrl.vi v24, v16, 4
2380
+ ; RV32-NEXT: vadd.vv v16, v16, v24
2406
2381
; RV32-NEXT: lui a3, 61681
2407
2382
; RV32-NEXT: addi a3, a3, -241
2408
2383
; RV32-NEXT: vsetvli a4, zero, e32, m8, ta, ma
@@ -2437,16 +2412,16 @@ define <vscale x 16 x i64> @vp_ctpop_nxv16i64_unmasked(<vscale x 16 x i64> %va,
2437
2412
; RV32-NEXT: addi a0, a0, 16
2438
2413
; RV32-NEXT: vl8r.v v0, (a0) # Unknown-size Folded Reload
2439
2414
; RV32-NEXT: vand.vv v24, v24, v0
2440
- ; RV32-NEXT: vsub.vv v24 , v8, v24
2415
+ ; RV32-NEXT: vsub.vv v8 , v8, v24
2441
2416
; RV32-NEXT: csrr a0, vlenb
2442
2417
; RV32-NEXT: slli a0, a0, 4
2443
2418
; RV32-NEXT: add a0, sp, a0
2444
2419
; RV32-NEXT: addi a0, a0, 16
2445
2420
; RV32-NEXT: vl8r.v v0, (a0) # Unknown-size Folded Reload
2446
- ; RV32-NEXT: vand.vv v8, v24 , v0
2447
- ; RV32-NEXT: vsrl.vi v24, v24 , 2
2448
- ; RV32-NEXT: vand.vv v24, v24 , v0
2449
- ; RV32-NEXT: vadd.vv v8, v8, v24
2421
+ ; RV32-NEXT: vand.vv v24, v8 , v0
2422
+ ; RV32-NEXT: vsrl.vi v8, v8 , 2
2423
+ ; RV32-NEXT: vand.vv v8, v8 , v0
2424
+ ; RV32-NEXT: vadd.vv v8, v24, v8
2450
2425
; RV32-NEXT: vsrl.vi v24, v8, 4
2451
2426
; RV32-NEXT: vadd.vv v8, v8, v24
2452
2427
; RV32-NEXT: csrr a0, vlenb
0 commit comments