mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
AMDGPU: Enable function calls by default
Fixes some crashes on illegal call situations which are unfortunately still valid IR. llvm-svn: 355051
This commit is contained in:
parent
7c74725f8a
commit
4b80ae6d95
@ -122,11 +122,11 @@ static cl::opt<bool, true> LateCFGStructurize(
|
||||
cl::location(AMDGPUTargetMachine::EnableLateStructurizeCFG),
|
||||
cl::Hidden);
|
||||
|
||||
static cl::opt<bool, true> EnableAMDGPUFunctionCalls(
|
||||
static cl::opt<bool, true> EnableAMDGPUFunctionCallsOpt(
|
||||
"amdgpu-function-calls",
|
||||
cl::desc("Enable AMDGPU function call support"),
|
||||
cl::location(AMDGPUTargetMachine::EnableFunctionCalls),
|
||||
cl::init(false),
|
||||
cl::init(true),
|
||||
cl::Hidden);
|
||||
|
||||
// Enable lib calls simplifications
|
||||
@ -361,11 +361,11 @@ void AMDGPUTargetMachine::adjustPassManager(PassManagerBuilder &Builder) {
|
||||
|
||||
bool EnableOpt = getOptLevel() > CodeGenOpt::None;
|
||||
bool Internalize = InternalizeSymbols;
|
||||
bool EarlyInline = EarlyInlineAll && EnableOpt && !EnableAMDGPUFunctionCalls;
|
||||
bool EarlyInline = EarlyInlineAll && EnableOpt && !EnableFunctionCalls;
|
||||
bool AMDGPUAA = EnableAMDGPUAliasAnalysis && EnableOpt;
|
||||
bool LibCallSimplify = EnableLibCallSimplify && EnableOpt;
|
||||
|
||||
if (EnableAMDGPUFunctionCalls) {
|
||||
if (EnableFunctionCalls) {
|
||||
delete Builder.Inliner;
|
||||
Builder.Inliner = createAMDGPUFunctionInliningPass();
|
||||
}
|
||||
@ -426,6 +426,11 @@ R600TargetMachine::R600TargetMachine(const Target &T, const Triple &TT,
|
||||
CodeGenOpt::Level OL, bool JIT)
|
||||
: AMDGPUTargetMachine(T, TT, CPU, FS, Options, RM, CM, OL) {
|
||||
setRequiresStructuredCFG(true);
|
||||
|
||||
// Override the default since calls aren't ssupported for r600.
|
||||
if (EnableFunctionCalls &&
|
||||
EnableAMDGPUFunctionCallsOpt.getNumOccurrences() == 0)
|
||||
EnableFunctionCalls = false;
|
||||
}
|
||||
|
||||
const R600Subtarget *R600TargetMachine::getSubtargetImpl(
|
||||
|
27
test/CodeGen/AMDGPU/amdgpu-function-calls-option.ll
Normal file
27
test/CodeGen/AMDGPU/amdgpu-function-calls-option.ll
Normal file
@ -0,0 +1,27 @@
|
||||
; RUN: llc -mtriple=amdgcn-amd-amdhsa -amdgpu-function-calls < %s | FileCheck -check-prefix=CALLS %s
|
||||
; RUN: llc -mtriple=amdgcn-amd-amdhsa < %s | FileCheck -check-prefix=CALLS %s
|
||||
; RUN: llc -mtriple=amdgcn-amd-amdhsa -amdgpu-function-calls=0 < %s | FileCheck -check-prefix=NOCALLS %s
|
||||
; RUN: llc -mtriple=r600-mesa-mesa3d < %s | FileCheck -check-prefix=NOCALLS %s
|
||||
; RUN: llc -mtriple=r600-mesa-mesa3d -amdgpu-function-calls=0 < %s | FileCheck -check-prefix=NOCALLS %s
|
||||
|
||||
; CALLS-LABEL: callee:
|
||||
; CALLS: ;;#ASMSTART
|
||||
; CALLS: ;;#ASMEND
|
||||
|
||||
; NOCALLS-NOT: callee
|
||||
; R600-NOT: callee
|
||||
define internal void @callee() {
|
||||
call void asm sideeffect "", ""()
|
||||
ret void
|
||||
}
|
||||
|
||||
; CALLS-LABEL: kernel:
|
||||
; CALLS: s_swappc_b64
|
||||
|
||||
; NOCALLS-LABEL: kernel:
|
||||
; NOCALLS: ;;#ASMSTART
|
||||
; NOCALLS: ;;#ASMEND
|
||||
define amdgpu_kernel void @kernel() {
|
||||
call void @callee()
|
||||
ret void
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
; RUN: opt -mtriple=amdgcn--amdhsa -data-layout=A5 -O3 -S -amdgpu-function-calls -inline-threshold=1 < %s | FileCheck -check-prefix=GCN -check-prefix=GCN-INL1 %s
|
||||
; RUN: opt -mtriple=amdgcn--amdhsa -data-layout=A5 -O3 -S -amdgpu-function-calls < %s | FileCheck -check-prefix=GCN -check-prefix=GCN-INLDEF %s
|
||||
; RUN: opt -mtriple=amdgcn--amdhsa -data-layout=A5 -O3 -S -inline-threshold=1 < %s | FileCheck -check-prefix=GCN -check-prefix=GCN-INL1 %s
|
||||
; RUN: opt -mtriple=amdgcn--amdhsa -data-layout=A5 -O3 -S < %s | FileCheck -check-prefix=GCN -check-prefix=GCN-INLDEF %s
|
||||
|
||||
define coldcc float @foo(float %x, float %y) {
|
||||
entry:
|
||||
|
@ -84,7 +84,7 @@ define void @indirect_use_10_vgpr() #0 {
|
||||
|
||||
; GCN-LABEL: {{^}}indirect_2_level_use_10_vgpr:
|
||||
; GCN: is_dynamic_callstack = 0
|
||||
; GCN: ; NumVgprs: 10
|
||||
; GCN: ; NumVgprs: 33
|
||||
define amdgpu_kernel void @indirect_2_level_use_10_vgpr() #0 {
|
||||
call void @indirect_use_10_vgpr()
|
||||
ret void
|
||||
@ -225,6 +225,6 @@ define amdgpu_kernel void @usage_direct_recursion(i32 %n) #0 {
|
||||
}
|
||||
|
||||
|
||||
attributes #0 = { nounwind norecurse }
|
||||
attributes #0 = { nounwind noinline norecurse }
|
||||
attributes #1 = { nounwind noinline norecurse }
|
||||
attributes #2 = { nounwind noinline }
|
||||
|
@ -1,5 +1,5 @@
|
||||
; RUN: opt -S -mtriple=amdgcn-amd-amdhsa -amdgpu-function-calls -amdgpu-always-inline %s | FileCheck -check-prefixes=CALLS-ENABLED,ALL %s
|
||||
; RUN: opt -S -mtriple=amdgcn-amd-amdhsa -amdgpu-function-calls -amdgpu-stress-function-calls -amdgpu-always-inline %s | FileCheck -check-prefixes=STRESS-CALLS,ALL %s
|
||||
; RUN: opt -S -mtriple=amdgcn-amd-amdhsa -amdgpu-always-inline %s | FileCheck -check-prefixes=CALLS-ENABLED,ALL %s
|
||||
; RUN: opt -S -mtriple=amdgcn-amd-amdhsa -amdgpu-stress-function-calls -amdgpu-always-inline %s | FileCheck -check-prefixes=STRESS-CALLS,ALL %s
|
||||
|
||||
target datalayout = "e-p:64:64-p1:64:64-p2:32:32-p3:32:32-p4:64:64-p5:32:32-p6:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-v2048:2048-n32:64-S32-A5"
|
||||
|
||||
|
@ -2,15 +2,15 @@
|
||||
; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck %s
|
||||
; RUN: llc -march=r600 -mcpu=redwood -verify-machineinstrs < %s | FileCheck %s
|
||||
|
||||
; CHECK-NOT: {{^}}func:
|
||||
; ALL-NOT: {{^}}func:
|
||||
define internal i32 @func(i32 %a) {
|
||||
entry:
|
||||
%tmp0 = add i32 %a, 1
|
||||
ret i32 %tmp0
|
||||
}
|
||||
|
||||
; CHECK: {{^}}kernel:
|
||||
; CHECK-NOT: call
|
||||
; ALL: {{^}}kernel:
|
||||
; GCN-NOT: s_swappc_b64
|
||||
define amdgpu_kernel void @kernel(i32 addrspace(1)* %out) {
|
||||
entry:
|
||||
%tmp0 = call i32 @func(i32 1)
|
||||
@ -19,10 +19,11 @@ entry:
|
||||
}
|
||||
|
||||
; CHECK-NOT: func_alias
|
||||
; ALL-NOT: func_alias
|
||||
@func_alias = alias i32 (i32), i32 (i32)* @func
|
||||
|
||||
; CHECK: {{^}}kernel3:
|
||||
; CHECK-NOT: call
|
||||
; ALL: {{^}}kernel3:
|
||||
; GCN-NOT: s_swappc_b64
|
||||
define amdgpu_kernel void @kernel3(i32 addrspace(1)* %out) {
|
||||
entry:
|
||||
%tmp0 = call i32 @func_alias(i32 1)
|
||||
|
Loading…
x
Reference in New Issue
Block a user