diff options
author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2019-10-20 07:46:04 +0000 |
---|---|---|
committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2019-10-20 07:46:04 +0000 |
commit | b0113baebf46e178c694624e469ae3fea6ad562f (patch) | |
tree | 8db5b00dd6e7169bb5b8f57e973da986a264be5b /test | |
parent | c6240320003b308f1ed304f5d656ede5a0748bd0 (diff) |
AMDGPU: Don't error on calls to null or undef
Calls to constants should probably be generally handled.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@375356 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r-- | test/CodeGen/AMDGPU/call-constant.ll | 45 | ||||
-rw-r--r-- | test/CodeGen/AMDGPU/unsupported-calls.ll | 10 |
2 files changed, 55 insertions, 0 deletions
diff --git a/test/CodeGen/AMDGPU/call-constant.ll b/test/CodeGen/AMDGPU/call-constant.ll new file mode 100644 index 00000000000..19aadfc96ad --- /dev/null +++ b/test/CodeGen/AMDGPU/call-constant.ll @@ -0,0 +1,45 @@ +; RUN: llc -mtriple=amdgcn-amd-amdhsa < %s | FileCheck -check-prefix=GCN %s + +; FIXME: Emitting unnecessary flat_scratch setup + +; GCN-LABEL: {{^}}test_call_undef: +; GCN: s_mov_b32 s8, s7 +; GCN: s_mov_b32 flat_scratch_lo, s5 +; GCN: s_add_u32 s4, s4, s8 +; GCN: s_lshr_b32 +; GCN: s_endpgm +define amdgpu_kernel void @test_call_undef() #0 { + %val = call i32 undef(i32 1) + %op = add i32 %val, 1 + store volatile i32 %op, i32 addrspace(1)* undef + ret void +} + +; GCN-LABEL: {{^}}test_tail_call_undef: +; GCN: s_waitcnt +; GCN-NEXT: .Lfunc_end +define i32 @test_tail_call_undef() #0 { + %call = tail call i32 undef(i32 1) + ret i32 %call +} + +; GCN-LABEL: {{^}}test_call_null: +; GCN: s_mov_b32 s8, s7 +; GCN: s_mov_b32 flat_scratch_lo, s5 +; GCN: s_add_u32 s4, s4, s8 +; GCN: s_lshr_b32 +; GCN: s_endpgm +define amdgpu_kernel void @test_call_null() #0 { + %val = call i32 null(i32 1) + %op = add i32 %val, 1 + store volatile i32 %op, i32 addrspace(1)* null + ret void +} + +; GCN-LABEL: {{^}}test_tail_call_null: +; GCN: s_waitcnt +; GCN-NEXT: .Lfunc_end +define i32 @test_tail_call_null() #0 { + %call = tail call i32 null(i32 1) + ret i32 %call +} diff --git a/test/CodeGen/AMDGPU/unsupported-calls.ll b/test/CodeGen/AMDGPU/unsupported-calls.ll index 303a0d6a114..3cff62735a1 100644 --- a/test/CodeGen/AMDGPU/unsupported-calls.ll +++ b/test/CodeGen/AMDGPU/unsupported-calls.ll @@ -74,3 +74,13 @@ define amdgpu_ps i32 @test_call_from_shader() { %call = call i32 @defined_function(i32 0) ret i32 %call } + +; FIXME: Bad error message +; GCN: error: <unknown>:0:0: in function test_call_absolute void (): unsupported indirect call to function <unknown> +; R600: error: <unknown>:0:0: in function test_call_absolute void (): unsupported call to function <unknown> +define amdgpu_kernel void @test_call_absolute() #0 { + %val = call i32 inttoptr (i64 1234 to i32(i32)*) (i32 1) + %op = add i32 %val, 1 + store volatile i32 %op, i32 addrspace(1)* undef + ret void +} |