1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -mattr="+wavefrontsize64",+real-true16 -run-pass=instruction-select -verify-machineinstrs -global-isel %s -o - | FileCheck -check-prefixes=GFX11,GFX11-TRUE16 %s 3# RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -mattr="+wavefrontsize64",-real-true16 -run-pass=instruction-select -verify-machineinstrs -global-isel %s -o - | FileCheck -check-prefixes=GFX11,GFX11-FAKE16 %s 4 5--- 6name: fcmp_false_f16 7legalized: true 8regBankSelected: true 9tracksRegLiveness: true 10 11body: | 12 bb.0: 13 liveins: $vgpr0, $vgpr1 14 ; GFX11-TRUE16-LABEL: name: fcmp_false_f16 15 ; GFX11-TRUE16: liveins: $vgpr0, $vgpr1 16 ; GFX11-TRUE16-NEXT: {{ $}} 17 ; GFX11-TRUE16-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 18 ; GFX11-TRUE16-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 19 ; GFX11-TRUE16-NEXT: [[V_CVT_F16_F32_t16_e64_:%[0-9]+]]:vgpr_16 = nofpexcept V_CVT_F16_F32_t16_e64 0, [[COPY]], 0, 0, 0, implicit $mode, implicit $exec 20 ; GFX11-TRUE16-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[V_CVT_F16_F32_t16_e64_]] 21 ; GFX11-TRUE16-NEXT: [[V_CVT_F16_F32_t16_e64_1:%[0-9]+]]:vgpr_16 = nofpexcept V_CVT_F16_F32_t16_e64 0, [[COPY1]], 0, 0, 0, implicit $mode, implicit $exec 22 ; GFX11-TRUE16-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[V_CVT_F16_F32_t16_e64_1]] 23 ; GFX11-TRUE16-NEXT: [[V_CMP_F_F16_fake16_e64_:%[0-9]+]]:sreg_64 = V_CMP_F_F16_fake16_e64 0, [[COPY2]], 0, [[COPY3]], 0, implicit $mode, implicit $exec 24 ; GFX11-TRUE16-NEXT: S_ENDPGM 0, implicit [[V_CMP_F_F16_fake16_e64_]] 25 ; 26 ; GFX11-FAKE16-LABEL: name: fcmp_false_f16 27 ; GFX11-FAKE16: liveins: $vgpr0, $vgpr1 28 ; GFX11-FAKE16-NEXT: {{ $}} 29 ; GFX11-FAKE16-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 30 ; GFX11-FAKE16-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 31 ; GFX11-FAKE16-NEXT: [[V_CVT_F16_F32_fake16_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_F16_F32_fake16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec 32 ; GFX11-FAKE16-NEXT: [[V_CVT_F16_F32_fake16_e64_1:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_F16_F32_fake16_e64 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec 33 ; GFX11-FAKE16-NEXT: [[V_CMP_F_F16_fake16_e64_:%[0-9]+]]:sreg_64 = V_CMP_F_F16_fake16_e64 0, [[V_CVT_F16_F32_fake16_e64_]], 0, [[V_CVT_F16_F32_fake16_e64_1]], 0, implicit $mode, implicit $exec 34 ; GFX11-FAKE16-NEXT: S_ENDPGM 0, implicit [[V_CMP_F_F16_fake16_e64_]] 35 %0:vgpr(s32) = COPY $vgpr0 36 %1:vgpr(s32) = COPY $vgpr1 37 %2:vgpr(s16) = G_FPTRUNC %0 38 %3:vgpr(s16) = G_FPTRUNC %1 39 %4:sgpr(s64) = G_INTRINSIC_CONVERGENT intrinsic(@llvm.amdgcn.fcmp), %2, %3, 0 40 S_ENDPGM 0, implicit %4 41... 42 43--- 44name: fcmp_true_f16 45legalized: true 46regBankSelected: true 47tracksRegLiveness: true 48 49body: | 50 bb.0: 51 liveins: $vgpr0, $vgpr1 52 ; GFX11-TRUE16-LABEL: name: fcmp_true_f16 53 ; GFX11-TRUE16: liveins: $vgpr0, $vgpr1 54 ; GFX11-TRUE16-NEXT: {{ $}} 55 ; GFX11-TRUE16-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 56 ; GFX11-TRUE16-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 57 ; GFX11-TRUE16-NEXT: [[V_CVT_F16_F32_t16_e64_:%[0-9]+]]:vgpr_16 = nofpexcept V_CVT_F16_F32_t16_e64 0, [[COPY]], 0, 0, 0, implicit $mode, implicit $exec 58 ; GFX11-TRUE16-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[V_CVT_F16_F32_t16_e64_]] 59 ; GFX11-TRUE16-NEXT: [[V_CVT_F16_F32_t16_e64_1:%[0-9]+]]:vgpr_16 = nofpexcept V_CVT_F16_F32_t16_e64 0, [[COPY1]], 0, 0, 0, implicit $mode, implicit $exec 60 ; GFX11-TRUE16-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[V_CVT_F16_F32_t16_e64_1]] 61 ; GFX11-TRUE16-NEXT: [[V_CMP_TRU_F16_fake16_e64_:%[0-9]+]]:sreg_64 = V_CMP_TRU_F16_fake16_e64 0, [[COPY2]], 0, [[COPY3]], 0, implicit $mode, implicit $exec 62 ; GFX11-TRUE16-NEXT: S_ENDPGM 0, implicit [[V_CMP_TRU_F16_fake16_e64_]] 63 ; 64 ; GFX11-FAKE16-LABEL: name: fcmp_true_f16 65 ; GFX11-FAKE16: liveins: $vgpr0, $vgpr1 66 ; GFX11-FAKE16-NEXT: {{ $}} 67 ; GFX11-FAKE16-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 68 ; GFX11-FAKE16-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 69 ; GFX11-FAKE16-NEXT: [[V_CVT_F16_F32_fake16_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_F16_F32_fake16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec 70 ; GFX11-FAKE16-NEXT: [[V_CVT_F16_F32_fake16_e64_1:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_F16_F32_fake16_e64 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec 71 ; GFX11-FAKE16-NEXT: [[V_CMP_TRU_F16_fake16_e64_:%[0-9]+]]:sreg_64 = V_CMP_TRU_F16_fake16_e64 0, [[V_CVT_F16_F32_fake16_e64_]], 0, [[V_CVT_F16_F32_fake16_e64_1]], 0, implicit $mode, implicit $exec 72 ; GFX11-FAKE16-NEXT: S_ENDPGM 0, implicit [[V_CMP_TRU_F16_fake16_e64_]] 73 %0:vgpr(s32) = COPY $vgpr0 74 %1:vgpr(s32) = COPY $vgpr1 75 %2:vgpr(s16) = G_FPTRUNC %0 76 %3:vgpr(s16) = G_FPTRUNC %1 77 %4:sgpr(s64) = G_INTRINSIC_CONVERGENT intrinsic(@llvm.amdgcn.fcmp), %2, %3, 15 78 S_ENDPGM 0, implicit %4 79... 80 81--- 82name: fcmp_false_f32 83legalized: true 84regBankSelected: true 85tracksRegLiveness: true 86 87body: | 88 bb.0: 89 liveins: $vgpr0, $vgpr1 90 ; GFX11-LABEL: name: fcmp_false_f32 91 ; GFX11: liveins: $vgpr0, $vgpr1 92 ; GFX11-NEXT: {{ $}} 93 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 94 ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 95 ; GFX11-NEXT: [[V_CMP_F_F32_e64_:%[0-9]+]]:sreg_64 = V_CMP_F_F32_e64 0, [[COPY]], 0, [[COPY1]], 0, implicit $mode, implicit $exec 96 ; GFX11-NEXT: S_ENDPGM 0, implicit [[V_CMP_F_F32_e64_]] 97 %0:vgpr(s32) = COPY $vgpr0 98 %1:vgpr(s32) = COPY $vgpr1 99 %4:sgpr(s64) = G_INTRINSIC_CONVERGENT intrinsic(@llvm.amdgcn.fcmp), %0, %1, 0 100 S_ENDPGM 0, implicit %4 101... 102 103--- 104name: fcmp_true_f32 105legalized: true 106regBankSelected: true 107tracksRegLiveness: true 108 109body: | 110 bb.0: 111 liveins: $vgpr0, $vgpr1 112 ; GFX11-LABEL: name: fcmp_true_f32 113 ; GFX11: liveins: $vgpr0, $vgpr1 114 ; GFX11-NEXT: {{ $}} 115 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 116 ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 117 ; GFX11-NEXT: [[V_CMP_TRU_F32_e64_:%[0-9]+]]:sreg_64 = V_CMP_TRU_F32_e64 0, [[COPY]], 0, [[COPY1]], 0, implicit $mode, implicit $exec 118 ; GFX11-NEXT: S_ENDPGM 0, implicit [[V_CMP_TRU_F32_e64_]] 119 %0:vgpr(s32) = COPY $vgpr0 120 %1:vgpr(s32) = COPY $vgpr1 121 %4:sgpr(s64) = G_INTRINSIC_CONVERGENT intrinsic(@llvm.amdgcn.fcmp), %0, %1, 15 122 S_ENDPGM 0, implicit %4 123... 124 125--- 126name: fcmp_false_f64 127legalized: true 128regBankSelected: true 129tracksRegLiveness: true 130 131body: | 132 bb.0: 133 liveins: $vgpr0, $vgpr1 134 ; GFX11-LABEL: name: fcmp_false_f64 135 ; GFX11: liveins: $vgpr0, $vgpr1 136 ; GFX11-NEXT: {{ $}} 137 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 138 ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 139 ; GFX11-NEXT: [[V_CVT_F64_F32_e64_:%[0-9]+]]:vreg_64 = nofpexcept V_CVT_F64_F32_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec 140 ; GFX11-NEXT: [[V_CVT_F64_F32_e64_1:%[0-9]+]]:vreg_64 = nofpexcept V_CVT_F64_F32_e64 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec 141 ; GFX11-NEXT: [[V_CMP_F_F64_e64_:%[0-9]+]]:sreg_64 = V_CMP_F_F64_e64 0, [[V_CVT_F64_F32_e64_]], 0, [[V_CVT_F64_F32_e64_1]], 0, implicit $mode, implicit $exec 142 ; GFX11-NEXT: S_ENDPGM 0, implicit [[V_CMP_F_F64_e64_]] 143 %0:vgpr(s32) = COPY $vgpr0 144 %1:vgpr(s32) = COPY $vgpr1 145 %2:vgpr(s64) = G_FPEXT %0 146 %3:vgpr(s64) = G_FPEXT %1 147 %4:sgpr(s64) = G_INTRINSIC_CONVERGENT intrinsic(@llvm.amdgcn.fcmp), %2, %3, 0 148 S_ENDPGM 0, implicit %4 149... 150 151--- 152name: fcmp_true_f64 153legalized: true 154regBankSelected: true 155tracksRegLiveness: true 156 157body: | 158 bb.0: 159 liveins: $vgpr0, $vgpr1 160 ; GFX11-LABEL: name: fcmp_true_f64 161 ; GFX11: liveins: $vgpr0, $vgpr1 162 ; GFX11-NEXT: {{ $}} 163 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 164 ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 165 ; GFX11-NEXT: [[V_CVT_F64_F32_e64_:%[0-9]+]]:vreg_64 = nofpexcept V_CVT_F64_F32_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec 166 ; GFX11-NEXT: [[V_CVT_F64_F32_e64_1:%[0-9]+]]:vreg_64 = nofpexcept V_CVT_F64_F32_e64 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec 167 ; GFX11-NEXT: [[V_CMP_TRU_F64_e64_:%[0-9]+]]:sreg_64 = V_CMP_TRU_F64_e64 0, [[V_CVT_F64_F32_e64_]], 0, [[V_CVT_F64_F32_e64_1]], 0, implicit $mode, implicit $exec 168 ; GFX11-NEXT: S_ENDPGM 0, implicit [[V_CMP_TRU_F64_e64_]] 169 %0:vgpr(s32) = COPY $vgpr0 170 %1:vgpr(s32) = COPY $vgpr1 171 %2:vgpr(s64) = G_FPEXT %0 172 %3:vgpr(s64) = G_FPEXT %1 173 %4:sgpr(s64) = G_INTRINSIC_CONVERGENT intrinsic(@llvm.amdgcn.fcmp), %2, %3, 15 174 S_ENDPGM 0, implicit %4 175... 176