blob: adeba26a6d47d3d4e07c371b241109fb2c08814f [file] [log] [blame]
Matt Arsenaultd4da0ed2016-12-02 18:12:53 +00001; 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 addrspace(4)*
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 addrspace(4)* %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* %ptr) {
25 %ptr_cast = addrspacecast i64* %ptr to i64 addrspace(4)*
26 br i1 %pred, label %l1, label %l2
27
28l1:
29 %v1 = load i64, i64* %ptr
30 ret i64 %v1
31
32l2:
33 %v2 = load i64, i64 addrspace(4)* %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 addrspace(4)*
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 addrspace(4)* %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 addrspace(4)* %ptr) {
60 %ptr_cast = addrspacecast i64 addrspace(4)* %ptr to i64 addrspace(1)*
61 br i1 %pred, label %l1, label %l2
62
63l1:
64 %v1 = load i64, i64 addrspace(4)* %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 addrspace(4)* %ptr) {
77 %ptr_cast = addrspacecast i64 addrspace(4)* %ptr to i64 addrspace(2)*
78 br i1 %pred, label %l1, label %l2
79
80l1:
81 %v1 = load i64, i64 addrspace(4)* %ptr
82 ret i64 %v1
83
84l2:
85 %v2 = load i64, i64 addrspace(2)* %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 addrspace(4)* %ptr) {
94 %ptr_cast = addrspacecast i64 addrspace(4)* %ptr to i64 addrspace(3)*
95 br i1 %pred, label %l1, label %l2
96
97l1:
98 %v1 = load i64, i64 addrspace(4)* %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 addrspace(4)* %ptr) {
111 %ptr_cast = addrspacecast i64 addrspace(4)* %ptr to i64*
112 br i1 %pred, label %l1, label %l2
113
114l1:
115 %v1 = load i64, i64 addrspace(4)* %ptr
116 ret i64 %v1
117
118l2:
119 %v2 = load i64, i64* %ptr_cast
120 ret i64 %v2
121}