59 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 52; RUN: opt < %s -passes=instcombine -S | FileCheck %s3 4%struct.__va_list = type { ptr, ptr, ptr, i32, i32 }5 6define void @func(ptr nocapture readnone %fmt, ...) {7; CHECK-LABEL: define void @func(8; CHECK-SAME: ptr readnone captures(none) [[FMT:%.*]], ...) {9; CHECK-NEXT: [[ENTRY:.*:]]10; CHECK-NEXT: ret void11;12entry:13 %va0 = alloca %struct.__va_list, align 814 %va1 = alloca %struct.__va_list, align 815 call void @llvm.lifetime.start.p0(ptr %va0)16 call void @llvm.va_start(ptr %va0)17 call void @llvm.lifetime.start.p0(ptr %va1)18 call void @llvm.va_copy(ptr %va1, ptr %va0)19 call void @llvm.va_end(ptr %va1)20 call void @llvm.lifetime.end.p0(ptr %va1)21 call void @llvm.va_end(ptr %va0)22 call void @llvm.lifetime.end.p0(ptr %va0)23 ret void24}25 26declare void @callee(ptr)27 28define void @func_destroy_copy_src(ptr nocapture readnone %fmt, ...) {29; CHECK-LABEL: define void @func_destroy_copy_src(30; CHECK-SAME: ptr readnone captures(none) [[FMT:%.*]], ...) {31; CHECK-NEXT: [[ENTRY:.*:]]32; CHECK-NEXT: [[VA0:%.*]] = alloca [[STRUCT___VA_LIST:%.*]], align 833; CHECK-NEXT: [[VA1:%.*]] = alloca [[STRUCT___VA_LIST]], align 834; CHECK-NEXT: call void @llvm.lifetime.start.p0(ptr nonnull [[VA0]])35; CHECK-NEXT: call void @llvm.lifetime.start.p0(ptr nonnull [[VA1]])36; CHECK-NEXT: call void @llvm.va_start.p0(ptr nonnull [[VA0]])37; CHECK-NEXT: call void @llvm.va_copy.p0(ptr nonnull [[VA1]], ptr nonnull [[VA0]])38; CHECK-NEXT: call void @llvm.va_end.p0(ptr [[VA0]])39; CHECK-NEXT: call void @callee(ptr nonnull [[VA1]])40; CHECK-NEXT: call void @llvm.va_end.p0(ptr [[VA1]])41; CHECK-NEXT: call void @llvm.lifetime.end.p0(ptr nonnull [[VA1]])42; CHECK-NEXT: call void @llvm.lifetime.end.p0(ptr nonnull [[VA0]])43; CHECK-NEXT: ret void44;45entry:46 %va0 = alloca %struct.__va_list, align 847 %va1 = alloca %struct.__va_list, align 848 call void @llvm.lifetime.start.p0(ptr %va0)49 call void @llvm.lifetime.start.p0(ptr %va1)50 call void @llvm.va_start(ptr %va0)51 call void @llvm.va_copy(ptr %va1, ptr %va0)52 call void @llvm.va_end(ptr %va0)53 call void @callee(ptr %va1)54 call void @llvm.va_end(ptr %va1)55 call void @llvm.lifetime.end.p0(ptr %va1)56 call void @llvm.lifetime.end.p0(ptr %va0)57 ret void58}59