302 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=tahiti -run-pass=amdgpu-prelegalizer-combiner -verify-machineinstrs %s -o - | FileCheck -check-prefix=GFX6 %s3# RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx900 -run-pass=amdgpu-prelegalizer-combiner -verify-machineinstrs %s -o - | FileCheck -check-prefix=GFX9 %s4 5---6name: narrow_shl_s32_by_2_from_zext_s167tracksRegLiveness: true8body: |9 bb.0:10 liveins: $vgpr011 12 ; GFX6-LABEL: name: narrow_shl_s32_by_2_from_zext_s1613 ; GFX6: liveins: $vgpr014 ; GFX6-NEXT: {{ $}}15 ; GFX6-NEXT: %argument:_(s32) = COPY $vgpr016 ; GFX6-NEXT: %narrow:_(s16) = G_TRUNC %argument(s32)17 ; GFX6-NEXT: %masklow14:_(s16) = G_CONSTANT i16 1638318 ; GFX6-NEXT: %masked:_(s16) = G_AND %narrow, %masklow1419 ; GFX6-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 220 ; GFX6-NEXT: [[SHL:%[0-9]+]]:_(s16) = G_SHL %masked, [[C]](s16)21 ; GFX6-NEXT: %shl:_(s32) = G_ZEXT [[SHL]](s16)22 ; GFX6-NEXT: $vgpr0 = COPY %shl(s32)23 ;24 ; GFX9-LABEL: name: narrow_shl_s32_by_2_from_zext_s1625 ; GFX9: liveins: $vgpr026 ; GFX9-NEXT: {{ $}}27 ; GFX9-NEXT: %argument:_(s32) = COPY $vgpr028 ; GFX9-NEXT: %narrow:_(s16) = G_TRUNC %argument(s32)29 ; GFX9-NEXT: %masklow14:_(s16) = G_CONSTANT i16 1638330 ; GFX9-NEXT: %masked:_(s16) = G_AND %narrow, %masklow1431 ; GFX9-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 232 ; GFX9-NEXT: [[SHL:%[0-9]+]]:_(s16) = G_SHL %masked, [[C]](s16)33 ; GFX9-NEXT: %shl:_(s32) = G_ZEXT [[SHL]](s16)34 ; GFX9-NEXT: $vgpr0 = COPY %shl(s32)35 %argument:_(s32) = COPY $vgpr036 %narrow:_(s16) = G_TRUNC %argument37 %masklow14:_(s16) = G_CONSTANT i16 1638338 %masked:_(s16) = G_AND %narrow, %masklow1439 %extend:_(s32) = G_ZEXT %masked40 %shiftamt:_(s32) = G_CONSTANT i32 241 %shl:_(s32) = G_SHL %extend, %shiftamt42 $vgpr0 = COPY %shl43...44 45---46name: narrow_shl_s64_by_2_from_zext_s1647tracksRegLiveness: true48body: |49 bb.0:50 liveins: $vgpr051 52 ; GFX6-LABEL: name: narrow_shl_s64_by_2_from_zext_s1653 ; GFX6: liveins: $vgpr054 ; GFX6-NEXT: {{ $}}55 ; GFX6-NEXT: %argument:_(s32) = COPY $vgpr056 ; GFX6-NEXT: %narrow:_(s16) = G_TRUNC %argument(s32)57 ; GFX6-NEXT: %masklow14:_(s16) = G_CONSTANT i16 1638358 ; GFX6-NEXT: %masked:_(s16) = G_AND %narrow, %masklow1459 ; GFX6-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 260 ; GFX6-NEXT: [[SHL:%[0-9]+]]:_(s16) = G_SHL %masked, [[C]](s16)61 ; GFX6-NEXT: %shl:_(s64) = G_ZEXT [[SHL]](s16)62 ; GFX6-NEXT: $vgpr0_vgpr1 = COPY %shl(s64)63 ;64 ; GFX9-LABEL: name: narrow_shl_s64_by_2_from_zext_s1665 ; GFX9: liveins: $vgpr066 ; GFX9-NEXT: {{ $}}67 ; GFX9-NEXT: %argument:_(s32) = COPY $vgpr068 ; GFX9-NEXT: %narrow:_(s16) = G_TRUNC %argument(s32)69 ; GFX9-NEXT: %masklow14:_(s16) = G_CONSTANT i16 1638370 ; GFX9-NEXT: %masked:_(s16) = G_AND %narrow, %masklow1471 ; GFX9-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 272 ; GFX9-NEXT: [[SHL:%[0-9]+]]:_(s16) = G_SHL %masked, [[C]](s16)73 ; GFX9-NEXT: %shl:_(s64) = G_ZEXT [[SHL]](s16)74 ; GFX9-NEXT: $vgpr0_vgpr1 = COPY %shl(s64)75 %argument:_(s32) = COPY $vgpr076 %narrow:_(s16) = G_TRUNC %argument77 %masklow14:_(s16) = G_CONSTANT i16 1638378 %masked:_(s16) = G_AND %narrow, %masklow1479 %extend:_(s64) = G_ZEXT %masked80 %shiftamt:_(s32) = G_CONSTANT i32 281 %shl:_(s64) = G_SHL %extend, %shiftamt82 $vgpr0_vgpr1 = COPY %shl83...84 85---86name: narrow_shl_s16_by_2_from_zext_s887tracksRegLiveness: true88body: |89 bb.0:90 liveins: $vgpr091 92 ; GFX6-LABEL: name: narrow_shl_s16_by_2_from_zext_s893 ; GFX6: liveins: $vgpr094 ; GFX6-NEXT: {{ $}}95 ; GFX6-NEXT: %argument:_(s32) = COPY $vgpr096 ; GFX6-NEXT: %narrow:_(s8) = G_TRUNC %argument(s32)97 ; GFX6-NEXT: %masklow6:_(s8) = G_CONSTANT i8 6398 ; GFX6-NEXT: %masked:_(s8) = G_AND %narrow, %masklow699 ; GFX6-NEXT: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 2100 ; GFX6-NEXT: [[SHL:%[0-9]+]]:_(s8) = G_SHL %masked, [[C]](s8)101 ; GFX6-NEXT: %result:_(s32) = G_ZEXT [[SHL]](s8)102 ; GFX6-NEXT: $vgpr0 = COPY %result(s32)103 ;104 ; GFX9-LABEL: name: narrow_shl_s16_by_2_from_zext_s8105 ; GFX9: liveins: $vgpr0106 ; GFX9-NEXT: {{ $}}107 ; GFX9-NEXT: %argument:_(s32) = COPY $vgpr0108 ; GFX9-NEXT: %narrow:_(s8) = G_TRUNC %argument(s32)109 ; GFX9-NEXT: %masklow6:_(s8) = G_CONSTANT i8 63110 ; GFX9-NEXT: %masked:_(s8) = G_AND %narrow, %masklow6111 ; GFX9-NEXT: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 2112 ; GFX9-NEXT: [[SHL:%[0-9]+]]:_(s8) = G_SHL %masked, [[C]](s8)113 ; GFX9-NEXT: %result:_(s32) = G_ZEXT [[SHL]](s8)114 ; GFX9-NEXT: $vgpr0 = COPY %result(s32)115 %argument:_(s32) = COPY $vgpr0116 %narrow:_(s8) = G_TRUNC %argument117 %masklow6:_(s8) = G_CONSTANT i8 63118 %masked:_(s8) = G_AND %narrow, %masklow6119 %extend:_(s16) = G_ZEXT %masked120 %shiftamt:_(s16) = G_CONSTANT i16 2121 %shl:_(s16) = G_SHL %extend, %shiftamt122 %result:_(s32) = G_ANYEXT %shl123 $vgpr0 = COPY %result124...125 126---127name: narrow_shl_v2s32_by_2_from_zext_v2s16128tracksRegLiveness: true129body: |130 bb.0:131 liveins: $vgpr0132 133 ; GFX6-LABEL: name: narrow_shl_v2s32_by_2_from_zext_v2s16134 ; GFX6: liveins: $vgpr0135 ; GFX6-NEXT: {{ $}}136 ; GFX6-NEXT: %narrow:_(<2 x s16>) = COPY $vgpr0137 ; GFX6-NEXT: %masklow14:_(s16) = G_CONSTANT i16 16383138 ; GFX6-NEXT: %masklow14vec:_(<2 x s16>) = G_BUILD_VECTOR %masklow14(s16), %masklow14(s16)139 ; GFX6-NEXT: %masked:_(<2 x s16>) = G_AND %narrow, %masklow14vec140 ; GFX6-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 2141 ; GFX6-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s16>) = G_BUILD_VECTOR [[C]](s16), [[C]](s16)142 ; GFX6-NEXT: [[SHL:%[0-9]+]]:_(<2 x s16>) = G_SHL %masked, [[BUILD_VECTOR]](<2 x s16>)143 ; GFX6-NEXT: %shl:_(<2 x s32>) = G_ZEXT [[SHL]](<2 x s16>)144 ; GFX6-NEXT: $vgpr0_vgpr1 = COPY %shl(<2 x s32>)145 ;146 ; GFX9-LABEL: name: narrow_shl_v2s32_by_2_from_zext_v2s16147 ; GFX9: liveins: $vgpr0148 ; GFX9-NEXT: {{ $}}149 ; GFX9-NEXT: %narrow:_(<2 x s16>) = COPY $vgpr0150 ; GFX9-NEXT: %masklow14:_(s16) = G_CONSTANT i16 16383151 ; GFX9-NEXT: %masklow14vec:_(<2 x s16>) = G_BUILD_VECTOR %masklow14(s16), %masklow14(s16)152 ; GFX9-NEXT: %masked:_(<2 x s16>) = G_AND %narrow, %masklow14vec153 ; GFX9-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 2154 ; GFX9-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s16>) = G_BUILD_VECTOR [[C]](s16), [[C]](s16)155 ; GFX9-NEXT: [[SHL:%[0-9]+]]:_(<2 x s16>) = G_SHL %masked, [[BUILD_VECTOR]](<2 x s16>)156 ; GFX9-NEXT: %shl:_(<2 x s32>) = G_ZEXT [[SHL]](<2 x s16>)157 ; GFX9-NEXT: $vgpr0_vgpr1 = COPY %shl(<2 x s32>)158 %narrow:_(<2 x s16>) = COPY $vgpr0159 %masklow14:_(s16) = G_CONSTANT i16 16383160 %masklow14vec:_(<2 x s16>) = G_BUILD_VECTOR %masklow14, %masklow14161 %masked:_(<2 x s16>) = G_AND %narrow, %masklow14vec162 %extend:_(<2 x s32>) = G_ZEXT %masked163 %shiftamt:_(s32) = G_CONSTANT i32 2164 %shiftamtvec:_(<2 x s32>) = G_BUILD_VECTOR %shiftamt, %shiftamt165 %shl:_(<2 x s32>) = G_SHL %extend, %shiftamtvec166 $vgpr0_vgpr1 = COPY %shl167...168 169---170name: narrow_shl_v2s64_by_2_from_anyext_v2s32171tracksRegLiveness: true172body: |173 bb.0:174 liveins: $vgpr0_vgpr1175 176 ; GFX6-LABEL: name: narrow_shl_v2s64_by_2_from_anyext_v2s32177 ; GFX6: liveins: $vgpr0_vgpr1178 ; GFX6-NEXT: {{ $}}179 ; GFX6-NEXT: %narrow:_(<2 x s32>) = COPY $vgpr0_vgpr1180 ; GFX6-NEXT: %masklow30:_(s32) = G_CONSTANT i32 1073741823181 ; GFX6-NEXT: %masklow30vec:_(<2 x s32>) = G_BUILD_VECTOR %masklow30(s32), %masklow30(s32)182 ; GFX6-NEXT: %masked:_(<2 x s32>) = G_AND %narrow, %masklow30vec183 ; GFX6-NEXT: %shiftamt:_(s32) = G_CONSTANT i32 2184 ; GFX6-NEXT: %shiftamtvec:_(<2 x s32>) = G_BUILD_VECTOR %shiftamt(s32), %shiftamt(s32)185 ; GFX6-NEXT: [[SHL:%[0-9]+]]:_(<2 x s32>) = G_SHL %masked, %shiftamtvec(<2 x s32>)186 ; GFX6-NEXT: %shl:_(<2 x s64>) = G_ZEXT [[SHL]](<2 x s32>)187 ; GFX6-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %shl(<2 x s64>)188 ;189 ; GFX9-LABEL: name: narrow_shl_v2s64_by_2_from_anyext_v2s32190 ; GFX9: liveins: $vgpr0_vgpr1191 ; GFX9-NEXT: {{ $}}192 ; GFX9-NEXT: %narrow:_(<2 x s32>) = COPY $vgpr0_vgpr1193 ; GFX9-NEXT: %masklow30:_(s32) = G_CONSTANT i32 1073741823194 ; GFX9-NEXT: %masklow30vec:_(<2 x s32>) = G_BUILD_VECTOR %masklow30(s32), %masklow30(s32)195 ; GFX9-NEXT: %masked:_(<2 x s32>) = G_AND %narrow, %masklow30vec196 ; GFX9-NEXT: %shiftamt:_(s32) = G_CONSTANT i32 2197 ; GFX9-NEXT: %shiftamtvec:_(<2 x s32>) = G_BUILD_VECTOR %shiftamt(s32), %shiftamt(s32)198 ; GFX9-NEXT: [[SHL:%[0-9]+]]:_(<2 x s32>) = G_SHL %masked, %shiftamtvec(<2 x s32>)199 ; GFX9-NEXT: %shl:_(<2 x s64>) = G_ZEXT [[SHL]](<2 x s32>)200 ; GFX9-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %shl(<2 x s64>)201 %narrow:_(<2 x s32>) = COPY $vgpr0_vgpr1202 %masklow30:_(s32) = G_CONSTANT i32 1073741823203 %masklow30vec:_(<2 x s32>) = G_BUILD_VECTOR %masklow30, %masklow30204 %masked:_(<2 x s32>) = G_AND %narrow, %masklow30vec205 %extend:_(<2 x s64>) = G_ANYEXT %masked206 %shiftamt:_(s32) = G_CONSTANT i32 2207 %shiftamtvec:_(<2 x s32>) = G_BUILD_VECTOR %shiftamt, %shiftamt208 %shl:_(<2 x s64>) = G_SHL %extend, %shiftamtvec209 $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %shl210...211 212---213name: do_not_shl_s32_zero_by_16_from_zext_s16214tracksRegLiveness: true215legalized: true216 217body: |218 bb.0:219 liveins: $vgpr0220 ; GFX6-LABEL: name: do_not_shl_s32_zero_by_16_from_zext_s16221 ; GFX6: liveins: $vgpr0222 ; GFX6-NEXT: {{ $}}223 ; GFX6-NEXT: %extend:_(s32) = G_CONSTANT i32 0224 ; GFX6-NEXT: $vgpr0 = COPY %extend(s32)225 ;226 ; GFX9-LABEL: name: do_not_shl_s32_zero_by_16_from_zext_s16227 ; GFX9: liveins: $vgpr0228 ; GFX9-NEXT: {{ $}}229 ; GFX9-NEXT: %extend:_(s32) = G_CONSTANT i32 0230 ; GFX9-NEXT: $vgpr0 = COPY %extend(s32)231 %zero:_(s16) = G_CONSTANT i16 0232 %extend:_(s32) = G_ZEXT %zero:_(s16)233 %shiftamt:_(s16) = G_CONSTANT i16 16234 %shl:_(s32) = G_SHL %extend, %shiftamt(s16)235 $vgpr0 = COPY %shl236...237 238---239name: do_not_shl_v2s32_zero_by_16_from_zext_v2s16240tracksRegLiveness: true241legalized: true242 243body: |244 bb.0:245 liveins: $vgpr0, $vgpr1246 ; GFX6-LABEL: name: do_not_shl_v2s32_zero_by_16_from_zext_v2s16247 ; GFX6: liveins: $vgpr0, $vgpr1248 ; GFX6-NEXT: {{ $}}249 ; GFX6-NEXT: %6:_(s32) = G_CONSTANT i32 0250 ; GFX6-NEXT: %shl:_(<2 x s32>) = G_BUILD_VECTOR %6(s32), %6(s32)251 ; GFX6-NEXT: $vgpr0_vgpr1 = COPY %shl(<2 x s32>)252 ;253 ; GFX9-LABEL: name: do_not_shl_v2s32_zero_by_16_from_zext_v2s16254 ; GFX9: liveins: $vgpr0, $vgpr1255 ; GFX9-NEXT: {{ $}}256 ; GFX9-NEXT: %6:_(s32) = G_CONSTANT i32 0257 ; GFX9-NEXT: %shl:_(<2 x s32>) = G_BUILD_VECTOR %6(s32), %6(s32)258 ; GFX9-NEXT: $vgpr0_vgpr1 = COPY %shl(<2 x s32>)259 %zero:_(s16) = G_CONSTANT i16 0260 %zerovector:_(<2 x s16>) = G_BUILD_VECTOR %zero, %zero:_(s16)261 %shiftamt:_(s16) = G_CONSTANT i16 16262 %shiftamtvector:_(<2 x s16>) = G_BUILD_VECTOR %shiftamt, %shiftamt:_(s16)263 %extend:_(<2 x s32>) = G_ZEXT %zerovector:_(<2 x s16>)264 %shl:_(<2 x s32>) = G_SHL %extend, %shiftamtvector265 $vgpr0_vgpr1 = COPY %shl266...267 268---269name: do_not_shl_s32_by_16_from_zext_s16270tracksRegLiveness: true271legalized: true272 273body: |274 bb.0:275 liveins: $vgpr0276 ; GFX6-LABEL: name: do_not_shl_s32_by_16_from_zext_s16277 ; GFX6: liveins: $vgpr0278 ; GFX6-NEXT: {{ $}}279 ; GFX6-NEXT: %argument:_(s32) = COPY $vgpr0280 ; GFX6-NEXT: %truncate:_(s16) = G_TRUNC %argument(s32)281 ; GFX6-NEXT: %shiftamt:_(s16) = G_CONSTANT i16 16282 ; GFX6-NEXT: %extend:_(s32) = G_ZEXT %truncate(s16)283 ; GFX6-NEXT: %shl:_(s32) = G_SHL %extend, %shiftamt(s16)284 ; GFX6-NEXT: $vgpr0 = COPY %shl(s32)285 ;286 ; GFX9-LABEL: name: do_not_shl_s32_by_16_from_zext_s16287 ; GFX9: liveins: $vgpr0288 ; GFX9-NEXT: {{ $}}289 ; GFX9-NEXT: %argument:_(s32) = COPY $vgpr0290 ; GFX9-NEXT: %truncate:_(s16) = G_TRUNC %argument(s32)291 ; GFX9-NEXT: %shiftamt:_(s16) = G_CONSTANT i16 16292 ; GFX9-NEXT: %extend:_(s32) = G_ZEXT %truncate(s16)293 ; GFX9-NEXT: %shl:_(s32) = G_SHL %extend, %shiftamt(s16)294 ; GFX9-NEXT: $vgpr0 = COPY %shl(s32)295 %argument:_(s32) = COPY $vgpr0296 %truncate:_(s16) = G_TRUNC %argument:_(s32)297 %shiftamt:_(s16) = G_CONSTANT i16 16298 %extend:_(s32) = G_ZEXT %truncate:_(s16)299 %shl:_(s32) = G_SHL %extend, %shiftamt(s16)300 $vgpr0 = COPY %shl301...302