126 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 52# RUN: llc -mtriple=amdgcn -mcpu=gfx942 -run-pass=si-fix-sgpr-copies -o - %s | FileCheck --check-prefix=GCN %s3---4name: test_should_convert_to_v_readfirstlane_b325alignment: 16exposesReturnsTwice: false7legalized: false8regBankSelected: false9selected: false10failedISel: false11tracksRegLiveness: true12hasWinCFI: false13noPhis: false14isSSA: true15noVRegs: false16hasFakeUses: false17callsEHReturn: false18callsUnwindInit: false19hasEHContTarget: false20hasEHScopes: false21hasEHFunclets: false22isOutlined: false23debugInstrRef: false24failsVerification: false25tracksDebugUserValues: false26registers:27 - { id: 0, class: vgpr_32, preferred-register: '', flags: [ ] }28 - { id: 1, class: sgpr_64, preferred-register: '', flags: [ ] }29 - { id: 2, class: sgpr_64, preferred-register: '', flags: [ ] }30 - { id: 3, class: sgpr_64, preferred-register: '', flags: [ ] }31 - { id: 4, class: sgpr_64, preferred-register: '', flags: [ ] }32 - { id: 5, class: sgpr_32, preferred-register: '', flags: [ ] }33 - { id: 6, class: sgpr_32, preferred-register: '', flags: [ ] }34 - { id: 7, class: sgpr_32, preferred-register: '', flags: [ ] }35 - { id: 8, class: sgpr_128, preferred-register: '', flags: [ ] }36 - { id: 9, class: sreg_32, preferred-register: '', flags: [ ] }37 - { id: 10, class: sreg_32, preferred-register: '', flags: [ ] }38 - { id: 11, class: sreg_32, preferred-register: '', flags: [ ] }39 - { id: 12, class: vgpr_32, preferred-register: '', flags: [ ] }40 - { id: 13, class: sreg_32, preferred-register: '', flags: [ ] }41 - { id: 14, class: sreg_32, preferred-register: '', flags: [ ] }42 - { id: 15, class: sreg_32, preferred-register: '', flags: [ ] }43 - { id: 16, class: sreg_32, preferred-register: '', flags: [ ] }44 - { id: 17, class: sreg_32, preferred-register: '', flags: [ ] }45 - { id: 18, class: sreg_32, preferred-register: '', flags: [ ] }46 - { id: 19, class: sreg_32, preferred-register: '', flags: [ ] }47 - { id: 20, class: sgpr_128, preferred-register: '', flags: [ ] }48 - { id: 21, class: sreg_32, preferred-register: '', flags: [ ] }49 - { id: 22, class: vgpr_32, preferred-register: '', flags: [ ] }50liveins:51 - { reg: '$sgpr4_sgpr5', virtual-reg: '%3' }52frameInfo:53 isFrameAddressTaken: false54 isReturnAddressTaken: false55 hasStackMap: false56 hasPatchPoint: false57 stackSize: 058 offsetAdjustment: 059 maxAlignment: 160 adjustsStack: false61 hasCalls: false62 stackProtector: ''63 functionContext: ''64 maxCallFrameSize: 429496729565 cvBytesOfCalleeSavedRegisters: 066 hasOpaqueSPAdjustment: false67 hasVAStart: false68 hasMustTailInVarArgFunc: false69 hasTailCall: false70 isCalleeSavedInfoValid: false71 localFrameSize: 072 savePoint: []73 restorePoint: []74fixedStack: []75stack: []76entry_values: []77callSites: []78debugValueSubstitutions: []79constants: []80machineFunctionInfo:81 isEntryFunction: true82body: |83 bb.0:84 liveins: $sgpr4_sgpr585 86 ; GCN-LABEL: name: test_should_convert_to_v_readfirstlane_b3287 ; GCN: liveins: $sgpr4_sgpr588 ; GCN-NEXT: {{ $}}89 ; GCN-NEXT: [[COPY:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr590 ; GCN-NEXT: early-clobber %8:sgpr_128 = S_LOAD_DWORDX4_IMM_ec [[COPY]], 36, 0 :: (dereferenceable invariant load (s128), align 4, addrspace 4)91 ; GCN-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY %8.sub292 ; GCN-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY %8.sub193 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY %8.sub094 ; 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 $exec95 ; GCN-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 1696 ; GCN-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[V_CVT_U32_F32_e64_]], implicit $exec97 ; GCN-NEXT: [[S_LSHL_B32_:%[0-9]+]]:sreg_32 = S_LSHL_B32 killed [[V_READFIRSTLANE_B32_]], killed [[S_MOV_B32_]], implicit-def dead $scc98 ; GCN-NEXT: [[S_OR_B32_:%[0-9]+]]:sreg_32 = S_OR_B32 killed [[S_LSHL_B32_]], [[COPY2]], implicit-def dead $scc99 ; GCN-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 [[S_OR_B32_]], killed [[COPY1]], implicit-def dead $scc100 ; GCN-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 2101 ; GCN-NEXT: [[S_LSHR_B32_:%[0-9]+]]:sreg_32 = S_LSHR_B32 [[S_AND_B32_]], killed [[S_MOV_B32_1]], implicit-def dead $scc102 ; 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.sub3103 ; GCN-NEXT: [[S_MOV_B32_2:%[0-9]+]]:sreg_32 = S_MOV_B32 0104 ; GCN-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY [[COPY2]]105 ; 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)106 ; GCN-NEXT: S_ENDPGM 0107 %3:sgpr_64 = COPY $sgpr4_sgpr5108 early-clobber %8:sgpr_128 = S_LOAD_DWORDX4_IMM_ec %3, 36, 0 :: (dereferenceable invariant load (s128), align 4, addrspace 4)109 %9:sreg_32 = COPY %8.sub2110 %10:sreg_32 = COPY %8.sub1111 %11:sreg_32 = COPY %8.sub0112 %12:vgpr_32 = nofpexcept V_CVT_U32_F32_e64 0, killed %11, 0, 0, implicit $mode, implicit $exec113 %13:sreg_32 = S_MOV_B32 16114 %15:sreg_32 = COPY %12115 %14:sreg_32 = S_LSHL_B32 killed %15, killed %13, implicit-def dead $scc116 %16:sreg_32 = S_OR_B32 killed %14, %10, implicit-def dead $scc117 %17:sreg_32 = S_AND_B32 %16, killed %9, implicit-def dead $scc118 %18:sreg_32 = S_MOV_B32 2119 %19:sreg_32 = S_LSHR_B32 %17, killed %18, implicit-def dead $scc120 %20:sgpr_128 = REG_SEQUENCE %19, %subreg.sub0, %16, %subreg.sub1, %17, %subreg.sub2, %19, %subreg.sub3121 %21:sreg_32 = S_MOV_B32 0122 %22:vgpr_32 = COPY %10123 BUFFER_STORE_DWORD_OFFSET_exact %22, killed %20, killed %21, 0, 2, 0, implicit $exec :: (dereferenceable store (s32), align 1, addrspace 8)124 S_ENDPGM 0125...126