1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -verify-machineinstrs -stress-regalloc=2 -start-before=greedy -stop-after=virtregmap -o - %s | FileCheck %s 3 4# Test that a spill of a copy of exec is not folded to be a spill of exec directly. 5 6--- 7 8name: merge_sgpr_spill_into_copy_from_exec_lo 9tracksRegLiveness: true 10body: | 11 bb.0: 12 ; CHECK-LABEL: name: merge_sgpr_spill_into_copy_from_exec_lo 13 ; CHECK: liveins: $vgpr0 14 ; CHECK: S_WAITCNT 0 15 ; CHECK: S_NOP 0, implicit-def $exec_lo 16 ; CHECK: $sgpr0 = S_MOV_B32 $exec_lo 17 ; CHECK: $vgpr0 = V_WRITELANE_B32 killed $sgpr0, 0, $vgpr0 18 ; CHECK: $sgpr0 = V_READLANE_B32 $vgpr0, 0 19 ; CHECK: S_NOP 0, implicit-def dead renamable $sgpr1, implicit-def dead renamable $sgpr0, implicit killed renamable $sgpr0 20 ; CHECK: $sgpr0 = V_READLANE_B32 $vgpr0, 0 21 ; CHECK: $exec_lo = S_MOV_B32 killed $sgpr0 22 ; CHECK: S_SENDMSG 0, implicit $m0, implicit $exec 23 S_NOP 0, implicit-def $exec_lo 24 %0:sreg_32 = COPY $exec_lo 25 S_NOP 0, implicit-def %1:sreg_32, implicit-def %2:sreg_32, implicit %0 26 $exec_lo = COPY %0 27 S_SENDMSG 0, implicit $m0, implicit $exec 28 29... 30--- 31 32name: merge_sgpr_spill_into_copy_from_exec_hi 33tracksRegLiveness: true 34body: | 35 bb.0: 36 ; CHECK-LABEL: name: merge_sgpr_spill_into_copy_from_exec_hi 37 ; CHECK: liveins: $vgpr0 38 ; CHECK: S_WAITCNT 0 39 ; CHECK: S_NOP 0, implicit-def $exec_hi 40 ; CHECK: $sgpr0 = S_MOV_B32 $exec_hi 41 ; CHECK: $vgpr0 = V_WRITELANE_B32 killed $sgpr0, 0, $vgpr0 42 ; CHECK: $sgpr0 = V_READLANE_B32 $vgpr0, 0 43 ; CHECK: S_NOP 0, implicit-def dead renamable $sgpr1, implicit-def dead renamable $sgpr0, implicit killed renamable $sgpr0 44 ; CHECK: $sgpr0 = V_READLANE_B32 $vgpr0, 0 45 ; CHECK: $exec_hi = S_MOV_B32 killed $sgpr0 46 ; CHECK: S_SENDMSG 0, implicit $m0, implicit $exec 47 S_NOP 0, implicit-def $exec_hi 48 %0:sreg_32 = COPY $exec_hi 49 S_NOP 0, implicit-def %1:sreg_32, implicit-def %2:sreg_32, implicit %0 50 $exec_hi = COPY %0 51 S_SENDMSG 0, implicit $m0, implicit $exec 52 53... 54--- 55 56name: merge_sgpr_spill_into_copy_from_exec 57tracksRegLiveness: true 58body: | 59 bb.0: 60 ; CHECK-LABEL: name: merge_sgpr_spill_into_copy_from_exec 61 ; CHECK: liveins: $vgpr0 62 ; CHECK: S_WAITCNT 0 63 ; CHECK: S_NOP 0, implicit-def $exec 64 ; CHECK: $sgpr0_sgpr1 = S_MOV_B64 $exec 65 ; CHECK: $vgpr0 = V_WRITELANE_B32 killed $sgpr0, 0, $vgpr0, implicit-def $sgpr0_sgpr1, implicit $sgpr0_sgpr1 66 ; CHECK: $vgpr0 = V_WRITELANE_B32 killed $sgpr1, 1, $vgpr0, implicit $sgpr0_sgpr1 67 ; CHECK: $sgpr0 = V_READLANE_B32 $vgpr0, 0, implicit-def $sgpr0_sgpr1 68 ; CHECK: $sgpr1 = V_READLANE_B32 $vgpr0, 1 69 ; CHECK: S_NOP 0, implicit-def dead renamable $sgpr2_sgpr3, implicit-def dead renamable $sgpr0_sgpr1, implicit killed renamable $sgpr0_sgpr1 70 ; CHECK: $sgpr0 = V_READLANE_B32 $vgpr0, 0, implicit-def $sgpr0_sgpr1 71 ; CHECK: $sgpr1 = V_READLANE_B32 $vgpr0, 1 72 ; CHECK: $exec = S_MOV_B64 killed $sgpr0_sgpr1 73 ; CHECK: S_SENDMSG 0, implicit $m0, implicit $exec 74 S_NOP 0, implicit-def $exec 75 %0:sreg_64 = COPY $exec 76 S_NOP 0, implicit-def %1:sreg_64, implicit-def %2:sreg_64, implicit %0 77 $exec = COPY %0 78 S_SENDMSG 0, implicit $m0, implicit $exec 79 80... 81 82# Test that a reload into a copy of exec is not folded to be a reload of exec directly. 83 84--- 85 86name: reload_sgpr_spill_into_copy_to_exec_lo 87tracksRegLiveness: true 88body: | 89 bb.0: 90 ; CHECK-LABEL: name: reload_sgpr_spill_into_copy_to_exec_lo 91 ; CHECK: liveins: $vgpr0 92 ; CHECK: S_WAITCNT 0 93 ; CHECK: S_NOP 0, implicit-def renamable $sgpr0, implicit-def dead renamable $sgpr1, implicit-def $exec_lo 94 ; CHECK: $vgpr0 = V_WRITELANE_B32 killed $sgpr0, 0, $vgpr0 95 ; CHECK: $sgpr0 = V_READLANE_B32 $vgpr0, 0 96 ; CHECK: S_NOP 0, implicit killed renamable $sgpr0, implicit-def dead renamable $sgpr1, implicit-def dead renamable $sgpr0 97 ; CHECK: $sgpr0 = V_READLANE_B32 $vgpr0, 0 98 ; CHECK: $exec_lo = S_MOV_B32 killed $sgpr0 99 ; CHECK: S_SENDMSG 0, implicit $m0, implicit $exec 100 S_NOP 0, implicit-def %0:sreg_32, implicit-def %1:sreg_32, implicit-def $exec_lo 101 S_NOP 0, implicit %0, implicit-def %3:sreg_32, implicit-def %4:sreg_32 102 $exec_lo = COPY %0 103 S_SENDMSG 0, implicit $m0, implicit $exec 104 105... 106--- 107 108name: reload_sgpr_spill_into_copy_to_exec_hi 109tracksRegLiveness: true 110body: | 111 bb.0: 112 ; CHECK-LABEL: name: reload_sgpr_spill_into_copy_to_exec_hi 113 ; CHECK: liveins: $vgpr0 114 ; CHECK: S_WAITCNT 0 115 ; CHECK: S_NOP 0, implicit-def renamable $sgpr0, implicit-def dead renamable $sgpr1, implicit-def $exec_hi 116 ; CHECK: $vgpr0 = V_WRITELANE_B32 killed $sgpr0, 0, $vgpr0 117 ; CHECK: $sgpr0 = V_READLANE_B32 $vgpr0, 0 118 ; CHECK: S_NOP 0, implicit killed renamable $sgpr0, implicit-def dead renamable $sgpr1, implicit-def dead renamable $sgpr0 119 ; CHECK: $sgpr0 = V_READLANE_B32 $vgpr0, 0 120 ; CHECK: $exec_hi = S_MOV_B32 killed $sgpr0 121 ; CHECK: S_SENDMSG 0, implicit $m0, implicit $exec 122 S_NOP 0, implicit-def %0:sreg_32, implicit-def %1:sreg_32, implicit-def $exec_hi 123 S_NOP 0, implicit %0, implicit-def %3:sreg_32, implicit-def %4:sreg_32 124 $exec_hi = COPY %0 125 S_SENDMSG 0, implicit $m0, implicit $exec 126 127... 128--- 129 130name: reload_sgpr_spill_into_copy_to_exec 131tracksRegLiveness: true 132body: | 133 bb.0: 134 ; CHECK-LABEL: name: reload_sgpr_spill_into_copy_to_exec 135 ; CHECK: liveins: $vgpr0 136 ; CHECK: S_WAITCNT 0 137 ; CHECK: S_NOP 0, implicit-def renamable $sgpr0_sgpr1, implicit-def dead renamable $sgpr2_sgpr3, implicit-def $exec 138 ; CHECK: $vgpr0 = V_WRITELANE_B32 killed $sgpr0, 0, $vgpr0, implicit-def $sgpr0_sgpr1, implicit $sgpr0_sgpr1 139 ; CHECK: $vgpr0 = V_WRITELANE_B32 killed $sgpr1, 1, $vgpr0, implicit $sgpr0_sgpr1 140 ; CHECK: $sgpr0 = V_READLANE_B32 $vgpr0, 0, implicit-def $sgpr0_sgpr1 141 ; CHECK: $sgpr1 = V_READLANE_B32 $vgpr0, 1 142 ; CHECK: S_NOP 0, implicit killed renamable $sgpr0_sgpr1, implicit-def dead renamable $sgpr2_sgpr3, implicit-def dead renamable $sgpr0_sgpr1 143 ; CHECK: $sgpr0 = V_READLANE_B32 $vgpr0, 0, implicit-def $sgpr0_sgpr1 144 ; CHECK: $sgpr1 = V_READLANE_B32 $vgpr0, 1 145 ; CHECK: $exec = S_MOV_B64 killed $sgpr0_sgpr1 146 ; CHECK: S_SENDMSG 0, implicit $m0, implicit $exec 147 S_NOP 0, implicit-def %0:sreg_64, implicit-def %1:sreg_64, implicit-def $exec 148 S_NOP 0, implicit %0, implicit-def %3:sreg_64, implicit-def %4:sreg_64 149 $exec = COPY %0 150 S_SENDMSG 0, implicit $m0, implicit $exec 151 152... 153