summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorczhengsz <czhengsz@cn.ibm.com>2019-12-18 21:03:54 -0500
committerczhengsz <czhengsz@cn.ibm.com>2019-12-18 21:06:57 -0500
commitf5440ec41d8ef9985b65c1cc66b747529ce86a40 (patch)
treed734442a9b7c7d09a9b505f21c642faa3d1324aa /llvm/lib
parentb40822fc140dcc1544f22bd5312335254d8eda28 (diff)
downloadbcm5719-llvm-f5440ec41d8ef9985b65c1cc66b747529ce86a40.tar.gz
bcm5719-llvm-f5440ec41d8ef9985b65c1cc66b747529ce86a40.zip
[PowerPC] make lwa as a valid ds candidate in ppcloopinstrformprep pass
Fix a FIXME in ppcloopinstrformprep pass. Reviewed by: nemanjai Differential Revision: https://reviews.llvm.org/D71346
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Target/PowerPC/PPCLoopInstrFormPrep.cpp14
1 files changed, 9 insertions, 5 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCLoopInstrFormPrep.cpp b/llvm/lib/Target/PowerPC/PPCLoopInstrFormPrep.cpp
index 086db4ef9ec..467a119f1f6 100644
--- a/llvm/lib/Target/PowerPC/PPCLoopInstrFormPrep.cpp
+++ b/llvm/lib/Target/PowerPC/PPCLoopInstrFormPrep.cpp
@@ -846,11 +846,15 @@ bool PPCLoopInstrFormPrep::runOnLoop(Loop *L) {
// Check if a load/store has DS form.
auto isDSFormCandidate = [] (const Instruction *I, const Value *PtrValue) {
assert((PtrValue && I) && "Invalid parameter!");
- // FIXME: 32 bit instruction lwa is also DS form.
- return !isa<IntrinsicInst>(I) &&
- ((PtrValue->getType()->getPointerElementType()->isIntegerTy(64)) ||
- (PtrValue->getType()->getPointerElementType()->isFloatTy()) ||
- (PtrValue->getType()->getPointerElementType()->isDoubleTy()));
+ if (isa<IntrinsicInst>(I))
+ return false;
+ Type *PointerElementType = PtrValue->getType()->getPointerElementType();
+ return (PointerElementType->isIntegerTy(64)) ||
+ (PointerElementType->isFloatTy()) ||
+ (PointerElementType->isDoubleTy()) ||
+ (PointerElementType->isIntegerTy(32) &&
+ llvm::any_of(I->users(),
+ [](const User *U) { return isa<SExtInst>(U); }));
};
// Check if a load/store has DQ form.
OpenPOWER on IntegriCloud