Skip to content

Commit 9d39a76

Browse files
committed
[LoongArch] Initial implementation for enableMemCmpExpansion hook
After overriding `TargetTransformInfo::enableMemCmpExpansion` in this commit, `MergeICmps` and `ExpandMemCmp` passes will be enabled on LoongArch.
1 parent dfa2932 commit 9d39a76

File tree

2 files changed

+22
-2
lines changed

2 files changed

+22
-2
lines changed

llvm/lib/Target/LoongArch/LoongArchTargetTransformInfo.cpp

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,4 +111,23 @@ bool LoongArchTTIImpl::shouldExpandReduction(const IntrinsicInst *II) const {
111111
}
112112
}
113113

114-
// TODO: Implement more hooks to provide TTI machinery for LoongArch.
114+
LoongArchTTIImpl::TTI::MemCmpExpansionOptions
115+
LoongArchTTIImpl::enableMemCmpExpansion(bool OptSize, bool IsZeroCmp) const {
116+
TTI::MemCmpExpansionOptions Options;
117+
118+
if (!ST->hasUAL())
119+
return Options;
120+
121+
// TODO: Set same as the default value of MaxLoadsPerMemcmp or
122+
// MaxLoadsPerMemcmpOptSize. May need more consideration?
123+
Options.MaxNumLoads = TLI->getMaxExpandSizeMemcmp(OptSize);
124+
Options.NumLoadsPerBlock = Options.MaxNumLoads;
125+
Options.AllowOverlappingLoads = true;
126+
127+
// TODO: Support for vectors.
128+
if (ST->is64Bit())
129+
Options.LoadSizes.push_back(8);
130+
Options.LoadSizes.append({4, 2, 1});
131+
132+
return Options;
133+
}

llvm/lib/Target/LoongArch/LoongArchTargetTransformInfo.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,8 @@ class LoongArchTTIImpl : public BasicTTIImplBase<LoongArchTTIImpl> {
5555

5656
bool shouldExpandReduction(const IntrinsicInst *II) const override;
5757

58-
// TODO: Implement more hooks to provide TTI machinery for LoongArch.
58+
TTI::MemCmpExpansionOptions
59+
enableMemCmpExpansion(bool OptSize, bool IsZeroCmp) const override;
5960
};
6061

6162
} // end namespace llvm

0 commit comments

Comments
 (0)