210 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=amdgcn -run-pass=amdgpu-postlegalizer-combiner -verify-machineinstrs %s -o - | FileCheck %s3 4---5name: trunc_s32_shl_s64_56legalized: true7tracksRegLiveness: true8body: |9 bb.0:10 liveins: $vgpr0_vgpr111 12 ; CHECK-LABEL: name: trunc_s32_shl_s64_513 ; CHECK: liveins: $vgpr0_vgpr114 ; CHECK-NEXT: {{ $}}15 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr116 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 117 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)18 ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[TRUNC]], [[C]](s32)19 ; CHECK-NEXT: $vgpr0 = COPY [[SHL]](s32)20 %0:_(s64) = COPY $vgpr0_vgpr121 %1:_(s32) = G_CONSTANT i32 122 %2:_(s64) = G_SHL %0:_, %123 %3:_(s32) = G_TRUNC %224 $vgpr0 = COPY %325...26 27---28name: trunc_s16_shl_s32_529legalized: true30tracksRegLiveness: true31body: |32 bb.0:33 liveins: $vgpr034 35 ; CHECK-LABEL: name: trunc_s16_shl_s32_536 ; CHECK: liveins: $vgpr037 ; CHECK-NEXT: {{ $}}38 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr039 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 140 ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY]], [[C]](s32)41 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[SHL]](s32)42 ; CHECK-NEXT: S_ENDPGM 0, implicit [[TRUNC]](s16)43 %0:_(s32) = COPY $vgpr044 %1:_(s32) = G_CONSTANT i32 145 %2:_(s32) = G_SHL %0:_, %146 %3:_(s16) = G_TRUNC %247 S_ENDPGM 0, implicit %348 49...50 51---52name: trunc_s16_shl_s64_553legalized: true54tracksRegLiveness: true55body: |56 bb.0:57 liveins: $vgpr0_vgpr158 59 ; CHECK-LABEL: name: trunc_s16_shl_s64_560 ; CHECK: liveins: $vgpr0_vgpr161 ; CHECK-NEXT: {{ $}}62 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr163 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 164 ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[COPY]], [[C]](s32)65 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[SHL]](s64)66 ; CHECK-NEXT: S_ENDPGM 0, implicit [[TRUNC]](s16)67 %0:_(s64) = COPY $vgpr0_vgpr168 %1:_(s32) = G_CONSTANT i32 169 %2:_(s64) = G_SHL %0:_, %170 %3:_(s16) = G_TRUNC %271 S_ENDPGM 0, implicit %372 73...74 75---76name: s16_trunc_s64_lshr_1677tracksRegLiveness: true78body: |79 bb.0:80 liveins: $vgpr081 ; CHECK-LABEL: name: s16_trunc_s64_lshr_1682 ; CHECK: liveins: $vgpr083 ; CHECK-NEXT: {{ $}}84 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr085 ; CHECK-NEXT: %amt:_(s32) = G_CONSTANT i32 1686 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], %amt(s32)87 ; CHECK-NEXT: %trunc:_(s16) = G_TRUNC [[LSHR]](s32)88 ; CHECK-NEXT: %foo:_(s16) = G_CONSTANT i16 5589 ; CHECK-NEXT: %keep:_(s32) = G_MERGE_VALUES %trunc(s16), %foo(s16)90 ; CHECK-NEXT: $vgpr0 = COPY %keep(s32)91 %0:_(s32) = COPY $vgpr092 %src:_(s64) = G_ZEXT %093 %amt:_(s32) = G_CONSTANT i32 1694 %shift:_(s64) = G_LSHR %src, %amt95 %trunc:_(s16) = G_TRUNC %shift96 %foo:_(s16) = G_CONSTANT i16 5597 %keep:_(s32) = G_MERGE_VALUES %trunc, %foo98 $vgpr0 = COPY %keep99...100 101---102name: s16_trunc_s64_ashr_16103tracksRegLiveness: true104body: |105 bb.0:106 liveins: $vgpr0107 ; CHECK-LABEL: name: s16_trunc_s64_ashr_16108 ; CHECK: liveins: $vgpr0109 ; CHECK-NEXT: {{ $}}110 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0111 ; CHECK-NEXT: %amt:_(s32) = G_CONSTANT i32 16112 ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[COPY]], %amt(s32)113 ; CHECK-NEXT: %trunc:_(s16) = G_TRUNC [[ASHR]](s32)114 ; CHECK-NEXT: %foo:_(s16) = G_CONSTANT i16 55115 ; CHECK-NEXT: %keep:_(s32) = G_MERGE_VALUES %trunc(s16), %foo(s16)116 ; CHECK-NEXT: $vgpr0 = COPY %keep(s32)117 %0:_(s32) = COPY $vgpr0118 %src:_(s64) = G_ZEXT %0119 %amt:_(s32) = G_CONSTANT i32 16120 %shift:_(s64) = G_ASHR %src, %amt121 %trunc:_(s16) = G_TRUNC %shift122 %foo:_(s16) = G_CONSTANT i16 55123 %keep:_(s32) = G_MERGE_VALUES %trunc, %foo124 $vgpr0 = COPY %keep125...126 127---128name: s16_trunc_s64_lshr_17_nofold129tracksRegLiveness: true130body: |131 bb.0:132 liveins: $vgpr0133 ; CHECK-LABEL: name: s16_trunc_s64_lshr_17_nofold134 ; CHECK: liveins: $vgpr0135 ; CHECK-NEXT: {{ $}}136 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0137 ; CHECK-NEXT: %src:_(s64) = G_ZEXT [[COPY]](s32)138 ; CHECK-NEXT: %amt:_(s32) = G_CONSTANT i32 17139 ; CHECK-NEXT: %shift:_(s64) = G_LSHR %src, %amt(s32)140 ; CHECK-NEXT: %trunc:_(s16) = G_TRUNC %shift(s64)141 ; CHECK-NEXT: %foo:_(s16) = G_CONSTANT i16 55142 ; CHECK-NEXT: %keep:_(s32) = G_MERGE_VALUES %trunc(s16), %foo(s16)143 ; CHECK-NEXT: $vgpr0 = COPY %keep(s32)144 %0:_(s32) = COPY $vgpr0145 %src:_(s64) = G_ZEXT %0146 %amt:_(s32) = G_CONSTANT i32 17147 %shift:_(s64) = G_LSHR %src, %amt148 %trunc:_(s16) = G_TRUNC %shift149 %foo:_(s16) = G_CONSTANT i16 55150 %keep:_(s32) = G_MERGE_VALUES %trunc, %foo151 $vgpr0 = COPY %keep152...153 154---155name: s26_trunc_s64_lshr_6156tracksRegLiveness: true157body: |158 bb.0:159 liveins: $vgpr0160 ; CHECK-LABEL: name: s26_trunc_s64_lshr_6161 ; CHECK: liveins: $vgpr0162 ; CHECK-NEXT: {{ $}}163 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0164 ; CHECK-NEXT: %amt:_(s32) = G_CONSTANT i32 6165 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], %amt(s32)166 ; CHECK-NEXT: %trunc:_(s26) = G_TRUNC [[LSHR]](s32)167 ; CHECK-NEXT: %foo:_(s26) = G_CONSTANT i26 55168 ; CHECK-NEXT: %keep0:_(s26) = G_ADD %trunc, %foo169 ; CHECK-NEXT: %keep1:_(s32) = G_ANYEXT %keep0(s26)170 ; CHECK-NEXT: $vgpr0 = COPY %keep1(s32)171 %0:_(s32) = COPY $vgpr0172 %src:_(s64) = G_ZEXT %0173 %amt:_(s32) = G_CONSTANT i32 6174 %shift:_(s64) = G_LSHR %src, %amt175 %trunc:_(s26) = G_TRUNC %shift176 %foo:_(s26) = G_CONSTANT i26 55177 %keep0:_(s26) = G_ADD %trunc, %foo178 %keep1:_(s32) = G_ANYEXT %keep0179 $vgpr0 = COPY %keep1180...181 182---183name: s26_trunc_s64_lshr_7_nofold184tracksRegLiveness: true185body: |186 bb.0:187 liveins: $vgpr0188 ; CHECK-LABEL: name: s26_trunc_s64_lshr_7_nofold189 ; CHECK: liveins: $vgpr0190 ; CHECK-NEXT: {{ $}}191 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0192 ; CHECK-NEXT: %src:_(s64) = G_ZEXT [[COPY]](s32)193 ; CHECK-NEXT: %amt:_(s32) = G_CONSTANT i32 7194 ; CHECK-NEXT: %shift:_(s64) = G_LSHR %src, %amt(s32)195 ; CHECK-NEXT: %trunc:_(s26) = G_TRUNC %shift(s64)196 ; CHECK-NEXT: %foo:_(s26) = G_CONSTANT i26 55197 ; CHECK-NEXT: %keep0:_(s26) = G_ADD %trunc, %foo198 ; CHECK-NEXT: %keep1:_(s32) = G_ANYEXT %keep0(s26)199 ; CHECK-NEXT: $vgpr0 = COPY %keep1(s32)200 %0:_(s32) = COPY $vgpr0201 %src:_(s64) = G_ZEXT %0202 %amt:_(s32) = G_CONSTANT i32 7203 %shift:_(s64) = G_LSHR %src, %amt204 %trunc:_(s26) = G_TRUNC %shift205 %foo:_(s26) = G_CONSTANT i26 55206 %keep0:_(s26) = G_ADD %trunc, %foo207 %keep1:_(s32) = G_ANYEXT %keep0208 $vgpr0 = COPY %keep1209...210