1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
|
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 5
# RUN: llc -mtriple=amdgcn -mcpu=gfx942 -run-pass=si-fix-sgpr-copies -o - %s | FileCheck --check-prefix=GCN %s
---
name: test_should_convert_to_v_readfirstlane_b32
alignment: 1
exposesReturnsTwice: false
legalized: false
regBankSelected: false
selected: false
failedISel: false
tracksRegLiveness: true
hasWinCFI: false
noPhis: false
isSSA: true
noVRegs: false
hasFakeUses: false
callsEHReturn: false
callsUnwindInit: false
hasEHContTarget: false
hasEHScopes: false
hasEHFunclets: false
isOutlined: false
debugInstrRef: false
failsVerification: false
tracksDebugUserValues: false
registers:
- { id: 0, class: vgpr_32, preferred-register: '', flags: [ ] }
- { id: 1, class: sgpr_64, preferred-register: '', flags: [ ] }
- { id: 2, class: sgpr_64, preferred-register: '', flags: [ ] }
- { id: 3, class: sgpr_64, preferred-register: '', flags: [ ] }
- { id: 4, class: sgpr_64, preferred-register: '', flags: [ ] }
- { id: 5, class: sgpr_32, preferred-register: '', flags: [ ] }
- { id: 6, class: sgpr_32, preferred-register: '', flags: [ ] }
- { id: 7, class: sgpr_32, preferred-register: '', flags: [ ] }
- { id: 8, class: sgpr_128, preferred-register: '', flags: [ ] }
- { id: 9, class: sreg_32, preferred-register: '', flags: [ ] }
- { id: 10, class: sreg_32, preferred-register: '', flags: [ ] }
- { id: 11, class: sreg_32, preferred-register: '', flags: [ ] }
- { id: 12, class: vgpr_32, preferred-register: '', flags: [ ] }
- { id: 13, class: sreg_32, preferred-register: '', flags: [ ] }
- { id: 14, class: sreg_32, preferred-register: '', flags: [ ] }
- { id: 15, class: sreg_32, preferred-register: '', flags: [ ] }
- { id: 16, class: sreg_32, preferred-register: '', flags: [ ] }
- { id: 17, class: sreg_32, preferred-register: '', flags: [ ] }
- { id: 18, class: sreg_32, preferred-register: '', flags: [ ] }
- { id: 19, class: sreg_32, preferred-register: '', flags: [ ] }
- { id: 20, class: sgpr_128, preferred-register: '', flags: [ ] }
- { id: 21, class: sreg_32, preferred-register: '', flags: [ ] }
- { id: 22, class: vgpr_32, preferred-register: '', flags: [ ] }
liveins:
- { reg: '$sgpr4_sgpr5', virtual-reg: '%3' }
frameInfo:
isFrameAddressTaken: false
isReturnAddressTaken: false
hasStackMap: false
hasPatchPoint: false
stackSize: 0
offsetAdjustment: 0
maxAlignment: 1
adjustsStack: false
hasCalls: false
stackProtector: ''
functionContext: ''
maxCallFrameSize: 4294967295
cvBytesOfCalleeSavedRegisters: 0
hasOpaqueSPAdjustment: false
hasVAStart: false
hasMustTailInVarArgFunc: false
hasTailCall: false
isCalleeSavedInfoValid: false
localFrameSize: 0
savePoint: ''
restorePoint: ''
fixedStack: []
stack: []
entry_values: []
callSites: []
debugValueSubstitutions: []
constants: []
machineFunctionInfo:
isEntryFunction: true
body: |
bb.0:
liveins: $sgpr4_sgpr5
; GCN-LABEL: name: test_should_convert_to_v_readfirstlane_b32
; GCN: liveins: $sgpr4_sgpr5
; GCN-NEXT: {{ $}}
; GCN-NEXT: [[COPY:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5
; GCN-NEXT: early-clobber %8:sgpr_128 = S_LOAD_DWORDX4_IMM_ec [[COPY]], 36, 0 :: (dereferenceable invariant load (s128), align 4, addrspace 4)
; GCN-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY %8.sub2
; GCN-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY %8.sub1
; GCN-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY %8.sub0
; GCN-NEXT: [[V_CVT_U32_F32_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_U32_F32_e64 0, killed [[COPY3]], 0, 0, implicit $mode, implicit $exec
; GCN-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 16
; GCN-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[V_CVT_U32_F32_e64_]], implicit $exec
; GCN-NEXT: [[S_LSHL_B32_:%[0-9]+]]:sreg_32 = S_LSHL_B32 killed [[V_READFIRSTLANE_B32_]], killed [[S_MOV_B32_]], implicit-def dead $scc
; GCN-NEXT: [[S_OR_B32_:%[0-9]+]]:sreg_32 = S_OR_B32 killed [[S_LSHL_B32_]], [[COPY2]], implicit-def dead $scc
; GCN-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 [[S_OR_B32_]], killed [[COPY1]], implicit-def dead $scc
; GCN-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 2
; GCN-NEXT: [[S_LSHR_B32_:%[0-9]+]]:sreg_32 = S_LSHR_B32 [[S_AND_B32_]], killed [[S_MOV_B32_1]], implicit-def dead $scc
; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[S_LSHR_B32_]], %subreg.sub0, [[S_OR_B32_]], %subreg.sub1, [[S_AND_B32_]], %subreg.sub2, [[S_LSHR_B32_]], %subreg.sub3
; GCN-NEXT: [[S_MOV_B32_2:%[0-9]+]]:sreg_32 = S_MOV_B32 0
; GCN-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY [[COPY2]]
; GCN-NEXT: BUFFER_STORE_DWORD_OFFSET_exact [[COPY4]], killed [[REG_SEQUENCE]], killed [[S_MOV_B32_2]], 0, 2, 0, implicit $exec :: (dereferenceable store (s32), align 1, addrspace 8)
; GCN-NEXT: S_ENDPGM 0
%3:sgpr_64 = COPY $sgpr4_sgpr5
early-clobber %8:sgpr_128 = S_LOAD_DWORDX4_IMM_ec %3, 36, 0 :: (dereferenceable invariant load (s128), align 4, addrspace 4)
%9:sreg_32 = COPY %8.sub2
%10:sreg_32 = COPY %8.sub1
%11:sreg_32 = COPY %8.sub0
%12:vgpr_32 = nofpexcept V_CVT_U32_F32_e64 0, killed %11, 0, 0, implicit $mode, implicit $exec
%13:sreg_32 = S_MOV_B32 16
%15:sreg_32 = COPY %12
%14:sreg_32 = S_LSHL_B32 killed %15, killed %13, implicit-def dead $scc
%16:sreg_32 = S_OR_B32 killed %14, %10, implicit-def dead $scc
%17:sreg_32 = S_AND_B32 %16, killed %9, implicit-def dead $scc
%18:sreg_32 = S_MOV_B32 2
%19:sreg_32 = S_LSHR_B32 %17, killed %18, implicit-def dead $scc
%20:sgpr_128 = REG_SEQUENCE %19, %subreg.sub0, %16, %subreg.sub1, %17, %subreg.sub2, %19, %subreg.sub3
%21:sreg_32 = S_MOV_B32 0
%22:vgpr_32 = COPY %10
BUFFER_STORE_DWORD_OFFSET_exact %22, killed %20, killed %21, 0, 2, 0, implicit $exec :: (dereferenceable store (s32), align 1, addrspace 8)
S_ENDPGM 0
...
|