[all-commits] [llvm/llvm-project] b7101e: [DAGCombine][RISCV] Don't try to trunc-store combi...
Fraser Cormack via All-commits
all-commits at lists.llvm.org
Thu May 27 06:24:45 PDT 2021
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: b7101e218c215184b85fc740d726dc7652e4941e
https://github.com/llvm/llvm-project/commit/b7101e218c215184b85fc740d726dc7652e4941e
Author: Fraser Cormack <fraser at codeplay.com>
Date: 2021-05-27 (Thu, 27 May 2021)
Changed paths:
M llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
M llvm/lib/Target/RISCV/RISCVISelLowering.cpp
A llvm/test/CodeGen/RISCV/rvv/combine-store-fp.ll
Log Message:
-----------
[DAGCombine][RISCV] Don't try to trunc-store combined vector stores
DAGCombine's `mergeStoresOfConstantsOrVecElts` optimization is told
whether it's to use vector types and also whether it's to issue a
truncating store. However, the truncating store code path assumes a
scalar integer `ConstantSDNode`, and when using vector types it creates
either a `BUILD_VECTOR` or `CONCAT_VECTORS` to store: neither of which
is a constant.
The `riscv64` target is able to expose a crash here because it switches
on both code paths at the same time. The `f32` is stored as `i32` which
must be promoted to `i64`, necessitating a truncating store.
It also decides later that it prefers a vector store of `v2f32`.
While vector truncating stores are legal, this combine is not able to
emit them. We also don't have a test case. This patch adds an assert to
catch this case more gracefully, and updates one of the caller functions
to the function to turn off the use of truncating stores when preferring
vectors.
Reviewed By: craig.topper
Differential Revision: https://reviews.llvm.org/D103173
More information about the All-commits
mailing list