summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatt Arsenault <Matthew.Arsenault@amd.com>2016-02-11 05:32:51 +0000
committerMatt Arsenault <Matthew.Arsenault@amd.com>2016-02-11 05:32:51 +0000
commitfe26def35c61d4773b5378a1e797033538f96bf8 (patch)
tree28d284b5b6666f0e6481a4eaca1d8d0426b6ce33
parent952456631458e638fdcc2509611c356bf0aa2bed (diff)
downloadbcm5719-llvm-fe26def35c61d4773b5378a1e797033538f96bf8.tar.gz
bcm5719-llvm-fe26def35c61d4773b5378a1e797033538f96bf8.zip
AMDGPU: Fix not handling new workitem intrinsics in DivergenceAnalysis
llvm-svn: 260491
-rw-r--r--llvm/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.cpp3
-rw-r--r--llvm/test/Analysis/DivergenceAnalysis/AMDGPU/workitem-intrinsics.ll45
2 files changed, 48 insertions, 0 deletions
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.cpp b/llvm/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.cpp
index 54a003d6a9c..0a3eb7975aa 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.cpp
@@ -115,6 +115,9 @@ static bool isIntrinsicSourceOfDivergence(const TargetIntrinsicInfo *TII,
// IntrinsicsAMDGPU.td
break;
+ case Intrinsic::amdgcn_workitem_id_x:
+ case Intrinsic::amdgcn_workitem_id_y:
+ case Intrinsic::amdgcn_workitem_id_z:
case Intrinsic::amdgcn_interp_p1:
case Intrinsic::amdgcn_interp_p2:
case Intrinsic::amdgcn_mbcnt_hi:
diff --git a/llvm/test/Analysis/DivergenceAnalysis/AMDGPU/workitem-intrinsics.ll b/llvm/test/Analysis/DivergenceAnalysis/AMDGPU/workitem-intrinsics.ll
new file mode 100644
index 00000000000..669ee802c51
--- /dev/null
+++ b/llvm/test/Analysis/DivergenceAnalysis/AMDGPU/workitem-intrinsics.ll
@@ -0,0 +1,45 @@
+; RUN: opt -mtriple amdgcn-unknown-amdhsa -analyze -divergence %s | FileCheck %s
+
+declare i32 @llvm.amdgcn.workitem.id.x() #0
+declare i32 @llvm.amdgcn.workitem.id.y() #0
+declare i32 @llvm.amdgcn.workitem.id.z() #0
+declare i32 @llvm.amdgcn.mbcnt.lo(i32, i32) #0
+declare i32 @llvm.amdgcn.mbcnt.hi(i32, i32) #0
+
+; CHECK: DIVERGENT: %id.x = call i32 @llvm.amdgcn.workitem.id.x()
+define void @workitem_id_x() #1 {
+ %id.x = call i32 @llvm.amdgcn.workitem.id.x()
+ store volatile i32 %id.x, i32 addrspace(1)* undef
+ ret void
+}
+
+; CHECK: DIVERGENT: %id.y = call i32 @llvm.amdgcn.workitem.id.y()
+define void @workitem_id_y() #1 {
+ %id.y = call i32 @llvm.amdgcn.workitem.id.y()
+ store volatile i32 %id.y, i32 addrspace(1)* undef
+ ret void
+}
+
+; CHECK: DIVERGENT: %id.z = call i32 @llvm.amdgcn.workitem.id.z()
+define void @workitem_id_z() #1 {
+ %id.z = call i32 @llvm.amdgcn.workitem.id.z()
+ store volatile i32 %id.z, i32 addrspace(1)* undef
+ ret void
+}
+
+; CHECK: DIVERGENT: %mbcnt.lo = call i32 @llvm.amdgcn.mbcnt.lo(i32 0, i32 0)
+define void @mbcnt_lo() #1 {
+ %mbcnt.lo = call i32 @llvm.amdgcn.mbcnt.lo(i32 0, i32 0)
+ store volatile i32 %mbcnt.lo, i32 addrspace(1)* undef
+ ret void
+}
+
+; CHECK: DIVERGENT: %mbcnt.hi = call i32 @llvm.amdgcn.mbcnt.hi(i32 0, i32 0)
+define void @mbcnt_hi() #1 {
+ %mbcnt.hi = call i32 @llvm.amdgcn.mbcnt.hi(i32 0, i32 0)
+ store volatile i32 %mbcnt.hi, i32 addrspace(1)* undef
+ ret void
+}
+
+attributes #0 = { nounwind readnone }
+attributes #1 = { nounwind }
OpenPOWER on IntegriCloud