This patch contains changes necessary to carry physical condition register (SCC) dependencies through the SDNode scheduler. It adds the edge in the SDNodeScheduler dependency graph instead of inserting the SCC copy between each definition and use. This approach lets the scheduler place instructions in an optimal way placing the copy only when the dependency cannot be resolved. Reviewed By: rampitec Differential Revision: https://reviews.llvm.org/D133593
21 lines
764 B
LLVM
21 lines
764 B
LLVM
; RUN: llc -verify-machineinstrs -march=r600 -mcpu=redwood < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s
|
|
; RUN: llc -verify-machineinstrs -march=amdgcn -mcpu=tahiti < %s | FileCheck -check-prefixes=GCN,SI -check-prefix=FUNC %s
|
|
; RUN: llc -verify-machineinstrs -march=amdgcn -mcpu=tonga < %s | FileCheck -check-prefixes=GCN,VI -check-prefix=FUNC %s
|
|
|
|
; FUNC-LABEL: {{^}}selectcc_i64:
|
|
; EG: XOR_INT
|
|
; EG: XOR_INT
|
|
; EG: OR_INT
|
|
; EG: CNDE_INT
|
|
; EG: CNDE_INT
|
|
; SI: v_cmp_eq_u64
|
|
; VI: s_cmp_eq_u64
|
|
; GCN: s_cselect_b32
|
|
define amdgpu_kernel void @selectcc_i64(i64 addrspace(1) * %out, i64 %lhs, i64 %rhs, i64 %true, i64 %false) {
|
|
entry:
|
|
%0 = icmp eq i64 %lhs, %rhs
|
|
%1 = select i1 %0, i64 %true, i64 %false
|
|
store i64 %1, i64 addrspace(1)* %out
|
|
ret void
|
|
}
|