mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 11:13:28 +01:00
3c21944921
GlobalISel let through a call to null, which would then fold into the source operand like any other inline immediate. The SelectionDAG lowering deletes calls to null and undef as a workaround from before calls were supported. We should probably drop the special handling case in the DAG lowering now, since the middle end optimizers delete null calls anyway.
51 lines
1.4 KiB
LLVM
51 lines
1.4 KiB
LLVM
; RUN: llc -global-isel=0 -amdgpu-fixed-function-abi=0 -mtriple=amdgcn-amd-amdhsa < %s | FileCheck -check-prefixes=GCN,SDAG %s
|
|
; RUN: llc -global-isel=1 -amdgpu-fixed-function-abi=1 -mtriple=amdgcn-amd-amdhsa < %s | FileCheck -check-prefixes=GCN,GISEL %s
|
|
|
|
; FIXME: Emitting unnecessary flat_scratch setup
|
|
|
|
; GCN-LABEL: {{^}}test_call_undef:
|
|
; SDAG: s_mov_b32 flat_scratch_lo, s5
|
|
; SDAG: s_add_u32 s4, s4, s7
|
|
; SDAG: 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:
|
|
; SDAG: s_waitcnt
|
|
; SDAG-NEXT: .Lfunc_end
|
|
|
|
; GISEL: s_swappc_b64 s{{\[[0-9]+:[0-9]+\]}}, s{{\[[0-9]+:[0-9]+\]}}
|
|
define i32 @test_tail_call_undef() #0 {
|
|
%call = tail call i32 undef(i32 1)
|
|
ret i32 %call
|
|
}
|
|
|
|
; GCN-LABEL: {{^}}test_call_null:
|
|
; SDAG: s_mov_b32 flat_scratch_lo, s5
|
|
; SDAG: s_add_u32 s4, s4, s7
|
|
; SDAG: s_lshr_b32
|
|
|
|
; GISEL: s_swappc_b64 s{{\[[0-9]+:[0-9]+\]}}, 0{{$}}
|
|
; 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:
|
|
; SDAG: s_waitcnt
|
|
; SDAG-NEXT: .Lfunc_end
|
|
|
|
; GISEL: s_swappc_b64 s{{\[[0-9]+:[0-9]+\]}}, 0{{$}}
|
|
define i32 @test_tail_call_null() #0 {
|
|
%call = tail call i32 null(i32 1)
|
|
ret i32 %call
|
|
}
|