322 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 52# RUN: llc -mtriple=amdgcn -mcpu=tahiti -run-pass=amdgpu-prelegalizer-combiner %s -o - | FileCheck %s3 4---5name: test_and_mask_hi_rhs6tracksRegLiveness: true7body: |8 bb.0:9 liveins: $sgpr0_sgpr1, $sgpr210 ; CHECK-LABEL: name: test_and_mask_hi_rhs11 ; CHECK: liveins: $sgpr0_sgpr1, $sgpr212 ; CHECK-NEXT: {{ $}}13 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $sgpr0_sgpr114 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](s64)15 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 016 ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[C]](s32), [[UV1]](s32)17 ; CHECK-NEXT: $sgpr0_sgpr1 = COPY [[MV]](s64)18 ; CHECK-NEXT: SI_RETURN_TO_EPILOG implicit $sgpr0_sgpr119 %0:_(s64) = COPY $sgpr0_sgpr120 %1:_(s64) = G_CONSTANT i64 -429496729621 %2:_(s64) = G_AND %0, %122 $sgpr0_sgpr1 = COPY %2(s64)23 SI_RETURN_TO_EPILOG implicit $sgpr0_sgpr124...25---26name: test_and_mask_hi_lhs27tracksRegLiveness: true28body: |29 bb.0:30 liveins: $sgpr0_sgpr1, $sgpr231 ; CHECK-LABEL: name: test_and_mask_hi_lhs32 ; CHECK: liveins: $sgpr0_sgpr1, $sgpr233 ; CHECK-NEXT: {{ $}}34 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $sgpr0_sgpr135 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](s64)36 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 037 ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[C]](s32), [[UV1]](s32)38 ; CHECK-NEXT: $sgpr0_sgpr1 = COPY [[MV]](s64)39 ; CHECK-NEXT: SI_RETURN_TO_EPILOG implicit $sgpr0_sgpr140 %0:_(s64) = COPY $sgpr0_sgpr141 %1:_(s64) = G_CONSTANT i64 -429496729642 %2:_(s64) = G_AND %1, %043 $sgpr0_sgpr1 = COPY %2(s64)44 SI_RETURN_TO_EPILOG implicit $sgpr0_sgpr145...46---47name: test_and_mask_hi_48bit_mask_rhs48tracksRegLiveness: true49body: |50 bb.0:51 liveins: $sgpr0_sgpr1, $sgpr252 ; CHECK-LABEL: name: test_and_mask_hi_48bit_mask_rhs53 ; CHECK: liveins: $sgpr0_sgpr1, $sgpr254 ; CHECK-NEXT: {{ $}}55 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $sgpr0_sgpr156 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](s64)57 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -6553658 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[UV]], [[C]]59 ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[AND]](s32), [[UV1]](s32)60 ; CHECK-NEXT: $sgpr0_sgpr1 = COPY [[MV]](s64)61 ; CHECK-NEXT: SI_RETURN_TO_EPILOG implicit $sgpr0_sgpr162 %0:_(s64) = COPY $sgpr0_sgpr163 %1:_(s64) = G_CONSTANT i64 -6553664 %2:_(s64) = G_AND %0, %165 $sgpr0_sgpr1 = COPY %2(s64)66 SI_RETURN_TO_EPILOG implicit $sgpr0_sgpr167...68---69name: test_and_mask_hi_16bit_mask_rhs70tracksRegLiveness: true71body: |72 bb.0:73 liveins: $sgpr0_sgpr1, $sgpr274 ; CHECK-LABEL: name: test_and_mask_hi_16bit_mask_rhs75 ; CHECK: liveins: $sgpr0_sgpr1, $sgpr276 ; CHECK-NEXT: {{ $}}77 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $sgpr0_sgpr178 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -28147497671065679 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[COPY]], [[C]]80 ; CHECK-NEXT: $sgpr0_sgpr1 = COPY [[AND]](s64)81 ; CHECK-NEXT: SI_RETURN_TO_EPILOG implicit $sgpr0_sgpr182 %0:_(s64) = COPY $sgpr0_sgpr183 %1:_(s64) = G_CONSTANT i64 -28147497671065684 %2:_(s64) = G_AND %0, %185 $sgpr0_sgpr1 = COPY %2(s64)86 SI_RETURN_TO_EPILOG implicit $sgpr0_sgpr187...88---89name: test_and_mask_lo_rhs90tracksRegLiveness: true91body: |92 bb.0:93 liveins: $sgpr0_sgpr1, $sgpr294 ; CHECK-LABEL: name: test_and_mask_lo_rhs95 ; CHECK: liveins: $sgpr0_sgpr1, $sgpr296 ; CHECK-NEXT: {{ $}}97 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $sgpr0_sgpr198 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)99 ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[TRUNC]](s32)100 ; CHECK-NEXT: $sgpr0_sgpr1 = COPY [[ZEXT]](s64)101 ; CHECK-NEXT: SI_RETURN_TO_EPILOG implicit $sgpr0_sgpr1102 %0:_(s64) = COPY $sgpr0_sgpr1103 %1:_(s64) = G_CONSTANT i64 4294967295104 %2:_(s64) = G_AND %0, %1105 $sgpr0_sgpr1 = COPY %2(s64)106 SI_RETURN_TO_EPILOG implicit $sgpr0_sgpr1107...108---109name: test_and_mask_lo_lhs110tracksRegLiveness: true111body: |112 bb.0:113 liveins: $sgpr0_sgpr1, $sgpr2114 ; CHECK-LABEL: name: test_and_mask_lo_lhs115 ; CHECK: liveins: $sgpr0_sgpr1, $sgpr2116 ; CHECK-NEXT: {{ $}}117 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $sgpr0_sgpr1118 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)119 ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[TRUNC]](s32)120 ; CHECK-NEXT: $sgpr0_sgpr1 = COPY [[ZEXT]](s64)121 ; CHECK-NEXT: SI_RETURN_TO_EPILOG implicit $sgpr0_sgpr1122 %0:_(s64) = COPY $sgpr0_sgpr1123 %1:_(s64) = G_CONSTANT i64 4294967295124 %2:_(s64) = G_AND %1, %0125 $sgpr0_sgpr1 = COPY %2(s64)126 SI_RETURN_TO_EPILOG implicit $sgpr0_sgpr1127...128---129name: test_and_mask_lo_36bit_mask_rhs130tracksRegLiveness: true131body: |132 bb.0:133 liveins: $sgpr0_sgpr1, $sgpr2134 ; CHECK-LABEL: name: test_and_mask_lo_36bit_mask_rhs135 ; CHECK: liveins: $sgpr0_sgpr1, $sgpr2136 ; CHECK-NEXT: {{ $}}137 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $sgpr0_sgpr1138 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](s64)139 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 15140 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[UV1]], [[C]]141 ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[UV]](s32), [[AND]](s32)142 ; CHECK-NEXT: $sgpr0_sgpr1 = COPY [[MV]](s64)143 ; CHECK-NEXT: SI_RETURN_TO_EPILOG implicit $sgpr0_sgpr1144 %0:_(s64) = COPY $sgpr0_sgpr1145 %1:_(s64) = G_CONSTANT i64 68719476735146 %2:_(s64) = G_AND %0, %1147 $sgpr0_sgpr1 = COPY %2(s64)148 SI_RETURN_TO_EPILOG implicit $sgpr0_sgpr1149...150---151name: test_and_mask_hi_with_merge_unmerge152tracksRegLiveness: true153body: |154 bb.0:155 liveins: $sgpr0, $sgpr1, $sgpr2156 ; CHECK-LABEL: name: test_and_mask_hi_with_merge_unmerge157 ; CHECK: liveins: $sgpr0, $sgpr1, $sgpr2158 ; CHECK-NEXT: {{ $}}159 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $sgpr1160 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0161 ; CHECK-NEXT: $sgpr0 = COPY [[C]](s32)162 ; CHECK-NEXT: $sgpr1 = COPY [[COPY]](s32)163 ; CHECK-NEXT: SI_RETURN_TO_EPILOG implicit $sgpr0, implicit $sgpr1164 %0:_(s32) = COPY $sgpr0165 %1:_(s32) = COPY $sgpr1166 %2:_(s64) = G_MERGE_VALUES %0(s32), %1(s32)167 %3:_(s64) = G_CONSTANT i64 -4294967296168 %4:_(s64) = G_AND %2, %3169 %5:_(s32), %6:_(s32) = G_UNMERGE_VALUES %4(s64)170 $sgpr0 = COPY %5(s32)171 $sgpr1 = COPY %6(s32)172 SI_RETURN_TO_EPILOG implicit $sgpr0, implicit $sgpr1173...174---175name: negative_and_test_incorrect_types176tracksRegLiveness: true177body: |178 bb.0:179 liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5180 181 ; CHECK-LABEL: name: negative_and_test_incorrect_types182 ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5183 ; CHECK-NEXT: {{ $}}184 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3185 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s128) = G_CONSTANT i128 -4294967296186 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s128) = G_AND [[COPY]], [[C]]187 ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[AND]](s128)188 %0:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3189 %1:_(s64) = COPY $vgpr4_vgpr5190 %2:_(s128) = G_CONSTANT i128 -4294967296191 %3:_(s128) = G_AND %0, %2192 $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %3193...194---195name: test_or_mask_hi_rhs196tracksRegLiveness: true197body: |198 bb.0:199 liveins: $sgpr0_sgpr1, $sgpr2200 ; CHECK-LABEL: name: test_or_mask_hi_rhs201 ; CHECK: liveins: $sgpr0_sgpr1, $sgpr2202 ; CHECK-NEXT: {{ $}}203 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $sgpr0_sgpr1204 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)205 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1206 ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[TRUNC]](s32), [[C]](s32)207 ; CHECK-NEXT: $sgpr0_sgpr1 = COPY [[MV]](s64)208 ; CHECK-NEXT: SI_RETURN_TO_EPILOG implicit $sgpr0_sgpr1209 %0:_(s64) = COPY $sgpr0_sgpr1210 %1:_(s64) = G_CONSTANT i64 -4294967296211 %2:_(s64) = G_OR %0, %1212 $sgpr0_sgpr1 = COPY %2(s64)213 SI_RETURN_TO_EPILOG implicit $sgpr0_sgpr1214...215---216name: test_or_mask_hi_lhs217tracksRegLiveness: true218body: |219 bb.0:220 liveins: $sgpr0_sgpr1, $sgpr2221 ; CHECK-LABEL: name: test_or_mask_hi_lhs222 ; CHECK: liveins: $sgpr0_sgpr1, $sgpr2223 ; CHECK-NEXT: {{ $}}224 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $sgpr0_sgpr1225 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)226 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1227 ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[TRUNC]](s32), [[C]](s32)228 ; CHECK-NEXT: $sgpr0_sgpr1 = COPY [[MV]](s64)229 ; CHECK-NEXT: SI_RETURN_TO_EPILOG implicit $sgpr0_sgpr1230 %0:_(s64) = COPY $sgpr0_sgpr1231 %1:_(s64) = G_CONSTANT i64 -4294967296232 %2:_(s64) = G_OR %1, %0233 $sgpr0_sgpr1 = COPY %2(s64)234 SI_RETURN_TO_EPILOG implicit $sgpr0_sgpr1235...236---237name: test_or_mask_lo_rhs238tracksRegLiveness: true239body: |240 bb.0:241 liveins: $sgpr0_sgpr1, $sgpr2242 ; CHECK-LABEL: name: test_or_mask_lo_rhs243 ; CHECK: liveins: $sgpr0_sgpr1, $sgpr2244 ; CHECK-NEXT: {{ $}}245 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $sgpr0_sgpr1246 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](s64)247 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1248 ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[C]](s32), [[UV1]](s32)249 ; CHECK-NEXT: $sgpr0_sgpr1 = COPY [[MV]](s64)250 ; CHECK-NEXT: SI_RETURN_TO_EPILOG implicit $sgpr0_sgpr1251 %0:_(s64) = COPY $sgpr0_sgpr1252 %1:_(s64) = G_CONSTANT i64 4294967295253 %2:_(s64) = G_OR %0, %1254 $sgpr0_sgpr1 = COPY %2(s64)255 SI_RETURN_TO_EPILOG implicit $sgpr0_sgpr1256...257---258name: test_or_mask_lo_lhs259tracksRegLiveness: true260body: |261 bb.0:262 liveins: $sgpr0_sgpr1, $sgpr2263 ; CHECK-LABEL: name: test_or_mask_lo_lhs264 ; CHECK: liveins: $sgpr0_sgpr1, $sgpr2265 ; CHECK-NEXT: {{ $}}266 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $sgpr0_sgpr1267 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](s64)268 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1269 ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[C]](s32), [[UV1]](s32)270 ; CHECK-NEXT: $sgpr0_sgpr1 = COPY [[MV]](s64)271 ; CHECK-NEXT: SI_RETURN_TO_EPILOG implicit $sgpr0_sgpr1272 %0:_(s64) = COPY $sgpr0_sgpr1273 %1:_(s64) = G_CONSTANT i64 4294967295274 %2:_(s64) = G_OR %1, %0275 $sgpr0_sgpr1 = COPY %2(s64)276 SI_RETURN_TO_EPILOG implicit $sgpr0_sgpr1277...278---279name: test_or_mask_hi_with_merge_unmerge280tracksRegLiveness: true281body: |282 bb.0:283 liveins: $sgpr0, $sgpr1, $sgpr2284 ; CHECK-LABEL: name: test_or_mask_hi_with_merge_unmerge285 ; CHECK: liveins: $sgpr0, $sgpr1, $sgpr2286 ; CHECK-NEXT: {{ $}}287 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $sgpr0288 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1289 ; CHECK-NEXT: $sgpr0 = COPY [[COPY]](s32)290 ; CHECK-NEXT: $sgpr1 = COPY [[C]](s32)291 ; CHECK-NEXT: SI_RETURN_TO_EPILOG implicit $sgpr0, implicit $sgpr1292 %0:_(s32) = COPY $sgpr0293 %1:_(s32) = COPY $sgpr1294 %2:_(s64) = G_MERGE_VALUES %0(s32), %1(s32)295 %3:_(s64) = G_CONSTANT i64 -4294967296296 %4:_(s64) = G_OR %2, %3297 %5:_(s32), %6:_(s32) = G_UNMERGE_VALUES %4(s64)298 $sgpr0 = COPY %5(s32)299 $sgpr1 = COPY %6(s32)300 SI_RETURN_TO_EPILOG implicit $sgpr0, implicit $sgpr1301...302---303name: negative_or_test_incorrect_types304tracksRegLiveness: true305body: |306 bb.0:307 liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5308 309 ; CHECK-LABEL: name: negative_or_test_incorrect_types310 ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5311 ; CHECK-NEXT: {{ $}}312 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3313 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s128) = G_CONSTANT i128 -4294967296314 ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s128) = G_OR [[COPY]], [[C]]315 ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[OR]](s128)316 %0:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3317 %1:_(s64) = COPY $vgpr4_vgpr5318 %2:_(s128) = G_CONSTANT i128 -4294967296319 %3:_(s128) = G_OR %0, %2320 $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %3321...322