aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib
diff options
context:
space:
mode:
authorAmara Emerson <amara@apple.com>2021-07-24 23:44:29 -0700
committerAmara Emerson <amara@apple.com>2021-07-26 10:37:31 -0700
commitdec34104bfa505f39bb81d24c9ca064a4a03c88a (patch)
treeabdc2694a27394d47aa148b9706de3b9a3c8d71d /llvm/lib
parent016ae7df95f2d30bc8e44d5e06571e7510770379 (diff)
downloadllvm-dec34104bfa505f39bb81d24c9ca064a4a03c88a.zip
llvm-dec34104bfa505f39bb81d24c9ca064a4a03c88a.tar.gz
llvm-dec34104bfa505f39bb81d24c9ca064a4a03c88a.tar.bz2
[GlobalISel] Add combine for merge(unmerge) and use AArch64 postlegal-combiner.
Differential Revision: https://reviews.llvm.org/D106761
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp19
-rw-r--r--llvm/lib/Target/AArch64/AArch64Combine.td2
2 files changed, 20 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp b/llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp
index 590a65a..0e07bc4 100644
--- a/llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp
+++ b/llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp
@@ -2014,6 +2014,25 @@ void CombinerHelper::applyCombineShlOfExtend(MachineInstr &MI,
MI.eraseFromParent();
}
+bool CombinerHelper::matchCombineMergeUnmerge(MachineInstr &MI,
+ Register &MatchInfo) {
+ GMerge &Merge = cast<GMerge>(MI);
+ SmallVector<Register, 16> MergedValues;
+ for (unsigned I = 0; I < Merge.getNumSources(); ++I)
+ MergedValues.emplace_back(Merge.getSourceReg(I));
+
+ auto *Unmerge = getOpcodeDef<GUnmerge>(MergedValues[0], MRI);
+ if (!Unmerge || Unmerge->getNumDefs() != Merge.getNumSources())
+ return false;
+
+ for (unsigned I = 0; I < MergedValues.size(); ++I)
+ if (MergedValues[I] != Unmerge->getReg(I))
+ return false;
+
+ MatchInfo = Unmerge->getSourceReg();
+ return true;
+}
+
static Register peekThroughBitcast(Register Reg,
const MachineRegisterInfo &MRI) {
while (mi_match(Reg, MRI, m_GBitcast(m_Reg(Reg))))
diff --git a/llvm/lib/Target/AArch64/AArch64Combine.td b/llvm/lib/Target/AArch64/AArch64Combine.td
index 62493ae..5e2b5b6 100644
--- a/llvm/lib/Target/AArch64/AArch64Combine.td
+++ b/llvm/lib/Target/AArch64/AArch64Combine.td
@@ -203,6 +203,6 @@ def AArch64PostLegalizerCombinerHelper
extractvecelt_pairwise_add, redundant_or,
mul_const, redundant_sext_inreg,
form_bitfield_extract, rotate_out_of_range,
- icmp_to_true_false_known_bits]> {
+ icmp_to_true_false_known_bits, merge_unmerge]> {
let DisableRuleOption = "aarch64postlegalizercombiner-disable-rule";
}