1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt -mtriple=amdgcn-amd-amdhsa -S -amdgpu-aa-wrapper -amdgpu-aa -instcombine -o - %s | FileCheck %s
3;
4; Test AA::pointsToConstantMemory implementation. These should mostly
5; turn out to be stores to constant memory, and will therefore be
6; deleted as UB.
7
8define void @test_constant_addrspace(i8 addrspace(4)* %p) {
9; CHECK-LABEL: @test_constant_addrspace(
10; CHECK-NEXT:    ret void
11;
12  store i8 0, i8 addrspace(4)* %p
13  ret void
14}
15
16define void @test_constant32bit_addrspace(i8 addrspace(6)* %p) {
17; CHECK-LABEL: @test_constant32bit_addrspace(
18; CHECK-NEXT:    ret void
19;
20  store i8 0, i8 addrspace(6)* %p
21  ret void
22}
23
24define void @test_cast_generic_from_constant_addrspace(i8 addrspace(4)* %p) {
25; CHECK-LABEL: @test_cast_generic_from_constant_addrspace(
26; CHECK-NEXT:    ret void
27;
28  %cast = addrspacecast i8 addrspace(4)* %p to i8*
29  store i8 0, i8* %cast
30  ret void
31}
32
33define void @test_cast_generic_from_constant32bit_addrspace(i8 addrspace(6)* %p) {
34; CHECK-LABEL: @test_cast_generic_from_constant32bit_addrspace(
35; CHECK-NEXT:    ret void
36;
37  %cast = addrspacecast i8 addrspace(6)* %p to i8*
38  store i8 0, i8* %cast
39  ret void
40}
41
42define void @test_cast_generic_to_constant_addrspace(i8* %p) {
43; CHECK-LABEL: @test_cast_generic_to_constant_addrspace(
44; CHECK-NEXT:    ret void
45;
46  %cast = addrspacecast i8* %p to i8 addrspace(4)*
47  store i8 0, i8 addrspace(4)* %cast
48  ret void
49}
50
51define void @test_cast_generic_to_constant32bit_addrspace(i8* %p) {
52; CHECK-LABEL: @test_cast_generic_to_constant32bit_addrspace(
53; CHECK-NEXT:    ret void
54;
55  %cast = addrspacecast i8* %p to i8 addrspace(6)*
56  store i8 0, i8 addrspace(6)* %cast
57  ret void
58}
59
60define amdgpu_kernel void @noalias_readnone_global_kernarg(i32 addrspace(1)* noalias readnone %arg) {
61; CHECK-LABEL: @noalias_readnone_global_kernarg(
62; CHECK-NEXT:    ret void
63;
64  store i32 0, i32 addrspace(1)* %arg
65  ret void
66}
67
68define amdgpu_kernel void @noalias_readonly_global_kernarg(i32 addrspace(1)* noalias readonly %arg) {
69; CHECK-LABEL: @noalias_readonly_global_kernarg(
70; CHECK-NEXT:    ret void
71;
72  store i32 0, i32 addrspace(1)* %arg
73  ret void
74}
75
76define amdgpu_kernel void @readnone_global_kernarg(i32 addrspace(1)* readnone %arg) {
77; CHECK-LABEL: @readnone_global_kernarg(
78; CHECK-NEXT:    store i32 0, i32 addrspace(1)* [[ARG:%.*]], align 4
79; CHECK-NEXT:    ret void
80;
81  store i32 0, i32 addrspace(1)* %arg
82  ret void
83}
84
85define amdgpu_kernel void @readonly_global_kernarg(i32 addrspace(1)* readonly %arg) {
86; CHECK-LABEL: @readonly_global_kernarg(
87; CHECK-NEXT:    store i32 0, i32 addrspace(1)* [[ARG:%.*]], align 4
88; CHECK-NEXT:    ret void
89;
90  store i32 0, i32 addrspace(1)* %arg
91  ret void
92}
93
94@global_as_constant = external addrspace(1) constant i32, align 4
95
96define amdgpu_kernel void @constant_gv_global_as() {
97; CHECK-LABEL: @constant_gv_global_as(
98; CHECK-NEXT:    ret void
99;
100  store i32 0, i32 addrspace(1)* @global_as_constant
101  ret void
102}
103
104@global_nonconstant_constant_as = external addrspace(4) global i32, align 4
105
106define amdgpu_kernel void @nonconst_gv_constant_as() {
107; CHECK-LABEL: @nonconst_gv_constant_as(
108; CHECK-NEXT:    ret void
109;
110  store i32 0, i32 addrspace(4)* @global_nonconstant_constant_as
111  ret void
112}
113