brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.4 KiB · 417a4c5 Raw
148 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 52# RUN: llc -mtriple=amdgcn -run-pass=si-memory-legalizer  %s -o - | FileCheck %s3 4--- |5  declare i32 @llvm.amdgcn.workitem.id.x() #06 7  define amdgpu_kernel void @atomic_max_i32_noret(8      ptr addrspace(1) %out,9      ptr addrspace(1) %in,10      ptr addrspace(1) %x,11      i32 %y) #1 {12    %tid = call i32 @llvm.amdgcn.workitem.id.x()13    %idxprom = sext i32 %tid to i6414    %tid.gep = getelementptr ptr addrspace(1), ptr addrspace(1) %in, i64 %idxprom15    %ptr = load volatile ptr addrspace(1), ptr addrspace(1) %tid.gep16    %xor = xor i32 %tid, 117    %cmp = icmp ne i32 %xor, 018    %1 = call { i1, i64 } @llvm.amdgcn.if(i1 %cmp)19    %2 = extractvalue { i1, i64 } %1, 020    %3 = extractvalue { i1, i64 } %1, 121    br i1 %2, label %atomic, label %exit22 23  atomic:                                           ; preds = %024    %gep = getelementptr i32, ptr addrspace(1) %ptr, i32 10025    %ret = atomicrmw max ptr addrspace(1) %gep, i32 %y seq_cst26    br label %exit27 28  exit:                                             ; preds = %atomic, %029    call void @llvm.amdgcn.end.cf(i64 %3)30    ret void31  }32 33  declare { i1, i64 } @llvm.amdgcn.if(i1)34 35  declare void @llvm.amdgcn.end.cf(i64)36 37  attributes #0 = { nounwind readnone }38  attributes #1 = { nounwind "target-cpu"="gfx803" }39 40...41---42 43 44 45name:            atomic_max_i32_noret46alignment:       147exposesReturnsTwice: false48legalized:       false49regBankSelected: false50selected:        false51tracksRegLiveness: true52liveins:53  - { reg: '$sgpr0_sgpr1' }54  - { reg: '$vgpr0' }55frameInfo:56  isFrameAddressTaken: false57  isReturnAddressTaken: false58  hasStackMap:     false59  hasPatchPoint:   false60  stackSize:       061  offsetAdjustment: 062  maxAlignment:    063  adjustsStack:    false64  hasCalls:        false65  maxCallFrameSize: 066  hasOpaqueSPAdjustment: false67  hasVAStart:      false68  hasMustTailInVarArgFunc: false69body:             |70  ; CHECK-LABEL: name: atomic_max_i32_noret71  ; CHECK: bb.0 (%ir-block.0):72  ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)73  ; CHECK-NEXT:   liveins: $vgpr0, $sgpr0_sgpr174  ; CHECK-NEXT: {{  $}}75  ; CHECK-NEXT:   $sgpr4_sgpr5 = S_LOAD_DWORDX2_IMM $sgpr0_sgpr1, 11, 0 :: (non-temporal dereferenceable invariant load (s64) from `ptr addrspace(4) poison`, addrspace 4)76  ; CHECK-NEXT:   $vgpr1 = V_ASHRREV_I32_e32 31, $vgpr0, implicit $exec77  ; CHECK-NEXT:   $vgpr1_vgpr2 = V_LSHL_B64_e64 $vgpr0_vgpr1, 3, implicit $exec78  ; CHECK-NEXT:   $sgpr7 = S_MOV_B32 6144079  ; CHECK-NEXT:   $sgpr6 = S_MOV_B32 080  ; CHECK-NEXT:   S_WAITCNT 12781  ; CHECK-NEXT:   $vgpr1_vgpr2 = BUFFER_LOAD_DWORDX2_ADDR64 killed $vgpr1_vgpr2, $sgpr4_sgpr5_sgpr6_sgpr7, 0, 0, 1, 0, implicit $exec :: (volatile load (s64) from %ir.tid.gep, addrspace 1)82  ; CHECK-NEXT:   S_WAITCNT_soft 395283  ; CHECK-NEXT:   $vgpr0 = V_XOR_B32_e32 1, killed $vgpr0, implicit $exec84  ; CHECK-NEXT:   V_CMP_NE_U32_e32 0, killed $vgpr0, implicit-def $vcc, implicit $exec85  ; CHECK-NEXT:   $sgpr2_sgpr3 = S_AND_SAVEEXEC_B64 killed $vcc, implicit-def $exec, implicit-def $scc, implicit $exec86  ; CHECK-NEXT:   $sgpr2_sgpr3 = S_XOR_B64 $exec, killed $sgpr2_sgpr3, implicit-def dead $scc87  ; CHECK-NEXT:   S_CBRANCH_EXECZ %bb.2, implicit $exec88  ; CHECK-NEXT: {{  $}}89  ; CHECK-NEXT: bb.1.atomic:90  ; CHECK-NEXT:   successors: %bb.2(0x80000000)91  ; CHECK-NEXT:   liveins: $sgpr4_sgpr5_sgpr6_sgpr7:0x000000000000000C, $sgpr0_sgpr1, $sgpr2_sgpr3, $vgpr1_vgpr2_vgpr3_vgpr4:0x000000000000000392  ; CHECK-NEXT: {{  $}}93  ; CHECK-NEXT:   $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 15, 0 :: (non-temporal dereferenceable invariant load (s32) from `ptr addrspace(4) poison`, addrspace 4)94  ; CHECK-NEXT:   dead $vgpr0 = V_MOV_B32_e32 -1, implicit $exec95  ; CHECK-NEXT:   dead $vgpr0 = V_MOV_B32_e32 61440, implicit $exec96  ; CHECK-NEXT:   $sgpr4_sgpr5 = S_MOV_B64 097  ; CHECK-NEXT:   S_WAITCNT 12798  ; CHECK-NEXT:   $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec99  ; CHECK-NEXT:   S_WAITCNT 3952100  ; CHECK-NEXT:   S_WAITCNT_soft 3952101  ; CHECK-NEXT:   BUFFER_ATOMIC_SMAX_ADDR64 killed $vgpr0, killed $vgpr1_vgpr2, killed $sgpr4_sgpr5_sgpr6_sgpr7, 0, 400, 0, implicit $exec :: (volatile load syncscope("one-as") seq_cst (s32) from %ir.gep, addrspace 1)102  ; CHECK-NEXT:   S_WAITCNT_soft 3952103  ; CHECK-NEXT:   BUFFER_WBINVL1_VOL implicit $exec104  ; CHECK-NEXT: {{  $}}105  ; CHECK-NEXT: bb.2.exit:106  ; CHECK-NEXT:   liveins: $sgpr2_sgpr3107  ; CHECK-NEXT: {{  $}}108  ; CHECK-NEXT:   $exec = S_OR_B64 $exec, killed $sgpr2_sgpr3, implicit-def $scc109  ; CHECK-NEXT:   S_ENDPGM 0110  bb.0 (%ir-block.0):111    successors: %bb.1.atomic(0x40000000), %bb.2.exit(0x40000000)112    liveins: $vgpr0, $sgpr0_sgpr1113 114    $sgpr4_sgpr5 = S_LOAD_DWORDX2_IMM $sgpr0_sgpr1, 11, 0 :: (non-temporal dereferenceable invariant load (s64) from `ptr addrspace(4) poison`)115    $vgpr1 = V_ASHRREV_I32_e32 31, $vgpr0, implicit $exec116    $vgpr1_vgpr2 = V_LSHL_B64_e64 $vgpr0_vgpr1, 3, implicit $exec117    $sgpr7 = S_MOV_B32 61440118    $sgpr6 = S_MOV_B32 0119    S_WAITCNT 127120    $vgpr1_vgpr2 = BUFFER_LOAD_DWORDX2_ADDR64 killed $vgpr1_vgpr2, $sgpr4_sgpr5_sgpr6_sgpr7, 0, 0, 0, 0, implicit $exec :: (volatile load (s64) from %ir.tid.gep)121    $vgpr0 = V_XOR_B32_e32 1, killed $vgpr0, implicit $exec122    V_CMP_NE_U32_e32 0, killed $vgpr0, implicit-def $vcc, implicit $exec123    $sgpr2_sgpr3 = S_AND_SAVEEXEC_B64 killed $vcc, implicit-def $exec, implicit-def $scc, implicit $exec124    $sgpr2_sgpr3 = S_XOR_B64 $exec, killed $sgpr2_sgpr3, implicit-def dead $scc125    S_CBRANCH_EXECZ %bb.2.exit, implicit $exec126 127  bb.1.atomic:128    successors: %bb.2.exit(0x80000000)129    liveins: $sgpr4_sgpr5_sgpr6_sgpr7:0x0000000C, $sgpr0_sgpr1, $sgpr2_sgpr3, $vgpr1_vgpr2_vgpr3_vgpr4:0x00000003130 131    $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 15, 0 :: (non-temporal dereferenceable invariant load (s32) from `ptr addrspace(4) poison`)132    dead $vgpr0 = V_MOV_B32_e32 -1, implicit $exec133    dead $vgpr0 = V_MOV_B32_e32 61440, implicit $exec134    $sgpr4_sgpr5 = S_MOV_B64 0135    S_WAITCNT 127136    $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec137    S_WAITCNT 3952138    BUFFER_ATOMIC_SMAX_ADDR64 killed $vgpr0, killed $vgpr1_vgpr2, killed $sgpr4_sgpr5_sgpr6_sgpr7, 0, 400, 0, implicit $exec :: (volatile load syncscope("one-as") seq_cst (s32) from %ir.gep)139 140  bb.2.exit:141    liveins: $sgpr2_sgpr3142 143    $exec = S_OR_B64 $exec, killed $sgpr2_sgpr3, implicit-def $scc144    S_ENDPGM 0145 146...147 148