[AMDGPU] Mark AGPR tuple implicit in the first instr of AGPR spills. (#115285)
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / fp-min-max-image-atomics.ll
blob71b0abe183396a8bfbc99347e77e4931eb5041af
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=amdgcn -mcpu=verde -verify-machineinstrs | FileCheck %s -check-prefix=SI
3 ; RUN: llc < %s -mtriple=amdgcn -mcpu=hawaii -verify-machineinstrs | FileCheck %s  -check-prefix=GFX7
4 ; RUN: llc < %s -mtriple=amdgcn -mcpu=gfx1010 -verify-machineinstrs | FileCheck %s -check-prefix=GFX10
5 ; RUN: llc < %s -mtriple=amdgcn -mcpu=gfx1030 -verify-machineinstrs | FileCheck %s -check-prefix=GFX1030
6 ; RUN: not --crash llc < %s -mtriple=amdgcn -mcpu=gfx1100 -verify-machineinstrs 2>&1 | FileCheck %s -check-prefix=GFX11-ERR
8 ; RUN: llc < %s -global-isel -mtriple=amdgcn -mcpu=verde -verify-machineinstrs | FileCheck %s -check-prefix=G_SI
9 ; RUN: llc < %s -global-isel -mtriple=amdgcn -mcpu=hawaii -verify-machineinstrs | FileCheck %s  -check-prefix=G_GFX7
10 ; RUN: llc < %s -global-isel -mtriple=amdgcn -mcpu=gfx1010 -verify-machineinstrs | FileCheck %s -check-prefix=G_GFX10
11 ; RUN: llc < %s -global-isel -mtriple=amdgcn -mcpu=gfx1030 -verify-machineinstrs | FileCheck %s -check-prefix=G_GFX1030
12 ; RUN: not --crash llc < %s -global-isel -mtriple=amdgcn -mcpu=gfx1100 -verify-machineinstrs 2>&1 | FileCheck %s -check-prefix=G_GFX11-ERR
14 ; GFX11-ERR: LLVM ERROR: Cannot select: intrinsic %llvm.amdgcn.image.atomic.f
15 ; G_GFX11-ERR: LLVM ERROR: cannot select: {{.*}} = G_AMDGPU_INTRIN_IMAGE_LOAD intrinsic(@llvm.amdgcn.image.atomic.f
17 declare float @llvm.amdgcn.image.atomic.fmin.1d.f32.f32(float, i32, <8 x i32>, i32, i32)
18 declare float @llvm.amdgcn.image.atomic.fmax.1d.f32.f32(float, i32, <8 x i32>, i32, i32)
21 define amdgpu_ps float @atomic_fmin_1d(<8 x i32> inreg %rsrc, float %data, i32 %s) {
22 ; SI-LABEL: atomic_fmin_1d:
23 ; SI:       ; %bb.0: ; %main_body
24 ; SI-NEXT:    image_atomic_fmin v0, v1, s[0:7] dmask:0x1 unorm glc
25 ; SI-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
26 ; SI-NEXT:    ; return to shader part epilog
28 ; GFX7-LABEL: atomic_fmin_1d:
29 ; GFX7:       ; %bb.0: ; %main_body
30 ; GFX7-NEXT:    image_atomic_fmin v0, v1, s[0:7] dmask:0x1 unorm glc
31 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
32 ; GFX7-NEXT:    ; return to shader part epilog
34 ; GFX10-LABEL: atomic_fmin_1d:
35 ; GFX10:       ; %bb.0: ; %main_body
36 ; GFX10-NEXT:    image_atomic_fmin v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc
37 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
38 ; GFX10-NEXT:    ; return to shader part epilog
40 ; GFX1030-LABEL: atomic_fmin_1d:
41 ; GFX1030:       ; %bb.0: ; %main_body
42 ; GFX1030-NEXT:    image_atomic_fmin v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc
43 ; GFX1030-NEXT:    s_waitcnt vmcnt(0)
44 ; GFX1030-NEXT:    ; return to shader part epilog
46 ; G_SI-LABEL: atomic_fmin_1d:
47 ; G_SI:       ; %bb.0: ; %main_body
48 ; G_SI-NEXT:    image_atomic_fmin v0, v1, s[0:7] dmask:0x1 unorm glc
49 ; G_SI-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
50 ; G_SI-NEXT:    ; return to shader part epilog
52 ; G_GFX7-LABEL: atomic_fmin_1d:
53 ; G_GFX7:       ; %bb.0: ; %main_body
54 ; G_GFX7-NEXT:    image_atomic_fmin v0, v1, s[0:7] dmask:0x1 unorm glc
55 ; G_GFX7-NEXT:    s_waitcnt vmcnt(0)
56 ; G_GFX7-NEXT:    ; return to shader part epilog
58 ; G_GFX10-LABEL: atomic_fmin_1d:
59 ; G_GFX10:       ; %bb.0: ; %main_body
60 ; G_GFX10-NEXT:    image_atomic_fmin v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc
61 ; G_GFX10-NEXT:    s_waitcnt vmcnt(0)
62 ; G_GFX10-NEXT:    ; return to shader part epilog
64 ; G_GFX1030-LABEL: atomic_fmin_1d:
65 ; G_GFX1030:       ; %bb.0: ; %main_body
66 ; G_GFX1030-NEXT:    image_atomic_fmin v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc
67 ; G_GFX1030-NEXT:    s_waitcnt vmcnt(0)
68 ; G_GFX1030-NEXT:    ; return to shader part epilog
69 main_body:
70   %v = call float @llvm.amdgcn.image.atomic.fmin.1d.f32.f32(float %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)
71   ret float %v
74 define amdgpu_ps float @atomic_fmax_1d(<8 x i32> inreg %rsrc, float %data, i32 %s) {
75 ; SI-LABEL: atomic_fmax_1d:
76 ; SI:       ; %bb.0: ; %main_body
77 ; SI-NEXT:    image_atomic_fmax v0, v1, s[0:7] dmask:0x1 unorm glc
78 ; SI-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
79 ; SI-NEXT:    ; return to shader part epilog
81 ; GFX7-LABEL: atomic_fmax_1d:
82 ; GFX7:       ; %bb.0: ; %main_body
83 ; GFX7-NEXT:    image_atomic_fmax v0, v1, s[0:7] dmask:0x1 unorm glc
84 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
85 ; GFX7-NEXT:    ; return to shader part epilog
87 ; GFX10-LABEL: atomic_fmax_1d:
88 ; GFX10:       ; %bb.0: ; %main_body
89 ; GFX10-NEXT:    image_atomic_fmax v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc
90 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
91 ; GFX10-NEXT:    ; return to shader part epilog
93 ; GFX1030-LABEL: atomic_fmax_1d:
94 ; GFX1030:       ; %bb.0: ; %main_body
95 ; GFX1030-NEXT:    image_atomic_fmax v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc
96 ; GFX1030-NEXT:    s_waitcnt vmcnt(0)
97 ; GFX1030-NEXT:    ; return to shader part epilog
99 ; G_SI-LABEL: atomic_fmax_1d:
100 ; G_SI:       ; %bb.0: ; %main_body
101 ; G_SI-NEXT:    image_atomic_fmax v0, v1, s[0:7] dmask:0x1 unorm glc
102 ; G_SI-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
103 ; G_SI-NEXT:    ; return to shader part epilog
105 ; G_GFX7-LABEL: atomic_fmax_1d:
106 ; G_GFX7:       ; %bb.0: ; %main_body
107 ; G_GFX7-NEXT:    image_atomic_fmax v0, v1, s[0:7] dmask:0x1 unorm glc
108 ; G_GFX7-NEXT:    s_waitcnt vmcnt(0)
109 ; G_GFX7-NEXT:    ; return to shader part epilog
111 ; G_GFX10-LABEL: atomic_fmax_1d:
112 ; G_GFX10:       ; %bb.0: ; %main_body
113 ; G_GFX10-NEXT:    image_atomic_fmax v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc
114 ; G_GFX10-NEXT:    s_waitcnt vmcnt(0)
115 ; G_GFX10-NEXT:    ; return to shader part epilog
117 ; G_GFX1030-LABEL: atomic_fmax_1d:
118 ; G_GFX1030:       ; %bb.0: ; %main_body
119 ; G_GFX1030-NEXT:    image_atomic_fmax v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc
120 ; G_GFX1030-NEXT:    s_waitcnt vmcnt(0)
121 ; G_GFX1030-NEXT:    ; return to shader part epilog
122 main_body:
123   %v = call float @llvm.amdgcn.image.atomic.fmax.1d.f32.f32(float %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)
124   ret float %v