xref: /llvm-project/llvm/test/CodeGen/AMDGPU/lower-buffer-fat-pointers-constants.ll (revision 6c01011db089bae22630922e1ac30e5d49de3137)
16540f163SKrzysztof Drewniak; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2
26540f163SKrzysztof Drewniak; RUN: opt -S -mcpu=gfx900 -amdgpu-lower-buffer-fat-pointers < %s | FileCheck %s
36540f163SKrzysztof Drewniak; RUN: opt -S -mcpu=gfx900 -passes=amdgpu-lower-buffer-fat-pointers < %s | FileCheck %s
46540f163SKrzysztof Drewniak
56540f163SKrzysztof Drewniaktarget 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"
66540f163SKrzysztof Drewniaktarget triple = "amdgcn--"
76540f163SKrzysztof Drewniak
86540f163SKrzysztof Drewniak@buf = external addrspace(8) global i8
96540f163SKrzysztof Drewniak@flat = external global i8
106540f163SKrzysztof Drewniak
116540f163SKrzysztof Drewniakdefine ptr addrspace(7) @null() {
126540f163SKrzysztof Drewniak; CHECK-LABEL: define { ptr addrspace(8), i32 } @null
136540f163SKrzysztof Drewniak; CHECK-SAME: () #[[ATTR0:[0-9]+]] {
146540f163SKrzysztof Drewniak; CHECK-NEXT:    ret { ptr addrspace(8), i32 } zeroinitializer
156540f163SKrzysztof Drewniak;
166540f163SKrzysztof Drewniak  ret ptr addrspace(7) null
176540f163SKrzysztof Drewniak}
186540f163SKrzysztof Drewniak
196540f163SKrzysztof Drewniakdefine <2 x ptr addrspace(7)> @null_vector() {
206540f163SKrzysztof Drewniak; CHECK-LABEL: define { <2 x ptr addrspace(8)>, <2 x i32> } @null_vector
216540f163SKrzysztof Drewniak; CHECK-SAME: () #[[ATTR0]] {
226540f163SKrzysztof Drewniak; CHECK-NEXT:    ret { <2 x ptr addrspace(8)>, <2 x i32> } zeroinitializer
236540f163SKrzysztof Drewniak;
246540f163SKrzysztof Drewniak  ret <2 x ptr addrspace(7)> zeroinitializer
256540f163SKrzysztof Drewniak}
266540f163SKrzysztof Drewniak
276540f163SKrzysztof Drewniakdefine ptr addrspace(7) @undef() {
286540f163SKrzysztof Drewniak; CHECK-LABEL: define { ptr addrspace(8), i32 } @undef
296540f163SKrzysztof Drewniak; CHECK-SAME: () #[[ATTR0]] {
306540f163SKrzysztof Drewniak; CHECK-NEXT:    ret { ptr addrspace(8), i32 } undef
316540f163SKrzysztof Drewniak;
326540f163SKrzysztof Drewniak  ret ptr addrspace(7) undef
336540f163SKrzysztof Drewniak}
346540f163SKrzysztof Drewniak
356540f163SKrzysztof Drewniakdefine <2 x ptr addrspace(7)> @undef_vec() {
366540f163SKrzysztof Drewniak; CHECK-LABEL: define { <2 x ptr addrspace(8)>, <2 x i32> } @undef_vec
376540f163SKrzysztof Drewniak; CHECK-SAME: () #[[ATTR0]] {
386540f163SKrzysztof Drewniak; CHECK-NEXT:    ret { <2 x ptr addrspace(8)>, <2 x i32> } undef
396540f163SKrzysztof Drewniak;
406540f163SKrzysztof Drewniak  ret <2 x ptr addrspace(7)> undef
416540f163SKrzysztof Drewniak}
426540f163SKrzysztof Drewniak
436540f163SKrzysztof Drewniakdefine ptr addrspace(7) @poison() {
446540f163SKrzysztof Drewniak; CHECK-LABEL: define { ptr addrspace(8), i32 } @poison
456540f163SKrzysztof Drewniak; CHECK-SAME: () #[[ATTR0]] {
466540f163SKrzysztof Drewniak; CHECK-NEXT:    ret { ptr addrspace(8), i32 } poison
476540f163SKrzysztof Drewniak;
486540f163SKrzysztof Drewniak  ret ptr addrspace(7) poison
496540f163SKrzysztof Drewniak}
506540f163SKrzysztof Drewniak
516540f163SKrzysztof Drewniakdefine <2 x ptr addrspace(7)> @poison_vec() {
526540f163SKrzysztof Drewniak; CHECK-LABEL: define { <2 x ptr addrspace(8)>, <2 x i32> } @poison_vec
536540f163SKrzysztof Drewniak; CHECK-SAME: () #[[ATTR0]] {
546540f163SKrzysztof Drewniak; CHECK-NEXT:    ret { <2 x ptr addrspace(8)>, <2 x i32> } poison
556540f163SKrzysztof Drewniak;
566540f163SKrzysztof Drewniak  ret <2 x ptr addrspace(7)> poison
576540f163SKrzysztof Drewniak}
586540f163SKrzysztof Drewniak
596540f163SKrzysztof Drewniakdefine ptr addrspace(7) @cast_global() {
606540f163SKrzysztof Drewniak; CHECK-LABEL: define { ptr addrspace(8), i32 } @cast_global
616540f163SKrzysztof Drewniak; CHECK-SAME: () #[[ATTR0]] {
626540f163SKrzysztof Drewniak; CHECK-NEXT:    ret { ptr addrspace(8), i32 } { ptr addrspace(8) @buf, i32 0 }
636540f163SKrzysztof Drewniak;
646540f163SKrzysztof Drewniak  ret ptr addrspace(7) addrspacecast (ptr addrspace(8) @buf to ptr addrspace(7))
656540f163SKrzysztof Drewniak}
666540f163SKrzysztof Drewniak
676540f163SKrzysztof Drewniakdefine ptr addrspace(7) @cast_null() {
686540f163SKrzysztof Drewniak; CHECK-LABEL: define { ptr addrspace(8), i32 } @cast_null
696540f163SKrzysztof Drewniak; CHECK-SAME: () #[[ATTR0]] {
706540f163SKrzysztof Drewniak; CHECK-NEXT:    ret { ptr addrspace(8), i32 } zeroinitializer
716540f163SKrzysztof Drewniak;
726540f163SKrzysztof Drewniak  ret ptr addrspace(7) addrspacecast (ptr addrspace(8) null to ptr addrspace(7))
736540f163SKrzysztof Drewniak}
746540f163SKrzysztof Drewniak
756540f163SKrzysztof Drewniakdefine <2 x ptr addrspace(7)> @cast_vec() {
766540f163SKrzysztof Drewniak; CHECK-LABEL: define { <2 x ptr addrspace(8)>, <2 x i32> } @cast_vec
776540f163SKrzysztof Drewniak; CHECK-SAME: () #[[ATTR0]] {
786540f163SKrzysztof Drewniak; 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 }
796540f163SKrzysztof Drewniak;
806540f163SKrzysztof Drewniak  ret <2 x ptr addrspace(7)> addrspacecast (
816540f163SKrzysztof Drewniak  <2 x ptr addrspace(8)> <ptr addrspace(8) @buf, ptr addrspace(8) null>
826540f163SKrzysztof Drewniak  to <2 x ptr addrspace(7)>)
836540f163SKrzysztof Drewniak}
846540f163SKrzysztof Drewniak
856540f163SKrzysztof Drewniakdefine ptr addrspace(7) @gep() {
866540f163SKrzysztof Drewniak; CHECK-LABEL: define { ptr addrspace(8), i32 } @gep
876540f163SKrzysztof Drewniak; CHECK-SAME: () #[[ATTR0]] {
886540f163SKrzysztof Drewniak; CHECK-NEXT:    ret { ptr addrspace(8), i32 } { ptr addrspace(8) @buf, i32 36 }
896540f163SKrzysztof Drewniak;
906540f163SKrzysztof Drewniak  ret ptr addrspace(7) getelementptr inbounds (
916540f163SKrzysztof Drewniak  [4 x i32],
926540f163SKrzysztof Drewniak  ptr addrspace(7) addrspacecast (ptr addrspace(8) @buf to ptr addrspace(7)),
936540f163SKrzysztof Drewniak  i64 2, i32 1)
946540f163SKrzysztof Drewniak}
956540f163SKrzysztof Drewniak
966540f163SKrzysztof Drewniakdefine <2 x ptr addrspace(7)> @gep_vector() {
976540f163SKrzysztof Drewniak; CHECK-LABEL: define { <2 x ptr addrspace(8)>, <2 x i32> } @gep_vector
986540f163SKrzysztof Drewniak; CHECK-SAME: () #[[ATTR0]] {
996540f163SKrzysztof Drewniak; 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> }
1006540f163SKrzysztof Drewniak;
1016540f163SKrzysztof Drewniak  ret <2 x ptr addrspace(7)> getelementptr (
1026540f163SKrzysztof Drewniak  i32,
1036540f163SKrzysztof Drewniak  <2 x ptr addrspace(7)>
1046540f163SKrzysztof Drewniak  <ptr addrspace(7) addrspacecast (ptr addrspace(8) @buf to ptr addrspace(7)),
1056540f163SKrzysztof Drewniak  ptr addrspace(7) null>,
1066540f163SKrzysztof Drewniak  <2 x i32> <i32 3, i32 1>)
1076540f163SKrzysztof Drewniak}
1086540f163SKrzysztof Drewniak
1096540f163SKrzysztof Drewniakdefine ptr @gep_of_p7() {
1106540f163SKrzysztof Drewniak; CHECK-LABEL: define ptr @gep_of_p7
1116540f163SKrzysztof Drewniak; CHECK-SAME: () #[[ATTR0]] {
1126540f163SKrzysztof Drewniak; CHECK-NEXT:    ret ptr getelementptr inbounds (ptr addrspace(7), ptr @flat, i64 2)
1136540f163SKrzysztof Drewniak;
1146540f163SKrzysztof Drewniak  ret ptr getelementptr inbounds (ptr addrspace(7), ptr @flat, i64 2)
1156540f163SKrzysztof Drewniak}
1166540f163SKrzysztof Drewniak
1176540f163SKrzysztof Drewniakdefine ptr @gep_of_p7_vector() {
1186540f163SKrzysztof Drewniak; CHECK-LABEL: define ptr @gep_of_p7_vector
1196540f163SKrzysztof Drewniak; CHECK-SAME: () #[[ATTR0]] {
1206540f163SKrzysztof Drewniak; CHECK-NEXT:    ret ptr getelementptr (<2 x ptr addrspace(7)>, ptr @flat, i64 2)
1216540f163SKrzysztof Drewniak;
1226540f163SKrzysztof Drewniak  ret ptr getelementptr (<2 x ptr addrspace(7)>, ptr @flat, i64 2)
1236540f163SKrzysztof Drewniak}
1246540f163SKrzysztof Drewniak
1256540f163SKrzysztof Drewniakdefine ptr @gep_of_p7_struct() {
1266540f163SKrzysztof Drewniak; CHECK-LABEL: define ptr @gep_of_p7_struct
1276540f163SKrzysztof Drewniak; CHECK-SAME: () #[[ATTR0]] {
1286540f163SKrzysztof Drewniak; CHECK-NEXT:    ret ptr getelementptr ({ ptr addrspace(7), i32 }, ptr @flat, i64 2)
1296540f163SKrzysztof Drewniak;
1306540f163SKrzysztof Drewniak  ret ptr getelementptr ({ptr addrspace(7), i32}, ptr @flat, i64 2)
1316540f163SKrzysztof Drewniak}
1326540f163SKrzysztof Drewniak
1336540f163SKrzysztof Drewniakdefine ptr addrspace(7) @gep_p7_from_p7() {
1346540f163SKrzysztof Drewniak; CHECK-LABEL: define { ptr addrspace(8), i32 } @gep_p7_from_p7
1356540f163SKrzysztof Drewniak; CHECK-SAME: () #[[ATTR0]] {
1366540f163SKrzysztof Drewniak; CHECK-NEXT:    ret { ptr addrspace(8), i32 } { ptr addrspace(8) @buf, i32 48 }
1376540f163SKrzysztof Drewniak;
1386540f163SKrzysztof Drewniak  ret ptr addrspace(7) getelementptr (ptr addrspace(7),
1396540f163SKrzysztof Drewniak  ptr addrspace(7) addrspacecast (ptr addrspace(8) @buf to ptr addrspace(7)),
1406540f163SKrzysztof Drewniak  i64 2)
1416540f163SKrzysztof Drewniak}
1426540f163SKrzysztof Drewniak
1436540f163SKrzysztof Drewniakdefine i160 @ptrtoint() {
1446540f163SKrzysztof Drewniak; CHECK-LABEL: define i160 @ptrtoint
1456540f163SKrzysztof Drewniak; CHECK-SAME: () #[[ATTR0]] {
146*6c01011dSNikita Popov; CHECK-NEXT:    [[TMP1:%.*]] = shl nuw i160 ptrtoint (ptr addrspace(8) @buf to i160), 32
147*6c01011dSNikita Popov; CHECK-NEXT:    [[TMP2:%.*]] = or i160 [[TMP1]], 12
148*6c01011dSNikita Popov; CHECK-NEXT:    ret i160 [[TMP2]]
1496540f163SKrzysztof Drewniak;
1506540f163SKrzysztof Drewniak  ret i160 ptrtoint(
1516540f163SKrzysztof Drewniak  ptr addrspace(7) getelementptr(
1526540f163SKrzysztof Drewniak  i32, ptr addrspace(7) addrspacecast (ptr addrspace(8) @buf to ptr addrspace(7)),
1536540f163SKrzysztof Drewniak  i32 3) to i160)
1546540f163SKrzysztof Drewniak}
1556540f163SKrzysztof Drewniak
1566540f163SKrzysztof Drewniakdefine i256 @ptrtoint_long() {
1576540f163SKrzysztof Drewniak; CHECK-LABEL: define i256 @ptrtoint_long
1586540f163SKrzysztof Drewniak; CHECK-SAME: () #[[ATTR0]] {
159*6c01011dSNikita Popov; CHECK-NEXT:    [[TMP1:%.*]] = shl nuw nsw i256 ptrtoint (ptr addrspace(8) @buf to i256), 32
160*6c01011dSNikita Popov; CHECK-NEXT:    [[TMP2:%.*]] = or i256 [[TMP1]], 12
161*6c01011dSNikita Popov; CHECK-NEXT:    ret i256 [[TMP2]]
1626540f163SKrzysztof Drewniak;
1636540f163SKrzysztof Drewniak  ret i256 ptrtoint(
1646540f163SKrzysztof Drewniak  ptr addrspace(7) getelementptr(
1656540f163SKrzysztof Drewniak  i32, ptr addrspace(7) addrspacecast (ptr addrspace(8) @buf to ptr addrspace(7)),
1666540f163SKrzysztof Drewniak  i32 3) to i256)
1676540f163SKrzysztof Drewniak}
1686540f163SKrzysztof Drewniak
1696540f163SKrzysztof Drewniakdefine i64 @ptrtoint_short() {
1706540f163SKrzysztof Drewniak; CHECK-LABEL: define i64 @ptrtoint_short
1716540f163SKrzysztof Drewniak; CHECK-SAME: () #[[ATTR0]] {
172*6c01011dSNikita Popov; CHECK-NEXT:    [[TMP1:%.*]] = shl i64 ptrtoint (ptr addrspace(8) @buf to i64), 32
173*6c01011dSNikita Popov; CHECK-NEXT:    [[TMP2:%.*]] = or i64 [[TMP1]], 12
174*6c01011dSNikita Popov; CHECK-NEXT:    ret i64 [[TMP2]]
1756540f163SKrzysztof Drewniak;
1766540f163SKrzysztof Drewniak  ret i64 ptrtoint(
1776540f163SKrzysztof Drewniak  ptr addrspace(7) getelementptr(
1786540f163SKrzysztof Drewniak  i32, ptr addrspace(7) addrspacecast (ptr addrspace(8) @buf to ptr addrspace(7)),
1796540f163SKrzysztof Drewniak  i32 3) to i64)
1806540f163SKrzysztof Drewniak}
1816540f163SKrzysztof Drewniak
1826540f163SKrzysztof Drewniakdefine i32 @ptrtoint_very_short() {
1836540f163SKrzysztof Drewniak; CHECK-LABEL: define i32 @ptrtoint_very_short
1846540f163SKrzysztof Drewniak; CHECK-SAME: () #[[ATTR0]] {
1855ef768d2SNikita Popov; CHECK-NEXT:    ret i32 12
1866540f163SKrzysztof Drewniak;
1876540f163SKrzysztof Drewniak  ret i32 ptrtoint(
1886540f163SKrzysztof Drewniak  ptr addrspace(7) getelementptr(
1896540f163SKrzysztof Drewniak  i32, ptr addrspace(7) addrspacecast (ptr addrspace(8) @buf to ptr addrspace(7)),
1906540f163SKrzysztof Drewniak  i32 3) to i32)
1916540f163SKrzysztof Drewniak}
1926540f163SKrzysztof Drewniak
1936540f163SKrzysztof Drewniak
1946540f163SKrzysztof Drewniakdefine <2 x i160> @ptrtoint_vec() {
1956540f163SKrzysztof Drewniak; CHECK-LABEL: define <2 x i160> @ptrtoint_vec
1966540f163SKrzysztof Drewniak; CHECK-SAME: () #[[ATTR0]] {
1976540f163SKrzysztof Drewniak; CHECK-NEXT:    ret <2 x i160> zeroinitializer
1986540f163SKrzysztof Drewniak;
1996540f163SKrzysztof Drewniak  ret <2 x i160> ptrtoint (<2 x ptr addrspace(7)> zeroinitializer to <2 x i160>)
2006540f163SKrzysztof Drewniak}
2016540f163SKrzysztof Drewniak
2026540f163SKrzysztof Drewniakdefine ptr addrspace(7) @inttoptr() {
2036540f163SKrzysztof Drewniak; CHECK-LABEL: define { ptr addrspace(8), i32 } @inttoptr
2046540f163SKrzysztof Drewniak; CHECK-SAME: () #[[ATTR0]] {
2056540f163SKrzysztof Drewniak; CHECK-NEXT:    ret { ptr addrspace(8), i32 } zeroinitializer
2066540f163SKrzysztof Drewniak;
2076540f163SKrzysztof Drewniak  ret ptr addrspace(7) inttoptr (i160 0 to ptr addrspace(7))
2086540f163SKrzysztof Drewniak}
2096540f163SKrzysztof Drewniak
2106540f163SKrzysztof Drewniakdefine <2 x ptr addrspace(7)> @inttoptr_vec() {
2116540f163SKrzysztof Drewniak; CHECK-LABEL: define { <2 x ptr addrspace(8)>, <2 x i32> } @inttoptr_vec
2126540f163SKrzysztof Drewniak; CHECK-SAME: () #[[ATTR0]] {
2136540f163SKrzysztof Drewniak; CHECK-NEXT:    ret { <2 x ptr addrspace(8)>, <2 x i32> } { <2 x ptr addrspace(8)> zeroinitializer, <2 x i32> <i32 1, i32 2> }
2146540f163SKrzysztof Drewniak;
2156540f163SKrzysztof Drewniak  ret <2 x ptr addrspace(7)> inttoptr (<2 x i160> <i160 1, i160 2> to <2 x ptr addrspace(7)>)
2166540f163SKrzysztof Drewniak}
2176540f163SKrzysztof Drewniak
2186540f163SKrzysztof Drewniakdefine i32 @fancy_zero() {
2196540f163SKrzysztof Drewniak; CHECK-LABEL: define i32 @fancy_zero
2206540f163SKrzysztof Drewniak; CHECK-SAME: () #[[ATTR0]] {
2215ef768d2SNikita Popov; CHECK-NEXT:    ret i32 0
2226540f163SKrzysztof Drewniak;
2236540f163SKrzysztof Drewniak  ret i32 ptrtoint (
2246540f163SKrzysztof Drewniak  ptr addrspace(7) addrspacecast (ptr addrspace(8) @buf to ptr addrspace(7))
2256540f163SKrzysztof Drewniak  to i32)
2266540f163SKrzysztof Drewniak}
227