• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; RUN: opt -S -codegenprepare -mtriple=amdgcn--amdhsa < %s | FileCheck %s
2
3; CHECK-LABEL: @no_sink_local_to_flat(
4; CHECK: addrspacecast
5; CHECK: br
6; CHECK-NOT: addrspacecast
7define i64 @no_sink_local_to_flat(i1 %pred, i64 addrspace(3)* %ptr) {
8  %ptr_cast = addrspacecast i64 addrspace(3)* %ptr to i64*
9  br i1 %pred, label %l1, label %l2
10
11l1:
12  %v1 = load i64, i64 addrspace(3)* %ptr
13  ret i64 %v1
14
15l2:
16  %v2 = load i64, i64* %ptr_cast
17  ret i64 %v2
18}
19
20; CHECK-LABEL: @no_sink_private_to_flat(
21; CHECK: addrspacecast
22; CHECK: br
23; CHECK-NOT: addrspacecast
24define i64 @no_sink_private_to_flat(i1 %pred, i64 addrspace(5)* %ptr) {
25  %ptr_cast = addrspacecast i64 addrspace(5)* %ptr to i64*
26  br i1 %pred, label %l1, label %l2
27
28l1:
29  %v1 = load i64, i64 addrspace(5)* %ptr
30  ret i64 %v1
31
32l2:
33  %v2 = load i64, i64* %ptr_cast
34  ret i64 %v2
35}
36
37
38; CHECK-LABEL: @sink_global_to_flat(
39; CHECK-NOT: addrspacecast
40; CHECK: br
41; CHECK: addrspacecast
42define i64 @sink_global_to_flat(i1 %pred, i64 addrspace(1)* %ptr) {
43  %ptr_cast = addrspacecast i64 addrspace(1)* %ptr to i64*
44  br i1 %pred, label %l1, label %l2
45
46l1:
47  %v1 = load i64, i64 addrspace(1)* %ptr
48  ret i64 %v1
49
50l2:
51  %v2 = load i64, i64* %ptr_cast
52  ret i64 %v2
53}
54
55; CHECK-LABEL: @sink_flat_to_global(
56; CHECK-NOT: addrspacecast
57; CHECK: br
58; CHECK: addrspacecast
59define i64 @sink_flat_to_global(i1 %pred, i64* %ptr) {
60  %ptr_cast = addrspacecast i64* %ptr to i64 addrspace(1)*
61  br i1 %pred, label %l1, label %l2
62
63l1:
64  %v1 = load i64, i64* %ptr
65  ret i64 %v1
66
67l2:
68  %v2 = load i64, i64 addrspace(1)* %ptr_cast
69  ret i64 %v2
70}
71
72; CHECK-LABEL: @sink_flat_to_constant(
73; CHECK-NOT: addrspacecast
74; CHECK: br
75; CHECK: addrspacecast
76define i64 @sink_flat_to_constant(i1 %pred, i64* %ptr) {
77  %ptr_cast = addrspacecast i64* %ptr to i64 addrspace(4)*
78  br i1 %pred, label %l1, label %l2
79
80l1:
81  %v1 = load i64, i64* %ptr
82  ret i64 %v1
83
84l2:
85  %v2 = load i64, i64 addrspace(4)* %ptr_cast
86  ret i64 %v2
87}
88
89; CHECK-LABEL: @sink_flat_to_local(
90; CHECK-NOT: addrspacecast
91; CHECK: br
92; CHECK: addrspacecast
93define i64 @sink_flat_to_local(i1 %pred, i64* %ptr) {
94  %ptr_cast = addrspacecast i64* %ptr to i64 addrspace(3)*
95  br i1 %pred, label %l1, label %l2
96
97l1:
98  %v1 = load i64, i64* %ptr
99  ret i64 %v1
100
101l2:
102  %v2 = load i64, i64 addrspace(3)* %ptr_cast
103  ret i64 %v2
104}
105
106; CHECK-LABEL: @sink_flat_to_private(
107; CHECK-NOT: addrspacecast
108; CHECK: br
109; CHECK: addrspacecast
110define i64 @sink_flat_to_private(i1 %pred, i64* %ptr) {
111  %ptr_cast = addrspacecast i64* %ptr to i64 addrspace(5)*
112  br i1 %pred, label %l1, label %l2
113
114l1:
115  %v1 = load i64, i64* %ptr
116  ret i64 %v1
117
118l2:
119  %v2 = load i64, i64 addrspace(5)* %ptr_cast
120  ret i64 %v2
121}
122