1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -march=amdgcn -mcpu=fiji -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck -check-prefix=GFX8 %s 3# RUN: llc -march=amdgcn -mcpu=gfx900 -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck -check-prefix=GFX9 %s 4 5--- 6name: smed3_s16_vvv 7legalized: true 8regBankSelected: true 9 10body: | 11 bb.0: 12 liveins: $vgpr0, $vgpr1, $vgpr2 13 14 ; GFX8-LABEL: name: smed3_s16_vvv 15 ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 16 ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 17 ; GFX8: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 18 ; GFX8: [[V_MAX_I16_e64_:%[0-9]+]]:vgpr_32 = V_MAX_I16_e64 [[COPY]], [[COPY1]], implicit $exec 19 ; GFX8: [[V_MIN_I16_e64_:%[0-9]+]]:vgpr_32 = V_MIN_I16_e64 [[COPY]], [[COPY1]], implicit $exec 20 ; GFX8: [[V_MAX_I16_e64_1:%[0-9]+]]:vgpr_32 = V_MAX_I16_e64 [[V_MIN_I16_e64_]], [[COPY2]], implicit $exec 21 ; GFX8: [[V_MIN_I16_e64_1:%[0-9]+]]:vgpr_32 = V_MIN_I16_e64 [[V_MAX_I16_e64_]], [[V_MAX_I16_e64_1]], implicit $exec 22 ; GFX8: S_ENDPGM 0, implicit [[V_MIN_I16_e64_1]] 23 ; GFX9-LABEL: name: smed3_s16_vvv 24 ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 25 ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 26 ; GFX9: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 27 ; GFX9: [[V_MED3_I16_:%[0-9]+]]:vgpr_32 = V_MED3_I16 0, [[COPY]], 0, [[COPY1]], 0, [[COPY2]], 0, 0, implicit $exec 28 ; GFX9: S_ENDPGM 0, implicit [[V_MED3_I16_]] 29 %0:vgpr(s32) = COPY $vgpr0 30 %1:vgpr(s32) = COPY $vgpr1 31 %2:vgpr(s32) = COPY $vgpr2 32 %3:vgpr(s16) = G_TRUNC %0 33 %4:vgpr(s16) = G_TRUNC %1 34 %5:vgpr(s16) = G_TRUNC %2 35 36 %6:vgpr(s16) = G_SMAX %3, %4 37 %7:vgpr(s16) = G_SMIN %3, %4 38 %8:vgpr(s16) = G_SMAX %7, %5 39 %9:vgpr(s16) = G_SMIN %6, %8 40 41 S_ENDPGM 0, implicit %9 42... 43 44--- 45name: smed3_s16_vvv_multiuse0 46legalized: true 47regBankSelected: true 48 49body: | 50 bb.0: 51 liveins: $vgpr0, $vgpr1, $vgpr2 52 53 ; GFX8-LABEL: name: smed3_s16_vvv_multiuse0 54 ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 55 ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 56 ; GFX8: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 57 ; GFX8: [[V_MAX_I16_e64_:%[0-9]+]]:vgpr_32 = V_MAX_I16_e64 [[COPY]], [[COPY1]], implicit $exec 58 ; GFX8: [[V_MIN_I16_e64_:%[0-9]+]]:vgpr_32 = V_MIN_I16_e64 [[COPY]], [[COPY1]], implicit $exec 59 ; GFX8: [[V_MAX_I16_e64_1:%[0-9]+]]:vgpr_32 = V_MAX_I16_e64 [[V_MIN_I16_e64_]], [[COPY2]], implicit $exec 60 ; GFX8: [[V_MIN_I16_e64_1:%[0-9]+]]:vgpr_32 = V_MIN_I16_e64 [[V_MAX_I16_e64_]], [[V_MAX_I16_e64_1]], implicit $exec 61 ; GFX8: S_ENDPGM 0, implicit [[V_MIN_I16_e64_1]], implicit [[V_MAX_I16_e64_]] 62 ; GFX9-LABEL: name: smed3_s16_vvv_multiuse0 63 ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 64 ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 65 ; GFX9: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 66 ; GFX9: [[V_MAX_I16_e64_:%[0-9]+]]:vgpr_32 = V_MAX_I16_e64 [[COPY]], [[COPY1]], implicit $exec 67 ; GFX9: [[V_MIN_I16_e64_:%[0-9]+]]:vgpr_32 = V_MIN_I16_e64 [[COPY]], [[COPY1]], implicit $exec 68 ; GFX9: [[V_MAX_I16_e64_1:%[0-9]+]]:vgpr_32 = V_MAX_I16_e64 [[V_MIN_I16_e64_]], [[COPY2]], implicit $exec 69 ; GFX9: [[V_MIN_I16_e64_1:%[0-9]+]]:vgpr_32 = V_MIN_I16_e64 [[V_MAX_I16_e64_]], [[V_MAX_I16_e64_1]], implicit $exec 70 ; GFX9: S_ENDPGM 0, implicit [[V_MIN_I16_e64_1]], implicit [[V_MAX_I16_e64_]] 71 %0:vgpr(s32) = COPY $vgpr0 72 %1:vgpr(s32) = COPY $vgpr1 73 %2:vgpr(s32) = COPY $vgpr2 74 %3:vgpr(s16) = G_TRUNC %0 75 %4:vgpr(s16) = G_TRUNC %1 76 %5:vgpr(s16) = G_TRUNC %2 77 78 %6:vgpr(s16) = G_SMAX %3, %4 79 %7:vgpr(s16) = G_SMIN %3, %4 80 %8:vgpr(s16) = G_SMAX %7, %5 81 %9:vgpr(s16) = G_SMIN %6, %8 82 83 S_ENDPGM 0, implicit %9, implicit %6 84... 85 86--- 87name: smed3_s16_vvv_multiuse1 88legalized: true 89regBankSelected: true 90 91body: | 92 bb.0: 93 liveins: $vgpr0, $vgpr1, $vgpr2 94 95 ; GFX8-LABEL: name: smed3_s16_vvv_multiuse1 96 ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 97 ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 98 ; GFX8: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 99 ; GFX8: [[V_MAX_I16_e64_:%[0-9]+]]:vgpr_32 = V_MAX_I16_e64 [[COPY]], [[COPY1]], implicit $exec 100 ; GFX8: [[V_MIN_I16_e64_:%[0-9]+]]:vgpr_32 = V_MIN_I16_e64 [[COPY]], [[COPY1]], implicit $exec 101 ; GFX8: [[V_MAX_I16_e64_1:%[0-9]+]]:vgpr_32 = V_MAX_I16_e64 [[V_MIN_I16_e64_]], [[COPY2]], implicit $exec 102 ; GFX8: [[V_MIN_I16_e64_1:%[0-9]+]]:vgpr_32 = V_MIN_I16_e64 [[V_MAX_I16_e64_]], [[V_MAX_I16_e64_1]], implicit $exec 103 ; GFX8: S_ENDPGM 0, implicit [[V_MIN_I16_e64_1]], implicit [[V_MIN_I16_e64_]] 104 ; GFX9-LABEL: name: smed3_s16_vvv_multiuse1 105 ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 106 ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 107 ; GFX9: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 108 ; GFX9: [[V_MAX_I16_e64_:%[0-9]+]]:vgpr_32 = V_MAX_I16_e64 [[COPY]], [[COPY1]], implicit $exec 109 ; GFX9: [[V_MIN_I16_e64_:%[0-9]+]]:vgpr_32 = V_MIN_I16_e64 [[COPY]], [[COPY1]], implicit $exec 110 ; GFX9: [[V_MAX_I16_e64_1:%[0-9]+]]:vgpr_32 = V_MAX_I16_e64 [[V_MIN_I16_e64_]], [[COPY2]], implicit $exec 111 ; GFX9: [[V_MIN_I16_e64_1:%[0-9]+]]:vgpr_32 = V_MIN_I16_e64 [[V_MAX_I16_e64_]], [[V_MAX_I16_e64_1]], implicit $exec 112 ; GFX9: S_ENDPGM 0, implicit [[V_MIN_I16_e64_1]], implicit [[V_MIN_I16_e64_]] 113 %0:vgpr(s32) = COPY $vgpr0 114 %1:vgpr(s32) = COPY $vgpr1 115 %2:vgpr(s32) = COPY $vgpr2 116 %3:vgpr(s16) = G_TRUNC %0 117 %4:vgpr(s16) = G_TRUNC %1 118 %5:vgpr(s16) = G_TRUNC %2 119 120 %6:vgpr(s16) = G_SMAX %3, %4 121 %7:vgpr(s16) = G_SMIN %3, %4 122 %8:vgpr(s16) = G_SMAX %7, %5 123 %9:vgpr(s16) = G_SMIN %6, %8 124 125 S_ENDPGM 0, implicit %9, implicit %7 126... 127 128--- 129name: smed3_s16_vvv_multiuse2 130legalized: true 131regBankSelected: true 132 133body: | 134 bb.0: 135 liveins: $vgpr0, $vgpr1, $vgpr2 136 137 ; GFX8-LABEL: name: smed3_s16_vvv_multiuse2 138 ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 139 ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 140 ; GFX8: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 141 ; GFX8: [[V_MAX_I16_e64_:%[0-9]+]]:vgpr_32 = V_MAX_I16_e64 [[COPY]], [[COPY1]], implicit $exec 142 ; GFX8: [[V_MIN_I16_e64_:%[0-9]+]]:vgpr_32 = V_MIN_I16_e64 [[COPY]], [[COPY1]], implicit $exec 143 ; GFX8: [[V_MAX_I16_e64_1:%[0-9]+]]:vgpr_32 = V_MAX_I16_e64 [[V_MIN_I16_e64_]], [[COPY2]], implicit $exec 144 ; GFX8: [[V_MIN_I16_e64_1:%[0-9]+]]:vgpr_32 = V_MIN_I16_e64 [[V_MAX_I16_e64_]], [[V_MAX_I16_e64_1]], implicit $exec 145 ; GFX8: S_ENDPGM 0, implicit [[V_MIN_I16_e64_1]], implicit [[V_MAX_I16_e64_1]] 146 ; GFX9-LABEL: name: smed3_s16_vvv_multiuse2 147 ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 148 ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 149 ; GFX9: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 150 ; GFX9: [[V_MAX_I16_e64_:%[0-9]+]]:vgpr_32 = V_MAX_I16_e64 [[COPY]], [[COPY1]], implicit $exec 151 ; GFX9: [[V_MIN_I16_e64_:%[0-9]+]]:vgpr_32 = V_MIN_I16_e64 [[COPY]], [[COPY1]], implicit $exec 152 ; GFX9: [[V_MAX_I16_e64_1:%[0-9]+]]:vgpr_32 = V_MAX_I16_e64 [[V_MIN_I16_e64_]], [[COPY2]], implicit $exec 153 ; GFX9: [[V_MIN_I16_e64_1:%[0-9]+]]:vgpr_32 = V_MIN_I16_e64 [[V_MAX_I16_e64_]], [[V_MAX_I16_e64_1]], implicit $exec 154 ; GFX9: S_ENDPGM 0, implicit [[V_MIN_I16_e64_1]], implicit [[V_MAX_I16_e64_1]] 155 %0:vgpr(s32) = COPY $vgpr0 156 %1:vgpr(s32) = COPY $vgpr1 157 %2:vgpr(s32) = COPY $vgpr2 158 %3:vgpr(s16) = G_TRUNC %0 159 %4:vgpr(s16) = G_TRUNC %1 160 %5:vgpr(s16) = G_TRUNC %2 161 162 %6:vgpr(s16) = G_SMAX %3, %4 163 %7:vgpr(s16) = G_SMIN %3, %4 164 %8:vgpr(s16) = G_SMAX %7, %5 165 %9:vgpr(s16) = G_SMIN %6, %8 166 167 S_ENDPGM 0, implicit %9, implicit %8 168... 169