[DAGCombiner] Add target hook function to decide folding (mul (add x, c1), c2)
[llvm-project.git] / llvm / test / Assembler / opaque-ptr.ll
blobc168fda39bf70019469323dfbe72ed0004675e24
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: @fptr1 = external global ptr ()*
8 ; CHECK: @fptr2 = external global ptr () addrspace(1)*
9 ; CHECK: @fptr3 = external global ptr () addrspace(1)* addrspace(2)*
10 @fptr1 = external global ptr ()*
11 @fptr2 = external global ptr () addrspace(1)*
12 @fptr3 = external global ptr () addrspace(1)* addrspace(2)*
14 ; CHECK: define ptr @f(ptr %a) {
15 ; CHECK:     %b = bitcast ptr %a to ptr
16 ; CHECK:     ret ptr %b
17 define ptr @f(ptr %a) {
18     %b = bitcast ptr %a to ptr
19     ret ptr %b
22 ; CHECK: define ptr @g(ptr addrspace(2) %a) {
23 ; CHECK:     %b = addrspacecast ptr addrspace(2) %a to ptr
24 ; CHECK:     ret ptr %b
25 define ptr @g(ptr addrspace(2) %a) {
26     %b = addrspacecast ptr addrspace(2) %a to ptr addrspace(0)
27     ret ptr addrspace(0) %b
30 ; CHECK: define ptr addrspace(2) @g2(ptr %a) {
31 ; CHECK:     %b = addrspacecast ptr %a to ptr addrspace(2)
32 ; CHECK:     ret ptr addrspace(2) %b
33 define ptr addrspace(2) @g2(ptr addrspace(0) %a) {
34     %b = addrspacecast ptr addrspace(0) %a to ptr addrspace(2)
35     ret ptr addrspace(2) %b
38 ; CHECK: define i32 @load(ptr %a)
39 ; CHECK:     %i = load i32, ptr %a
40 ; CHECK:     ret i32 %i
41 define i32 @load(ptr %a) {
42     %i = load i32, ptr %a
43     ret i32 %i
46 ; CHECK: define void @store(ptr %a, i32 %i)
47 ; CHECK:     store i32 %i, ptr %a
48 ; CHECK:     ret void
49 define void @store(ptr %a, i32 %i) {
50     store i32 %i, ptr %a
51     ret void
54 ; CHECK: define ptr @gep(ptr %a)
55 ; CHECK:     %res = getelementptr i8, ptr %a, i32 2
56 ; CHECK:     ret ptr %res
57 define ptr @gep(ptr %a) {
58   %res = getelementptr i8, ptr %a, i32 2
59   ret ptr %res
62 ; CHECK: define <2 x ptr> @gep_vec1(ptr %a)
63 ; CHECK:     %res = getelementptr i8, ptr %a, <2 x i32> <i32 1, i32 2>
64 ; CHECK:     ret <2 x ptr> %res
65 define <2 x ptr> @gep_vec1(ptr %a) {
66   %res = getelementptr i8, ptr %a, <2 x i32> <i32 1, i32 2>
67   ret <2 x ptr> %res
70 ; CHECK: define <2 x ptr> @gep_vec2(<2 x ptr> %a)
71 ; CHECK:     %res = getelementptr i8, <2 x ptr> %a, i32 2
72 ; CHECK:     ret <2 x ptr> %res
73 define <2 x ptr> @gep_vec2(<2 x ptr> %a) {
74   %res = getelementptr i8, <2 x ptr> %a, i32 2
75   ret <2 x ptr> %res
78 ; CHECK: define ptr @gep_constexpr(ptr %a)
79 ; CHECK:     ret ptr getelementptr (i16, ptr null, i32 3)
80 define ptr @gep_constexpr(ptr %a) {
81   ret ptr getelementptr (i16, ptr null, i32 3)
84 ; CHECK: define <2 x ptr> @gep_constexpr_vec1(ptr %a)
85 ; CHECK:     ret <2 x ptr> getelementptr (i16, ptr null, <2 x i32> <i32 3, i32 4>)
86 define <2 x ptr> @gep_constexpr_vec1(ptr %a) {
87   ret <2 x ptr> getelementptr (i16, ptr null, <2 x i32> <i32 3, i32 4>)
90 ; CHECK: define <2 x ptr> @gep_constexpr_vec2(<2 x ptr> %a)
91 ; CHECK:     ret <2 x ptr> getelementptr (i16, <2 x ptr> zeroinitializer, <2 x i32> <i32 3, i32 3>)
92 define <2 x ptr> @gep_constexpr_vec2(<2 x ptr> %a) {
93   ret <2 x ptr> getelementptr (i16, <2 x ptr> zeroinitializer, i32 3)
96 ; CHECK: define void @cmpxchg(ptr %p, i32 %a, i32 %b)
97 ; CHECK:     %val_success = cmpxchg ptr %p, i32 %a, i32 %b acq_rel monotonic
98 ; CHECK:     ret void
99 define void @cmpxchg(ptr %p, i32 %a, i32 %b) {
100     %val_success = cmpxchg ptr %p, i32 %a, i32 %b acq_rel monotonic
101     ret void
104 ; CHECK: define void @atomicrmw(ptr %a, i32 %i)
105 ; CHECK:     %b = atomicrmw add ptr %a, i32 %i acquire
106 ; CHECK:     ret void
107 define void @atomicrmw(ptr %a, i32 %i) {
108     %b = atomicrmw add ptr %a, i32 %i acquire
109     ret void
112 ; CHECK: define void @call(ptr %p)
113 ; CHECK:     call void %p()
114 ; CHECK:     ret void
115 define void @call(ptr %p) {
116   call void %p()
117   ret void
120 ; CHECK: define void @call_arg(ptr %p, i32 %a)
121 ; CHECK:     call void %p(i32 %a)
122 ; CHECK:     ret void
123 define void @call_arg(ptr %p, i32 %a) {
124   call void %p(i32 %a)
125   ret void
128 ; CHECK: define void @invoke(ptr %p) personality void ()* @personality {
129 ; CHECK:   invoke void %p()
130 ; CHECK:     to label %continue unwind label %cleanup
131 declare void @personality()
132 define void @invoke(ptr %p) personality void ()* @personality {
133   invoke void %p()
134     to label %continue unwind label %cleanup
136 continue:
137   ret void
139 cleanup:
140   landingpad {}
141     cleanup
142   ret void
145 ; CHECK: define void @byval(ptr byval({ i32, i32 }) %0)
146 define void @byval(ptr byval({ i32, i32 }) %0) {
147   ret void