diff options
author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2017-12-11 21:38:43 +0000 |
---|---|---|
committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2017-12-11 21:38:43 +0000 |
commit | 3e268cc0dd570bb2283652669024afec643fbb3c (patch) | |
tree | 130617f8ea322b9c62eb4d8f6191514cf051a788 /llvm/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.cpp | |
parent | c40c5e520b59185e1ec3217713596c9a950cde9b (diff) | |
download | bcm5719-llvm-3e268cc0dd570bb2283652669024afec643fbb3c.tar.gz bcm5719-llvm-3e268cc0dd570bb2283652669024afec643fbb3c.zip |
LSR: Check more intrinsic pointer operands
llvm-svn: 320424
Diffstat (limited to 'llvm/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.cpp')
-rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.cpp | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.cpp b/llvm/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.cpp index 153a4a8ddb7..77c2d4b956c 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.cpp @@ -288,6 +288,32 @@ unsigned AMDGPUTTIImpl::getMaxInterleaveFactor(unsigned VF) { return 8; } +bool AMDGPUTTIImpl::getTgtMemIntrinsic(IntrinsicInst *Inst, + MemIntrinsicInfo &Info) const { + switch (Inst->getIntrinsicID()) { + case Intrinsic::amdgcn_atomic_inc: + case Intrinsic::amdgcn_atomic_dec: { + auto *Ordering = dyn_cast<ConstantInt>(Inst->getArgOperand(2)); + auto *Volatile = dyn_cast<ConstantInt>(Inst->getArgOperand(4)); + if (!Ordering || !Volatile) + return false; // Invalid. + + unsigned OrderingVal = Ordering->getZExtValue(); + if (OrderingVal > static_cast<unsigned>(AtomicOrdering::SequentiallyConsistent)) + return false; + + Info.PtrVal = Inst->getArgOperand(0); + Info.Ordering = static_cast<AtomicOrdering>(OrderingVal); + Info.ReadMem = true; + Info.WriteMem = true; + Info.IsVolatile = !Volatile->isNullValue(); + return true; + } + default: + return false; + } +} + int AMDGPUTTIImpl::getArithmeticInstrCost( unsigned Opcode, Type *Ty, TTI::OperandValueKind Opd1Info, TTI::OperandValueKind Opd2Info, TTI::OperandValueProperties Opd1PropInfo, |