brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.7 KiB · 93d8642 Raw
142 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 62; RUN: llc -O0 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx90a -verify-machineinstrs < %s | FileCheck %s3 4; Make sure SIFixSGPRCopies handles situations where it needs to fix5; up copies to physical registers from an AV virtual register.6 7define i32 @fix_sgpr_copies_indirect_call(ptr addrspace(5) %ptr) {8; CHECK-LABEL: fix_sgpr_copies_indirect_call:9; CHECK:       ; %bb.0: ; %bb10; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11; CHECK-NEXT:    s_mov_b32 s16, s3312; CHECK-NEXT:    s_mov_b32 s33, s3213; CHECK-NEXT:    s_or_saveexec_b64 s[18:19], -114; CHECK-NEXT:    buffer_store_dword v40, off, s[0:3], s33 offset:16 ; 4-byte Folded Spill15; CHECK-NEXT:    buffer_store_dword v41, off, s[0:3], s33 offset:20 ; 4-byte Folded Spill16; CHECK-NEXT:    s_mov_b64 exec, s[18:19]17; CHECK-NEXT:    v_writelane_b32 v40, s16, 418; CHECK-NEXT:    v_writelane_b32 v40, s34, 219; CHECK-NEXT:    v_writelane_b32 v40, s35, 320; CHECK-NEXT:    s_add_i32 s32, s32, 0x80021; CHECK-NEXT:    v_writelane_b32 v40, s30, 022; CHECK-NEXT:    v_writelane_b32 v40, s31, 123; CHECK-NEXT:    buffer_store_dword v31, off, s[0:3], s33 offset:12 ; 4-byte Folded Spill24; CHECK-NEXT:    v_mov_b32_e32 v1, v025; CHECK-NEXT:    ; implicit-def: $vgpr41 : SGPR spill to VGPR lane26; CHECK-NEXT:    v_writelane_b32 v41, s15, 027; CHECK-NEXT:    v_writelane_b32 v41, s14, 128; CHECK-NEXT:    v_writelane_b32 v41, s13, 229; CHECK-NEXT:    v_writelane_b32 v41, s12, 330; CHECK-NEXT:    v_writelane_b32 v41, s10, 431; CHECK-NEXT:    v_writelane_b32 v41, s11, 532; CHECK-NEXT:    v_writelane_b32 v41, s8, 633; CHECK-NEXT:    v_writelane_b32 v41, s9, 734; CHECK-NEXT:    v_writelane_b32 v41, s6, 835; CHECK-NEXT:    v_writelane_b32 v41, s7, 936; CHECK-NEXT:    v_writelane_b32 v41, s4, 1037; CHECK-NEXT:    v_writelane_b32 v41, s5, 1138; CHECK-NEXT:    s_or_saveexec_b64 s[34:35], -139; CHECK-NEXT:    buffer_store_dword v41, off, s[0:3], s33 ; 4-byte Folded Spill40; CHECK-NEXT:    s_mov_b64 exec, s[34:35]41; CHECK-NEXT:    buffer_load_dword v0, v1, s[0:3], 0 offen42; CHECK-NEXT:    buffer_load_dword v2, v1, s[0:3], 0 offen offset:443; CHECK-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec44; CHECK-NEXT:    s_waitcnt vmcnt(0)45; CHECK-NEXT:    v_mov_b32_e32 v1, v246; CHECK-NEXT:    buffer_store_dword v0, off, s[0:3], s33 offset:4 ; 4-byte Folded Spill47; CHECK-NEXT:    s_nop 048; CHECK-NEXT:    buffer_store_dword v1, off, s[0:3], s33 offset:8 ; 4-byte Folded Spill49; CHECK-NEXT:  ; %bb.1: ; %bb150; CHECK-NEXT:    s_or_saveexec_b64 s[34:35], -151; CHECK-NEXT:    buffer_load_dword v41, off, s[0:3], s33 ; 4-byte Folded Reload52; CHECK-NEXT:    s_mov_b64 exec, s[34:35]53; CHECK-NEXT:    s_mov_b64 s[4:5], exec54; CHECK-NEXT:    s_waitcnt vmcnt(0)55; CHECK-NEXT:    v_writelane_b32 v41, s4, 1256; CHECK-NEXT:    v_writelane_b32 v41, s5, 1357; CHECK-NEXT:    s_or_saveexec_b64 s[34:35], -158; CHECK-NEXT:    buffer_store_dword v41, off, s[0:3], s33 ; 4-byte Folded Spill59; CHECK-NEXT:    s_mov_b64 exec, s[34:35]60; CHECK-NEXT:  .LBB0_2: ; =>This Inner Loop Header: Depth=161; CHECK-NEXT:    s_or_saveexec_b64 s[34:35], -162; CHECK-NEXT:    buffer_load_dword v41, off, s[0:3], s33 ; 4-byte Folded Reload63; CHECK-NEXT:    s_mov_b64 exec, s[34:35]64; CHECK-NEXT:    buffer_load_dword v0, off, s[0:3], s33 offset:4 ; 4-byte Folded Reload65; CHECK-NEXT:    buffer_load_dword v1, off, s[0:3], s33 offset:8 ; 4-byte Folded Reload66; CHECK-NEXT:    s_waitcnt vmcnt(1)67; CHECK-NEXT:    v_readfirstlane_b32 s6, v068; CHECK-NEXT:    s_waitcnt vmcnt(0)69; CHECK-NEXT:    v_readfirstlane_b32 s8, v170; CHECK-NEXT:    s_mov_b32 s4, s671; CHECK-NEXT:    s_mov_b32 s5, s872; CHECK-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[4:5], v[0:1]73; CHECK-NEXT:    ; kill: def $sgpr6 killed $sgpr6 def $sgpr6_sgpr774; CHECK-NEXT:    s_mov_b32 s7, s875; CHECK-NEXT:    v_writelane_b32 v41, s6, 1476; CHECK-NEXT:    v_writelane_b32 v41, s7, 1577; CHECK-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]78; CHECK-NEXT:    v_writelane_b32 v41, s4, 1679; CHECK-NEXT:    v_writelane_b32 v41, s5, 1780; CHECK-NEXT:    s_or_saveexec_b64 s[34:35], -181; CHECK-NEXT:    buffer_store_dword v41, off, s[0:3], s33 ; 4-byte Folded Spill82; CHECK-NEXT:    s_mov_b64 exec, s[34:35]83; CHECK-NEXT:  ; %bb.3: ; in Loop: Header=BB0_2 Depth=184; CHECK-NEXT:    s_or_saveexec_b64 s[34:35], -185; CHECK-NEXT:    buffer_load_dword v41, off, s[0:3], s33 ; 4-byte Folded Reload86; CHECK-NEXT:    s_mov_b64 exec, s[34:35]87; CHECK-NEXT:    s_waitcnt vmcnt(0)88; CHECK-NEXT:    v_readlane_b32 s16, v41, 1489; CHECK-NEXT:    v_readlane_b32 s17, v41, 1590; CHECK-NEXT:    v_readlane_b32 s15, v41, 091; CHECK-NEXT:    v_readlane_b32 s14, v41, 192; CHECK-NEXT:    v_readlane_b32 s13, v41, 293; CHECK-NEXT:    v_readlane_b32 s12, v41, 394; CHECK-NEXT:    v_readlane_b32 s10, v41, 495; CHECK-NEXT:    v_readlane_b32 s11, v41, 596; CHECK-NEXT:    v_readlane_b32 s8, v41, 697; CHECK-NEXT:    v_readlane_b32 s9, v41, 798; CHECK-NEXT:    v_readlane_b32 s6, v41, 899; CHECK-NEXT:    v_readlane_b32 s7, v41, 9100; CHECK-NEXT:    v_readlane_b32 s4, v41, 10101; CHECK-NEXT:    v_readlane_b32 s5, v41, 11102; CHECK-NEXT:    buffer_load_dword v31, off, s[0:3], s33 offset:12 ; 4-byte Folded Reload103; CHECK-NEXT:    s_mov_b64 s[22:23], s[2:3]104; CHECK-NEXT:    s_mov_b64 s[20:21], s[0:1]105; CHECK-NEXT:    s_mov_b64 s[0:1], s[20:21]106; CHECK-NEXT:    s_mov_b64 s[2:3], s[22:23]107; CHECK-NEXT:    s_swappc_b64 s[30:31], s[16:17]108; CHECK-NEXT:    v_readlane_b32 s4, v41, 16109; CHECK-NEXT:    v_readlane_b32 s5, v41, 17110; CHECK-NEXT:    s_xor_b64 exec, exec, s[4:5]111; CHECK-NEXT:    s_cbranch_execnz .LBB0_2112; CHECK-NEXT:  ; %bb.4:113; CHECK-NEXT:    s_or_saveexec_b64 s[34:35], -1114; CHECK-NEXT:    buffer_load_dword v41, off, s[0:3], s33 ; 4-byte Folded Reload115; CHECK-NEXT:    s_mov_b64 exec, s[34:35]116; CHECK-NEXT:    s_waitcnt vmcnt(0)117; CHECK-NEXT:    v_readlane_b32 s4, v41, 12118; CHECK-NEXT:    v_readlane_b32 s5, v41, 13119; CHECK-NEXT:    s_mov_b64 exec, s[4:5]120; CHECK-NEXT:    v_mov_b32_e32 v0, 0121; CHECK-NEXT:    v_readlane_b32 s31, v40, 1122; CHECK-NEXT:    v_readlane_b32 s30, v40, 0123; CHECK-NEXT:    s_mov_b32 s32, s33124; CHECK-NEXT:    v_readlane_b32 s4, v40, 4125; CHECK-NEXT:    v_readlane_b32 s34, v40, 2126; CHECK-NEXT:    v_readlane_b32 s35, v40, 3127; CHECK-NEXT:    s_or_saveexec_b64 s[6:7], -1128; CHECK-NEXT:    buffer_load_dword v40, off, s[0:3], s33 offset:16 ; 4-byte Folded Reload129; CHECK-NEXT:    buffer_load_dword v41, off, s[0:3], s33 offset:20 ; 4-byte Folded Reload130; CHECK-NEXT:    s_mov_b64 exec, s[6:7]131; CHECK-NEXT:    s_mov_b32 s33, s4132; CHECK-NEXT:    s_waitcnt vmcnt(0)133; CHECK-NEXT:    s_setpc_b64 s[30:31]134bb:135  %i = load ptr, ptr addrspace(5) %ptr, align 8136  br label %bb1137 138bb1:                                              ; preds = %bb139  tail call void %i()140  ret i32 0141}142