[MachineScheduler] Fix physreg dependencies of ExitSU (#123541)
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / llvm.amdgcn.struct.ptr.buffer.load.format.d16.ll
blob39df6ec679e8841b4ee15bc354f6a7407bb5be1b
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2 ; RUN: llc < %s -mtriple=amdgcn -mcpu=tonga -verify-machineinstrs -show-mc-encoding | FileCheck -enable-var-scope -check-prefixes=UNPACKED %s
3 ; RUN: llc < %s -mtriple=amdgcn -mcpu=gfx810 -verify-machineinstrs | FileCheck -enable-var-scope -check-prefixes=PACKED %s
4 ; RUN: llc < %s -mtriple=amdgcn -mcpu=gfx900 -verify-machineinstrs | FileCheck -enable-var-scope -check-prefixes=PACKED %s
6 define amdgpu_ps half @buffer_load_format_d16_x(ptr addrspace(8) inreg %rsrc) {
7 ; UNPACKED-LABEL: buffer_load_format_d16_x:
8 ; UNPACKED:       ; %bb.0: ; %main_body
9 ; UNPACKED-NEXT:    v_mov_b32_e32 v0, 0 ; encoding: [0x80,0x02,0x00,0x7e]
10 ; UNPACKED-NEXT:    buffer_load_format_d16_x v0, v0, s[0:3], 0 idxen ; encoding: [0x00,0x20,0x20,0xe0,0x00,0x00,0x00,0x80]
11 ; UNPACKED-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x0f,0x8c,0xbf]
12 ; UNPACKED-NEXT:    ; return to shader part epilog
14 ; PACKED-LABEL: buffer_load_format_d16_x:
15 ; PACKED:       ; %bb.0: ; %main_body
16 ; PACKED-NEXT:    v_mov_b32_e32 v0, 0
17 ; PACKED-NEXT:    buffer_load_format_d16_x v0, v0, s[0:3], 0 idxen
18 ; PACKED-NEXT:    s_waitcnt vmcnt(0)
19 ; PACKED-NEXT:    ; return to shader part epilog
20 main_body:
21   %data = call half @llvm.amdgcn.struct.ptr.buffer.load.format.f16(ptr addrspace(8) %rsrc, i32 0, i32 0, i32 0, i32 0)
22   ret half %data
25 define amdgpu_ps half @buffer_load_format_d16_xy(ptr addrspace(8) inreg %rsrc) {
26 ; UNPACKED-LABEL: buffer_load_format_d16_xy:
27 ; UNPACKED:       ; %bb.0: ; %main_body
28 ; UNPACKED-NEXT:    v_mov_b32_e32 v0, 0 ; encoding: [0x80,0x02,0x00,0x7e]
29 ; UNPACKED-NEXT:    buffer_load_format_d16_xy v[0:1], v0, s[0:3], 0 idxen ; encoding: [0x00,0x20,0x24,0xe0,0x00,0x00,0x00,0x80]
30 ; UNPACKED-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x0f,0x8c,0xbf]
31 ; UNPACKED-NEXT:    v_mov_b32_e32 v0, v1 ; encoding: [0x01,0x03,0x00,0x7e]
32 ; UNPACKED-NEXT:    ; return to shader part epilog
34 ; PACKED-LABEL: buffer_load_format_d16_xy:
35 ; PACKED:       ; %bb.0: ; %main_body
36 ; PACKED-NEXT:    v_mov_b32_e32 v0, 0
37 ; PACKED-NEXT:    buffer_load_format_d16_xy v0, v0, s[0:3], 0 idxen
38 ; PACKED-NEXT:    s_waitcnt vmcnt(0)
39 ; PACKED-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
40 ; PACKED-NEXT:    ; return to shader part epilog
41 main_body:
42   %data = call <2 x half> @llvm.amdgcn.struct.ptr.buffer.load.format.v2f16(ptr addrspace(8) %rsrc, i32 0, i32 0, i32 0, i32 0)
43   %elt = extractelement <2 x half> %data, i32 1
44   ret half %elt
47 define amdgpu_ps half @buffer_load_format_d16_xyz(ptr addrspace(8) inreg %rsrc) {
48 ; UNPACKED-LABEL: buffer_load_format_d16_xyz:
49 ; UNPACKED:       ; %bb.0: ; %main_body
50 ; UNPACKED-NEXT:    v_mov_b32_e32 v0, 0 ; encoding: [0x80,0x02,0x00,0x7e]
51 ; UNPACKED-NEXT:    buffer_load_format_d16_xyz v[0:2], v0, s[0:3], 0 idxen ; encoding: [0x00,0x20,0x28,0xe0,0x00,0x00,0x00,0x80]
52 ; UNPACKED-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x0f,0x8c,0xbf]
53 ; UNPACKED-NEXT:    v_mov_b32_e32 v0, v2 ; encoding: [0x02,0x03,0x00,0x7e]
54 ; UNPACKED-NEXT:    ; return to shader part epilog
56 ; PACKED-LABEL: buffer_load_format_d16_xyz:
57 ; PACKED:       ; %bb.0: ; %main_body
58 ; PACKED-NEXT:    v_mov_b32_e32 v0, 0
59 ; PACKED-NEXT:    buffer_load_format_d16_xyz v[0:1], v0, s[0:3], 0 idxen
60 ; PACKED-NEXT:    s_waitcnt vmcnt(0)
61 ; PACKED-NEXT:    v_mov_b32_e32 v0, v1
62 ; PACKED-NEXT:    ; return to shader part epilog
63 main_body:
64   %data = call <3 x half> @llvm.amdgcn.struct.ptr.buffer.load.format.v3f16(ptr addrspace(8) %rsrc, i32 0, i32 0, i32 0, i32 0)
65   %elt = extractelement <3 x half> %data, i32 2
66   ret half %elt
69 define amdgpu_ps half @buffer_load_format_d16_xyzw(ptr addrspace(8) inreg %rsrc) {
70 ; UNPACKED-LABEL: buffer_load_format_d16_xyzw:
71 ; UNPACKED:       ; %bb.0: ; %main_body
72 ; UNPACKED-NEXT:    v_mov_b32_e32 v0, 0 ; encoding: [0x80,0x02,0x00,0x7e]
73 ; UNPACKED-NEXT:    buffer_load_format_d16_xyzw v[0:3], v0, s[0:3], 0 idxen ; encoding: [0x00,0x20,0x2c,0xe0,0x00,0x00,0x00,0x80]
74 ; UNPACKED-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x0f,0x8c,0xbf]
75 ; UNPACKED-NEXT:    v_mov_b32_e32 v0, v3 ; encoding: [0x03,0x03,0x00,0x7e]
76 ; UNPACKED-NEXT:    ; return to shader part epilog
78 ; PACKED-LABEL: buffer_load_format_d16_xyzw:
79 ; PACKED:       ; %bb.0: ; %main_body
80 ; PACKED-NEXT:    v_mov_b32_e32 v0, 0
81 ; PACKED-NEXT:    buffer_load_format_d16_xyzw v[0:1], v0, s[0:3], 0 idxen
82 ; PACKED-NEXT:    s_waitcnt vmcnt(0)
83 ; PACKED-NEXT:    v_lshrrev_b32_e32 v0, 16, v1
84 ; PACKED-NEXT:    ; return to shader part epilog
85 main_body:
86   %data = call <4 x half> @llvm.amdgcn.struct.ptr.buffer.load.format.v4f16(ptr addrspace(8) %rsrc, i32 0, i32 0, i32 0, i32 0)
87   %elt = extractelement <4 x half> %data, i32 3
88   ret half %elt
91 define amdgpu_ps half @buffer_load_format_i16_x(ptr addrspace(8) inreg %rsrc) {
92 ; UNPACKED-LABEL: buffer_load_format_i16_x:
93 ; UNPACKED:       ; %bb.0: ; %main_body
94 ; UNPACKED-NEXT:    v_mov_b32_e32 v0, 0 ; encoding: [0x80,0x02,0x00,0x7e]
95 ; UNPACKED-NEXT:    buffer_load_format_d16_x v0, v0, s[0:3], 0 idxen ; encoding: [0x00,0x20,0x20,0xe0,0x00,0x00,0x00,0x80]
96 ; UNPACKED-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x0f,0x8c,0xbf]
97 ; UNPACKED-NEXT:    ; return to shader part epilog
99 ; PACKED-LABEL: buffer_load_format_i16_x:
100 ; PACKED:       ; %bb.0: ; %main_body
101 ; PACKED-NEXT:    v_mov_b32_e32 v0, 0
102 ; PACKED-NEXT:    buffer_load_format_d16_x v0, v0, s[0:3], 0 idxen
103 ; PACKED-NEXT:    s_waitcnt vmcnt(0)
104 ; PACKED-NEXT:    ; return to shader part epilog
105 main_body:
106   %data = call i16 @llvm.amdgcn.struct.ptr.buffer.load.format.i16(ptr addrspace(8) %rsrc, i32 0, i32 0, i32 0, i32 0)
107   %fdata = bitcast i16 %data to half
108   ret half %fdata
111 declare half @llvm.amdgcn.struct.ptr.buffer.load.format.f16(ptr addrspace(8), i32, i32, i32, i32)
112 declare <2 x half> @llvm.amdgcn.struct.ptr.buffer.load.format.v2f16(ptr addrspace(8), i32, i32, i32, i32)
113 declare <3 x half> @llvm.amdgcn.struct.ptr.buffer.load.format.v3f16(ptr addrspace(8), i32, i32, i32, i32)
114 declare <4 x half> @llvm.amdgcn.struct.ptr.buffer.load.format.v4f16(ptr addrspace(8), i32, i32, i32, i32)
115 declare i16 @llvm.amdgcn.struct.ptr.buffer.load.format.i16(ptr addrspace(8), i32, i32, i32, i32)