18516f54eSJon Chesterfield; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: -p --function-signature 28516f54eSJon Chesterfield; RUN: opt -S --passes=expand-variadics --expand-variadics-override=lowering < %s | FileCheck %s 38516f54eSJon Chesterfieldtarget datalayout = "e-p:64:64-p1:64:64-p2:32:32-p3:32:32-p4:64:64-p5:32:32-p6:32:32-p7:160:256:256:32-p8:128:128-p9:192:256:256:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-v2048:2048-n32:64-S32-A5-G1-ni:7:8:9" 48516f54eSJon Chesterfieldtarget triple = "amdgcn-amd-amdhsa" 58516f54eSJon Chesterfield 68516f54eSJon Chesterfield; Check the variables are lowered to the locations this target expects 78516f54eSJon Chesterfield 88516f54eSJon Chesterfield; The types show the call frames 98516f54eSJon Chesterfield; CHECK: %single_i32.vararg = type <{ i32 }> 108516f54eSJon Chesterfield; CHECK: %single_double.vararg = type <{ double }> 118516f54eSJon Chesterfield; CHECK: %single_v4f32.vararg = type <{ <4 x float> }> 128516f54eSJon Chesterfield; CHECK: %single_v8f32.vararg = type <{ <8 x float> }> 138516f54eSJon Chesterfield; CHECK: %single_v16f32.vararg = type <{ <16 x float> }> 148516f54eSJon Chesterfield; CHECK: %single_v32f32.vararg = type <{ <32 x float> }> 158516f54eSJon Chesterfield; CHECK: %i32_double.vararg = type <{ i32, double }> 168516f54eSJon Chesterfield; CHECK: %double_i32.vararg = type <{ double, i32 }> 178516f54eSJon Chesterfield; CHECK: %i32_libcS.vararg = type <{ i32, %struct.libcS }> 188516f54eSJon Chesterfield; CHECK: %libcS_i32.vararg = type <{ %struct.libcS, i32 }> 198516f54eSJon Chesterfield; CHECK: %i32_v4f32.vararg = type <{ i32, <4 x float> }> 208516f54eSJon Chesterfield; CHECK: %v4f32_i32.vararg = type <{ <4 x float>, i32 }> 218516f54eSJon Chesterfield; CHECK: %i32_v8f32.vararg = type <{ i32, <8 x float> }> 228516f54eSJon Chesterfield; CHECK: %v8f32_i32.vararg = type <{ <8 x float>, i32 }> 238516f54eSJon Chesterfield; CHECK: %i32_v16f32.vararg = type <{ i32, <16 x float> }> 248516f54eSJon Chesterfield; CHECK: %v16f32_i32.vararg = type <{ <16 x float>, i32 }> 258516f54eSJon Chesterfield; CHECK: %i32_v32f32.vararg = type <{ i32, <32 x float> }> 268516f54eSJon Chesterfield; CHECK: %v32f32_i32.vararg = type <{ <32 x float>, i32 }> 278516f54eSJon Chesterfield; CHECK: %fptr_single_i32.vararg = type <{ i32 }> 288516f54eSJon Chesterfield; CHECK: %fptr_libcS.vararg = type <{ %struct.libcS }> 298516f54eSJon Chesterfield 308516f54eSJon Chesterfield%struct.libcS = type { i8, i16, i32, i64, float, double } 318516f54eSJon Chesterfield 328516f54eSJon Chesterfield@vararg_ptr = hidden addrspace(1) global ptr @vararg, align 8 338516f54eSJon Chesterfield 348516f54eSJon Chesterfielddefine hidden void @copy(ptr noundef %va) { 358516f54eSJon Chesterfield; CHECK-LABEL: define {{[^@]+}}@copy(ptr noundef %va) { 368516f54eSJon Chesterfield; CHECK-NEXT: entry: 378516f54eSJon Chesterfield; CHECK-NEXT: %va.addr = alloca ptr, align 8, addrspace(5) 388516f54eSJon Chesterfield; CHECK-NEXT: %cp = alloca ptr, align 8, addrspace(5) 398516f54eSJon Chesterfield; CHECK-NEXT: %va.addr.ascast = addrspacecast ptr addrspace(5) %va.addr to ptr 408516f54eSJon Chesterfield; CHECK-NEXT: %cp.ascast = addrspacecast ptr addrspace(5) %cp to ptr 418516f54eSJon Chesterfield; CHECK-NEXT: store ptr %va, ptr addrspace(5) %va.addr, align 8 428516f54eSJon Chesterfield; CHECK-NEXT: call void @llvm.lifetime.start.p5(i64 8, ptr addrspace(5) %cp) 438516f54eSJon Chesterfield; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i32(ptr %cp.ascast, ptr %va.addr.ascast, i32 8, i1 false) 448516f54eSJon Chesterfield; CHECK-NEXT: %0 = load ptr, ptr addrspace(5) %cp, align 8 458516f54eSJon Chesterfield; CHECK-NEXT: call void @valist(ptr noundef %0) 468516f54eSJon Chesterfield; CHECK-NEXT: call void @llvm.lifetime.end.p5(i64 8, ptr addrspace(5) %cp) 478516f54eSJon Chesterfield; CHECK-NEXT: ret void 488516f54eSJon Chesterfield; 498516f54eSJon Chesterfieldentry: 508516f54eSJon Chesterfield %va.addr = alloca ptr, align 8, addrspace(5) 518516f54eSJon Chesterfield %cp = alloca ptr, align 8, addrspace(5) 528516f54eSJon Chesterfield %va.addr.ascast = addrspacecast ptr addrspace(5) %va.addr to ptr 538516f54eSJon Chesterfield %cp.ascast = addrspacecast ptr addrspace(5) %cp to ptr 548516f54eSJon Chesterfield store ptr %va, ptr addrspace(5) %va.addr, align 8 558516f54eSJon Chesterfield call void @llvm.lifetime.start.p5(i64 8, ptr addrspace(5) %cp) 568516f54eSJon Chesterfield call void @llvm.va_copy.p0(ptr %cp.ascast, ptr nonnull %va.addr.ascast) 578516f54eSJon Chesterfield %0 = load ptr, ptr addrspace(5) %cp, align 8 588516f54eSJon Chesterfield call void @valist(ptr noundef %0) 598516f54eSJon Chesterfield call void @llvm.lifetime.end.p5(i64 8, ptr addrspace(5) %cp) 608516f54eSJon Chesterfield ret void 618516f54eSJon Chesterfield} 628516f54eSJon Chesterfield 638516f54eSJon Chesterfielddeclare void @llvm.lifetime.start.p5(i64 immarg, ptr addrspace(5) nocapture) 648516f54eSJon Chesterfield 658516f54eSJon Chesterfielddeclare void @llvm.va_copy.p0(ptr, ptr) 668516f54eSJon Chesterfield 678516f54eSJon Chesterfielddeclare hidden void @valist(ptr noundef) 688516f54eSJon Chesterfield 698516f54eSJon Chesterfielddeclare void @llvm.lifetime.end.p5(i64 immarg, ptr addrspace(5) nocapture) 708516f54eSJon Chesterfield 718516f54eSJon Chesterfielddefine hidden void @start_once(...) { 728516f54eSJon Chesterfield; CHECK-LABEL: define {{[^@]+}}@start_once(ptr %varargs) { 738516f54eSJon Chesterfield; CHECK-NEXT: entry: 748516f54eSJon Chesterfield; CHECK-NEXT: %s = alloca ptr, align 8, addrspace(5) 758516f54eSJon Chesterfield; CHECK-NEXT: %s.ascast = addrspacecast ptr addrspace(5) %s to ptr 768516f54eSJon Chesterfield; CHECK-NEXT: call void @llvm.lifetime.start.p5(i64 8, ptr addrspace(5) %s) 778516f54eSJon Chesterfield; CHECK-NEXT: store ptr %varargs, ptr %s.ascast, align 8 788516f54eSJon Chesterfield; CHECK-NEXT: %0 = load ptr, ptr addrspace(5) %s, align 8 798516f54eSJon Chesterfield; CHECK-NEXT: call void @valist(ptr noundef %0) 808516f54eSJon Chesterfield; CHECK-NEXT: call void @llvm.lifetime.end.p5(i64 8, ptr addrspace(5) %s) 818516f54eSJon Chesterfield; CHECK-NEXT: ret void 828516f54eSJon Chesterfield; 838516f54eSJon Chesterfieldentry: 848516f54eSJon Chesterfield %s = alloca ptr, align 8, addrspace(5) 858516f54eSJon Chesterfield %s.ascast = addrspacecast ptr addrspace(5) %s to ptr 868516f54eSJon Chesterfield call void @llvm.lifetime.start.p5(i64 8, ptr addrspace(5) %s) 878516f54eSJon Chesterfield call void @llvm.va_start.p0(ptr %s.ascast) 888516f54eSJon Chesterfield %0 = load ptr, ptr addrspace(5) %s, align 8 898516f54eSJon Chesterfield call void @valist(ptr noundef %0) 908516f54eSJon Chesterfield call void @llvm.va_end.p0(ptr %s.ascast) 918516f54eSJon Chesterfield call void @llvm.lifetime.end.p5(i64 8, ptr addrspace(5) %s) 928516f54eSJon Chesterfield ret void 938516f54eSJon Chesterfield} 948516f54eSJon Chesterfield 958516f54eSJon Chesterfielddeclare void @llvm.va_start.p0(ptr) 968516f54eSJon Chesterfield 978516f54eSJon Chesterfielddeclare void @llvm.va_end.p0(ptr) 988516f54eSJon Chesterfield 998516f54eSJon Chesterfielddefine hidden void @start_twice(...) { 1008516f54eSJon Chesterfield; CHECK-LABEL: define {{[^@]+}}@start_twice(ptr %varargs) { 1018516f54eSJon Chesterfield; CHECK-NEXT: entry: 1028516f54eSJon Chesterfield; CHECK-NEXT: %s0 = alloca ptr, align 8, addrspace(5) 1038516f54eSJon Chesterfield; CHECK-NEXT: %s1 = alloca ptr, align 8, addrspace(5) 1048516f54eSJon Chesterfield; CHECK-NEXT: %s0.ascast = addrspacecast ptr addrspace(5) %s0 to ptr 1058516f54eSJon Chesterfield; CHECK-NEXT: %s1.ascast = addrspacecast ptr addrspace(5) %s1 to ptr 1068516f54eSJon Chesterfield; CHECK-NEXT: call void @llvm.lifetime.start.p5(i64 8, ptr addrspace(5) %s0) 1078516f54eSJon Chesterfield; CHECK-NEXT: call void @llvm.lifetime.start.p5(i64 8, ptr addrspace(5) %s1) 1088516f54eSJon Chesterfield; CHECK-NEXT: store ptr %varargs, ptr %s0.ascast, align 8 1098516f54eSJon Chesterfield; CHECK-NEXT: %0 = load ptr, ptr addrspace(5) %s0, align 8 1108516f54eSJon Chesterfield; CHECK-NEXT: call void @valist(ptr noundef %0) 1118516f54eSJon Chesterfield; CHECK-NEXT: store ptr %varargs, ptr %s1.ascast, align 8 1128516f54eSJon Chesterfield; CHECK-NEXT: %1 = load ptr, ptr addrspace(5) %s1, align 8 1138516f54eSJon Chesterfield; CHECK-NEXT: call void @valist(ptr noundef %1) 1148516f54eSJon Chesterfield; CHECK-NEXT: call void @llvm.lifetime.end.p5(i64 8, ptr addrspace(5) %s1) 1158516f54eSJon Chesterfield; CHECK-NEXT: call void @llvm.lifetime.end.p5(i64 8, ptr addrspace(5) %s0) 1168516f54eSJon Chesterfield; CHECK-NEXT: ret void 1178516f54eSJon Chesterfield; 1188516f54eSJon Chesterfieldentry: 1198516f54eSJon Chesterfield %s0 = alloca ptr, align 8, addrspace(5) 1208516f54eSJon Chesterfield %s1 = alloca ptr, align 8, addrspace(5) 1218516f54eSJon Chesterfield %s0.ascast = addrspacecast ptr addrspace(5) %s0 to ptr 1228516f54eSJon Chesterfield %s1.ascast = addrspacecast ptr addrspace(5) %s1 to ptr 1238516f54eSJon Chesterfield call void @llvm.lifetime.start.p5(i64 8, ptr addrspace(5) %s0) 1248516f54eSJon Chesterfield call void @llvm.lifetime.start.p5(i64 8, ptr addrspace(5) %s1) 1258516f54eSJon Chesterfield call void @llvm.va_start.p0(ptr %s0.ascast) 1268516f54eSJon Chesterfield %0 = load ptr, ptr addrspace(5) %s0, align 8 1278516f54eSJon Chesterfield call void @valist(ptr noundef %0) 1288516f54eSJon Chesterfield call void @llvm.va_end.p0(ptr %s0.ascast) 1298516f54eSJon Chesterfield call void @llvm.va_start.p0(ptr %s1.ascast) 1308516f54eSJon Chesterfield %1 = load ptr, ptr addrspace(5) %s1, align 8 1318516f54eSJon Chesterfield call void @valist(ptr noundef %1) 1328516f54eSJon Chesterfield call void @llvm.va_end.p0(ptr %s1.ascast) 1338516f54eSJon Chesterfield call void @llvm.lifetime.end.p5(i64 8, ptr addrspace(5) %s1) 1348516f54eSJon Chesterfield call void @llvm.lifetime.end.p5(i64 8, ptr addrspace(5) %s0) 1358516f54eSJon Chesterfield ret void 1368516f54eSJon Chesterfield} 1378516f54eSJon Chesterfield 1388516f54eSJon Chesterfielddefine hidden void @single_i32(i32 noundef %x) { 1398516f54eSJon Chesterfield; CHECK-LABEL: define {{[^@]+}}@single_i32(i32 noundef %x) { 1408516f54eSJon Chesterfield; CHECK-NEXT: entry: 1418516f54eSJon Chesterfield; CHECK-NEXT: %vararg_buffer = alloca %single_i32.vararg, align 4, addrspace(5) 1428516f54eSJon Chesterfield; CHECK-NEXT: call void @llvm.lifetime.start.p5(i64 4, ptr addrspace(5) %vararg_buffer) 143*94473f4dSHari Limaye; CHECK-NEXT: %0 = getelementptr inbounds nuw %single_i32.vararg, ptr addrspace(5) %vararg_buffer, i32 0, i32 0 1448516f54eSJon Chesterfield; CHECK-NEXT: store i32 %x, ptr addrspace(5) %0, align 4 1458516f54eSJon Chesterfield; CHECK-NEXT: %1 = addrspacecast ptr addrspace(5) %vararg_buffer to ptr 1468516f54eSJon Chesterfield; CHECK-NEXT: call void @vararg(ptr %1) 1478516f54eSJon Chesterfield; CHECK-NEXT: call void @llvm.lifetime.end.p5(i64 4, ptr addrspace(5) %vararg_buffer) 1488516f54eSJon Chesterfield; CHECK-NEXT: ret void 1498516f54eSJon Chesterfield; 1508516f54eSJon Chesterfieldentry: 1518516f54eSJon Chesterfield tail call void (...) @vararg(i32 noundef %x) 1528516f54eSJon Chesterfield ret void 1538516f54eSJon Chesterfield} 1548516f54eSJon Chesterfield 1558516f54eSJon Chesterfielddeclare hidden void @vararg(...) 1568516f54eSJon Chesterfield 1578516f54eSJon Chesterfielddefine hidden void @single_double(double noundef %x) { 1588516f54eSJon Chesterfield; CHECK-LABEL: define {{[^@]+}}@single_double(double noundef %x) { 1598516f54eSJon Chesterfield; CHECK-NEXT: entry: 1608516f54eSJon Chesterfield; CHECK-NEXT: %vararg_buffer = alloca %single_double.vararg, align 4, addrspace(5) 1618516f54eSJon Chesterfield; CHECK-NEXT: call void @llvm.lifetime.start.p5(i64 8, ptr addrspace(5) %vararg_buffer) 162*94473f4dSHari Limaye; CHECK-NEXT: %0 = getelementptr inbounds nuw %single_double.vararg, ptr addrspace(5) %vararg_buffer, i32 0, i32 0 1638516f54eSJon Chesterfield; CHECK-NEXT: store double %x, ptr addrspace(5) %0, align 8 1648516f54eSJon Chesterfield; CHECK-NEXT: %1 = addrspacecast ptr addrspace(5) %vararg_buffer to ptr 1658516f54eSJon Chesterfield; CHECK-NEXT: call void @vararg(ptr %1) 1668516f54eSJon Chesterfield; CHECK-NEXT: call void @llvm.lifetime.end.p5(i64 8, ptr addrspace(5) %vararg_buffer) 1678516f54eSJon Chesterfield; CHECK-NEXT: ret void 1688516f54eSJon Chesterfield; 1698516f54eSJon Chesterfieldentry: 1708516f54eSJon Chesterfield tail call void (...) @vararg(double noundef %x) 1718516f54eSJon Chesterfield ret void 1728516f54eSJon Chesterfield} 1738516f54eSJon Chesterfield 1748516f54eSJon Chesterfielddefine hidden void @single_v4f32(<4 x float> noundef %x) { 1758516f54eSJon Chesterfield; CHECK-LABEL: define {{[^@]+}}@single_v4f32(<4 x float> noundef %x) { 1768516f54eSJon Chesterfield; CHECK-NEXT: entry: 1778516f54eSJon Chesterfield; CHECK-NEXT: %vararg_buffer = alloca %single_v4f32.vararg, align 4, addrspace(5) 1788516f54eSJon Chesterfield; CHECK-NEXT: call void @llvm.lifetime.start.p5(i64 16, ptr addrspace(5) %vararg_buffer) 179*94473f4dSHari Limaye; CHECK-NEXT: %0 = getelementptr inbounds nuw %single_v4f32.vararg, ptr addrspace(5) %vararg_buffer, i32 0, i32 0 1808516f54eSJon Chesterfield; CHECK-NEXT: store <4 x float> %x, ptr addrspace(5) %0, align 16 1818516f54eSJon Chesterfield; CHECK-NEXT: %1 = addrspacecast ptr addrspace(5) %vararg_buffer to ptr 1828516f54eSJon Chesterfield; CHECK-NEXT: call void @vararg(ptr %1) 1838516f54eSJon Chesterfield; CHECK-NEXT: call void @llvm.lifetime.end.p5(i64 16, ptr addrspace(5) %vararg_buffer) 1848516f54eSJon Chesterfield; CHECK-NEXT: ret void 1858516f54eSJon Chesterfield; 1868516f54eSJon Chesterfieldentry: 1878516f54eSJon Chesterfield tail call void (...) @vararg(<4 x float> noundef %x) 1888516f54eSJon Chesterfield ret void 1898516f54eSJon Chesterfield} 1908516f54eSJon Chesterfield 1918516f54eSJon Chesterfielddefine hidden void @single_v8f32(<8 x float> noundef %x) { 1928516f54eSJon Chesterfield; CHECK-LABEL: define {{[^@]+}}@single_v8f32(<8 x float> noundef %x) { 1938516f54eSJon Chesterfield; CHECK-NEXT: entry: 1948516f54eSJon Chesterfield; CHECK-NEXT: %vararg_buffer = alloca %single_v8f32.vararg, align 4, addrspace(5) 1958516f54eSJon Chesterfield; CHECK-NEXT: call void @llvm.lifetime.start.p5(i64 32, ptr addrspace(5) %vararg_buffer) 196*94473f4dSHari Limaye; CHECK-NEXT: %0 = getelementptr inbounds nuw %single_v8f32.vararg, ptr addrspace(5) %vararg_buffer, i32 0, i32 0 1978516f54eSJon Chesterfield; CHECK-NEXT: store <8 x float> %x, ptr addrspace(5) %0, align 32 1988516f54eSJon Chesterfield; CHECK-NEXT: %1 = addrspacecast ptr addrspace(5) %vararg_buffer to ptr 1998516f54eSJon Chesterfield; CHECK-NEXT: call void @vararg(ptr %1) 2008516f54eSJon Chesterfield; CHECK-NEXT: call void @llvm.lifetime.end.p5(i64 32, ptr addrspace(5) %vararg_buffer) 2018516f54eSJon Chesterfield; CHECK-NEXT: ret void 2028516f54eSJon Chesterfield; 2038516f54eSJon Chesterfieldentry: 2048516f54eSJon Chesterfield tail call void (...) @vararg(<8 x float> noundef %x) 2058516f54eSJon Chesterfield ret void 2068516f54eSJon Chesterfield} 2078516f54eSJon Chesterfield 2088516f54eSJon Chesterfielddefine hidden void @single_v16f32(<16 x float> noundef %x) { 2098516f54eSJon Chesterfield; CHECK-LABEL: define {{[^@]+}}@single_v16f32(<16 x float> noundef %x) { 2108516f54eSJon Chesterfield; CHECK-NEXT: entry: 2118516f54eSJon Chesterfield; CHECK-NEXT: %vararg_buffer = alloca %single_v16f32.vararg, align 4, addrspace(5) 2128516f54eSJon Chesterfield; CHECK-NEXT: call void @llvm.lifetime.start.p5(i64 64, ptr addrspace(5) %vararg_buffer) 213*94473f4dSHari Limaye; CHECK-NEXT: %0 = getelementptr inbounds nuw %single_v16f32.vararg, ptr addrspace(5) %vararg_buffer, i32 0, i32 0 2148516f54eSJon Chesterfield; CHECK-NEXT: store <16 x float> %x, ptr addrspace(5) %0, align 64 2158516f54eSJon Chesterfield; CHECK-NEXT: %1 = addrspacecast ptr addrspace(5) %vararg_buffer to ptr 2168516f54eSJon Chesterfield; CHECK-NEXT: call void @vararg(ptr %1) 2178516f54eSJon Chesterfield; CHECK-NEXT: call void @llvm.lifetime.end.p5(i64 64, ptr addrspace(5) %vararg_buffer) 2188516f54eSJon Chesterfield; CHECK-NEXT: ret void 2198516f54eSJon Chesterfield; 2208516f54eSJon Chesterfieldentry: 2218516f54eSJon Chesterfield tail call void (...) @vararg(<16 x float> noundef %x) 2228516f54eSJon Chesterfield ret void 2238516f54eSJon Chesterfield} 2248516f54eSJon Chesterfield 2258516f54eSJon Chesterfielddefine hidden void @single_v32f32(<32 x float> noundef %x) { 2268516f54eSJon Chesterfield; CHECK-LABEL: define {{[^@]+}}@single_v32f32(<32 x float> noundef %x) { 2278516f54eSJon Chesterfield; CHECK-NEXT: entry: 2288516f54eSJon Chesterfield; CHECK-NEXT: %vararg_buffer = alloca %single_v32f32.vararg, align 4, addrspace(5) 2298516f54eSJon Chesterfield; CHECK-NEXT: call void @llvm.lifetime.start.p5(i64 128, ptr addrspace(5) %vararg_buffer) 230*94473f4dSHari Limaye; CHECK-NEXT: %0 = getelementptr inbounds nuw %single_v32f32.vararg, ptr addrspace(5) %vararg_buffer, i32 0, i32 0 2318516f54eSJon Chesterfield; CHECK-NEXT: store <32 x float> %x, ptr addrspace(5) %0, align 128 2328516f54eSJon Chesterfield; CHECK-NEXT: %1 = addrspacecast ptr addrspace(5) %vararg_buffer to ptr 2338516f54eSJon Chesterfield; CHECK-NEXT: call void @vararg(ptr %1) 2348516f54eSJon Chesterfield; CHECK-NEXT: call void @llvm.lifetime.end.p5(i64 128, ptr addrspace(5) %vararg_buffer) 2358516f54eSJon Chesterfield; CHECK-NEXT: ret void 2368516f54eSJon Chesterfield; 2378516f54eSJon Chesterfieldentry: 2388516f54eSJon Chesterfield tail call void (...) @vararg(<32 x float> noundef %x) 2398516f54eSJon Chesterfield ret void 2408516f54eSJon Chesterfield} 2418516f54eSJon Chesterfield 2428516f54eSJon Chesterfielddefine hidden void @i32_double(i32 noundef %x, double noundef %y) { 2438516f54eSJon Chesterfield; CHECK-LABEL: define {{[^@]+}}@i32_double(i32 noundef %x, double noundef %y) { 2448516f54eSJon Chesterfield; CHECK-NEXT: entry: 2458516f54eSJon Chesterfield; CHECK-NEXT: %vararg_buffer = alloca %i32_double.vararg, align 4, addrspace(5) 2468516f54eSJon Chesterfield; CHECK-NEXT: call void @llvm.lifetime.start.p5(i64 12, ptr addrspace(5) %vararg_buffer) 247*94473f4dSHari Limaye; CHECK-NEXT: %0 = getelementptr inbounds nuw %i32_double.vararg, ptr addrspace(5) %vararg_buffer, i32 0, i32 0 2488516f54eSJon Chesterfield; CHECK-NEXT: store i32 %x, ptr addrspace(5) %0, align 4 249*94473f4dSHari Limaye; CHECK-NEXT: %1 = getelementptr inbounds nuw %i32_double.vararg, ptr addrspace(5) %vararg_buffer, i32 0, i32 1 2508516f54eSJon Chesterfield; CHECK-NEXT: store double %y, ptr addrspace(5) %1, align 8 2518516f54eSJon Chesterfield; CHECK-NEXT: %2 = addrspacecast ptr addrspace(5) %vararg_buffer to ptr 2528516f54eSJon Chesterfield; CHECK-NEXT: call void @vararg(ptr %2) 2538516f54eSJon Chesterfield; CHECK-NEXT: call void @llvm.lifetime.end.p5(i64 12, ptr addrspace(5) %vararg_buffer) 2548516f54eSJon Chesterfield; CHECK-NEXT: ret void 2558516f54eSJon Chesterfield; 2568516f54eSJon Chesterfieldentry: 2578516f54eSJon Chesterfield tail call void (...) @vararg(i32 noundef %x, double noundef %y) 2588516f54eSJon Chesterfield ret void 2598516f54eSJon Chesterfield} 2608516f54eSJon Chesterfield 2618516f54eSJon Chesterfielddefine hidden void @double_i32(double noundef %x, i32 noundef %y) { 2628516f54eSJon Chesterfield; CHECK-LABEL: define {{[^@]+}}@double_i32(double noundef %x, i32 noundef %y) { 2638516f54eSJon Chesterfield; CHECK-NEXT: entry: 2648516f54eSJon Chesterfield; CHECK-NEXT: %vararg_buffer = alloca %double_i32.vararg, align 4, addrspace(5) 2658516f54eSJon Chesterfield; CHECK-NEXT: call void @llvm.lifetime.start.p5(i64 12, ptr addrspace(5) %vararg_buffer) 266*94473f4dSHari Limaye; CHECK-NEXT: %0 = getelementptr inbounds nuw %double_i32.vararg, ptr addrspace(5) %vararg_buffer, i32 0, i32 0 2678516f54eSJon Chesterfield; CHECK-NEXT: store double %x, ptr addrspace(5) %0, align 8 268*94473f4dSHari Limaye; CHECK-NEXT: %1 = getelementptr inbounds nuw %double_i32.vararg, ptr addrspace(5) %vararg_buffer, i32 0, i32 1 2698516f54eSJon Chesterfield; CHECK-NEXT: store i32 %y, ptr addrspace(5) %1, align 4 2708516f54eSJon Chesterfield; CHECK-NEXT: %2 = addrspacecast ptr addrspace(5) %vararg_buffer to ptr 2718516f54eSJon Chesterfield; CHECK-NEXT: call void @vararg(ptr %2) 2728516f54eSJon Chesterfield; CHECK-NEXT: call void @llvm.lifetime.end.p5(i64 12, ptr addrspace(5) %vararg_buffer) 2738516f54eSJon Chesterfield; CHECK-NEXT: ret void 2748516f54eSJon Chesterfield; 2758516f54eSJon Chesterfieldentry: 2768516f54eSJon Chesterfield tail call void (...) @vararg(double noundef %x, i32 noundef %y) 2778516f54eSJon Chesterfield ret void 2788516f54eSJon Chesterfield} 2798516f54eSJon Chesterfield 2808516f54eSJon Chesterfielddefine hidden void @i32_libcS(i32 noundef %x, i8 %y.coerce0, i16 %y.coerce1, i32 %y.coerce2, i64 %y.coerce3, float %y.coerce4, double %y.coerce5) { 2818516f54eSJon Chesterfield; CHECK-LABEL: define {{[^@]+}}@i32_libcS(i32 noundef %x, i8 %y.coerce0, i16 %y.coerce1, i32 %y.coerce2, i64 %y.coerce3, float %y.coerce4, double %y.coerce5) { 2828516f54eSJon Chesterfield; CHECK-NEXT: entry: 2838516f54eSJon Chesterfield; CHECK-NEXT: %vararg_buffer = alloca %i32_libcS.vararg, align 4, addrspace(5) 2848516f54eSJon Chesterfield; CHECK-NEXT: %.fca.0.insert = insertvalue %struct.libcS poison, i8 %y.coerce0, 0 2858516f54eSJon Chesterfield; CHECK-NEXT: %.fca.1.insert = insertvalue %struct.libcS %.fca.0.insert, i16 %y.coerce1, 1 2868516f54eSJon Chesterfield; CHECK-NEXT: %.fca.2.insert = insertvalue %struct.libcS %.fca.1.insert, i32 %y.coerce2, 2 2878516f54eSJon Chesterfield; CHECK-NEXT: %.fca.3.insert = insertvalue %struct.libcS %.fca.2.insert, i64 %y.coerce3, 3 2888516f54eSJon Chesterfield; CHECK-NEXT: %.fca.4.insert = insertvalue %struct.libcS %.fca.3.insert, float %y.coerce4, 4 2898516f54eSJon Chesterfield; CHECK-NEXT: %.fca.5.insert = insertvalue %struct.libcS %.fca.4.insert, double %y.coerce5, 5 2908516f54eSJon Chesterfield; CHECK-NEXT: call void @llvm.lifetime.start.p5(i64 36, ptr addrspace(5) %vararg_buffer) 291*94473f4dSHari Limaye; CHECK-NEXT: %0 = getelementptr inbounds nuw %i32_libcS.vararg, ptr addrspace(5) %vararg_buffer, i32 0, i32 0 2928516f54eSJon Chesterfield; CHECK-NEXT: store i32 %x, ptr addrspace(5) %0, align 4 293*94473f4dSHari Limaye; CHECK-NEXT: %1 = getelementptr inbounds nuw %i32_libcS.vararg, ptr addrspace(5) %vararg_buffer, i32 0, i32 1 2948516f54eSJon Chesterfield; CHECK-NEXT: store %struct.libcS %.fca.5.insert, ptr addrspace(5) %1, align 8 2958516f54eSJon Chesterfield; CHECK-NEXT: %2 = addrspacecast ptr addrspace(5) %vararg_buffer to ptr 2968516f54eSJon Chesterfield; CHECK-NEXT: call void @vararg(ptr %2) 2978516f54eSJon Chesterfield; CHECK-NEXT: call void @llvm.lifetime.end.p5(i64 36, ptr addrspace(5) %vararg_buffer) 2988516f54eSJon Chesterfield; CHECK-NEXT: ret void 2998516f54eSJon Chesterfield; 3008516f54eSJon Chesterfieldentry: 3018516f54eSJon Chesterfield %.fca.0.insert = insertvalue %struct.libcS poison, i8 %y.coerce0, 0 3028516f54eSJon Chesterfield %.fca.1.insert = insertvalue %struct.libcS %.fca.0.insert, i16 %y.coerce1, 1 3038516f54eSJon Chesterfield %.fca.2.insert = insertvalue %struct.libcS %.fca.1.insert, i32 %y.coerce2, 2 3048516f54eSJon Chesterfield %.fca.3.insert = insertvalue %struct.libcS %.fca.2.insert, i64 %y.coerce3, 3 3058516f54eSJon Chesterfield %.fca.4.insert = insertvalue %struct.libcS %.fca.3.insert, float %y.coerce4, 4 3068516f54eSJon Chesterfield %.fca.5.insert = insertvalue %struct.libcS %.fca.4.insert, double %y.coerce5, 5 3078516f54eSJon Chesterfield tail call void (...) @vararg(i32 noundef %x, %struct.libcS %.fca.5.insert) 3088516f54eSJon Chesterfield ret void 3098516f54eSJon Chesterfield} 3108516f54eSJon Chesterfield 3118516f54eSJon Chesterfielddefine hidden void @libcS_i32(i8 %x.coerce0, i16 %x.coerce1, i32 %x.coerce2, i64 %x.coerce3, float %x.coerce4, double %x.coerce5, i32 noundef %y) { 3128516f54eSJon Chesterfield; CHECK-LABEL: define {{[^@]+}}@libcS_i32(i8 %x.coerce0, i16 %x.coerce1, i32 %x.coerce2, i64 %x.coerce3, float %x.coerce4, double %x.coerce5, i32 noundef %y) { 3138516f54eSJon Chesterfield; CHECK-NEXT: entry: 3148516f54eSJon Chesterfield; CHECK-NEXT: %vararg_buffer = alloca %libcS_i32.vararg, align 4, addrspace(5) 3158516f54eSJon Chesterfield; CHECK-NEXT: %.fca.0.insert = insertvalue %struct.libcS poison, i8 %x.coerce0, 0 3168516f54eSJon Chesterfield; CHECK-NEXT: %.fca.1.insert = insertvalue %struct.libcS %.fca.0.insert, i16 %x.coerce1, 1 3178516f54eSJon Chesterfield; CHECK-NEXT: %.fca.2.insert = insertvalue %struct.libcS %.fca.1.insert, i32 %x.coerce2, 2 3188516f54eSJon Chesterfield; CHECK-NEXT: %.fca.3.insert = insertvalue %struct.libcS %.fca.2.insert, i64 %x.coerce3, 3 3198516f54eSJon Chesterfield; CHECK-NEXT: %.fca.4.insert = insertvalue %struct.libcS %.fca.3.insert, float %x.coerce4, 4 3208516f54eSJon Chesterfield; CHECK-NEXT: %.fca.5.insert = insertvalue %struct.libcS %.fca.4.insert, double %x.coerce5, 5 3218516f54eSJon Chesterfield; CHECK-NEXT: call void @llvm.lifetime.start.p5(i64 36, ptr addrspace(5) %vararg_buffer) 322*94473f4dSHari Limaye; CHECK-NEXT: %0 = getelementptr inbounds nuw %libcS_i32.vararg, ptr addrspace(5) %vararg_buffer, i32 0, i32 0 3238516f54eSJon Chesterfield; CHECK-NEXT: store %struct.libcS %.fca.5.insert, ptr addrspace(5) %0, align 8 324*94473f4dSHari Limaye; CHECK-NEXT: %1 = getelementptr inbounds nuw %libcS_i32.vararg, ptr addrspace(5) %vararg_buffer, i32 0, i32 1 3258516f54eSJon Chesterfield; CHECK-NEXT: store i32 %y, ptr addrspace(5) %1, align 4 3268516f54eSJon Chesterfield; CHECK-NEXT: %2 = addrspacecast ptr addrspace(5) %vararg_buffer to ptr 3278516f54eSJon Chesterfield; CHECK-NEXT: call void @vararg(ptr %2) 3288516f54eSJon Chesterfield; CHECK-NEXT: call void @llvm.lifetime.end.p5(i64 36, ptr addrspace(5) %vararg_buffer) 3298516f54eSJon Chesterfield; CHECK-NEXT: ret void 3308516f54eSJon Chesterfield; 3318516f54eSJon Chesterfieldentry: 3328516f54eSJon Chesterfield %.fca.0.insert = insertvalue %struct.libcS poison, i8 %x.coerce0, 0 3338516f54eSJon Chesterfield %.fca.1.insert = insertvalue %struct.libcS %.fca.0.insert, i16 %x.coerce1, 1 3348516f54eSJon Chesterfield %.fca.2.insert = insertvalue %struct.libcS %.fca.1.insert, i32 %x.coerce2, 2 3358516f54eSJon Chesterfield %.fca.3.insert = insertvalue %struct.libcS %.fca.2.insert, i64 %x.coerce3, 3 3368516f54eSJon Chesterfield %.fca.4.insert = insertvalue %struct.libcS %.fca.3.insert, float %x.coerce4, 4 3378516f54eSJon Chesterfield %.fca.5.insert = insertvalue %struct.libcS %.fca.4.insert, double %x.coerce5, 5 3388516f54eSJon Chesterfield tail call void (...) @vararg(%struct.libcS %.fca.5.insert, i32 noundef %y) 3398516f54eSJon Chesterfield ret void 3408516f54eSJon Chesterfield} 3418516f54eSJon Chesterfield 3428516f54eSJon Chesterfielddefine hidden void @i32_v4f32(i32 noundef %x, <4 x float> noundef %y) { 3438516f54eSJon Chesterfield; CHECK-LABEL: define {{[^@]+}}@i32_v4f32(i32 noundef %x, <4 x float> noundef %y) { 3448516f54eSJon Chesterfield; CHECK-NEXT: entry: 3458516f54eSJon Chesterfield; CHECK-NEXT: %vararg_buffer = alloca %i32_v4f32.vararg, align 4, addrspace(5) 3468516f54eSJon Chesterfield; CHECK-NEXT: call void @llvm.lifetime.start.p5(i64 20, ptr addrspace(5) %vararg_buffer) 347*94473f4dSHari Limaye; CHECK-NEXT: %0 = getelementptr inbounds nuw %i32_v4f32.vararg, ptr addrspace(5) %vararg_buffer, i32 0, i32 0 3488516f54eSJon Chesterfield; CHECK-NEXT: store i32 %x, ptr addrspace(5) %0, align 4 349*94473f4dSHari Limaye; CHECK-NEXT: %1 = getelementptr inbounds nuw %i32_v4f32.vararg, ptr addrspace(5) %vararg_buffer, i32 0, i32 1 3508516f54eSJon Chesterfield; CHECK-NEXT: store <4 x float> %y, ptr addrspace(5) %1, align 16 3518516f54eSJon Chesterfield; CHECK-NEXT: %2 = addrspacecast ptr addrspace(5) %vararg_buffer to ptr 3528516f54eSJon Chesterfield; CHECK-NEXT: call void @vararg(ptr %2) 3538516f54eSJon Chesterfield; CHECK-NEXT: call void @llvm.lifetime.end.p5(i64 20, ptr addrspace(5) %vararg_buffer) 3548516f54eSJon Chesterfield; CHECK-NEXT: ret void 3558516f54eSJon Chesterfield; 3568516f54eSJon Chesterfieldentry: 3578516f54eSJon Chesterfield tail call void (...) @vararg(i32 noundef %x, <4 x float> noundef %y) 3588516f54eSJon Chesterfield ret void 3598516f54eSJon Chesterfield} 3608516f54eSJon Chesterfield 3618516f54eSJon Chesterfielddefine hidden void @v4f32_i32(<4 x float> noundef %x, i32 noundef %y) { 3628516f54eSJon Chesterfield; CHECK-LABEL: define {{[^@]+}}@v4f32_i32(<4 x float> noundef %x, i32 noundef %y) { 3638516f54eSJon Chesterfield; CHECK-NEXT: entry: 3648516f54eSJon Chesterfield; CHECK-NEXT: %vararg_buffer = alloca %v4f32_i32.vararg, align 4, addrspace(5) 3658516f54eSJon Chesterfield; CHECK-NEXT: call void @llvm.lifetime.start.p5(i64 20, ptr addrspace(5) %vararg_buffer) 366*94473f4dSHari Limaye; CHECK-NEXT: %0 = getelementptr inbounds nuw %v4f32_i32.vararg, ptr addrspace(5) %vararg_buffer, i32 0, i32 0 3678516f54eSJon Chesterfield; CHECK-NEXT: store <4 x float> %x, ptr addrspace(5) %0, align 16 368*94473f4dSHari Limaye; CHECK-NEXT: %1 = getelementptr inbounds nuw %v4f32_i32.vararg, ptr addrspace(5) %vararg_buffer, i32 0, i32 1 3698516f54eSJon Chesterfield; CHECK-NEXT: store i32 %y, ptr addrspace(5) %1, align 4 3708516f54eSJon Chesterfield; CHECK-NEXT: %2 = addrspacecast ptr addrspace(5) %vararg_buffer to ptr 3718516f54eSJon Chesterfield; CHECK-NEXT: call void @vararg(ptr %2) 3728516f54eSJon Chesterfield; CHECK-NEXT: call void @llvm.lifetime.end.p5(i64 20, ptr addrspace(5) %vararg_buffer) 3738516f54eSJon Chesterfield; CHECK-NEXT: ret void 3748516f54eSJon Chesterfield; 3758516f54eSJon Chesterfieldentry: 3768516f54eSJon Chesterfield tail call void (...) @vararg(<4 x float> noundef %x, i32 noundef %y) 3778516f54eSJon Chesterfield ret void 3788516f54eSJon Chesterfield} 3798516f54eSJon Chesterfield 3808516f54eSJon Chesterfielddefine hidden void @i32_v8f32(i32 noundef %x, <8 x float> noundef %y) { 3818516f54eSJon Chesterfield; CHECK-LABEL: define {{[^@]+}}@i32_v8f32(i32 noundef %x, <8 x float> noundef %y) { 3828516f54eSJon Chesterfield; CHECK-NEXT: entry: 3838516f54eSJon Chesterfield; CHECK-NEXT: %vararg_buffer = alloca %i32_v8f32.vararg, align 4, addrspace(5) 3848516f54eSJon Chesterfield; CHECK-NEXT: call void @llvm.lifetime.start.p5(i64 36, ptr addrspace(5) %vararg_buffer) 385*94473f4dSHari Limaye; CHECK-NEXT: %0 = getelementptr inbounds nuw %i32_v8f32.vararg, ptr addrspace(5) %vararg_buffer, i32 0, i32 0 3868516f54eSJon Chesterfield; CHECK-NEXT: store i32 %x, ptr addrspace(5) %0, align 4 387*94473f4dSHari Limaye; CHECK-NEXT: %1 = getelementptr inbounds nuw %i32_v8f32.vararg, ptr addrspace(5) %vararg_buffer, i32 0, i32 1 3888516f54eSJon Chesterfield; CHECK-NEXT: store <8 x float> %y, ptr addrspace(5) %1, align 32 3898516f54eSJon Chesterfield; CHECK-NEXT: %2 = addrspacecast ptr addrspace(5) %vararg_buffer to ptr 3908516f54eSJon Chesterfield; CHECK-NEXT: call void @vararg(ptr %2) 3918516f54eSJon Chesterfield; CHECK-NEXT: call void @llvm.lifetime.end.p5(i64 36, ptr addrspace(5) %vararg_buffer) 3928516f54eSJon Chesterfield; CHECK-NEXT: ret void 3938516f54eSJon Chesterfield; 3948516f54eSJon Chesterfieldentry: 3958516f54eSJon Chesterfield tail call void (...) @vararg(i32 noundef %x, <8 x float> noundef %y) 3968516f54eSJon Chesterfield ret void 3978516f54eSJon Chesterfield} 3988516f54eSJon Chesterfield 3998516f54eSJon Chesterfielddefine hidden void @v8f32_i32(<8 x float> noundef %x, i32 noundef %y) { 4008516f54eSJon Chesterfield; CHECK-LABEL: define {{[^@]+}}@v8f32_i32(<8 x float> noundef %x, i32 noundef %y) { 4018516f54eSJon Chesterfield; CHECK-NEXT: entry: 4028516f54eSJon Chesterfield; CHECK-NEXT: %vararg_buffer = alloca %v8f32_i32.vararg, align 4, addrspace(5) 4038516f54eSJon Chesterfield; CHECK-NEXT: call void @llvm.lifetime.start.p5(i64 36, ptr addrspace(5) %vararg_buffer) 404*94473f4dSHari Limaye; CHECK-NEXT: %0 = getelementptr inbounds nuw %v8f32_i32.vararg, ptr addrspace(5) %vararg_buffer, i32 0, i32 0 4058516f54eSJon Chesterfield; CHECK-NEXT: store <8 x float> %x, ptr addrspace(5) %0, align 32 406*94473f4dSHari Limaye; CHECK-NEXT: %1 = getelementptr inbounds nuw %v8f32_i32.vararg, ptr addrspace(5) %vararg_buffer, i32 0, i32 1 4078516f54eSJon Chesterfield; CHECK-NEXT: store i32 %y, ptr addrspace(5) %1, align 4 4088516f54eSJon Chesterfield; CHECK-NEXT: %2 = addrspacecast ptr addrspace(5) %vararg_buffer to ptr 4098516f54eSJon Chesterfield; CHECK-NEXT: call void @vararg(ptr %2) 4108516f54eSJon Chesterfield; CHECK-NEXT: call void @llvm.lifetime.end.p5(i64 36, ptr addrspace(5) %vararg_buffer) 4118516f54eSJon Chesterfield; CHECK-NEXT: ret void 4128516f54eSJon Chesterfield; 4138516f54eSJon Chesterfieldentry: 4148516f54eSJon Chesterfield tail call void (...) @vararg(<8 x float> noundef %x, i32 noundef %y) 4158516f54eSJon Chesterfield ret void 4168516f54eSJon Chesterfield} 4178516f54eSJon Chesterfield 4188516f54eSJon Chesterfielddefine hidden void @i32_v16f32(i32 noundef %x, <16 x float> noundef %y) { 4198516f54eSJon Chesterfield; CHECK-LABEL: define {{[^@]+}}@i32_v16f32(i32 noundef %x, <16 x float> noundef %y) { 4208516f54eSJon Chesterfield; CHECK-NEXT: entry: 4218516f54eSJon Chesterfield; CHECK-NEXT: %vararg_buffer = alloca %i32_v16f32.vararg, align 4, addrspace(5) 4228516f54eSJon Chesterfield; CHECK-NEXT: call void @llvm.lifetime.start.p5(i64 68, ptr addrspace(5) %vararg_buffer) 423*94473f4dSHari Limaye; CHECK-NEXT: %0 = getelementptr inbounds nuw %i32_v16f32.vararg, ptr addrspace(5) %vararg_buffer, i32 0, i32 0 4248516f54eSJon Chesterfield; CHECK-NEXT: store i32 %x, ptr addrspace(5) %0, align 4 425*94473f4dSHari Limaye; CHECK-NEXT: %1 = getelementptr inbounds nuw %i32_v16f32.vararg, ptr addrspace(5) %vararg_buffer, i32 0, i32 1 4268516f54eSJon Chesterfield; CHECK-NEXT: store <16 x float> %y, ptr addrspace(5) %1, align 64 4278516f54eSJon Chesterfield; CHECK-NEXT: %2 = addrspacecast ptr addrspace(5) %vararg_buffer to ptr 4288516f54eSJon Chesterfield; CHECK-NEXT: call void @vararg(ptr %2) 4298516f54eSJon Chesterfield; CHECK-NEXT: call void @llvm.lifetime.end.p5(i64 68, ptr addrspace(5) %vararg_buffer) 4308516f54eSJon Chesterfield; CHECK-NEXT: ret void 4318516f54eSJon Chesterfield; 4328516f54eSJon Chesterfieldentry: 4338516f54eSJon Chesterfield tail call void (...) @vararg(i32 noundef %x, <16 x float> noundef %y) 4348516f54eSJon Chesterfield ret void 4358516f54eSJon Chesterfield} 4368516f54eSJon Chesterfield 4378516f54eSJon Chesterfielddefine hidden void @v16f32_i32(<16 x float> noundef %x, i32 noundef %y) { 4388516f54eSJon Chesterfield; CHECK-LABEL: define {{[^@]+}}@v16f32_i32(<16 x float> noundef %x, i32 noundef %y) { 4398516f54eSJon Chesterfield; CHECK-NEXT: entry: 4408516f54eSJon Chesterfield; CHECK-NEXT: %vararg_buffer = alloca %v16f32_i32.vararg, align 4, addrspace(5) 4418516f54eSJon Chesterfield; CHECK-NEXT: call void @llvm.lifetime.start.p5(i64 68, ptr addrspace(5) %vararg_buffer) 442*94473f4dSHari Limaye; CHECK-NEXT: %0 = getelementptr inbounds nuw %v16f32_i32.vararg, ptr addrspace(5) %vararg_buffer, i32 0, i32 0 4438516f54eSJon Chesterfield; CHECK-NEXT: store <16 x float> %x, ptr addrspace(5) %0, align 64 444*94473f4dSHari Limaye; CHECK-NEXT: %1 = getelementptr inbounds nuw %v16f32_i32.vararg, ptr addrspace(5) %vararg_buffer, i32 0, i32 1 4458516f54eSJon Chesterfield; CHECK-NEXT: store i32 %y, ptr addrspace(5) %1, align 4 4468516f54eSJon Chesterfield; CHECK-NEXT: %2 = addrspacecast ptr addrspace(5) %vararg_buffer to ptr 4478516f54eSJon Chesterfield; CHECK-NEXT: call void @vararg(ptr %2) 4488516f54eSJon Chesterfield; CHECK-NEXT: call void @llvm.lifetime.end.p5(i64 68, ptr addrspace(5) %vararg_buffer) 4498516f54eSJon Chesterfield; CHECK-NEXT: ret void 4508516f54eSJon Chesterfield; 4518516f54eSJon Chesterfieldentry: 4528516f54eSJon Chesterfield tail call void (...) @vararg(<16 x float> noundef %x, i32 noundef %y) 4538516f54eSJon Chesterfield ret void 4548516f54eSJon Chesterfield} 4558516f54eSJon Chesterfield 4568516f54eSJon Chesterfielddefine hidden void @i32_v32f32(i32 noundef %x, <32 x float> noundef %y) { 4578516f54eSJon Chesterfield; CHECK-LABEL: define {{[^@]+}}@i32_v32f32(i32 noundef %x, <32 x float> noundef %y) { 4588516f54eSJon Chesterfield; CHECK-NEXT: entry: 4598516f54eSJon Chesterfield; CHECK-NEXT: %vararg_buffer = alloca %i32_v32f32.vararg, align 4, addrspace(5) 4608516f54eSJon Chesterfield; CHECK-NEXT: call void @llvm.lifetime.start.p5(i64 132, ptr addrspace(5) %vararg_buffer) 461*94473f4dSHari Limaye; CHECK-NEXT: %0 = getelementptr inbounds nuw %i32_v32f32.vararg, ptr addrspace(5) %vararg_buffer, i32 0, i32 0 4628516f54eSJon Chesterfield; CHECK-NEXT: store i32 %x, ptr addrspace(5) %0, align 4 463*94473f4dSHari Limaye; CHECK-NEXT: %1 = getelementptr inbounds nuw %i32_v32f32.vararg, ptr addrspace(5) %vararg_buffer, i32 0, i32 1 4648516f54eSJon Chesterfield; CHECK-NEXT: store <32 x float> %y, ptr addrspace(5) %1, align 128 4658516f54eSJon Chesterfield; CHECK-NEXT: %2 = addrspacecast ptr addrspace(5) %vararg_buffer to ptr 4668516f54eSJon Chesterfield; CHECK-NEXT: call void @vararg(ptr %2) 4678516f54eSJon Chesterfield; CHECK-NEXT: call void @llvm.lifetime.end.p5(i64 132, ptr addrspace(5) %vararg_buffer) 4688516f54eSJon Chesterfield; CHECK-NEXT: ret void 4698516f54eSJon Chesterfield; 4708516f54eSJon Chesterfieldentry: 4718516f54eSJon Chesterfield tail call void (...) @vararg(i32 noundef %x, <32 x float> noundef %y) 4728516f54eSJon Chesterfield ret void 4738516f54eSJon Chesterfield} 4748516f54eSJon Chesterfield 4758516f54eSJon Chesterfielddefine hidden void @v32f32_i32(<32 x float> noundef %x, i32 noundef %y) { 4768516f54eSJon Chesterfield; CHECK-LABEL: define {{[^@]+}}@v32f32_i32(<32 x float> noundef %x, i32 noundef %y) { 4778516f54eSJon Chesterfield; CHECK-NEXT: entry: 4788516f54eSJon Chesterfield; CHECK-NEXT: %vararg_buffer = alloca %v32f32_i32.vararg, align 4, addrspace(5) 4798516f54eSJon Chesterfield; CHECK-NEXT: call void @llvm.lifetime.start.p5(i64 132, ptr addrspace(5) %vararg_buffer) 480*94473f4dSHari Limaye; CHECK-NEXT: %0 = getelementptr inbounds nuw %v32f32_i32.vararg, ptr addrspace(5) %vararg_buffer, i32 0, i32 0 4818516f54eSJon Chesterfield; CHECK-NEXT: store <32 x float> %x, ptr addrspace(5) %0, align 128 482*94473f4dSHari Limaye; CHECK-NEXT: %1 = getelementptr inbounds nuw %v32f32_i32.vararg, ptr addrspace(5) %vararg_buffer, i32 0, i32 1 4838516f54eSJon Chesterfield; CHECK-NEXT: store i32 %y, ptr addrspace(5) %1, align 4 4848516f54eSJon Chesterfield; CHECK-NEXT: %2 = addrspacecast ptr addrspace(5) %vararg_buffer to ptr 4858516f54eSJon Chesterfield; CHECK-NEXT: call void @vararg(ptr %2) 4868516f54eSJon Chesterfield; CHECK-NEXT: call void @llvm.lifetime.end.p5(i64 132, ptr addrspace(5) %vararg_buffer) 4878516f54eSJon Chesterfield; CHECK-NEXT: ret void 4888516f54eSJon Chesterfield; 4898516f54eSJon Chesterfieldentry: 4908516f54eSJon Chesterfield tail call void (...) @vararg(<32 x float> noundef %x, i32 noundef %y) 4918516f54eSJon Chesterfield ret void 4928516f54eSJon Chesterfield} 4938516f54eSJon Chesterfield 4948516f54eSJon Chesterfielddefine hidden void @fptr_single_i32(i32 noundef %x) { 4958516f54eSJon Chesterfield; CHECK-LABEL: define {{[^@]+}}@fptr_single_i32(i32 noundef %x) { 4968516f54eSJon Chesterfield; CHECK-NEXT: entry: 4978516f54eSJon Chesterfield; CHECK-NEXT: %vararg_buffer = alloca %fptr_single_i32.vararg, align 4, addrspace(5) 4988516f54eSJon Chesterfield; CHECK-NEXT: %0 = load volatile ptr, ptr addrspacecast (ptr addrspace(1) @vararg_ptr to ptr), align 8 4998516f54eSJon Chesterfield; CHECK-NEXT: call void @llvm.lifetime.start.p5(i64 4, ptr addrspace(5) %vararg_buffer) 500*94473f4dSHari Limaye; CHECK-NEXT: %1 = getelementptr inbounds nuw %fptr_single_i32.vararg, ptr addrspace(5) %vararg_buffer, i32 0, i32 0 5018516f54eSJon Chesterfield; CHECK-NEXT: store i32 %x, ptr addrspace(5) %1, align 4 5028516f54eSJon Chesterfield; CHECK-NEXT: %2 = addrspacecast ptr addrspace(5) %vararg_buffer to ptr 5038516f54eSJon Chesterfield; CHECK-NEXT: call void %0(ptr %2) 5048516f54eSJon Chesterfield; CHECK-NEXT: call void @llvm.lifetime.end.p5(i64 4, ptr addrspace(5) %vararg_buffer) 5058516f54eSJon Chesterfield; CHECK-NEXT: ret void 5068516f54eSJon Chesterfield; 5078516f54eSJon Chesterfieldentry: 5088516f54eSJon Chesterfield %0 = load volatile ptr, ptr addrspacecast (ptr addrspace(1) @vararg_ptr to ptr), align 8 5098516f54eSJon Chesterfield tail call void (...) %0(i32 noundef %x) 5108516f54eSJon Chesterfield ret void 5118516f54eSJon Chesterfield} 5128516f54eSJon Chesterfield 5138516f54eSJon Chesterfielddefine hidden void @fptr_libcS(i8 %x.coerce0, i16 %x.coerce1, i32 %x.coerce2, i64 %x.coerce3, float %x.coerce4, double %x.coerce5) { 5148516f54eSJon Chesterfield; CHECK-LABEL: define {{[^@]+}}@fptr_libcS(i8 %x.coerce0, i16 %x.coerce1, i32 %x.coerce2, i64 %x.coerce3, float %x.coerce4, double %x.coerce5) { 5158516f54eSJon Chesterfield; CHECK-NEXT: entry: 5168516f54eSJon Chesterfield; CHECK-NEXT: %vararg_buffer = alloca %fptr_libcS.vararg, align 4, addrspace(5) 5178516f54eSJon Chesterfield; CHECK-NEXT: %0 = load volatile ptr, ptr addrspacecast (ptr addrspace(1) @vararg_ptr to ptr), align 8 5188516f54eSJon Chesterfield; CHECK-NEXT: %.fca.0.insert = insertvalue %struct.libcS poison, i8 %x.coerce0, 0 5198516f54eSJon Chesterfield; CHECK-NEXT: %.fca.1.insert = insertvalue %struct.libcS %.fca.0.insert, i16 %x.coerce1, 1 5208516f54eSJon Chesterfield; CHECK-NEXT: %.fca.2.insert = insertvalue %struct.libcS %.fca.1.insert, i32 %x.coerce2, 2 5218516f54eSJon Chesterfield; CHECK-NEXT: %.fca.3.insert = insertvalue %struct.libcS %.fca.2.insert, i64 %x.coerce3, 3 5228516f54eSJon Chesterfield; CHECK-NEXT: %.fca.4.insert = insertvalue %struct.libcS %.fca.3.insert, float %x.coerce4, 4 5238516f54eSJon Chesterfield; CHECK-NEXT: %.fca.5.insert = insertvalue %struct.libcS %.fca.4.insert, double %x.coerce5, 5 5248516f54eSJon Chesterfield; CHECK-NEXT: call void @llvm.lifetime.start.p5(i64 32, ptr addrspace(5) %vararg_buffer) 525*94473f4dSHari Limaye; CHECK-NEXT: %1 = getelementptr inbounds nuw %fptr_libcS.vararg, ptr addrspace(5) %vararg_buffer, i32 0, i32 0 5268516f54eSJon Chesterfield; CHECK-NEXT: store %struct.libcS %.fca.5.insert, ptr addrspace(5) %1, align 8 5278516f54eSJon Chesterfield; CHECK-NEXT: %2 = addrspacecast ptr addrspace(5) %vararg_buffer to ptr 5288516f54eSJon Chesterfield; CHECK-NEXT: call void %0(ptr %2) 5298516f54eSJon Chesterfield; CHECK-NEXT: call void @llvm.lifetime.end.p5(i64 32, ptr addrspace(5) %vararg_buffer) 5308516f54eSJon Chesterfield; CHECK-NEXT: ret void 5318516f54eSJon Chesterfield; 5328516f54eSJon Chesterfieldentry: 5338516f54eSJon Chesterfield %0 = load volatile ptr, ptr addrspacecast (ptr addrspace(1) @vararg_ptr to ptr), align 8 5348516f54eSJon Chesterfield %.fca.0.insert = insertvalue %struct.libcS poison, i8 %x.coerce0, 0 5358516f54eSJon Chesterfield %.fca.1.insert = insertvalue %struct.libcS %.fca.0.insert, i16 %x.coerce1, 1 5368516f54eSJon Chesterfield %.fca.2.insert = insertvalue %struct.libcS %.fca.1.insert, i32 %x.coerce2, 2 5378516f54eSJon Chesterfield %.fca.3.insert = insertvalue %struct.libcS %.fca.2.insert, i64 %x.coerce3, 3 5388516f54eSJon Chesterfield %.fca.4.insert = insertvalue %struct.libcS %.fca.3.insert, float %x.coerce4, 4 5398516f54eSJon Chesterfield %.fca.5.insert = insertvalue %struct.libcS %.fca.4.insert, double %x.coerce5, 5 5408516f54eSJon Chesterfield tail call void (...) %0(%struct.libcS %.fca.5.insert) 5418516f54eSJon Chesterfield ret void 5428516f54eSJon Chesterfield} 5438516f54eSJon Chesterfield 5448516f54eSJon Chesterfield 545