summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatt Arsenault <Matthew.Arsenault@amd.com>2019-04-15 20:51:12 +0000
committerMatt Arsenault <Matthew.Arsenault@amd.com>2019-04-15 20:51:12 +0000
commit101abd219b3dc77fb531e569e4b6bd86ed48b5c1 (patch)
tree2080b22e94f198de5319ccfbe1e685cff7ff7d85
parentfbdd2a18874d216c40b2aced5083416c6150402c (diff)
downloadbcm5719-llvm-101abd219b3dc77fb531e569e4b6bd86ed48b5c1.tar.gz
bcm5719-llvm-101abd219b3dc77fb531e569e4b6bd86ed48b5c1.zip
AMDGPU: Fix unreachable when counting register usage of SGPR96
llvm-svn: 358447
-rw-r--r--llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp3
-rw-r--r--llvm/test/CodeGen/AMDGPU/call-graph-register-usage.ll13
2 files changed, 16 insertions, 0 deletions
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp b/llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp
index ea63ae35df1..cc37d152750 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp
@@ -705,6 +705,9 @@ AMDGPUAsmPrinter::SIFunctionResourceInfo AMDGPUAsmPrinter::analyzeResourceUsage(
} else if (AMDGPU::VReg_512RegClass.contains(Reg)) {
IsSGPR = false;
Width = 16;
+ } else if (AMDGPU::SReg_96RegClass.contains(Reg)) {
+ IsSGPR = true;
+ Width = 3;
} else {
llvm_unreachable("Unknown register class");
}
diff --git a/llvm/test/CodeGen/AMDGPU/call-graph-register-usage.ll b/llvm/test/CodeGen/AMDGPU/call-graph-register-usage.ll
index 384d9dd4576..acc062eca25 100644
--- a/llvm/test/CodeGen/AMDGPU/call-graph-register-usage.ll
+++ b/llvm/test/CodeGen/AMDGPU/call-graph-register-usage.ll
@@ -224,6 +224,19 @@ define amdgpu_kernel void @usage_direct_recursion(i32 %n) #0 {
ret void
}
+; Make sure there's no assert when a sgpr96 is used.
+; GCN-LABEL: {{^}}count_use_sgpr96_external_call
+; GCN: ; sgpr96 s[{{[0-9]+}}:{{[0-9]+}}]
+; CI: NumSgprs: 48
+; VI-NOBUG: NumSgprs: 48
+; VI-BUG: NumSgprs: 96
+; GCN: NumVgprs: 24
+define amdgpu_kernel void @count_use_sgpr96_external_call() {
+entry:
+ tail call void asm sideeffect "; sgpr96 $0", "s"(<3 x i32> <i32 10, i32 11, i32 12>) #1
+ call void @external()
+ ret void
+}
attributes #0 = { nounwind noinline norecurse }
attributes #1 = { nounwind noinline norecurse }
OpenPOWER on IntegriCloud