[PATCH] D20443: [PowerPC] - Combine loads of v4i8 to loads of i32 followed by bitcast
Nemanja Ivanovic via llvm-commits
llvm-commits at lists.llvm.org
Thu May 19 11:26:50 PDT 2016
nemanjai created this revision.
nemanjai added reviewers: hfinkel, kbarton, amehsan, cycheng, wschmidt.
nemanjai added a subscriber: llvm-commits.
nemanjai set the repository for this revision to rL LLVM.
The legalization for an ISD::LOAD node when the type is v4i8 will convert it into an extended load to a vector type which ends up producing very bad code (see below). This patch simply adds a DAG combine that will convert such a load into an i32 load followed by a bitcast. This ends up collapsing into something more usable.
Repository:
rL LLVM
http://reviews.llvm.org/D20443
Files:
lib/Target/PowerPC/PPCISelLowering.cpp
Index: lib/Target/PowerPC/PPCISelLowering.cpp
===================================================================
--- lib/Target/PowerPC/PPCISelLowering.cpp
+++ lib/Target/PowerPC/PPCISelLowering.cpp
@@ -10566,6 +10566,20 @@
(LoadVT == MVT::v2f64 || LoadVT == MVT::v2i64 ||
LoadVT == MVT::v4f32 || LoadVT == MVT::v4i32))
return expandVSXLoadForLE(N, DCI);
+
+ // When we load a v4i8, the code can degrade rather quickly. Convert
+ // this to an i32 load and bitcast.
+ if (LoadVT == MVT::v4i8) {
+ SDValue ScalarLoad = DAG.getLoad(MVT::i32, dl, LD->getChain(),
+ LD->getBasePtr(), LD->getPointerInfo(),
+ false, LD->isNonTemporal(),
+ LD->isInvariant(), LD->getAlignment(),
+ LD->getAAInfo());
+ SDValue BitCast = DAG.getBitcast(MVT::v4i8, ScalarLoad);
+ return DAG.getNode(ISD::MERGE_VALUES, dl,
+ DAG.getVTList(MVT::v4i8, MVT::Other),
+ BitCast, ScalarLoad.getValue(1));
+ }
}
// We sometimes end up with a 64-bit integer load, from which we extract
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D20443.57828.patch
Type: text/x-patch
Size: 1249 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160519/381d0f6d/attachment.bin>
More information about the llvm-commits
mailing list