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: %var:_(s32) = COPY $vgpr0 14 ; GCN: %c3FFF:_(s32) = G_CONSTANT i32 16383 15 ; GCN: %low_bits:_(s32) = G_AND %var, %c3FFF 16 ; GCN: $vgpr0 = COPY %low_bits(s32) 17 %var:_(s32) = COPY $vgpr0 18 %c3FFF:_(s32) = G_CONSTANT i32 16383 19 %low_bits:_(s32) = G_AND %var, %c3FFF 20 %trunc:_(s16) = G_TRUNC %low_bits(s32) 21 %zext:_(s32) = G_ZEXT %trunc(s16) 22 $vgpr0 = COPY %zext(s32) 23... 24 25--- 26name: zext_trunc_s32_s16_s32_unknown_high_bits 27tracksRegLiveness: true 28body: | 29 bb.0: 30 liveins: $vgpr0 31 32 ; GCN-LABEL: name: zext_trunc_s32_s16_s32_unknown_high_bits 33 ; GCN: liveins: $vgpr0 34 ; GCN: %var:_(s32) = COPY $vgpr0 35 ; GCN: %cFFFFF:_(s32) = G_CONSTANT i32 1048575 36 ; GCN: %low_bits:_(s32) = G_AND %var, %cFFFFF 37 ; GCN: %trunc:_(s16) = G_TRUNC %low_bits(s32) 38 ; GCN: %zext:_(s32) = G_ZEXT %trunc(s16) 39 ; GCN: $vgpr0 = COPY %zext(s32) 40 %var:_(s32) = COPY $vgpr0 41 %cFFFFF:_(s32) = G_CONSTANT i32 1048575 42 %low_bits:_(s32) = G_AND %var, %cFFFFF 43 %trunc:_(s16) = G_TRUNC %low_bits(s32) 44 %zext:_(s32) = G_ZEXT %trunc(s16) 45 $vgpr0 = COPY %zext(s32) 46... 47 48--- 49name: zext_trunc_s64_s16_s32 50tracksRegLiveness: true 51body: | 52 bb.0: 53 liveins: $vgpr0_vgpr1 54 55 ; GCN-LABEL: name: zext_trunc_s64_s16_s32 56 ; GCN: liveins: $vgpr0_vgpr1 57 ; GCN: %var:_(s64) = COPY $vgpr0_vgpr1 58 ; GCN: %c3FFF:_(s64) = G_CONSTANT i64 16383 59 ; GCN: %low_bits:_(s64) = G_AND %var, %c3FFF 60 ; GCN: %trunc:_(s16) = G_TRUNC %low_bits(s64) 61 ; GCN: %zext:_(s32) = G_ZEXT %trunc(s16) 62 ; GCN: $vgpr0 = COPY %zext(s32) 63 %var:_(s64) = COPY $vgpr0_vgpr1 64 %c3FFF:_(s64) = G_CONSTANT i64 16383 65 %low_bits:_(s64) = G_AND %var, %c3FFF 66 %trunc:_(s16) = G_TRUNC %low_bits(s64) 67 %zext:_(s32) = G_ZEXT %trunc(s16) 68 $vgpr0 = COPY %zext(s32) 69... 70 71--- 72name: zext_trunc_s32_s16_s64 73tracksRegLiveness: true 74body: | 75 bb.0: 76 liveins: $vgpr0 77 78 ; GCN-LABEL: name: zext_trunc_s32_s16_s64 79 ; GCN: liveins: $vgpr0 80 ; GCN: %var:_(s32) = COPY $vgpr0 81 ; GCN: %c3FFF:_(s32) = G_CONSTANT i32 16383 82 ; GCN: %low_bits:_(s32) = G_AND %var, %c3FFF 83 ; GCN: %trunc:_(s16) = G_TRUNC %low_bits(s32) 84 ; GCN: %zext:_(s64) = G_ZEXT %trunc(s16) 85 ; GCN: $vgpr0_vgpr1 = COPY %zext(s64) 86 %var:_(s32) = COPY $vgpr0 87 %c3FFF:_(s32) = G_CONSTANT i32 16383 88 %low_bits:_(s32) = G_AND %var, %c3FFF 89 %trunc:_(s16) = G_TRUNC %low_bits(s32) 90 %zext:_(s64) = G_ZEXT %trunc(s16) 91 $vgpr0_vgpr1 = COPY %zext(s64) 92... 93 94--- 95name: zext_trunc_v2s32_v2s16_v2s32 96tracksRegLiveness: true 97body: | 98 bb.0: 99 liveins: $vgpr0_vgpr1 100 101 ; GCN-LABEL: name: zext_trunc_v2s32_v2s16_v2s32 102 ; GCN: liveins: $vgpr0_vgpr1 103 ; GCN: %var:_(<2 x s32>) = COPY $vgpr0_vgpr1 104 ; GCN: %c3FFF:_(s32) = G_CONSTANT i32 16383 105 ; GCN: %c7FFF:_(s32) = G_CONSTANT i32 32767 106 ; GCN: %c:_(<2 x s32>) = G_BUILD_VECTOR %c3FFF(s32), %c7FFF(s32) 107 ; GCN: %low_bits:_(<2 x s32>) = G_AND %var, %c 108 ; GCN: $vgpr0_vgpr1 = COPY %low_bits(<2 x s32>) 109 %var:_(<2 x s32>) = COPY $vgpr0_vgpr1 110 %c3FFF:_(s32) = G_CONSTANT i32 16383 111 %c7FFF:_(s32) = G_CONSTANT i32 32767 112 %c:_(<2 x s32>) = G_BUILD_VECTOR %c3FFF(s32), %c7FFF(s32) 113 %low_bits:_(<2 x s32>) = G_AND %var, %c 114 %trunc:_(<2 x s16>) = G_TRUNC %low_bits(<2 x s32>) 115 %zext:_(<2 x s32>) = G_ZEXT %trunc(<2 x s16>) 116 $vgpr0_vgpr1 = COPY %zext(<2 x s32>) 117... 118 119--- 120name: zext_trunc_v2s32_v2s16_v2s32_unknown_high_bits 121tracksRegLiveness: true 122body: | 123 bb.0: 124 liveins: $vgpr0_vgpr1 125 126 ; GCN-LABEL: name: zext_trunc_v2s32_v2s16_v2s32_unknown_high_bits 127 ; GCN: liveins: $vgpr0_vgpr1 128 ; GCN: %var:_(<2 x s32>) = COPY $vgpr0_vgpr1 129 ; GCN: %cFFFFF:_(s32) = G_CONSTANT i32 1048575 130 ; GCN: %c7FFF:_(s32) = G_CONSTANT i32 32767 131 ; GCN: %c:_(<2 x s32>) = G_BUILD_VECTOR %cFFFFF(s32), %c7FFF(s32) 132 ; GCN: %low_bits:_(<2 x s32>) = G_AND %var, %c 133 ; GCN: %trunc:_(<2 x s16>) = G_TRUNC %low_bits(<2 x s32>) 134 ; GCN: %zext:_(<2 x s32>) = G_ZEXT %trunc(<2 x s16>) 135 ; GCN: $vgpr0_vgpr1 = COPY %zext(<2 x s32>) 136 %var:_(<2 x s32>) = COPY $vgpr0_vgpr1 137 %cFFFFF:_(s32) = G_CONSTANT i32 1048575 138 %c7FFF:_(s32) = G_CONSTANT i32 32767 139 %c:_(<2 x s32>) = G_BUILD_VECTOR %cFFFFF(s32), %c7FFF(s32) 140 %low_bits:_(<2 x s32>) = G_AND %var, %c 141 %trunc:_(<2 x s16>) = G_TRUNC %low_bits(<2 x s32>) 142 %zext:_(<2 x s32>) = G_ZEXT %trunc(<2 x s16>) 143 $vgpr0_vgpr1 = COPY %zext(<2 x s32>) 144... 145 146--- 147name: zext_trunc_v2s64_v2s16_v2s32 148tracksRegLiveness: true 149body: | 150 bb.0: 151 liveins: $vgpr0_vgpr1_vgpr2_vgpr3 152 153 ; GCN-LABEL: name: zext_trunc_v2s64_v2s16_v2s32 154 ; GCN: liveins: $vgpr0_vgpr1_vgpr2_vgpr3 155 ; GCN: %var:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 156 ; GCN: %c3FFF:_(s64) = G_CONSTANT i64 16383 157 ; GCN: %c7FFF:_(s64) = G_CONSTANT i64 32767 158 ; GCN: %c:_(<2 x s64>) = G_BUILD_VECTOR %c3FFF(s64), %c7FFF(s64) 159 ; GCN: %low_bits:_(<2 x s64>) = G_AND %var, %c 160 ; GCN: %trunc:_(<2 x s16>) = G_TRUNC %low_bits(<2 x s64>) 161 ; GCN: %zext:_(<2 x s32>) = G_ZEXT %trunc(<2 x s16>) 162 ; GCN: $vgpr0_vgpr1 = COPY %zext(<2 x s32>) 163 %var:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 164 %c3FFF:_(s64) = G_CONSTANT i64 16383 165 %c7FFF:_(s64) = G_CONSTANT i64 32767 166 %c:_(<2 x s64>) = G_BUILD_VECTOR %c3FFF(s64), %c7FFF(s64) 167 %low_bits:_(<2 x s64>) = G_AND %var, %c 168 %trunc:_(<2 x s16>) = G_TRUNC %low_bits(<2 x s64>) 169 %zext:_(<2 x s32>) = G_ZEXT %trunc(<2 x s16>) 170 $vgpr0_vgpr1 = COPY %zext(<2 x s32>) 171... 172 173--- 174name: zext_trunc_v2s32_v2s16_v2s64 175tracksRegLiveness: true 176body: | 177 bb.0: 178 liveins: $vgpr0_vgpr1 179 180 ; GCN-LABEL: name: zext_trunc_v2s32_v2s16_v2s64 181 ; GCN: liveins: $vgpr0_vgpr1 182 ; GCN: %var:_(<2 x s32>) = COPY $vgpr0_vgpr1 183 ; GCN: %c3FFF:_(s32) = G_CONSTANT i32 16383 184 ; GCN: %c7FFF:_(s32) = G_CONSTANT i32 32767 185 ; GCN: %c:_(<2 x s32>) = G_BUILD_VECTOR %c3FFF(s32), %c7FFF(s32) 186 ; GCN: %low_bits:_(<2 x s32>) = G_AND %var, %c 187 ; GCN: %trunc:_(<2 x s16>) = G_TRUNC %low_bits(<2 x s32>) 188 ; GCN: %zext:_(<2 x s64>) = G_ZEXT %trunc(<2 x s16>) 189 ; GCN: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %zext(<2 x s64>) 190 %var:_(<2 x s32>) = COPY $vgpr0_vgpr1 191 %c3FFF:_(s32) = G_CONSTANT i32 16383 192 %c7FFF:_(s32) = G_CONSTANT i32 32767 193 %c:_(<2 x s32>) = G_BUILD_VECTOR %c3FFF(s32), %c7FFF(s32) 194 %low_bits:_(<2 x s32>) = G_AND %var, %c 195 %trunc:_(<2 x s16>) = G_TRUNC %low_bits(<2 x s32>) 196 %zext:_(<2 x s64>) = G_ZEXT %trunc(<2 x s16>) 197 $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %zext(<2 x s64>) 198... 199