181 lines · plain
1; RUN: llvm-as < %s | llvm-dis | llvm-as | llvm-dis | FileCheck %s2; RUN: verify-uselistorder %s3 4; CHECK: @global = external global ptr5@global = external global ptr6 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)9 10; CHECK: @fptr1 = external global ptr11; CHECK: @fptr2 = external global ptr addrspace(1)12; CHECK: @fptr3 = external global ptr addrspace(2)13@fptr1 = external global ptr14@fptr2 = external global ptr addrspace(1)15@fptr3 = external global ptr addrspace(2)16 17; CHECK: @ifunc = ifunc void (), ptr @f18@ifunc = ifunc void (), ptr @f19 20; CHECK: define ptr @f(ptr %a) {21; CHECK: ret ptr %a22define ptr @f(ptr %a) {23 ret ptr %a24}25 26; CHECK: define ptr @g(ptr addrspace(2) %a) {27; CHECK: %b = addrspacecast ptr addrspace(2) %a to ptr28; CHECK: ret ptr %b29define ptr @g(ptr addrspace(2) %a) {30 %b = addrspacecast ptr addrspace(2) %a to ptr addrspace(0)31 ret ptr addrspace(0) %b32}33 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) %b37define ptr addrspace(2) @g2(ptr addrspace(0) %a) {38 %b = addrspacecast ptr addrspace(0) %a to ptr addrspace(2)39 ret ptr addrspace(2) %b40}41 42; CHECK: define i32 @load(ptr %a)43; CHECK: %i = load i32, ptr %a44; CHECK: ret i32 %i45define i32 @load(ptr %a) {46 %i = load i32, ptr %a47 ret i32 %i48}49 50; CHECK: define void @store(ptr %a, i32 %i)51; CHECK: store i32 %i, ptr %a52; CHECK: ret void53define void @store(ptr %a, i32 %i) {54 store i32 %i, ptr %a55 ret void56}57 58; CHECK: define ptr @gep(ptr %a)59; CHECK: %res = getelementptr i8, ptr %a, i32 260; CHECK: ret ptr %res61define ptr @gep(ptr %a) {62 %res = getelementptr i8, ptr %a, i32 263 ret ptr %res64}65 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> %res69define <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> %res72}73 74; CHECK: define <2 x ptr> @gep_vec2(<2 x ptr> %a)75; CHECK: %res = getelementptr i8, <2 x ptr> %a, i32 276; CHECK: ret <2 x ptr> %res77define <2 x ptr> @gep_vec2(<2 x ptr> %a) {78 %res = getelementptr i8, <2 x ptr> %a, i32 279 ret <2 x ptr> %res80}81 82; CHECK: define ptr @gep_constexpr(ptr %a)83; CHECK: ret ptr getelementptr (i16, ptr null, i32 3)84define ptr @gep_constexpr(ptr %a) {85 ret ptr getelementptr (i16, ptr null, i32 3)86}87 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>)90define <2 x ptr> @gep_constexpr_vec1(ptr %a) {91 ret <2 x ptr> getelementptr (i16, ptr null, <2 x i32> <i32 3, i32 4>)92}93 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> splat (i32 3))96define <2 x ptr> @gep_constexpr_vec2(<2 x ptr> %a) {97 ret <2 x ptr> getelementptr (i16, <2 x ptr> zeroinitializer, i32 3)98}99 100; CHECK: define void @cmpxchg(ptr %p, i32 %a, i32 %b)101; CHECK: %val_success = cmpxchg ptr %p, i32 %a, i32 %b acq_rel monotonic102; CHECK: ret void103define void @cmpxchg(ptr %p, i32 %a, i32 %b) {104 %val_success = cmpxchg ptr %p, i32 %a, i32 %b acq_rel monotonic105 ret void106}107 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 monotonic110; CHECK: ret void111define void @cmpxchg_ptr(ptr %p, ptr %a, ptr %b) {112 %val_success = cmpxchg ptr %p, ptr %a, ptr %b acq_rel monotonic113 ret void114}115 116; CHECK: define void @atomicrmw(ptr %a, i32 %i)117; CHECK: %b = atomicrmw add ptr %a, i32 %i acquire118; CHECK: ret void119define void @atomicrmw(ptr %a, i32 %i) {120 %b = atomicrmw add ptr %a, i32 %i acquire121 ret void122}123 124; CHECK: define void @atomicrmw_ptr(ptr %a, ptr %b)125; CHECK: %c = atomicrmw xchg ptr %a, ptr %b acquire126; CHECK: ret void127define void @atomicrmw_ptr(ptr %a, ptr %b) {128 %c = atomicrmw xchg ptr %a, ptr %b acquire129 ret void130}131 132; CHECK: define void @call(ptr %p)133; CHECK: call void %p()134; CHECK: ret void135define void @call(ptr %p) {136 call void %p()137 ret void138}139 140; CHECK: define void @call_arg(ptr %p, i32 %a)141; CHECK: call void %p(i32 %a)142; CHECK: ret void143define void @call_arg(ptr %p, i32 %a) {144 call void %p(i32 %a)145 ret void146}147 148; CHECK: define void @invoke(ptr %p) personality ptr @personality {149; CHECK: invoke void %p()150; CHECK: to label %continue unwind label %cleanup151declare void @personality()152define void @invoke(ptr %p) personality ptr @personality {153 invoke void %p()154 to label %continue unwind label %cleanup155 156continue:157 ret void158 159cleanup:160 landingpad {}161 cleanup162 ret void163}164 165; CHECK: define void @byval(ptr byval({ i32, i32 }) %0)166define void @byval(ptr byval({ i32, i32 }) %0) {167 ret void168}169 170; CHECK: define void @call_unnamed_fn() {171; CHECK: call void @0()172define void @call_unnamed_fn() {173 call void @0()174 ret void175}176 177; CHECK: define void @0() {178define void @0() {179 ret void180}181