[InstCombine] Signed saturation patterns
[llvm-complete.git] / test / Transforms / CodeGenPrepare / AMDGPU / sink-addrspacecast.ll
blob87ad0e62ace7d88fe51c1f631bb2023eb0317859
1 ; RUN: opt -S -codegenprepare -mtriple=amdgcn--amdhsa < %s | FileCheck %s
3 ; CHECK-LABEL: @no_sink_local_to_flat(
4 ; CHECK: addrspacecast
5 ; CHECK: br
6 ; CHECK-NOT: addrspacecast
7 define 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
11 l1:
12   %v1 = load i64, i64 addrspace(3)* %ptr
13   ret i64 %v1
15 l2:
16   %v2 = load i64, i64* %ptr_cast
17   ret i64 %v2
20 ; CHECK-LABEL: @no_sink_private_to_flat(
21 ; CHECK: addrspacecast
22 ; CHECK: br
23 ; CHECK-NOT: addrspacecast
24 define 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
28 l1:
29   %v1 = load i64, i64 addrspace(5)* %ptr
30   ret i64 %v1
32 l2:
33   %v2 = load i64, i64* %ptr_cast
34   ret i64 %v2
38 ; CHECK-LABEL: @sink_global_to_flat(
39 ; CHECK-NOT: addrspacecast
40 ; CHECK: br
41 ; CHECK: addrspacecast
42 define 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
46 l1:
47   %v1 = load i64, i64 addrspace(1)* %ptr
48   ret i64 %v1
50 l2:
51   %v2 = load i64, i64* %ptr_cast
52   ret i64 %v2
55 ; CHECK-LABEL: @sink_flat_to_global(
56 ; CHECK-NOT: addrspacecast
57 ; CHECK: br
58 ; CHECK: addrspacecast
59 define 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
63 l1:
64   %v1 = load i64, i64* %ptr
65   ret i64 %v1
67 l2:
68   %v2 = load i64, i64 addrspace(1)* %ptr_cast
69   ret i64 %v2
72 ; CHECK-LABEL: @sink_flat_to_constant(
73 ; CHECK-NOT: addrspacecast
74 ; CHECK: br
75 ; CHECK: addrspacecast
76 define 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
80 l1:
81   %v1 = load i64, i64* %ptr
82   ret i64 %v1
84 l2:
85   %v2 = load i64, i64 addrspace(4)* %ptr_cast
86   ret i64 %v2
89 ; CHECK-LABEL: @sink_flat_to_local(
90 ; CHECK-NOT: addrspacecast
91 ; CHECK: br
92 ; CHECK: addrspacecast
93 define 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
97 l1:
98   %v1 = load i64, i64* %ptr
99   ret i64 %v1
102   %v2 = load i64, i64 addrspace(3)* %ptr_cast
103   ret i64 %v2
106 ; CHECK-LABEL: @sink_flat_to_private(
107 ; CHECK-NOT: addrspacecast
108 ; CHECK: br
109 ; CHECK: addrspacecast
110 define 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
115   %v1 = load i64, i64* %ptr
116   ret i64 %v1
119   %v2 = load i64, i64 addrspace(5)* %ptr_cast
120   ret i64 %v2