xref: /llvm-project/llvm/test/Transforms/InstCombine/vararg.ll (revision c00f49cf12ff2916a372176f2154a83eb80f1692)
1; RUN: opt < %s -passes=instcombine -S | FileCheck %s
2
3%struct.__va_list = type { ptr, ptr, ptr, i32, i32 }
4
5declare void @llvm.lifetime.start.p0(i64, ptr nocapture)
6declare void @llvm.lifetime.end.p0(i64, ptr nocapture)
7declare void @llvm.va_start(ptr)
8declare void @llvm.va_end(ptr)
9declare void @llvm.va_copy(ptr, ptr)
10
11define i32 @func(ptr nocapture readnone %fmt, ...) {
12; CHECK-LABEL: @func(
13; CHECK: entry:
14; CHECK-NEXT: ret i32 0
15entry:
16  %va0 = alloca %struct.__va_list, align 8
17  %va1 = alloca %struct.__va_list, align 8
18  call void @llvm.lifetime.start.p0(i64 32, ptr %va0)
19  call void @llvm.va_start(ptr %va0)
20  call void @llvm.lifetime.start.p0(i64 32, ptr %va1)
21  call void @llvm.va_copy(ptr %va1, ptr %va0)
22  call void @llvm.va_end(ptr %va1)
23  call void @llvm.lifetime.end.p0(i64 32, ptr %va1)
24  call void @llvm.va_end(ptr %va0)
25  call void @llvm.lifetime.end.p0(i64 32, ptr %va0)
26  ret i32 0
27}
28
29