1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1010 -run-pass=amdgpu-prelegalizer-combiner -verify-machineinstrs %s -o - | FileCheck -check-prefix=GCN %s 3 4--- 5name: zext_trunc_s32_s16_s32 6tracksRegLiveness: true 7body: | 8 bb.0: 9 liveins: $vgpr0 10 11 ; GCN-LABEL: name: zext_trunc_s32_s16_s32 12 ; GCN: liveins: $vgpr0 13 ; GCN-NEXT: {{ $}} 14 ; GCN-NEXT: %var:_(s32) = COPY $vgpr0 15 ; GCN-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC %var(s32) 16 ; GCN-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 16383 17 ; GCN-NEXT: %trunc:_(s16) = G_AND [[TRUNC]], [[C]] 18 ; GCN-NEXT: %zext:_(s32) = G_ZEXT %trunc(s16) 19 ; GCN-NEXT: $vgpr0 = COPY %zext(s32) 20 %var:_(s32) = COPY $vgpr0 21 %c3FFF:_(s32) = G_CONSTANT i32 16383 22 %low_bits:_(s32) = G_AND %var, %c3FFF 23 %trunc:_(s16) = G_TRUNC %low_bits(s32) 24 %zext:_(s32) = G_ZEXT %trunc(s16) 25 $vgpr0 = COPY %zext(s32) 26... 27 28--- 29name: zext_trunc_s32_s16_s32_unknown_high_bits 30tracksRegLiveness: true 31body: | 32 bb.0: 33 liveins: $vgpr0 34 35 ; GCN-LABEL: name: zext_trunc_s32_s16_s32_unknown_high_bits 36 ; GCN: liveins: $vgpr0 37 ; GCN-NEXT: {{ $}} 38 ; GCN-NEXT: %var:_(s32) = COPY $vgpr0 39 ; GCN-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC %var(s32) 40 ; GCN-NEXT: %zext:_(s32) = G_ZEXT [[TRUNC]](s16) 41 ; GCN-NEXT: $vgpr0 = COPY %zext(s32) 42 %var:_(s32) = COPY $vgpr0 43 %cFFFFF:_(s32) = G_CONSTANT i32 1048575 44 %low_bits:_(s32) = G_AND %var, %cFFFFF 45 %trunc:_(s16) = G_TRUNC %low_bits(s32) 46 %zext:_(s32) = G_ZEXT %trunc(s16) 47 $vgpr0 = COPY %zext(s32) 48... 49 50--- 51name: zext_trunc_s64_s16_s32 52tracksRegLiveness: true 53body: | 54 bb.0: 55 liveins: $vgpr0_vgpr1 56 57 ; GCN-LABEL: name: zext_trunc_s64_s16_s32 58 ; GCN: liveins: $vgpr0_vgpr1 59 ; GCN-NEXT: {{ $}} 60 ; GCN-NEXT: %var:_(s64) = COPY $vgpr0_vgpr1 61 ; GCN-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC %var(s64) 62 ; GCN-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 16383 63 ; GCN-NEXT: %trunc:_(s16) = G_AND [[TRUNC]], [[C]] 64 ; GCN-NEXT: %zext:_(s32) = G_ZEXT %trunc(s16) 65 ; GCN-NEXT: $vgpr0 = COPY %zext(s32) 66 %var:_(s64) = COPY $vgpr0_vgpr1 67 %c3FFF:_(s64) = G_CONSTANT i64 16383 68 %low_bits:_(s64) = G_AND %var, %c3FFF 69 %trunc:_(s16) = G_TRUNC %low_bits(s64) 70 %zext:_(s32) = G_ZEXT %trunc(s16) 71 $vgpr0 = COPY %zext(s32) 72... 73 74--- 75name: zext_trunc_s32_s16_s64 76tracksRegLiveness: true 77body: | 78 bb.0: 79 liveins: $vgpr0 80 81 ; GCN-LABEL: name: zext_trunc_s32_s16_s64 82 ; GCN: liveins: $vgpr0 83 ; GCN-NEXT: {{ $}} 84 ; GCN-NEXT: %var:_(s32) = COPY $vgpr0 85 ; GCN-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC %var(s32) 86 ; GCN-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 16383 87 ; GCN-NEXT: %trunc:_(s16) = G_AND [[TRUNC]], [[C]] 88 ; GCN-NEXT: %zext:_(s64) = G_ZEXT %trunc(s16) 89 ; GCN-NEXT: $vgpr0_vgpr1 = COPY %zext(s64) 90 %var:_(s32) = COPY $vgpr0 91 %c3FFF:_(s32) = G_CONSTANT i32 16383 92 %low_bits:_(s32) = G_AND %var, %c3FFF 93 %trunc:_(s16) = G_TRUNC %low_bits(s32) 94 %zext:_(s64) = G_ZEXT %trunc(s16) 95 $vgpr0_vgpr1 = COPY %zext(s64) 96... 97 98--- 99name: zext_trunc_v2s32_v2s16_v2s32 100tracksRegLiveness: true 101body: | 102 bb.0: 103 liveins: $vgpr0_vgpr1 104 105 ; GCN-LABEL: name: zext_trunc_v2s32_v2s16_v2s32 106 ; GCN: liveins: $vgpr0_vgpr1 107 ; GCN-NEXT: {{ $}} 108 ; GCN-NEXT: %var:_(<2 x s32>) = COPY $vgpr0_vgpr1 109 ; GCN-NEXT: %c3FFF:_(s32) = G_CONSTANT i32 16383 110 ; GCN-NEXT: %c7FFF:_(s32) = G_CONSTANT i32 32767 111 ; GCN-NEXT: %c:_(<2 x s32>) = G_BUILD_VECTOR %c3FFF(s32), %c7FFF(s32) 112 ; GCN-NEXT: %low_bits:_(<2 x s32>) = G_AND %var, %c 113 ; GCN-NEXT: $vgpr0_vgpr1 = COPY %low_bits(<2 x s32>) 114 %var:_(<2 x s32>) = COPY $vgpr0_vgpr1 115 %c3FFF:_(s32) = G_CONSTANT i32 16383 116 %c7FFF:_(s32) = G_CONSTANT i32 32767 117 %c:_(<2 x s32>) = G_BUILD_VECTOR %c3FFF(s32), %c7FFF(s32) 118 %low_bits:_(<2 x s32>) = G_AND %var, %c 119 %trunc:_(<2 x s16>) = G_TRUNC %low_bits(<2 x s32>) 120 %zext:_(<2 x s32>) = G_ZEXT %trunc(<2 x s16>) 121 $vgpr0_vgpr1 = COPY %zext(<2 x s32>) 122... 123 124--- 125name: zext_trunc_v2s32_v2s16_v2s32_unknown_high_bits 126tracksRegLiveness: true 127body: | 128 bb.0: 129 liveins: $vgpr0_vgpr1 130 131 ; GCN-LABEL: name: zext_trunc_v2s32_v2s16_v2s32_unknown_high_bits 132 ; GCN: liveins: $vgpr0_vgpr1 133 ; GCN-NEXT: {{ $}} 134 ; GCN-NEXT: %var:_(<2 x s32>) = COPY $vgpr0_vgpr1 135 ; GCN-NEXT: %cFFFFF:_(s32) = G_CONSTANT i32 1048575 136 ; GCN-NEXT: %c7FFF:_(s32) = G_CONSTANT i32 32767 137 ; GCN-NEXT: %c:_(<2 x s32>) = G_BUILD_VECTOR %cFFFFF(s32), %c7FFF(s32) 138 ; GCN-NEXT: %low_bits:_(<2 x s32>) = G_AND %var, %c 139 ; GCN-NEXT: %trunc:_(<2 x s16>) = G_TRUNC %low_bits(<2 x s32>) 140 ; GCN-NEXT: %zext:_(<2 x s32>) = G_ZEXT %trunc(<2 x s16>) 141 ; GCN-NEXT: $vgpr0_vgpr1 = COPY %zext(<2 x s32>) 142 %var:_(<2 x s32>) = COPY $vgpr0_vgpr1 143 %cFFFFF:_(s32) = G_CONSTANT i32 1048575 144 %c7FFF:_(s32) = G_CONSTANT i32 32767 145 %c:_(<2 x s32>) = G_BUILD_VECTOR %cFFFFF(s32), %c7FFF(s32) 146 %low_bits:_(<2 x s32>) = G_AND %var, %c 147 %trunc:_(<2 x s16>) = G_TRUNC %low_bits(<2 x s32>) 148 %zext:_(<2 x s32>) = G_ZEXT %trunc(<2 x s16>) 149 $vgpr0_vgpr1 = COPY %zext(<2 x s32>) 150... 151 152--- 153name: zext_trunc_v2s64_v2s16_v2s32 154tracksRegLiveness: true 155body: | 156 bb.0: 157 liveins: $vgpr0_vgpr1_vgpr2_vgpr3 158 159 ; GCN-LABEL: name: zext_trunc_v2s64_v2s16_v2s32 160 ; GCN: liveins: $vgpr0_vgpr1_vgpr2_vgpr3 161 ; GCN-NEXT: {{ $}} 162 ; GCN-NEXT: %var:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 163 ; GCN-NEXT: %c3FFF:_(s64) = G_CONSTANT i64 16383 164 ; GCN-NEXT: %c7FFF:_(s64) = G_CONSTANT i64 32767 165 ; GCN-NEXT: %c:_(<2 x s64>) = G_BUILD_VECTOR %c3FFF(s64), %c7FFF(s64) 166 ; GCN-NEXT: %low_bits:_(<2 x s64>) = G_AND %var, %c 167 ; GCN-NEXT: %trunc:_(<2 x s16>) = G_TRUNC %low_bits(<2 x s64>) 168 ; GCN-NEXT: %zext:_(<2 x s32>) = G_ZEXT %trunc(<2 x s16>) 169 ; GCN-NEXT: $vgpr0_vgpr1 = COPY %zext(<2 x s32>) 170 %var:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 171 %c3FFF:_(s64) = G_CONSTANT i64 16383 172 %c7FFF:_(s64) = G_CONSTANT i64 32767 173 %c:_(<2 x s64>) = G_BUILD_VECTOR %c3FFF(s64), %c7FFF(s64) 174 %low_bits:_(<2 x s64>) = G_AND %var, %c 175 %trunc:_(<2 x s16>) = G_TRUNC %low_bits(<2 x s64>) 176 %zext:_(<2 x s32>) = G_ZEXT %trunc(<2 x s16>) 177 $vgpr0_vgpr1 = COPY %zext(<2 x s32>) 178... 179 180--- 181name: zext_trunc_v2s32_v2s16_v2s64 182tracksRegLiveness: true 183body: | 184 bb.0: 185 liveins: $vgpr0_vgpr1 186 187 ; GCN-LABEL: name: zext_trunc_v2s32_v2s16_v2s64 188 ; GCN: liveins: $vgpr0_vgpr1 189 ; GCN-NEXT: {{ $}} 190 ; GCN-NEXT: %var:_(<2 x s32>) = COPY $vgpr0_vgpr1 191 ; GCN-NEXT: %c3FFF:_(s32) = G_CONSTANT i32 16383 192 ; GCN-NEXT: %c7FFF:_(s32) = G_CONSTANT i32 32767 193 ; GCN-NEXT: %c:_(<2 x s32>) = G_BUILD_VECTOR %c3FFF(s32), %c7FFF(s32) 194 ; GCN-NEXT: %low_bits:_(<2 x s32>) = G_AND %var, %c 195 ; GCN-NEXT: %trunc:_(<2 x s16>) = G_TRUNC %low_bits(<2 x s32>) 196 ; GCN-NEXT: %zext:_(<2 x s64>) = G_ZEXT %trunc(<2 x s16>) 197 ; GCN-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %zext(<2 x s64>) 198 %var:_(<2 x s32>) = COPY $vgpr0_vgpr1 199 %c3FFF:_(s32) = G_CONSTANT i32 16383 200 %c7FFF:_(s32) = G_CONSTANT i32 32767 201 %c:_(<2 x s32>) = G_BUILD_VECTOR %c3FFF(s32), %c7FFF(s32) 202 %low_bits:_(<2 x s32>) = G_AND %var, %c 203 %trunc:_(<2 x s16>) = G_TRUNC %low_bits(<2 x s32>) 204 %zext:_(<2 x s64>) = G_ZEXT %trunc(<2 x s16>) 205 $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %zext(<2 x s64>) 206... 207