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) {
22 define ptr @f(ptr %a) {
26 ; CHECK: define ptr @g(ptr addrspace(2) %a) {
27 ; CHECK: %b = addrspacecast ptr addrspace(2) %a to ptr
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
45 define i32 @load(ptr %a) {
50 ; CHECK: define void @store(ptr %a, i32 %i)
51 ; CHECK: store i32 %i, ptr %a
53 define void @store(ptr %a, i32 %i) {
58 ; CHECK: define ptr @gep(ptr %a)
59 ; CHECK: %res = getelementptr i8, ptr %a, i32 2
61 define ptr @gep(ptr %a) {
62 %res = getelementptr i8, ptr %a, i32 2
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>
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
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
103 define void @cmpxchg(ptr %p, i32 %a, i32 %b) {
104 %val_success = cmpxchg ptr %p, i32 %a, i32 %b acq_rel monotonic
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
111 define void @cmpxchg_ptr(ptr %p, ptr %a, ptr %b) {
112 %val_success = cmpxchg ptr %p, ptr %a, ptr %b acq_rel monotonic
116 ; CHECK: define void @atomicrmw(ptr %a, i32 %i)
117 ; CHECK: %b = atomicrmw add ptr %a, i32 %i acquire
119 define void @atomicrmw(ptr %a, i32 %i) {
120 %b = atomicrmw add ptr %a, i32 %i acquire
124 ; CHECK: define void @atomicrmw_ptr(ptr %a, ptr %b)
125 ; CHECK: %c = atomicrmw xchg ptr %a, ptr %b acquire
127 define void @atomicrmw_ptr(ptr %a, ptr %b) {
128 %c = atomicrmw xchg ptr %a, ptr %b acquire
132 ; CHECK: define void @call(ptr %p)
133 ; CHECK: call void %p()
135 define void @call(ptr %p) {
140 ; CHECK: define void @call_arg(ptr %p, i32 %a)
141 ; CHECK: call void %p(i32 %a)
143 define void @call_arg(ptr %p, i32 %a) {
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 {
154 to label %continue unwind label %cleanup
165 ; CHECK: define void @byval(ptr byval({ i32, i32 }) %0)
166 define void @byval(ptr byval({ i32, i32 }) %0) {
170 ; CHECK: define void @call_unnamed_fn() {
171 ; CHECK: call void @0()
172 define void @call_unnamed_fn() {
177 ; CHECK: define void @0() {