summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.cpp
diff options
context:
space:
mode:
authorMatt Arsenault <Matthew.Arsenault@amd.com>2017-12-11 21:38:43 +0000
committerMatt Arsenault <Matthew.Arsenault@amd.com>2017-12-11 21:38:43 +0000
commit3e268cc0dd570bb2283652669024afec643fbb3c (patch)
tree130617f8ea322b9c62eb4d8f6191514cf051a788 /llvm/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.cpp
parentc40c5e520b59185e1ec3217713596c9a950cde9b (diff)
downloadbcm5719-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.cpp26
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,
OpenPOWER on IntegriCloud