[MachineScheduler] Fix physreg dependencies of ExitSU (#123541)
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / lower-buffer-fat-pointers-constants.ll
blobd7a71180f0858c477d6a869ab853e335dcfafb41
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2
2 ; RUN: opt -S -mcpu=gfx900 -amdgpu-lower-buffer-fat-pointers < %s | FileCheck %s
3 ; RUN: opt -S -mcpu=gfx900 -passes=amdgpu-lower-buffer-fat-pointers < %s | FileCheck %s
5 target datalayout = "e-p:64:64-p1:64:64-p2:32:32-p3:32:32-p4:64:64-p5:32:32-p6:32:32-p7:160:256:256:32-p8:128:128-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-v2048:2048-n32:64-S32-A5-G1-ni:7:8"
6 target triple = "amdgcn--"
8 @buf = external addrspace(8) global i8
9 @flat = external global i8
11 define ptr addrspace(7) @null() {
12 ; CHECK-LABEL: define { ptr addrspace(8), i32 } @null
13 ; CHECK-SAME: () #[[ATTR0:[0-9]+]] {
14 ; CHECK-NEXT:    ret { ptr addrspace(8), i32 } zeroinitializer
16   ret ptr addrspace(7) null
19 define <2 x ptr addrspace(7)> @null_vector() {
20 ; CHECK-LABEL: define { <2 x ptr addrspace(8)>, <2 x i32> } @null_vector
21 ; CHECK-SAME: () #[[ATTR0]] {
22 ; CHECK-NEXT:    ret { <2 x ptr addrspace(8)>, <2 x i32> } zeroinitializer
24   ret <2 x ptr addrspace(7)> zeroinitializer
27 define ptr addrspace(7) @undef() {
28 ; CHECK-LABEL: define { ptr addrspace(8), i32 } @undef
29 ; CHECK-SAME: () #[[ATTR0]] {
30 ; CHECK-NEXT:    ret { ptr addrspace(8), i32 } undef
32   ret ptr addrspace(7) undef
35 define <2 x ptr addrspace(7)> @undef_vec() {
36 ; CHECK-LABEL: define { <2 x ptr addrspace(8)>, <2 x i32> } @undef_vec
37 ; CHECK-SAME: () #[[ATTR0]] {
38 ; CHECK-NEXT:    ret { <2 x ptr addrspace(8)>, <2 x i32> } undef
40   ret <2 x ptr addrspace(7)> undef
43 define ptr addrspace(7) @poison() {
44 ; CHECK-LABEL: define { ptr addrspace(8), i32 } @poison
45 ; CHECK-SAME: () #[[ATTR0]] {
46 ; CHECK-NEXT:    ret { ptr addrspace(8), i32 } poison
48   ret ptr addrspace(7) poison
51 define <2 x ptr addrspace(7)> @poison_vec() {
52 ; CHECK-LABEL: define { <2 x ptr addrspace(8)>, <2 x i32> } @poison_vec
53 ; CHECK-SAME: () #[[ATTR0]] {
54 ; CHECK-NEXT:    ret { <2 x ptr addrspace(8)>, <2 x i32> } poison
56   ret <2 x ptr addrspace(7)> poison
59 define ptr addrspace(7) @cast_global() {
60 ; CHECK-LABEL: define { ptr addrspace(8), i32 } @cast_global
61 ; CHECK-SAME: () #[[ATTR0]] {
62 ; CHECK-NEXT:    ret { ptr addrspace(8), i32 } { ptr addrspace(8) @buf, i32 0 }
64   ret ptr addrspace(7) addrspacecast (ptr addrspace(8) @buf to ptr addrspace(7))
67 define ptr addrspace(7) @cast_null() {
68 ; CHECK-LABEL: define { ptr addrspace(8), i32 } @cast_null
69 ; CHECK-SAME: () #[[ATTR0]] {
70 ; CHECK-NEXT:    ret { ptr addrspace(8), i32 } zeroinitializer
72   ret ptr addrspace(7) addrspacecast (ptr addrspace(8) null to ptr addrspace(7))
75 define <2 x ptr addrspace(7)> @cast_vec() {
76 ; CHECK-LABEL: define { <2 x ptr addrspace(8)>, <2 x i32> } @cast_vec
77 ; CHECK-SAME: () #[[ATTR0]] {
78 ; CHECK-NEXT:    ret { <2 x ptr addrspace(8)>, <2 x i32> } { <2 x ptr addrspace(8)> <ptr addrspace(8) @buf, ptr addrspace(8) null>, <2 x i32> zeroinitializer }
80   ret <2 x ptr addrspace(7)> addrspacecast (
81   <2 x ptr addrspace(8)> <ptr addrspace(8) @buf, ptr addrspace(8) null>
82   to <2 x ptr addrspace(7)>)
85 define ptr addrspace(7) @gep() {
86 ; CHECK-LABEL: define { ptr addrspace(8), i32 } @gep
87 ; CHECK-SAME: () #[[ATTR0]] {
88 ; CHECK-NEXT:    ret { ptr addrspace(8), i32 } { ptr addrspace(8) @buf, i32 36 }
90   ret ptr addrspace(7) getelementptr inbounds (
91   [4 x i32],
92   ptr addrspace(7) addrspacecast (ptr addrspace(8) @buf to ptr addrspace(7)),
93   i64 2, i32 1)
96 define <2 x ptr addrspace(7)> @gep_vector() {
97 ; CHECK-LABEL: define { <2 x ptr addrspace(8)>, <2 x i32> } @gep_vector
98 ; CHECK-SAME: () #[[ATTR0]] {
99 ; CHECK-NEXT:    ret { <2 x ptr addrspace(8)>, <2 x i32> } { <2 x ptr addrspace(8)> <ptr addrspace(8) @buf, ptr addrspace(8) null>, <2 x i32> <i32 12, i32 4> }
101   ret <2 x ptr addrspace(7)> getelementptr (
102   i32,
103   <2 x ptr addrspace(7)>
104   <ptr addrspace(7) addrspacecast (ptr addrspace(8) @buf to ptr addrspace(7)),
105   ptr addrspace(7) null>,
106   <2 x i32> <i32 3, i32 1>)
109 define ptr @gep_of_p7() {
110 ; CHECK-LABEL: define ptr @gep_of_p7
111 ; CHECK-SAME: () #[[ATTR0]] {
112 ; CHECK-NEXT:    ret ptr getelementptr inbounds (ptr addrspace(7), ptr @flat, i64 2)
114   ret ptr getelementptr inbounds (ptr addrspace(7), ptr @flat, i64 2)
117 define ptr @gep_of_p7_vector() {
118 ; CHECK-LABEL: define ptr @gep_of_p7_vector
119 ; CHECK-SAME: () #[[ATTR0]] {
120 ; CHECK-NEXT:    ret ptr getelementptr (<2 x ptr addrspace(7)>, ptr @flat, i64 2)
122   ret ptr getelementptr (<2 x ptr addrspace(7)>, ptr @flat, i64 2)
125 define ptr @gep_of_p7_struct() {
126 ; CHECK-LABEL: define ptr @gep_of_p7_struct
127 ; CHECK-SAME: () #[[ATTR0]] {
128 ; CHECK-NEXT:    ret ptr getelementptr ({ ptr addrspace(7), i32 }, ptr @flat, i64 2)
130   ret ptr getelementptr ({ptr addrspace(7), i32}, ptr @flat, i64 2)
133 define ptr addrspace(7) @gep_p7_from_p7() {
134 ; CHECK-LABEL: define { ptr addrspace(8), i32 } @gep_p7_from_p7
135 ; CHECK-SAME: () #[[ATTR0]] {
136 ; CHECK-NEXT:    ret { ptr addrspace(8), i32 } { ptr addrspace(8) @buf, i32 48 }
138   ret ptr addrspace(7) getelementptr (ptr addrspace(7),
139   ptr addrspace(7) addrspacecast (ptr addrspace(8) @buf to ptr addrspace(7)),
140   i64 2)
143 define i160 @ptrtoint() {
144 ; CHECK-LABEL: define i160 @ptrtoint
145 ; CHECK-SAME: () #[[ATTR0]] {
146 ; CHECK-NEXT:    [[TMP1:%.*]] = shl nuw i160 ptrtoint (ptr addrspace(8) @buf to i160), 32
147 ; CHECK-NEXT:    [[TMP2:%.*]] = or i160 [[TMP1]], 12
148 ; CHECK-NEXT:    ret i160 [[TMP2]]
150   ret i160 ptrtoint(
151   ptr addrspace(7) getelementptr(
152   i32, ptr addrspace(7) addrspacecast (ptr addrspace(8) @buf to ptr addrspace(7)),
153   i32 3) to i160)
156 define i256 @ptrtoint_long() {
157 ; CHECK-LABEL: define i256 @ptrtoint_long
158 ; CHECK-SAME: () #[[ATTR0]] {
159 ; CHECK-NEXT:    [[TMP1:%.*]] = shl nuw nsw i256 ptrtoint (ptr addrspace(8) @buf to i256), 32
160 ; CHECK-NEXT:    [[TMP2:%.*]] = or i256 [[TMP1]], 12
161 ; CHECK-NEXT:    ret i256 [[TMP2]]
163   ret i256 ptrtoint(
164   ptr addrspace(7) getelementptr(
165   i32, ptr addrspace(7) addrspacecast (ptr addrspace(8) @buf to ptr addrspace(7)),
166   i32 3) to i256)
169 define i64 @ptrtoint_short() {
170 ; CHECK-LABEL: define i64 @ptrtoint_short
171 ; CHECK-SAME: () #[[ATTR0]] {
172 ; CHECK-NEXT:    [[TMP1:%.*]] = shl i64 ptrtoint (ptr addrspace(8) @buf to i64), 32
173 ; CHECK-NEXT:    [[TMP2:%.*]] = or i64 [[TMP1]], 12
174 ; CHECK-NEXT:    ret i64 [[TMP2]]
176   ret i64 ptrtoint(
177   ptr addrspace(7) getelementptr(
178   i32, ptr addrspace(7) addrspacecast (ptr addrspace(8) @buf to ptr addrspace(7)),
179   i32 3) to i64)
182 define i32 @ptrtoint_very_short() {
183 ; CHECK-LABEL: define i32 @ptrtoint_very_short
184 ; CHECK-SAME: () #[[ATTR0]] {
185 ; CHECK-NEXT:    ret i32 12
187   ret i32 ptrtoint(
188   ptr addrspace(7) getelementptr(
189   i32, ptr addrspace(7) addrspacecast (ptr addrspace(8) @buf to ptr addrspace(7)),
190   i32 3) to i32)
194 define <2 x i160> @ptrtoint_vec() {
195 ; CHECK-LABEL: define <2 x i160> @ptrtoint_vec
196 ; CHECK-SAME: () #[[ATTR0]] {
197 ; CHECK-NEXT:    ret <2 x i160> zeroinitializer
199   ret <2 x i160> ptrtoint (<2 x ptr addrspace(7)> zeroinitializer to <2 x i160>)
202 define ptr addrspace(7) @inttoptr() {
203 ; CHECK-LABEL: define { ptr addrspace(8), i32 } @inttoptr
204 ; CHECK-SAME: () #[[ATTR0]] {
205 ; CHECK-NEXT:    ret { ptr addrspace(8), i32 } zeroinitializer
207   ret ptr addrspace(7) inttoptr (i160 0 to ptr addrspace(7))
210 define <2 x ptr addrspace(7)> @inttoptr_vec() {
211 ; CHECK-LABEL: define { <2 x ptr addrspace(8)>, <2 x i32> } @inttoptr_vec
212 ; CHECK-SAME: () #[[ATTR0]] {
213 ; CHECK-NEXT:    ret { <2 x ptr addrspace(8)>, <2 x i32> } { <2 x ptr addrspace(8)> zeroinitializer, <2 x i32> <i32 1, i32 2> }
215   ret <2 x ptr addrspace(7)> inttoptr (<2 x i160> <i160 1, i160 2> to <2 x ptr addrspace(7)>)
218 define i32 @fancy_zero() {
219 ; CHECK-LABEL: define i32 @fancy_zero
220 ; CHECK-SAME: () #[[ATTR0]] {
221 ; CHECK-NEXT:    ret i32 0
223   ret i32 ptrtoint (
224   ptr addrspace(7) addrspacecast (ptr addrspace(8) @buf to ptr addrspace(7))
225   to i32)