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