diff options
author | Jonas Paulsson <paulson1@linux.ibm.com> | 2024-03-28 16:14:35 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-28 16:14:35 +0100 |
commit | 94b5c118b3da99012e00d3e2d7c74784de9fc7ab (patch) | |
tree | c304a52e4e18084922a2d441a4f369f219de4942 /llvm/lib/CodeGen/TargetLoweringBase.cpp | |
parent | e251f56a4d808340765112dd78edc6e6619dd05b (diff) | |
download | llvm-94b5c118b3da99012e00d3e2d7c74784de9fc7ab.zip llvm-94b5c118b3da99012e00d3e2d7c74784de9fc7ab.tar.gz llvm-94b5c118b3da99012e00d3e2d7c74784de9fc7ab.tar.bz2 |
[ISel] Move handling of atomic loads from SystemZ to DAGCombiner (NFC). (#86484)
The folding of sign/zero extensions into an atomic load by specifying an
extension type is not target specific, and therefore belongs in the
DAGCombiner rather than in the SystemZ backend.
- Handle atomic loads similarly to regular loads by adding
AtomicLoadExtActions with set/get methods.
- Move SystemZ extendAtomicLoad() to DagCombiner.cpp.
Diffstat (limited to 'llvm/lib/CodeGen/TargetLoweringBase.cpp')
-rw-r--r-- | llvm/lib/CodeGen/TargetLoweringBase.cpp | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/TargetLoweringBase.cpp b/llvm/lib/CodeGen/TargetLoweringBase.cpp index b16e78d..f64ded4 100644 --- a/llvm/lib/CodeGen/TargetLoweringBase.cpp +++ b/llvm/lib/CodeGen/TargetLoweringBase.cpp @@ -823,6 +823,12 @@ void TargetLoweringBase::initActions() { std::fill(std::begin(TargetDAGCombineArray), std::end(TargetDAGCombineArray), 0); + // Let extending atomic loads be unsupported by default. + for (MVT ValVT : MVT::all_valuetypes()) + for (MVT MemVT : MVT::all_valuetypes()) + setAtomicLoadExtAction({ISD::SEXTLOAD, ISD::ZEXTLOAD}, ValVT, MemVT, + Expand); + // We're somewhat special casing MVT::i2 and MVT::i4. Ideally we want to // remove this and targets should individually set these types if not legal. for (ISD::NodeType NT : enum_seq(ISD::DELETED_NODE, ISD::BUILTIN_OP_END, |