1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=hawaii -run-pass=instruction-select -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX7 %s 3 4--- 5 6name: fmaxnum_ieee_f32_f64_ieee_mode_on 7legalized: true 8regBankSelected: true 9machineFunctionInfo: 10 mode: 11 ieee: true 12 13body: | 14 bb.0: 15 liveins: $sgpr0, $vgpr0, $vgpr1, $vgpr3_vgpr4, $sgpr10_sgpr11, $vgpr10_vgpr11, $vgpr12_vgpr13 16 ; GFX7-LABEL: name: fmaxnum_ieee_f32_f64_ieee_mode_on 17 ; GFX7: liveins: $sgpr0, $vgpr0, $vgpr1, $vgpr3_vgpr4, $sgpr10_sgpr11, $vgpr10_vgpr11, $vgpr12_vgpr13 18 ; GFX7-NEXT: {{ $}} 19 ; GFX7-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 20 ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0 21 ; GFX7-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr1 22 ; GFX7-NEXT: [[COPY3:%[0-9]+]]:vreg_64 = COPY $vgpr3_vgpr4 23 ; GFX7-NEXT: [[COPY4:%[0-9]+]]:sreg_64 = COPY $sgpr10_sgpr11 24 ; GFX7-NEXT: [[COPY5:%[0-9]+]]:vreg_64 = COPY $vgpr10_vgpr11 25 ; GFX7-NEXT: [[COPY6:%[0-9]+]]:vreg_64 = COPY $vgpr12_vgpr13 26 ; GFX7-NEXT: %7:vgpr_32 = nofpexcept V_MAX_F32_e64 0, [[COPY1]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec 27 ; GFX7-NEXT: %8:vgpr_32 = nofpexcept V_MAX_F32_e64 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec 28 ; GFX7-NEXT: %9:vgpr_32 = nofpexcept V_MAX_F32_e64 0, [[COPY1]], 0, [[COPY2]], 0, 0, implicit $mode, implicit $exec 29 ; GFX7-NEXT: FLAT_STORE_DWORD [[COPY3]], %7, 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1) 30 ; GFX7-NEXT: FLAT_STORE_DWORD [[COPY3]], %8, 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1) 31 ; GFX7-NEXT: FLAT_STORE_DWORD [[COPY3]], %9, 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1) 32 ; GFX7-NEXT: %10:vreg_64 = nofpexcept V_MAX_F64_e64 0, [[COPY4]], 0, [[COPY5]], 0, 0, implicit $mode, implicit $exec 33 ; GFX7-NEXT: %11:vreg_64 = nofpexcept V_MAX_F64_e64 0, [[COPY5]], 0, [[COPY4]], 0, 0, implicit $mode, implicit $exec 34 ; GFX7-NEXT: %12:vreg_64 = nofpexcept V_MAX_F64_e64 0, [[COPY5]], 0, [[COPY6]], 0, 0, implicit $mode, implicit $exec 35 ; GFX7-NEXT: S_ENDPGM 0, implicit %10, implicit %11, implicit %12 36 %0:sgpr(s32) = COPY $sgpr0 37 %1:vgpr(s32) = COPY $vgpr0 38 %2:vgpr(s32) = COPY $vgpr1 39 %3:vgpr(p1) = COPY $vgpr3_vgpr4 40 41 %10:sgpr(s64) = COPY $sgpr10_sgpr11 42 %11:vgpr(s64) = COPY $vgpr10_vgpr11 43 %12:vgpr(s64) = COPY $vgpr12_vgpr13 44 45 ; maxnum_ieee vs 46 %4:vgpr(s32) = G_FMAXNUM_IEEE %1, %0 47 48 ; maxnum_ieee sv 49 %5:vgpr(s32) = G_FMAXNUM_IEEE %0, %1 50 51 ; maxnum_ieee vv 52 %6:vgpr(s32) = G_FMAXNUM_IEEE %1, %2 53 54 G_STORE %4, %3 :: (store (s32), addrspace 1) 55 G_STORE %5, %3 :: (store (s32), addrspace 1) 56 G_STORE %6, %3 :: (store (s32), addrspace 1) 57 58 ; 64-bit 59 60 ; maxnum_ieee vs 61 %14:vgpr(s64) = G_FMAXNUM_IEEE %10, %11 62 63 ; maxnum_ieee sv 64 %15:vgpr(s64) = G_FMAXNUM_IEEE %11, %10 65 66 ; maxnum_ieee vv 67 %16:vgpr(s64) = G_FMAXNUM_IEEE %11, %12 68 69 S_ENDPGM 0, implicit %14, implicit %15, implicit %16 70... 71 72 73# FIXME: Ideally this would fail to select with ieee mode disabled 74--- 75 76name: fmaxnum_ieee_f32_f64_ieee_mode_off 77legalized: true 78regBankSelected: true 79machineFunctionInfo: 80 mode: 81 ieee: false 82 83body: | 84 bb.0: 85 liveins: $sgpr0, $vgpr0, $vgpr1, $vgpr3_vgpr4, $sgpr10_sgpr11, $vgpr10_vgpr11, $vgpr12_vgpr13 86 ; GFX7-LABEL: name: fmaxnum_ieee_f32_f64_ieee_mode_off 87 ; GFX7: liveins: $sgpr0, $vgpr0, $vgpr1, $vgpr3_vgpr4, $sgpr10_sgpr11, $vgpr10_vgpr11, $vgpr12_vgpr13 88 ; GFX7-NEXT: {{ $}} 89 ; GFX7-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 90 ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0 91 ; GFX7-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr1 92 ; GFX7-NEXT: [[COPY3:%[0-9]+]]:vreg_64 = COPY $vgpr3_vgpr4 93 ; GFX7-NEXT: [[COPY4:%[0-9]+]]:sreg_64 = COPY $sgpr10_sgpr11 94 ; GFX7-NEXT: [[COPY5:%[0-9]+]]:vreg_64 = COPY $vgpr10_vgpr11 95 ; GFX7-NEXT: [[COPY6:%[0-9]+]]:vreg_64 = COPY $vgpr12_vgpr13 96 ; GFX7-NEXT: %7:vgpr_32 = nofpexcept V_MAX_F32_e64 0, [[COPY1]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec 97 ; GFX7-NEXT: %8:vgpr_32 = nofpexcept V_MAX_F32_e64 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec 98 ; GFX7-NEXT: %9:vgpr_32 = nofpexcept V_MAX_F32_e64 0, [[COPY1]], 0, [[COPY2]], 0, 0, implicit $mode, implicit $exec 99 ; GFX7-NEXT: FLAT_STORE_DWORD [[COPY3]], %7, 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1) 100 ; GFX7-NEXT: FLAT_STORE_DWORD [[COPY3]], %8, 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1) 101 ; GFX7-NEXT: FLAT_STORE_DWORD [[COPY3]], %9, 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1) 102 ; GFX7-NEXT: %10:vreg_64 = nofpexcept V_MAX_F64_e64 0, [[COPY4]], 0, [[COPY5]], 0, 0, implicit $mode, implicit $exec 103 ; GFX7-NEXT: %11:vreg_64 = nofpexcept V_MAX_F64_e64 0, [[COPY5]], 0, [[COPY4]], 0, 0, implicit $mode, implicit $exec 104 ; GFX7-NEXT: %12:vreg_64 = nofpexcept V_MAX_F64_e64 0, [[COPY5]], 0, [[COPY6]], 0, 0, implicit $mode, implicit $exec 105 ; GFX7-NEXT: S_ENDPGM 0, implicit %10, implicit %11, implicit %12 106 %0:sgpr(s32) = COPY $sgpr0 107 %1:vgpr(s32) = COPY $vgpr0 108 %2:vgpr(s32) = COPY $vgpr1 109 %3:vgpr(p1) = COPY $vgpr3_vgpr4 110 111 %10:sgpr(s64) = COPY $sgpr10_sgpr11 112 %11:vgpr(s64) = COPY $vgpr10_vgpr11 113 %12:vgpr(s64) = COPY $vgpr12_vgpr13 114 115 ; maxnum_ieee vs 116 %4:vgpr(s32) = G_FMAXNUM_IEEE %1, %0 117 118 ; maxnum_ieee sv 119 %5:vgpr(s32) = G_FMAXNUM_IEEE %0, %1 120 121 ; maxnum_ieee vv 122 %6:vgpr(s32) = G_FMAXNUM_IEEE %1, %2 123 124 G_STORE %4, %3 :: (store (s32), addrspace 1) 125 G_STORE %5, %3 :: (store (s32), addrspace 1) 126 G_STORE %6, %3 :: (store (s32), addrspace 1) 127 128 ; 64-bit 129 130 ; maxnum_ieee vs 131 %14:vgpr(s64) = G_FMAXNUM_IEEE %10, %11 132 133 ; maxnum_ieee sv 134 %15:vgpr(s64) = G_FMAXNUM_IEEE %11, %10 135 136 ; maxnum_ieee vv 137 %16:vgpr(s64) = G_FMAXNUM_IEEE %11, %12 138 139 S_ENDPGM 0, implicit %14, implicit %15, implicit %16 140... 141