diff options
| author | czhengsz <czhengsz@cn.ibm.com> | 2019-12-18 21:03:54 -0500 |
|---|---|---|
| committer | czhengsz <czhengsz@cn.ibm.com> | 2019-12-18 21:06:57 -0500 |
| commit | f5440ec41d8ef9985b65c1cc66b747529ce86a40 (patch) | |
| tree | d734442a9b7c7d09a9b505f21c642faa3d1324aa /llvm/lib | |
| parent | b40822fc140dcc1544f22bd5312335254d8eda28 (diff) | |
| download | bcm5719-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.cpp | 14 |
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. |

