|
1 | 1 | ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
2 |
| -; RUN: llc -mtriple=amdgcn -mcpu=gfx1200 -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX12,SDAG %s |
3 |
| -; RUN: llc -global-isel -mtriple=amdgcn -mcpu=gfx1200 -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX12,GISEL %s |
| 2 | +; RUN: llc -mtriple=amdgcn -mcpu=gfx1200 -mattr=+real-true16 -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX12,SDAG,SDAG-TRUE16 %s |
| 3 | +; RUN: llc -mtriple=amdgcn -mcpu=gfx1200 -mattr=-real-true16 -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX12,SDAG,SDAG-FAKE16 %s |
| 4 | +; RUN: llc -global-isel -mtriple=amdgcn -mcpu=gfx1200 -mattr=+real-true16 -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX12,GISEL,GISEL-TRUE16 %s |
| 5 | +; RUN: llc -global-isel -mtriple=amdgcn -mcpu=gfx1200 -mattr=-real-true16 -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX12,GISEL,GISEL-FAKE16 %s |
4 | 6 |
|
5 | 7 | define amdgpu_ps float @test_minmax_f32(float %a, float %b, float %c) {
|
6 | 8 | ; GFX12-LABEL: test_minmax_f32:
|
@@ -72,30 +74,84 @@ define amdgpu_ps float @test_maxmin_commuted_f32(float %a, float %b, float %c) {
|
72 | 74 | }
|
73 | 75 |
|
74 | 76 | define amdgpu_ps half @test_minmax_f16(half %a, half %b, half %c) {
|
75 |
| -; GFX12-LABEL: test_minmax_f16: |
76 |
| -; GFX12: ; %bb.0: |
77 |
| -; GFX12-NEXT: v_maximumminimum_f16 v0, v0, v1, v2 |
78 |
| -; GFX12-NEXT: ; return to shader part epilog |
| 77 | +; SDAG-TRUE16-LABEL: test_minmax_f16: |
| 78 | +; SDAG-TRUE16: ; %bb.0: |
| 79 | +; SDAG-TRUE16-NEXT: v_mov_b16_e32 v0.h, v1.l |
| 80 | +; SDAG-TRUE16-NEXT: v_mov_b16_e32 v1.l, v2.l |
| 81 | +; SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) |
| 82 | +; SDAG-TRUE16-NEXT: v_maximumminimum_f16 v0.l, v0.l, v0.h, v1.l |
| 83 | +; SDAG-TRUE16-NEXT: ; return to shader part epilog |
| 84 | +; |
| 85 | +; SDAG-FAKE16-LABEL: test_minmax_f16: |
| 86 | +; SDAG-FAKE16: ; %bb.0: |
| 87 | +; SDAG-FAKE16-NEXT: v_maximumminimum_f16 v0, v0, v1, v2 |
| 88 | +; SDAG-FAKE16-NEXT: ; return to shader part epilog |
| 89 | +; |
| 90 | +; GISEL-TRUE16-LABEL: test_minmax_f16: |
| 91 | +; GISEL-TRUE16: ; %bb.0: |
| 92 | +; GISEL-TRUE16-NEXT: v_maximumminimum_f16 v0.l, v0.l, v1.l, v2.l |
| 93 | +; GISEL-TRUE16-NEXT: ; return to shader part epilog |
| 94 | +; |
| 95 | +; GISEL-FAKE16-LABEL: test_minmax_f16: |
| 96 | +; GISEL-FAKE16: ; %bb.0: |
| 97 | +; GISEL-FAKE16-NEXT: v_maximumminimum_f16 v0, v0, v1, v2 |
| 98 | +; GISEL-FAKE16-NEXT: ; return to shader part epilog |
79 | 99 | %max = call half @llvm.maximum.f16(half %a, half %b)
|
80 | 100 | %minmax = call half @llvm.minimum.f16(half %max, half %c)
|
81 | 101 | ret half %minmax
|
82 | 102 | }
|
83 | 103 |
|
84 | 104 | define amdgpu_ps half @test_minmax_commuted_f16(half %a, half %b, half %c) {
|
85 |
| -; GFX12-LABEL: test_minmax_commuted_f16: |
86 |
| -; GFX12: ; %bb.0: |
87 |
| -; GFX12-NEXT: v_maximumminimum_f16 v0, v0, v1, v2 |
88 |
| -; GFX12-NEXT: ; return to shader part epilog |
| 105 | +; SDAG-TRUE16-LABEL: test_minmax_commuted_f16: |
| 106 | +; SDAG-TRUE16: ; %bb.0: |
| 107 | +; SDAG-TRUE16-NEXT: v_mov_b16_e32 v0.h, v1.l |
| 108 | +; SDAG-TRUE16-NEXT: v_mov_b16_e32 v1.l, v2.l |
| 109 | +; SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) |
| 110 | +; SDAG-TRUE16-NEXT: v_maximumminimum_f16 v0.l, v0.l, v0.h, v1.l |
| 111 | +; SDAG-TRUE16-NEXT: ; return to shader part epilog |
| 112 | +; |
| 113 | +; SDAG-FAKE16-LABEL: test_minmax_commuted_f16: |
| 114 | +; SDAG-FAKE16: ; %bb.0: |
| 115 | +; SDAG-FAKE16-NEXT: v_maximumminimum_f16 v0, v0, v1, v2 |
| 116 | +; SDAG-FAKE16-NEXT: ; return to shader part epilog |
| 117 | +; |
| 118 | +; GISEL-TRUE16-LABEL: test_minmax_commuted_f16: |
| 119 | +; GISEL-TRUE16: ; %bb.0: |
| 120 | +; GISEL-TRUE16-NEXT: v_maximumminimum_f16 v0.l, v0.l, v1.l, v2.l |
| 121 | +; GISEL-TRUE16-NEXT: ; return to shader part epilog |
| 122 | +; |
| 123 | +; GISEL-FAKE16-LABEL: test_minmax_commuted_f16: |
| 124 | +; GISEL-FAKE16: ; %bb.0: |
| 125 | +; GISEL-FAKE16-NEXT: v_maximumminimum_f16 v0, v0, v1, v2 |
| 126 | +; GISEL-FAKE16-NEXT: ; return to shader part epilog |
89 | 127 | %max = call half @llvm.maximum.f16(half %a, half %b)
|
90 | 128 | %minmax = call half @llvm.minimum.f16(half %c, half %max)
|
91 | 129 | ret half %minmax
|
92 | 130 | }
|
93 | 131 |
|
94 | 132 | define amdgpu_ps half @test_maxmin_commuted_f16(half %a, half %b, half %c) {
|
95 |
| -; GFX12-LABEL: test_maxmin_commuted_f16: |
96 |
| -; GFX12: ; %bb.0: |
97 |
| -; GFX12-NEXT: v_minimummaximum_f16 v0, v0, v1, v2 |
98 |
| -; GFX12-NEXT: ; return to shader part epilog |
| 133 | +; SDAG-TRUE16-LABEL: test_maxmin_commuted_f16: |
| 134 | +; SDAG-TRUE16: ; %bb.0: |
| 135 | +; SDAG-TRUE16-NEXT: v_mov_b16_e32 v0.h, v1.l |
| 136 | +; SDAG-TRUE16-NEXT: v_mov_b16_e32 v1.l, v2.l |
| 137 | +; SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) |
| 138 | +; SDAG-TRUE16-NEXT: v_minimummaximum_f16 v0.l, v0.l, v0.h, v1.l |
| 139 | +; SDAG-TRUE16-NEXT: ; return to shader part epilog |
| 140 | +; |
| 141 | +; SDAG-FAKE16-LABEL: test_maxmin_commuted_f16: |
| 142 | +; SDAG-FAKE16: ; %bb.0: |
| 143 | +; SDAG-FAKE16-NEXT: v_minimummaximum_f16 v0, v0, v1, v2 |
| 144 | +; SDAG-FAKE16-NEXT: ; return to shader part epilog |
| 145 | +; |
| 146 | +; GISEL-TRUE16-LABEL: test_maxmin_commuted_f16: |
| 147 | +; GISEL-TRUE16: ; %bb.0: |
| 148 | +; GISEL-TRUE16-NEXT: v_minimummaximum_f16 v0.l, v0.l, v1.l, v2.l |
| 149 | +; GISEL-TRUE16-NEXT: ; return to shader part epilog |
| 150 | +; |
| 151 | +; GISEL-FAKE16-LABEL: test_maxmin_commuted_f16: |
| 152 | +; GISEL-FAKE16: ; %bb.0: |
| 153 | +; GISEL-FAKE16-NEXT: v_minimummaximum_f16 v0, v0, v1, v2 |
| 154 | +; GISEL-FAKE16-NEXT: ; return to shader part epilog |
99 | 155 | %min = call half @llvm.minimum.f16(half %a, half %b)
|
100 | 156 | %maxmin = call half @llvm.maximum.f16(half %c, half %min)
|
101 | 157 | ret half %maxmin
|
|
0 commit comments