Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / Assembler / opaque-ptr.ll
blob236a64904bc95752c1aba549daf55151304a736c
1 ; RUN: llvm-as < %s | llvm-dis | llvm-as | llvm-dis | FileCheck %s
2 ; RUN: verify-uselistorder %s
4 ; CHECK: @global = external global ptr
5 @global = external global ptr
7 ; CHECK: @global_const_gep = global ptr getelementptr (i47, ptr @global, i64 1)
8 @global_const_gep = global ptr getelementptr (i47, ptr @global, i64 1)
10 ; CHECK: @fptr1 = external global ptr
11 ; CHECK: @fptr2 = external global ptr addrspace(1)
12 ; CHECK: @fptr3 = external global ptr addrspace(2)
13 @fptr1 = external global ptr
14 @fptr2 = external global ptr addrspace(1)
15 @fptr3 = external global ptr addrspace(2)
17 ; CHECK: @ifunc = ifunc void (), ptr @f
18 @ifunc = ifunc void (), ptr @f
20 ; CHECK: define ptr @f(ptr %a) {
21 ; CHECK:     ret ptr %a
22 define ptr @f(ptr %a) {
23     ret ptr %a
26 ; CHECK: define ptr @g(ptr addrspace(2) %a) {
27 ; CHECK:     %b = addrspacecast ptr addrspace(2) %a to ptr
28 ; CHECK:     ret ptr %b
29 define ptr @g(ptr addrspace(2) %a) {
30     %b = addrspacecast ptr addrspace(2) %a to ptr addrspace(0)
31     ret ptr addrspace(0) %b
34 ; CHECK: define ptr addrspace(2) @g2(ptr %a) {
35 ; CHECK:     %b = addrspacecast ptr %a to ptr addrspace(2)
36 ; CHECK:     ret ptr addrspace(2) %b
37 define ptr addrspace(2) @g2(ptr addrspace(0) %a) {
38     %b = addrspacecast ptr addrspace(0) %a to ptr addrspace(2)
39     ret ptr addrspace(2) %b
42 ; CHECK: define i32 @load(ptr %a)
43 ; CHECK:     %i = load i32, ptr %a
44 ; CHECK:     ret i32 %i
45 define i32 @load(ptr %a) {
46     %i = load i32, ptr %a
47     ret i32 %i
50 ; CHECK: define void @store(ptr %a, i32 %i)
51 ; CHECK:     store i32 %i, ptr %a
52 ; CHECK:     ret void
53 define void @store(ptr %a, i32 %i) {
54     store i32 %i, ptr %a
55     ret void
58 ; CHECK: define ptr @gep(ptr %a)
59 ; CHECK:     %res = getelementptr i8, ptr %a, i32 2
60 ; CHECK:     ret ptr %res
61 define ptr @gep(ptr %a) {
62   %res = getelementptr i8, ptr %a, i32 2
63   ret ptr %res
66 ; CHECK: define <2 x ptr> @gep_vec1(ptr %a)
67 ; CHECK:     %res = getelementptr i8, ptr %a, <2 x i32> <i32 1, i32 2>
68 ; CHECK:     ret <2 x ptr> %res
69 define <2 x ptr> @gep_vec1(ptr %a) {
70   %res = getelementptr i8, ptr %a, <2 x i32> <i32 1, i32 2>
71   ret <2 x ptr> %res
74 ; CHECK: define <2 x ptr> @gep_vec2(<2 x ptr> %a)
75 ; CHECK:     %res = getelementptr i8, <2 x ptr> %a, i32 2
76 ; CHECK:     ret <2 x ptr> %res
77 define <2 x ptr> @gep_vec2(<2 x ptr> %a) {
78   %res = getelementptr i8, <2 x ptr> %a, i32 2
79   ret <2 x ptr> %res
82 ; CHECK: define ptr @gep_constexpr(ptr %a)
83 ; CHECK:     ret ptr getelementptr (i16, ptr null, i32 3)
84 define ptr @gep_constexpr(ptr %a) {
85   ret ptr getelementptr (i16, ptr null, i32 3)
88 ; CHECK: define <2 x ptr> @gep_constexpr_vec1(ptr %a)
89 ; CHECK:     ret <2 x ptr> getelementptr (i16, ptr null, <2 x i32> <i32 3, i32 4>)
90 define <2 x ptr> @gep_constexpr_vec1(ptr %a) {
91   ret <2 x ptr> getelementptr (i16, ptr null, <2 x i32> <i32 3, i32 4>)
94 ; CHECK: define <2 x ptr> @gep_constexpr_vec2(<2 x ptr> %a)
95 ; CHECK:     ret <2 x ptr> getelementptr (i16, <2 x ptr> zeroinitializer, <2 x i32> <i32 3, i32 3>)
96 define <2 x ptr> @gep_constexpr_vec2(<2 x ptr> %a) {
97   ret <2 x ptr> getelementptr (i16, <2 x ptr> zeroinitializer, i32 3)
100 ; CHECK: define void @cmpxchg(ptr %p, i32 %a, i32 %b)
101 ; CHECK:     %val_success = cmpxchg ptr %p, i32 %a, i32 %b acq_rel monotonic
102 ; CHECK:     ret void
103 define void @cmpxchg(ptr %p, i32 %a, i32 %b) {
104     %val_success = cmpxchg ptr %p, i32 %a, i32 %b acq_rel monotonic
105     ret void
108 ; CHECK: define void @cmpxchg_ptr(ptr %p, ptr %a, ptr %b)
109 ; CHECK:     %val_success = cmpxchg ptr %p, ptr %a, ptr %b acq_rel monotonic
110 ; CHECK:     ret void
111 define void @cmpxchg_ptr(ptr %p, ptr %a, ptr %b) {
112     %val_success = cmpxchg ptr %p, ptr %a, ptr %b acq_rel monotonic
113     ret void
116 ; CHECK: define void @atomicrmw(ptr %a, i32 %i)
117 ; CHECK:     %b = atomicrmw add ptr %a, i32 %i acquire
118 ; CHECK:     ret void
119 define void @atomicrmw(ptr %a, i32 %i) {
120     %b = atomicrmw add ptr %a, i32 %i acquire
121     ret void
124 ; CHECK: define void @atomicrmw_ptr(ptr %a, ptr %b)
125 ; CHECK:     %c = atomicrmw xchg ptr %a, ptr %b acquire
126 ; CHECK:     ret void
127 define void @atomicrmw_ptr(ptr %a, ptr %b) {
128     %c = atomicrmw xchg ptr %a, ptr %b acquire
129     ret void
132 ; CHECK: define void @call(ptr %p)
133 ; CHECK:     call void %p()
134 ; CHECK:     ret void
135 define void @call(ptr %p) {
136   call void %p()
137   ret void
140 ; CHECK: define void @call_arg(ptr %p, i32 %a)
141 ; CHECK:     call void %p(i32 %a)
142 ; CHECK:     ret void
143 define void @call_arg(ptr %p, i32 %a) {
144   call void %p(i32 %a)
145   ret void
148 ; CHECK: define void @invoke(ptr %p) personality ptr @personality {
149 ; CHECK:   invoke void %p()
150 ; CHECK:     to label %continue unwind label %cleanup
151 declare void @personality()
152 define void @invoke(ptr %p) personality ptr @personality {
153   invoke void %p()
154     to label %continue unwind label %cleanup
156 continue:
157   ret void
159 cleanup:
160   landingpad {}
161     cleanup
162   ret void
165 ; CHECK: define void @byval(ptr byval({ i32, i32 }) %0)
166 define void @byval(ptr byval({ i32, i32 }) %0) {
167   ret void
170 ; CHECK: define void @call_unnamed_fn() {
171 ; CHECK:  call void @0()
172 define void @call_unnamed_fn() {
173   call void @0()
174   ret void
177 ; CHECK: define void @0() {
178 define void @0() {
179   ret void