Folding EXEC copy into it's single use may lead to constant bus constraint violation as it adds one more SGPR operand.
This change makes it validate the user instruction with the new SGPR operand and only fold it if it is legal.
Reviewed By: rampitec, arsenm
Differential Revision: https://reviews.llvm.org/D98888
24 lines
663 B
YAML
24 lines
663 B
YAML
# RUN: llc -run-pass si-optimize-exec-masking-pre-ra -march=amdgcn -verify-machineinstrs -o - %s | FileCheck --check-prefixes=GCN %s
|
|
---
|
|
# GCN-LABEL: name: opt_exec_copy_fold
|
|
# GCN: %2:vreg_64 = COPY $exec
|
|
name: opt_exec_copy_fold
|
|
tracksRegLiveness: true
|
|
liveins:
|
|
- { reg: '$sgpr0_sgpr1' }
|
|
body: |
|
|
bb.0:
|
|
liveins: $sgpr0_sgpr1
|
|
|
|
%0:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, 1, $sgpr0_sgpr1, implicit $exec
|
|
%1:sreg_64 = V_CMP_NE_U32_e64 0, %0, implicit $exec
|
|
%2:vreg_64 = COPY $exec
|
|
%3:sreg_64 = V_CMP_EQ_U64_e64 %1, %2, implicit $exec
|
|
$scc = COPY %3
|
|
S_CBRANCH_SCC0 %bb.1, implicit $scc
|
|
|
|
bb.1:
|
|
...
|
|
|
|
|