mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 12:12:47 +01:00
ab6ec1f384
Pass no longer handles skips. Pass now removes unnecessary unconditional branches and lowers early termination branches. Hence rename to SILateBranchLowering. Move code to handle returns to epilog from SIPreEmitPeephole into SILateBranchLowering. This means SIPreEmitPeephole only contains optional optimisations, and all required transforms are in SILateBranchLowering. Reviewed By: arsenm Differential Revision: https://reviews.llvm.org/D98915
102 lines
2.8 KiB
YAML
102 lines
2.8 KiB
YAML
# RUN: llc -march=amdgcn -mcpu=gfx900 -verify-machineinstrs -start-before si-shrink-instructions -stop-before si-late-branch-lowering -o - %s | FileCheck -check-prefix=GCN %s
|
|
|
|
# GCN-LABEL: name: subbrev{{$}}
|
|
# GCN: V_SUBBREV_U32_e32 0, undef $vgpr0, implicit-def $vcc, implicit killed $vcc, implicit $exec
|
|
|
|
---
|
|
name: subbrev
|
|
tracksRegLiveness: true
|
|
registers:
|
|
- { id: 0, class: vgpr_32 }
|
|
- { id: 1, class: vgpr_32 }
|
|
- { id: 2, class: vgpr_32 }
|
|
- { id: 3, class: sreg_64_xexec }
|
|
- { id: 4, class: vgpr_32 }
|
|
- { id: 5, class: sreg_64_xexec }
|
|
body: |
|
|
bb.0:
|
|
|
|
%0 = IMPLICIT_DEF
|
|
%1 = IMPLICIT_DEF
|
|
%2 = IMPLICIT_DEF
|
|
%3 = V_CMP_GT_U32_e64 %0, %1, implicit $exec
|
|
%4, %5 = V_SUBBREV_U32_e64 0, %0, %3, 0, implicit $exec
|
|
GLOBAL_STORE_DWORD undef $vgpr0_vgpr1, %4, 0, 0, implicit $exec
|
|
|
|
...
|
|
|
|
# GCN-LABEL: name: subb{{$}}
|
|
# GCN: V_SUBBREV_U32_e32 0, undef $vgpr0, implicit-def $vcc, implicit killed $vcc, implicit $exec
|
|
|
|
---
|
|
name: subb
|
|
tracksRegLiveness: true
|
|
registers:
|
|
- { id: 0, class: vgpr_32 }
|
|
- { id: 1, class: vgpr_32 }
|
|
- { id: 2, class: vgpr_32 }
|
|
- { id: 3, class: sreg_64_xexec }
|
|
- { id: 4, class: vgpr_32 }
|
|
- { id: 5, class: sreg_64_xexec }
|
|
body: |
|
|
bb.0:
|
|
|
|
%0 = IMPLICIT_DEF
|
|
%1 = IMPLICIT_DEF
|
|
%2 = IMPLICIT_DEF
|
|
%3 = V_CMP_GT_U32_e64 %0, %1, implicit $exec
|
|
%4, %5 = V_SUBB_U32_e64 %0, 0, %3, 0, implicit $exec
|
|
GLOBAL_STORE_DWORD undef $vgpr0_vgpr1, %4, 0, 0, implicit $exec
|
|
|
|
...
|
|
|
|
# GCN-LABEL: name: addc{{$}}
|
|
# GCN: V_ADDC_U32_e32 0, undef $vgpr0, implicit-def $vcc, implicit killed $vcc, implicit $exec
|
|
|
|
---
|
|
name: addc
|
|
tracksRegLiveness: true
|
|
registers:
|
|
- { id: 0, class: vgpr_32 }
|
|
- { id: 1, class: vgpr_32 }
|
|
- { id: 2, class: vgpr_32 }
|
|
- { id: 3, class: sreg_64_xexec }
|
|
- { id: 4, class: vgpr_32 }
|
|
- { id: 5, class: sreg_64_xexec }
|
|
body: |
|
|
bb.0:
|
|
|
|
%0 = IMPLICIT_DEF
|
|
%1 = IMPLICIT_DEF
|
|
%2 = IMPLICIT_DEF
|
|
%3 = V_CMP_GT_U32_e64 %0, %1, implicit $exec
|
|
%4, %5 = V_ADDC_U32_e64 0, %0, %3, 0, implicit $exec
|
|
GLOBAL_STORE_DWORD undef $vgpr0_vgpr1, %4, 0, 0, implicit $exec
|
|
|
|
...
|
|
|
|
# GCN-LABEL: name: addc2{{$}}
|
|
# GCN: V_ADDC_U32_e32 0, undef $vgpr0, implicit-def $vcc, implicit killed $vcc, implicit $exec
|
|
|
|
---
|
|
name: addc2
|
|
tracksRegLiveness: true
|
|
registers:
|
|
- { id: 0, class: vgpr_32 }
|
|
- { id: 1, class: vgpr_32 }
|
|
- { id: 2, class: vgpr_32 }
|
|
- { id: 3, class: sreg_64_xexec }
|
|
- { id: 4, class: vgpr_32 }
|
|
- { id: 5, class: sreg_64_xexec }
|
|
body: |
|
|
bb.0:
|
|
|
|
%0 = IMPLICIT_DEF
|
|
%1 = IMPLICIT_DEF
|
|
%2 = IMPLICIT_DEF
|
|
%3 = V_CMP_GT_U32_e64 %0, %1, implicit $exec
|
|
%4, %5 = V_ADDC_U32_e64 %0, 0, %3, 0, implicit $exec
|
|
GLOBAL_STORE_DWORD undef $vgpr0_vgpr1, %4, 0, 0, implicit $exec
|
|
|
|
...
|