Lou
c75b251103
[GVN] Load-store forwaring of scalable store to fixed load. ( #124748 )
...
When storing a scalable vector and loading a fixed-size vector, where
the
scalable vector is known to be larger based on vscale_range, perform
store-to-load forwarding through temporary @llvm.vector.extract calls.
InstCombine then folds the insert/extract pair away.
The usecase is shown in https://godbolt.org/z/KT3sMrMbd , which shows
that clang generates IR that matches this pattern when the
"arm_sve_vector_bits" attribute is used:
```c
typedef svfloat32_t svfloat32_fixed_t
__attribute__((arm_sve_vector_bits(512)));
struct svfloat32_wrapped_t {
svfloat32_fixed_t v;
};
static inline svfloat32_wrapped_t
add(svfloat32_wrapped_t a, svfloat32_wrapped_t b) {
return {svadd_f32_x(svptrue_b32(), a.v, b.v)};
}
svfloat32_wrapped_t
foo(svfloat32_wrapped_t a, svfloat32_wrapped_t b) {
// The IR pattern this patch matches is generated for this return:
return add(a, b);
}
```
2025-01-30 11:49:42 +01:00
..
2025-01-29 16:56:47 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2023-01-11 14:19:34 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2024-11-12 09:11:47 +00:00
2022-12-23 10:00:59 +01:00
2024-11-12 09:11:47 +00:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2023-03-22 15:23:31 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2023-01-11 14:19:34 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2023-04-27 13:04:17 -07:00
2022-12-23 10:00:59 +01:00
2023-12-05 10:09:52 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2024-02-05 11:57:34 +01:00
2024-07-22 16:22:01 +02:00
2023-03-09 13:08:19 +01:00
2023-03-09 13:08:19 +01:00
2023-05-19 21:27:35 +01:00
2022-12-23 10:00:59 +01:00
2024-11-12 09:11:47 +00:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2024-11-15 17:07:33 +00:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2024-11-04 15:54:59 +00:00
2024-11-12 09:11:47 +00:00
2025-01-28 18:25:32 +00:00
2023-06-27 16:53:50 -07:00
2022-12-23 10:00:59 +01:00
2023-06-09 15:41:32 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2024-11-12 09:08:06 -06:00
2023-01-10 11:38:58 -08:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2024-06-14 15:07:27 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2024-08-04 16:45:10 +08:00
2023-06-06 19:45:34 +00:00
2022-12-23 10:00:59 +01:00
2023-02-14 13:30:23 -08:00
2022-12-23 10:00:59 +01:00
2024-11-26 20:39:53 +00:00
2024-11-06 11:53:33 +00:00
2024-11-06 11:53:33 +00:00
2023-01-11 14:19:34 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2023-02-22 14:47:00 +01:00
2023-02-02 14:25:13 +08:00
2022-12-23 10:00:59 +01:00
2024-12-04 12:45:30 +00:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2024-02-05 11:57:34 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2023-01-11 14:19:34 +01:00
2022-12-23 10:00:59 +01:00
2024-06-30 11:51:30 +01:00
2022-12-23 10:00:59 +01:00
2023-05-31 15:03:41 +02:00
2023-06-30 15:52:40 +01:00
2023-09-15 07:04:32 +02:00
2023-09-15 11:50:34 +02:00
2023-10-19 09:08:59 +02:00
2024-02-26 15:55:56 +08:00
2024-11-08 16:00:48 +08:00
2022-12-23 10:00:59 +01:00
2024-11-12 09:11:47 +00:00
2023-05-19 16:15:06 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2023-10-10 19:22:00 +03:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2023-10-24 18:18:51 +01:00
2024-12-03 09:55:12 +01:00
2022-12-23 10:00:59 +01:00
2024-11-12 09:11:47 +00:00
2022-12-23 10:00:59 +01:00
2024-11-20 19:31:16 +00:00
2024-11-12 09:11:47 +00:00
2022-12-23 10:00:59 +01:00
2022-12-23 10:00:59 +01:00
2025-01-30 11:49:42 +01:00