xref: /llvm-project/llvm/test/Transforms/ExpandVariadics/pass-integers.ll (revision 94473f4db6a6f5f12d7c4081455b5b596094eac5)
18516f54eSJon Chesterfield; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
28516f54eSJon Chesterfield; RUN: opt -mtriple=wasm32-unknown-unknown -S --passes=expand-variadics --expand-variadics-override=optimize < %s | FileCheck %s -check-prefixes=OPT
38516f54eSJon Chesterfield; RUN: opt -mtriple=wasm32-unknown-unknown -S --passes=expand-variadics --expand-variadics-override=lowering < %s | FileCheck %s -check-prefixes=ABI
48516f54eSJon Chesterfield; REQUIRES: webassembly-registered-target
58516f54eSJon Chesterfield
68516f54eSJon Chesterfield; Wasm passes struct {char} as an i8 so can check the varargs passing works on integers smaller than the slot size
78516f54eSJon Chesterfield
88516f54eSJon Chesterfielddeclare void @sink(...)
98516f54eSJon Chesterfield
108516f54eSJon Chesterfield
118516f54eSJon Chesterfielddefine void @pass_nothing()  {
128516f54eSJon Chesterfield; OPT-LABEL: @pass_nothing(
138516f54eSJon Chesterfield; OPT-NEXT:  entry:
148516f54eSJon Chesterfield; OPT-NEXT:    tail call void (...) @sink()
158516f54eSJon Chesterfield; OPT-NEXT:    ret void
168516f54eSJon Chesterfield;
178516f54eSJon Chesterfield; ABI-LABEL: @pass_nothing(
188516f54eSJon Chesterfield; ABI-NEXT:  entry:
198516f54eSJon Chesterfield; ABI-NEXT:    [[VARARG_BUFFER:%.*]] = alloca [[PASS_NOTHING_VARARG:%.*]], align 16
208516f54eSJon Chesterfield; ABI-NEXT:    call void @llvm.lifetime.start.p0(i64 1, ptr [[VARARG_BUFFER]])
218516f54eSJon Chesterfield; ABI-NEXT:    call void @sink(ptr [[VARARG_BUFFER]])
228516f54eSJon Chesterfield; ABI-NEXT:    call void @llvm.lifetime.end.p0(i64 1, ptr [[VARARG_BUFFER]])
238516f54eSJon Chesterfield; ABI-NEXT:    ret void
248516f54eSJon Chesterfield;
258516f54eSJon Chesterfieldentry:
268516f54eSJon Chesterfield  tail call void (...) @sink()
278516f54eSJon Chesterfield  ret void
288516f54eSJon Chesterfield}
298516f54eSJon Chesterfield
308516f54eSJon Chesterfielddefine void @pass_s1(i8 %x) {
318516f54eSJon Chesterfield; OPT-LABEL: @pass_s1(
328516f54eSJon Chesterfield; OPT-NEXT:  entry:
338516f54eSJon Chesterfield; OPT-NEXT:    tail call void (...) @sink(i8 [[X:%.*]])
348516f54eSJon Chesterfield; OPT-NEXT:    ret void
358516f54eSJon Chesterfield;
368516f54eSJon Chesterfield; ABI-LABEL: @pass_s1(
378516f54eSJon Chesterfield; ABI-NEXT:  entry:
388516f54eSJon Chesterfield; ABI-NEXT:    [[VARARG_BUFFER:%.*]] = alloca [[PASS_S1_VARARG:%.*]], align 16
398516f54eSJon Chesterfield; ABI-NEXT:    call void @llvm.lifetime.start.p0(i64 1, ptr [[VARARG_BUFFER]])
40*94473f4dSHari Limaye; ABI-NEXT:    [[TMP0:%.*]] = getelementptr inbounds nuw [[PASS_S1_VARARG]], ptr [[VARARG_BUFFER]], i32 0, i32 0
418516f54eSJon Chesterfield; ABI-NEXT:    store i8 [[X:%.*]], ptr [[TMP0]], align 1
428516f54eSJon Chesterfield; ABI-NEXT:    call void @sink(ptr [[VARARG_BUFFER]])
438516f54eSJon Chesterfield; ABI-NEXT:    call void @llvm.lifetime.end.p0(i64 1, ptr [[VARARG_BUFFER]])
448516f54eSJon Chesterfield; ABI-NEXT:    ret void
458516f54eSJon Chesterfield;
468516f54eSJon Chesterfieldentry:
478516f54eSJon Chesterfield  tail call void (...) @sink(i8 %x)
488516f54eSJon Chesterfield  ret void
498516f54eSJon Chesterfield}
508516f54eSJon Chesterfield
518516f54eSJon Chesterfielddefine void @pass_s2(i16 %x) {
528516f54eSJon Chesterfield; OPT-LABEL: @pass_s2(
538516f54eSJon Chesterfield; OPT-NEXT:  entry:
548516f54eSJon Chesterfield; OPT-NEXT:    tail call void (...) @sink(i16 [[X:%.*]])
558516f54eSJon Chesterfield; OPT-NEXT:    ret void
568516f54eSJon Chesterfield;
578516f54eSJon Chesterfield; ABI-LABEL: @pass_s2(
588516f54eSJon Chesterfield; ABI-NEXT:  entry:
598516f54eSJon Chesterfield; ABI-NEXT:    [[VARARG_BUFFER:%.*]] = alloca [[PASS_S2_VARARG:%.*]], align 16
608516f54eSJon Chesterfield; ABI-NEXT:    call void @llvm.lifetime.start.p0(i64 2, ptr [[VARARG_BUFFER]])
61*94473f4dSHari Limaye; ABI-NEXT:    [[TMP0:%.*]] = getelementptr inbounds nuw [[PASS_S2_VARARG]], ptr [[VARARG_BUFFER]], i32 0, i32 0
628516f54eSJon Chesterfield; ABI-NEXT:    store i16 [[X:%.*]], ptr [[TMP0]], align 2
638516f54eSJon Chesterfield; ABI-NEXT:    call void @sink(ptr [[VARARG_BUFFER]])
648516f54eSJon Chesterfield; ABI-NEXT:    call void @llvm.lifetime.end.p0(i64 2, ptr [[VARARG_BUFFER]])
658516f54eSJon Chesterfield; ABI-NEXT:    ret void
668516f54eSJon Chesterfield;
678516f54eSJon Chesterfieldentry:
688516f54eSJon Chesterfield  tail call void (...) @sink(i16 %x)
698516f54eSJon Chesterfield  ret void
708516f54eSJon Chesterfield}
718516f54eSJon Chesterfield
728516f54eSJon Chesterfielddefine void @pass_s3(i32 %x) {
738516f54eSJon Chesterfield; OPT-LABEL: @pass_s3(
748516f54eSJon Chesterfield; OPT-NEXT:  entry:
758516f54eSJon Chesterfield; OPT-NEXT:    tail call void (...) @sink(i32 [[X:%.*]])
768516f54eSJon Chesterfield; OPT-NEXT:    ret void
778516f54eSJon Chesterfield;
788516f54eSJon Chesterfield; ABI-LABEL: @pass_s3(
798516f54eSJon Chesterfield; ABI-NEXT:  entry:
808516f54eSJon Chesterfield; ABI-NEXT:    [[VARARG_BUFFER:%.*]] = alloca [[PASS_S3_VARARG:%.*]], align 16
818516f54eSJon Chesterfield; ABI-NEXT:    call void @llvm.lifetime.start.p0(i64 4, ptr [[VARARG_BUFFER]])
82*94473f4dSHari Limaye; ABI-NEXT:    [[TMP0:%.*]] = getelementptr inbounds nuw [[PASS_S3_VARARG]], ptr [[VARARG_BUFFER]], i32 0, i32 0
838516f54eSJon Chesterfield; ABI-NEXT:    store i32 [[X:%.*]], ptr [[TMP0]], align 4
848516f54eSJon Chesterfield; ABI-NEXT:    call void @sink(ptr [[VARARG_BUFFER]])
858516f54eSJon Chesterfield; ABI-NEXT:    call void @llvm.lifetime.end.p0(i64 4, ptr [[VARARG_BUFFER]])
868516f54eSJon Chesterfield; ABI-NEXT:    ret void
878516f54eSJon Chesterfield;
888516f54eSJon Chesterfieldentry:
898516f54eSJon Chesterfield  tail call void (...) @sink(i32 %x)
908516f54eSJon Chesterfield  ret void
918516f54eSJon Chesterfield}
928516f54eSJon Chesterfield
938516f54eSJon Chesterfielddefine void @pass_s4(i64 %x) {
948516f54eSJon Chesterfield; OPT-LABEL: @pass_s4(
958516f54eSJon Chesterfield; OPT-NEXT:  entry:
968516f54eSJon Chesterfield; OPT-NEXT:    tail call void (...) @sink(i64 [[X:%.*]])
978516f54eSJon Chesterfield; OPT-NEXT:    ret void
988516f54eSJon Chesterfield;
998516f54eSJon Chesterfield; ABI-LABEL: @pass_s4(
1008516f54eSJon Chesterfield; ABI-NEXT:  entry:
1018516f54eSJon Chesterfield; ABI-NEXT:    [[VARARG_BUFFER:%.*]] = alloca [[PASS_S4_VARARG:%.*]], align 16
1028516f54eSJon Chesterfield; ABI-NEXT:    call void @llvm.lifetime.start.p0(i64 8, ptr [[VARARG_BUFFER]])
103*94473f4dSHari Limaye; ABI-NEXT:    [[TMP0:%.*]] = getelementptr inbounds nuw [[PASS_S4_VARARG]], ptr [[VARARG_BUFFER]], i32 0, i32 0
1048516f54eSJon Chesterfield; ABI-NEXT:    store i64 [[X:%.*]], ptr [[TMP0]], align 8
1058516f54eSJon Chesterfield; ABI-NEXT:    call void @sink(ptr [[VARARG_BUFFER]])
1068516f54eSJon Chesterfield; ABI-NEXT:    call void @llvm.lifetime.end.p0(i64 8, ptr [[VARARG_BUFFER]])
1078516f54eSJon Chesterfield; ABI-NEXT:    ret void
1088516f54eSJon Chesterfield;
1098516f54eSJon Chesterfieldentry:
1108516f54eSJon Chesterfield  tail call void (...) @sink(i64 %x)
1118516f54eSJon Chesterfield  ret void
1128516f54eSJon Chesterfield}
1138516f54eSJon Chesterfield
1148516f54eSJon Chesterfielddefine void @pass_s5(<4 x i32> %x) {
1158516f54eSJon Chesterfield; OPT-LABEL: @pass_s5(
1168516f54eSJon Chesterfield; OPT-NEXT:  entry:
1178516f54eSJon Chesterfield; OPT-NEXT:    tail call void (...) @sink(<4 x i32> [[X:%.*]])
1188516f54eSJon Chesterfield; OPT-NEXT:    ret void
1198516f54eSJon Chesterfield;
1208516f54eSJon Chesterfield; ABI-LABEL: @pass_s5(
1218516f54eSJon Chesterfield; ABI-NEXT:  entry:
1228516f54eSJon Chesterfield; ABI-NEXT:    [[VARARG_BUFFER:%.*]] = alloca [[PASS_S5_VARARG:%.*]], align 16
1238516f54eSJon Chesterfield; ABI-NEXT:    call void @llvm.lifetime.start.p0(i64 16, ptr [[VARARG_BUFFER]])
124*94473f4dSHari Limaye; ABI-NEXT:    [[TMP0:%.*]] = getelementptr inbounds nuw [[PASS_S5_VARARG]], ptr [[VARARG_BUFFER]], i32 0, i32 0
1258516f54eSJon Chesterfield; ABI-NEXT:    store <4 x i32> [[X:%.*]], ptr [[TMP0]], align 16
1268516f54eSJon Chesterfield; ABI-NEXT:    call void @sink(ptr [[VARARG_BUFFER]])
1278516f54eSJon Chesterfield; ABI-NEXT:    call void @llvm.lifetime.end.p0(i64 16, ptr [[VARARG_BUFFER]])
1288516f54eSJon Chesterfield; ABI-NEXT:    ret void
1298516f54eSJon Chesterfield;
1308516f54eSJon Chesterfieldentry:
1318516f54eSJon Chesterfield  tail call void (...) @sink(<4 x i32> %x)
1328516f54eSJon Chesterfield  ret void
1338516f54eSJon Chesterfield}
1348516f54eSJon Chesterfield
1358516f54eSJon Chesterfielddefine void @pass_int_s1(i32 %i, i8 %x) {
1368516f54eSJon Chesterfield; OPT-LABEL: @pass_int_s1(
1378516f54eSJon Chesterfield; OPT-NEXT:  entry:
1388516f54eSJon Chesterfield; OPT-NEXT:    tail call void (...) @sink(i32 [[I:%.*]], i8 [[X:%.*]])
1398516f54eSJon Chesterfield; OPT-NEXT:    ret void
1408516f54eSJon Chesterfield;
1418516f54eSJon Chesterfield; ABI-LABEL: @pass_int_s1(
1428516f54eSJon Chesterfield; ABI-NEXT:  entry:
1438516f54eSJon Chesterfield; ABI-NEXT:    [[VARARG_BUFFER:%.*]] = alloca [[PASS_INT_S1_VARARG:%.*]], align 16
1448516f54eSJon Chesterfield; ABI-NEXT:    call void @llvm.lifetime.start.p0(i64 5, ptr [[VARARG_BUFFER]])
145*94473f4dSHari Limaye; ABI-NEXT:    [[TMP0:%.*]] = getelementptr inbounds nuw [[PASS_INT_S1_VARARG]], ptr [[VARARG_BUFFER]], i32 0, i32 0
1468516f54eSJon Chesterfield; ABI-NEXT:    store i32 [[I:%.*]], ptr [[TMP0]], align 4
147*94473f4dSHari Limaye; ABI-NEXT:    [[TMP1:%.*]] = getelementptr inbounds nuw [[PASS_INT_S1_VARARG]], ptr [[VARARG_BUFFER]], i32 0, i32 1
1488516f54eSJon Chesterfield; ABI-NEXT:    store i8 [[X:%.*]], ptr [[TMP1]], align 1
1498516f54eSJon Chesterfield; ABI-NEXT:    call void @sink(ptr [[VARARG_BUFFER]])
1508516f54eSJon Chesterfield; ABI-NEXT:    call void @llvm.lifetime.end.p0(i64 5, ptr [[VARARG_BUFFER]])
1518516f54eSJon Chesterfield; ABI-NEXT:    ret void
1528516f54eSJon Chesterfield;
1538516f54eSJon Chesterfieldentry:
1548516f54eSJon Chesterfield  tail call void (...) @sink(i32 %i, i8 %x)
1558516f54eSJon Chesterfield  ret void
1568516f54eSJon Chesterfield}
1578516f54eSJon Chesterfield
1588516f54eSJon Chesterfielddefine void @pass_int_s2(i32 %i, i16 %x) {
1598516f54eSJon Chesterfield; OPT-LABEL: @pass_int_s2(
1608516f54eSJon Chesterfield; OPT-NEXT:  entry:
1618516f54eSJon Chesterfield; OPT-NEXT:    tail call void (...) @sink(i32 [[I:%.*]], i16 [[X:%.*]])
1628516f54eSJon Chesterfield; OPT-NEXT:    ret void
1638516f54eSJon Chesterfield;
1648516f54eSJon Chesterfield; ABI-LABEL: @pass_int_s2(
1658516f54eSJon Chesterfield; ABI-NEXT:  entry:
1668516f54eSJon Chesterfield; ABI-NEXT:    [[VARARG_BUFFER:%.*]] = alloca [[PASS_INT_S2_VARARG:%.*]], align 16
1678516f54eSJon Chesterfield; ABI-NEXT:    call void @llvm.lifetime.start.p0(i64 6, ptr [[VARARG_BUFFER]])
168*94473f4dSHari Limaye; ABI-NEXT:    [[TMP0:%.*]] = getelementptr inbounds nuw [[PASS_INT_S2_VARARG]], ptr [[VARARG_BUFFER]], i32 0, i32 0
1698516f54eSJon Chesterfield; ABI-NEXT:    store i32 [[I:%.*]], ptr [[TMP0]], align 4
170*94473f4dSHari Limaye; ABI-NEXT:    [[TMP1:%.*]] = getelementptr inbounds nuw [[PASS_INT_S2_VARARG]], ptr [[VARARG_BUFFER]], i32 0, i32 1
1718516f54eSJon Chesterfield; ABI-NEXT:    store i16 [[X:%.*]], ptr [[TMP1]], align 2
1728516f54eSJon Chesterfield; ABI-NEXT:    call void @sink(ptr [[VARARG_BUFFER]])
1738516f54eSJon Chesterfield; ABI-NEXT:    call void @llvm.lifetime.end.p0(i64 6, ptr [[VARARG_BUFFER]])
1748516f54eSJon Chesterfield; ABI-NEXT:    ret void
1758516f54eSJon Chesterfield;
1768516f54eSJon Chesterfieldentry:
1778516f54eSJon Chesterfield  tail call void (...) @sink(i32 %i, i16 %x)
1788516f54eSJon Chesterfield  ret void
1798516f54eSJon Chesterfield}
1808516f54eSJon Chesterfield
1818516f54eSJon Chesterfielddefine void @pass_int_s3(i32 %i, i32 %x) {
1828516f54eSJon Chesterfield; OPT-LABEL: @pass_int_s3(
1838516f54eSJon Chesterfield; OPT-NEXT:  entry:
1848516f54eSJon Chesterfield; OPT-NEXT:    tail call void (...) @sink(i32 [[I:%.*]], i32 [[X:%.*]])
1858516f54eSJon Chesterfield; OPT-NEXT:    ret void
1868516f54eSJon Chesterfield;
1878516f54eSJon Chesterfield; ABI-LABEL: @pass_int_s3(
1888516f54eSJon Chesterfield; ABI-NEXT:  entry:
1898516f54eSJon Chesterfield; ABI-NEXT:    [[VARARG_BUFFER:%.*]] = alloca [[PASS_INT_S3_VARARG:%.*]], align 16
1908516f54eSJon Chesterfield; ABI-NEXT:    call void @llvm.lifetime.start.p0(i64 8, ptr [[VARARG_BUFFER]])
191*94473f4dSHari Limaye; ABI-NEXT:    [[TMP0:%.*]] = getelementptr inbounds nuw [[PASS_INT_S3_VARARG]], ptr [[VARARG_BUFFER]], i32 0, i32 0
1928516f54eSJon Chesterfield; ABI-NEXT:    store i32 [[I:%.*]], ptr [[TMP0]], align 4
193*94473f4dSHari Limaye; ABI-NEXT:    [[TMP1:%.*]] = getelementptr inbounds nuw [[PASS_INT_S3_VARARG]], ptr [[VARARG_BUFFER]], i32 0, i32 1
1948516f54eSJon Chesterfield; ABI-NEXT:    store i32 [[X:%.*]], ptr [[TMP1]], align 4
1958516f54eSJon Chesterfield; ABI-NEXT:    call void @sink(ptr [[VARARG_BUFFER]])
1968516f54eSJon Chesterfield; ABI-NEXT:    call void @llvm.lifetime.end.p0(i64 8, ptr [[VARARG_BUFFER]])
1978516f54eSJon Chesterfield; ABI-NEXT:    ret void
1988516f54eSJon Chesterfield;
1998516f54eSJon Chesterfieldentry:
2008516f54eSJon Chesterfield  tail call void (...) @sink(i32 %i, i32 %x)
2018516f54eSJon Chesterfield  ret void
2028516f54eSJon Chesterfield}
2038516f54eSJon Chesterfield
2048516f54eSJon Chesterfielddefine void @pass_int_s4(i32 %i, i64 %x) {
2058516f54eSJon Chesterfield; OPT-LABEL: @pass_int_s4(
2068516f54eSJon Chesterfield; OPT-NEXT:  entry:
2078516f54eSJon Chesterfield; OPT-NEXT:    tail call void (...) @sink(i32 [[I:%.*]], i64 [[X:%.*]])
2088516f54eSJon Chesterfield; OPT-NEXT:    ret void
2098516f54eSJon Chesterfield;
2108516f54eSJon Chesterfield; ABI-LABEL: @pass_int_s4(
2118516f54eSJon Chesterfield; ABI-NEXT:  entry:
2128516f54eSJon Chesterfield; ABI-NEXT:    [[VARARG_BUFFER:%.*]] = alloca [[PASS_INT_S4_VARARG:%.*]], align 16
2138516f54eSJon Chesterfield; ABI-NEXT:    call void @llvm.lifetime.start.p0(i64 16, ptr [[VARARG_BUFFER]])
214*94473f4dSHari Limaye; ABI-NEXT:    [[TMP0:%.*]] = getelementptr inbounds nuw [[PASS_INT_S4_VARARG]], ptr [[VARARG_BUFFER]], i32 0, i32 0
2158516f54eSJon Chesterfield; ABI-NEXT:    store i32 [[I:%.*]], ptr [[TMP0]], align 4
216*94473f4dSHari Limaye; ABI-NEXT:    [[TMP1:%.*]] = getelementptr inbounds nuw [[PASS_INT_S4_VARARG]], ptr [[VARARG_BUFFER]], i32 0, i32 2
2178516f54eSJon Chesterfield; ABI-NEXT:    store i64 [[X:%.*]], ptr [[TMP1]], align 8
2188516f54eSJon Chesterfield; ABI-NEXT:    call void @sink(ptr [[VARARG_BUFFER]])
2198516f54eSJon Chesterfield; ABI-NEXT:    call void @llvm.lifetime.end.p0(i64 16, ptr [[VARARG_BUFFER]])
2208516f54eSJon Chesterfield; ABI-NEXT:    ret void
2218516f54eSJon Chesterfield;
2228516f54eSJon Chesterfieldentry:
2238516f54eSJon Chesterfield  tail call void (...) @sink(i32 %i, i64 %x)
2248516f54eSJon Chesterfield  ret void
2258516f54eSJon Chesterfield}
2268516f54eSJon Chesterfield
2278516f54eSJon Chesterfielddefine void @pass_int_s5(i32 %i, <4 x i32> %x) {
2288516f54eSJon Chesterfield; OPT-LABEL: @pass_int_s5(
2298516f54eSJon Chesterfield; OPT-NEXT:  entry:
2308516f54eSJon Chesterfield; OPT-NEXT:    tail call void (...) @sink(i32 [[I:%.*]], <4 x i32> [[X:%.*]])
2318516f54eSJon Chesterfield; OPT-NEXT:    ret void
2328516f54eSJon Chesterfield;
2338516f54eSJon Chesterfield; ABI-LABEL: @pass_int_s5(
2348516f54eSJon Chesterfield; ABI-NEXT:  entry:
2358516f54eSJon Chesterfield; ABI-NEXT:    [[VARARG_BUFFER:%.*]] = alloca [[PASS_INT_S5_VARARG:%.*]], align 16
2368516f54eSJon Chesterfield; ABI-NEXT:    call void @llvm.lifetime.start.p0(i64 32, ptr [[VARARG_BUFFER]])
237*94473f4dSHari Limaye; ABI-NEXT:    [[TMP0:%.*]] = getelementptr inbounds nuw [[PASS_INT_S5_VARARG]], ptr [[VARARG_BUFFER]], i32 0, i32 0
2388516f54eSJon Chesterfield; ABI-NEXT:    store i32 [[I:%.*]], ptr [[TMP0]], align 4
239*94473f4dSHari Limaye; ABI-NEXT:    [[TMP1:%.*]] = getelementptr inbounds nuw [[PASS_INT_S5_VARARG]], ptr [[VARARG_BUFFER]], i32 0, i32 2
2408516f54eSJon Chesterfield; ABI-NEXT:    store <4 x i32> [[X:%.*]], ptr [[TMP1]], align 16
2418516f54eSJon Chesterfield; ABI-NEXT:    call void @sink(ptr [[VARARG_BUFFER]])
2428516f54eSJon Chesterfield; ABI-NEXT:    call void @llvm.lifetime.end.p0(i64 32, ptr [[VARARG_BUFFER]])
2438516f54eSJon Chesterfield; ABI-NEXT:    ret void
2448516f54eSJon Chesterfield;
2458516f54eSJon Chesterfieldentry:
2468516f54eSJon Chesterfield  tail call void (...) @sink(i32 %i, <4 x i32> %x)
2478516f54eSJon Chesterfield  ret void
2488516f54eSJon Chesterfield}
2498516f54eSJon Chesterfield
2508516f54eSJon Chesterfielddefine void @pass_asc(i8 %x1, i16 %x2, i32 %x3, i64 %x4, <4 x i32> %x5) {
2518516f54eSJon Chesterfield; OPT-LABEL: @pass_asc(
2528516f54eSJon Chesterfield; OPT-NEXT:  entry:
2538516f54eSJon Chesterfield; OPT-NEXT:    tail call void (...) @sink(i8 [[X1:%.*]], i16 [[X2:%.*]], i32 [[X3:%.*]], i64 [[X4:%.*]], <4 x i32> [[X5:%.*]])
2548516f54eSJon Chesterfield; OPT-NEXT:    ret void
2558516f54eSJon Chesterfield;
2568516f54eSJon Chesterfield; ABI-LABEL: @pass_asc(
2578516f54eSJon Chesterfield; ABI-NEXT:  entry:
2588516f54eSJon Chesterfield; ABI-NEXT:    [[VARARG_BUFFER:%.*]] = alloca [[PASS_ASC_VARARG:%.*]], align 16
2598516f54eSJon Chesterfield; ABI-NEXT:    call void @llvm.lifetime.start.p0(i64 48, ptr [[VARARG_BUFFER]])
260*94473f4dSHari Limaye; ABI-NEXT:    [[TMP0:%.*]] = getelementptr inbounds nuw [[PASS_ASC_VARARG]], ptr [[VARARG_BUFFER]], i32 0, i32 0
2618516f54eSJon Chesterfield; ABI-NEXT:    store i8 [[X1:%.*]], ptr [[TMP0]], align 1
262*94473f4dSHari Limaye; ABI-NEXT:    [[TMP1:%.*]] = getelementptr inbounds nuw [[PASS_ASC_VARARG]], ptr [[VARARG_BUFFER]], i32 0, i32 2
2638516f54eSJon Chesterfield; ABI-NEXT:    store i16 [[X2:%.*]], ptr [[TMP1]], align 2
264*94473f4dSHari Limaye; ABI-NEXT:    [[TMP2:%.*]] = getelementptr inbounds nuw [[PASS_ASC_VARARG]], ptr [[VARARG_BUFFER]], i32 0, i32 4
2658516f54eSJon Chesterfield; ABI-NEXT:    store i32 [[X3:%.*]], ptr [[TMP2]], align 4
266*94473f4dSHari Limaye; ABI-NEXT:    [[TMP3:%.*]] = getelementptr inbounds nuw [[PASS_ASC_VARARG]], ptr [[VARARG_BUFFER]], i32 0, i32 6
2678516f54eSJon Chesterfield; ABI-NEXT:    store i64 [[X4:%.*]], ptr [[TMP3]], align 8
268*94473f4dSHari Limaye; ABI-NEXT:    [[TMP4:%.*]] = getelementptr inbounds nuw [[PASS_ASC_VARARG]], ptr [[VARARG_BUFFER]], i32 0, i32 8
2698516f54eSJon Chesterfield; ABI-NEXT:    store <4 x i32> [[X5:%.*]], ptr [[TMP4]], align 16
2708516f54eSJon Chesterfield; ABI-NEXT:    call void @sink(ptr [[VARARG_BUFFER]])
2718516f54eSJon Chesterfield; ABI-NEXT:    call void @llvm.lifetime.end.p0(i64 48, ptr [[VARARG_BUFFER]])
2728516f54eSJon Chesterfield; ABI-NEXT:    ret void
2738516f54eSJon Chesterfield;
2748516f54eSJon Chesterfieldentry:
2758516f54eSJon Chesterfield  tail call void (...) @sink(i8 %x1, i16 %x2, i32 %x3, i64 %x4, <4 x i32> %x5)
2768516f54eSJon Chesterfield  ret void
2778516f54eSJon Chesterfield}
2788516f54eSJon Chesterfield
2798516f54eSJon Chesterfielddefine void @pass_dsc(<4 x i32> %x0, i64 %x1, i32 %x2, i16 %x3, i8 %x4) {
2808516f54eSJon Chesterfield; OPT-LABEL: @pass_dsc(
2818516f54eSJon Chesterfield; OPT-NEXT:  entry:
2828516f54eSJon Chesterfield; OPT-NEXT:    tail call void (...) @sink(<4 x i32> [[X0:%.*]], i64 [[X1:%.*]], i32 [[X2:%.*]], i16 [[X3:%.*]], i8 [[X4:%.*]])
2838516f54eSJon Chesterfield; OPT-NEXT:    ret void
2848516f54eSJon Chesterfield;
2858516f54eSJon Chesterfield; ABI-LABEL: @pass_dsc(
2868516f54eSJon Chesterfield; ABI-NEXT:  entry:
2878516f54eSJon Chesterfield; ABI-NEXT:    [[VARARG_BUFFER:%.*]] = alloca [[PASS_DSC_VARARG:%.*]], align 16
2888516f54eSJon Chesterfield; ABI-NEXT:    call void @llvm.lifetime.start.p0(i64 33, ptr [[VARARG_BUFFER]])
289*94473f4dSHari Limaye; ABI-NEXT:    [[TMP0:%.*]] = getelementptr inbounds nuw [[PASS_DSC_VARARG]], ptr [[VARARG_BUFFER]], i32 0, i32 0
2908516f54eSJon Chesterfield; ABI-NEXT:    store <4 x i32> [[X0:%.*]], ptr [[TMP0]], align 16
291*94473f4dSHari Limaye; ABI-NEXT:    [[TMP1:%.*]] = getelementptr inbounds nuw [[PASS_DSC_VARARG]], ptr [[VARARG_BUFFER]], i32 0, i32 1
2928516f54eSJon Chesterfield; ABI-NEXT:    store i64 [[X1:%.*]], ptr [[TMP1]], align 8
293*94473f4dSHari Limaye; ABI-NEXT:    [[TMP2:%.*]] = getelementptr inbounds nuw [[PASS_DSC_VARARG]], ptr [[VARARG_BUFFER]], i32 0, i32 2
2948516f54eSJon Chesterfield; ABI-NEXT:    store i32 [[X2:%.*]], ptr [[TMP2]], align 4
295*94473f4dSHari Limaye; ABI-NEXT:    [[TMP3:%.*]] = getelementptr inbounds nuw [[PASS_DSC_VARARG]], ptr [[VARARG_BUFFER]], i32 0, i32 3
2968516f54eSJon Chesterfield; ABI-NEXT:    store i16 [[X3:%.*]], ptr [[TMP3]], align 2
297*94473f4dSHari Limaye; ABI-NEXT:    [[TMP4:%.*]] = getelementptr inbounds nuw [[PASS_DSC_VARARG]], ptr [[VARARG_BUFFER]], i32 0, i32 5
2988516f54eSJon Chesterfield; ABI-NEXT:    store i8 [[X4:%.*]], ptr [[TMP4]], align 1
2998516f54eSJon Chesterfield; ABI-NEXT:    call void @sink(ptr [[VARARG_BUFFER]])
3008516f54eSJon Chesterfield; ABI-NEXT:    call void @llvm.lifetime.end.p0(i64 33, ptr [[VARARG_BUFFER]])
3018516f54eSJon Chesterfield; ABI-NEXT:    ret void
3028516f54eSJon Chesterfield;
3038516f54eSJon Chesterfieldentry:
3048516f54eSJon Chesterfield  tail call void (...) @sink(<4 x i32> %x0, i64 %x1, i32 %x2, i16 %x3, i8 %x4)
3058516f54eSJon Chesterfield  ret void
3068516f54eSJon Chesterfield}
3078516f54eSJon Chesterfield
3088516f54eSJon Chesterfielddefine void @pass_multiple(i32 %i, i8 %x1, i16 %x2, i32 %x3, i64 %x4, <4 x i32> %x5) {
3098516f54eSJon Chesterfield; OPT-LABEL: @pass_multiple(
3108516f54eSJon Chesterfield; OPT-NEXT:  entry:
3118516f54eSJon Chesterfield; OPT-NEXT:    tail call void (...) @sink(i32 [[I:%.*]], i16 [[X2:%.*]], i64 [[X4:%.*]])
3128516f54eSJon Chesterfield; OPT-NEXT:    tail call void (...) @sink(i32 [[I]], i8 [[X1:%.*]], i32 [[X3:%.*]], <4 x i32> [[X5:%.*]])
3138516f54eSJon Chesterfield; OPT-NEXT:    ret void
3148516f54eSJon Chesterfield;
3158516f54eSJon Chesterfield; ABI-LABEL: @pass_multiple(
3168516f54eSJon Chesterfield; ABI-NEXT:  entry:
3178516f54eSJon Chesterfield; ABI-NEXT:    [[VARARG_BUFFER:%.*]] = alloca [[PASS_MULTIPLE_VARARG:%.*]], align 16
3188516f54eSJon Chesterfield; ABI-NEXT:    [[VARARG_BUFFER1:%.*]] = alloca [[PASS_MULTIPLE_VARARG_0:%.*]], align 16
3198516f54eSJon Chesterfield; ABI-NEXT:    call void @llvm.lifetime.start.p0(i64 16, ptr [[VARARG_BUFFER]])
320*94473f4dSHari Limaye; ABI-NEXT:    [[TMP0:%.*]] = getelementptr inbounds nuw [[PASS_MULTIPLE_VARARG]], ptr [[VARARG_BUFFER]], i32 0, i32 0
3218516f54eSJon Chesterfield; ABI-NEXT:    store i32 [[I:%.*]], ptr [[TMP0]], align 4
322*94473f4dSHari Limaye; ABI-NEXT:    [[TMP1:%.*]] = getelementptr inbounds nuw [[PASS_MULTIPLE_VARARG]], ptr [[VARARG_BUFFER]], i32 0, i32 1
3238516f54eSJon Chesterfield; ABI-NEXT:    store i16 [[X2:%.*]], ptr [[TMP1]], align 2
324*94473f4dSHari Limaye; ABI-NEXT:    [[TMP2:%.*]] = getelementptr inbounds nuw [[PASS_MULTIPLE_VARARG]], ptr [[VARARG_BUFFER]], i32 0, i32 3
3258516f54eSJon Chesterfield; ABI-NEXT:    store i64 [[X4:%.*]], ptr [[TMP2]], align 8
3268516f54eSJon Chesterfield; ABI-NEXT:    call void @sink(ptr [[VARARG_BUFFER]])
3278516f54eSJon Chesterfield; ABI-NEXT:    call void @llvm.lifetime.end.p0(i64 16, ptr [[VARARG_BUFFER]])
3288516f54eSJon Chesterfield; ABI-NEXT:    call void @llvm.lifetime.start.p0(i64 32, ptr [[VARARG_BUFFER1]])
329*94473f4dSHari Limaye; ABI-NEXT:    [[TMP3:%.*]] = getelementptr inbounds nuw [[PASS_MULTIPLE_VARARG_0]], ptr [[VARARG_BUFFER1]], i32 0, i32 0
3308516f54eSJon Chesterfield; ABI-NEXT:    store i32 [[I]], ptr [[TMP3]], align 4
331*94473f4dSHari Limaye; ABI-NEXT:    [[TMP4:%.*]] = getelementptr inbounds nuw [[PASS_MULTIPLE_VARARG_0]], ptr [[VARARG_BUFFER1]], i32 0, i32 1
3328516f54eSJon Chesterfield; ABI-NEXT:    store i8 [[X1:%.*]], ptr [[TMP4]], align 1
333*94473f4dSHari Limaye; ABI-NEXT:    [[TMP5:%.*]] = getelementptr inbounds nuw [[PASS_MULTIPLE_VARARG_0]], ptr [[VARARG_BUFFER1]], i32 0, i32 3
3348516f54eSJon Chesterfield; ABI-NEXT:    store i32 [[X3:%.*]], ptr [[TMP5]], align 4
335*94473f4dSHari Limaye; ABI-NEXT:    [[TMP6:%.*]] = getelementptr inbounds nuw [[PASS_MULTIPLE_VARARG_0]], ptr [[VARARG_BUFFER1]], i32 0, i32 5
3368516f54eSJon Chesterfield; ABI-NEXT:    store <4 x i32> [[X5:%.*]], ptr [[TMP6]], align 16
3378516f54eSJon Chesterfield; ABI-NEXT:    call void @sink(ptr [[VARARG_BUFFER1]])
3388516f54eSJon Chesterfield; ABI-NEXT:    call void @llvm.lifetime.end.p0(i64 32, ptr [[VARARG_BUFFER1]])
3398516f54eSJon Chesterfield; ABI-NEXT:    ret void
3408516f54eSJon Chesterfield;
3418516f54eSJon Chesterfieldentry:
3428516f54eSJon Chesterfield  tail call void (...) @sink(i32 %i, i16 %x2, i64 %x4)
3438516f54eSJon Chesterfield  tail call void (...) @sink(i32 %i, i8 %x1, i32 %x3, <4 x i32> %x5)
3448516f54eSJon Chesterfield  ret void
3458516f54eSJon Chesterfield}
346