1# RUN: llc -mtriple=amdgcn -mcpu=gfx802 -start-before postrapseudos -asm-verbose=0 -verify-machineinstrs %s -o - | FileCheck -check-prefix=GCN %s 2# RUN: llc -mtriple=amdgcn -mcpu=gfx900 -start-before postrapseudos -asm-verbose=0 -verify-machineinstrs %s -o - | FileCheck -check-prefix=GCN %s 3# RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -start-before postrapseudos -asm-verbose=0 -verify-machineinstrs %s -o - | FileCheck -check-prefix=GCN %s 4 5# GCN-LABEL: {{^}}lo_to_lo: 6# GCN: v_mov_b32_sdwa v1, v0 dst_sel:WORD_0 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0 7name: lo_to_lo 8tracksRegLiveness: true 9body: | 10 bb.0: 11 $vgpr0 = IMPLICIT_DEF 12 $vgpr1_lo16 = COPY $vgpr0_lo16 13 S_ENDPGM 0 14... 15 16# GCN-LABEL: {{^}}lo_to_hi: 17# GCN: v_mov_b32_sdwa v1, v0 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0 18name: lo_to_hi 19tracksRegLiveness: true 20body: | 21 bb.0: 22 $vgpr0 = IMPLICIT_DEF 23 $vgpr1_hi16 = COPY killed $vgpr0_lo16 24 S_ENDPGM 0 25... 26 27# GCN-LABEL: {{^}}hi_to_lo: 28# GCN: v_mov_b32_sdwa v1, v0 dst_sel:WORD_0 dst_unused:UNUSED_PRESERVE src0_sel:WORD_1 29name: hi_to_lo 30tracksRegLiveness: true 31body: | 32 bb.0: 33 $vgpr0 = IMPLICIT_DEF 34 $vgpr1_lo16 = COPY $vgpr0_hi16 35 S_ENDPGM 0 36... 37 38# GCN-LABEL: {{^}}hi_to_hi: 39# GCN: v_mov_b32_sdwa v1, v0 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_1 40name: hi_to_hi 41tracksRegLiveness: true 42body: | 43 bb.0: 44 $vgpr0 = IMPLICIT_DEF 45 $vgpr1_hi16 = COPY $vgpr0_hi16 46 S_ENDPGM 0 47... 48 49# GCN-LABEL: {{^}}lo_to_lo_samereg: 50# GCN: s_waitcnt 51# GCN-NEXT: s_endpgm 52name: lo_to_lo_samereg 53tracksRegLiveness: true 54body: | 55 bb.0: 56 $vgpr0 = IMPLICIT_DEF 57 $vgpr0_lo16 = COPY $vgpr0_lo16 58 S_ENDPGM 0 59... 60 61# GCN-LABEL: {{^}}lo_to_hi_samereg: 62# GCN: v_mov_b32_sdwa v0, v0 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0 63name: lo_to_hi_samereg 64tracksRegLiveness: true 65body: | 66 bb.0: 67 $vgpr0 = IMPLICIT_DEF 68 $vgpr0_hi16 = COPY $vgpr0_lo16 69 S_ENDPGM 0 70... 71 72# GCN-LABEL: {{^}}hi_to_lo_samereg: 73# GCN: v_mov_b32_sdwa v0, v0 dst_sel:WORD_0 dst_unused:UNUSED_PRESERVE src0_sel:WORD_1 74name: hi_to_lo_samereg 75tracksRegLiveness: true 76body: | 77 bb.0: 78 $vgpr0 = IMPLICIT_DEF 79 $vgpr0_lo16 = COPY killed $vgpr0_hi16 80 S_ENDPGM 0 81... 82 83# GCN-LABEL: {{^}}hi_to_hi_samereg: 84# GCN: s_waitcnt 85# GCN-NEXT: s_endpgm 86name: hi_to_hi_samereg 87tracksRegLiveness: true 88body: | 89 bb.0: 90 $vgpr0 = IMPLICIT_DEF 91 $vgpr0_hi16 = COPY killed $vgpr0_hi16 92 S_ENDPGM 0 93... 94 95# GCN-LABEL: {{^}}lo_to_lo_def_livein: 96# GCN: v_mov_b32_sdwa v1, v0 dst_sel:WORD_0 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0 97name: lo_to_lo_def_livein 98tracksRegLiveness: true 99body: | 100 bb.0: 101 liveins: $vgpr0 102 103 $vgpr1 = IMPLICIT_DEF 104 $vgpr1_lo16 = COPY $vgpr0_lo16 105 S_ENDPGM 0 106... 107 108# GCN-LABEL: {{^}}lo_to_hi_def_livein: 109# GCN: v_mov_b32_sdwa v1, v0 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0 110name: lo_to_hi_def_livein 111tracksRegLiveness: true 112body: | 113 bb.0: 114 liveins: $vgpr0 115 116 $vgpr1 = IMPLICIT_DEF 117 $vgpr1_hi16 = COPY $vgpr0_lo16 118 S_ENDPGM 0 119... 120 121# GCN-LABEL: {{^}}hi_to_lo_def_livein: 122# GCN: v_mov_b32_sdwa v1, v0 dst_sel:WORD_0 dst_unused:UNUSED_PRESERVE src0_sel:WORD_1 123name: hi_to_lo_def_livein 124tracksRegLiveness: true 125body: | 126 bb.0: 127 liveins: $vgpr0 128 129 $vgpr1 = IMPLICIT_DEF 130 $vgpr1_lo16 = COPY killed $vgpr0_hi16 131 S_ENDPGM 0 132... 133 134# GCN-LABEL: {{^}}hi_to_hi_def_livein: 135# GCN: v_mov_b32_sdwa v1, v0 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_1 136name: hi_to_hi_def_livein 137tracksRegLiveness: true 138body: | 139 bb.0: 140 liveins: $vgpr0 141 142 $vgpr1 = IMPLICIT_DEF 143 $vgpr1_hi16 = COPY $vgpr0_hi16 144 S_ENDPGM 0 145... 146 147# TODO: This can be coalesced into a VGPR_32 copy 148# GCN-LABEL: {{^}}lo_to_lo_hi_to_hi: 149# GCN: v_mov_b32_sdwa v1, v0 dst_sel:WORD_0 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0 150# GCN-NEXT: v_mov_b32_sdwa v1, v0 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_1 151# GCN-NEXT: v_mov_b32_e32 v2, v1 152# GCN-NEXT: s_endpgm 153name: lo_to_lo_hi_to_hi 154tracksRegLiveness: true 155body: | 156 bb.0: 157 $vgpr0 = IMPLICIT_DEF 158 $vgpr1_lo16 = COPY $vgpr0_lo16 159 $vgpr1_hi16 = COPY $vgpr0_hi16 160 $vgpr2 = COPY killed $vgpr1 161 S_ENDPGM 0 162... 163 164# GCN-LABEL: {{^}}lo_to_hi_hi_to_lo: 165# GCN: v_mov_b32_sdwa v1, v0 dst_sel:WORD_0 dst_unused:UNUSED_PRESERVE src0_sel:WORD_1 166# GCN-NEXT: v_mov_b32_sdwa v1, v0 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0 167# GCN-NEXT: v_mov_b32_e32 v2, v1 168# GCN-NEXT: s_endpgm 169name: lo_to_hi_hi_to_lo 170tracksRegLiveness: true 171body: | 172 bb.0: 173 $vgpr0 = IMPLICIT_DEF 174 $vgpr1_lo16 = COPY $vgpr0_hi16 175 $vgpr1_hi16 = COPY $vgpr0_lo16 176 $vgpr2 = COPY killed $vgpr1 177 S_ENDPGM 0 178... 179 180# NB: copy of undef just killed instead of expansion 181# GCN-LABEL: {{^}}lo_to_lo_undef: 182# GCN: s_waitcnt 183# GCN-NEXT: v_mov_b32_e32 v2, v1 184# GCN-NEXT: s_endpgm 185name: lo_to_lo_undef 186tracksRegLiveness: true 187body: | 188 bb.0: 189 $vgpr1_lo16 = COPY undef $vgpr0_lo16 190 $vgpr2 = COPY killed $vgpr1 191 S_ENDPGM 0 192... 193 194# GCN-LABEL: {{^}}lo_to_lo_sgpr_to_sgpr: 195# GCN: s_mov_b32 s1, s0 196name: lo_to_lo_sgpr_to_sgpr 197tracksRegLiveness: true 198body: | 199 bb.0: 200 $sgpr0 = IMPLICIT_DEF 201 $sgpr1_lo16 = COPY $sgpr0_lo16 202 S_ENDPGM 0 203... 204