1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --no_x86_scrub_sp --no_x86_scrub_mem_shuffle 2; RUN: llc < %s -mtriple=i386-pc-windows-msvc | FileCheck %s --check-prefix=MSVC 3; RUN: llc < %s -mtriple=i386-pc-mingw32 | FileCheck %s --check-prefix=MINGW 4; RUN: llc < %s -mtriple=i386-pc-linux-gnu | FileCheck %s --check-prefix=LINUX 5; RUN: llc < %s -mtriple=i386--apple-darwin | FileCheck %s --check-prefix=DARWIN 6 7define void @foo(i32 %0, x86_fp80 %1, i32 %2) nounwind { 8; MSVC-LABEL: foo: 9; MSVC: # %bb.0: 10; MSVC-NEXT: pushl %ebp 11; MSVC-NEXT: movl %esp, %ebp 12; MSVC-NEXT: andl $-16, %esp 13; MSVC-NEXT: subl $32, %esp 14; MSVC-NEXT: fldt 24(%ebp) 15; MSVC-NEXT: fstpt (%esp) 16; MSVC-NEXT: leal 8(%ebp), %eax 17; MSVC-NEXT: pushl %eax 18; MSVC-NEXT: calll _escape 19; MSVC-NEXT: addl $4, %esp 20; MSVC-NEXT: movl %esp, %eax 21; MSVC-NEXT: pushl %eax 22; MSVC-NEXT: calll _escape 23; MSVC-NEXT: addl $4, %esp 24; MSVC-NEXT: leal 40(%ebp), %eax 25; MSVC-NEXT: pushl %eax 26; MSVC-NEXT: calll _escape 27; MSVC-NEXT: addl $4, %esp 28; MSVC-NEXT: movl %ebp, %esp 29; MSVC-NEXT: popl %ebp 30; MSVC-NEXT: retl 31; 32; MINGW-LABEL: foo: 33; MINGW: # %bb.0: 34; MINGW-NEXT: pushl %ebp 35; MINGW-NEXT: movl %esp, %ebp 36; MINGW-NEXT: andl $-16, %esp 37; MINGW-NEXT: subl $32, %esp 38; MINGW-NEXT: fldt 12(%ebp) 39; MINGW-NEXT: fstpt (%esp) 40; MINGW-NEXT: leal 8(%ebp), %eax 41; MINGW-NEXT: pushl %eax 42; MINGW-NEXT: calll _escape 43; MINGW-NEXT: addl $4, %esp 44; MINGW-NEXT: movl %esp, %eax 45; MINGW-NEXT: pushl %eax 46; MINGW-NEXT: calll _escape 47; MINGW-NEXT: addl $4, %esp 48; MINGW-NEXT: leal 24(%ebp), %eax 49; MINGW-NEXT: pushl %eax 50; MINGW-NEXT: calll _escape 51; MINGW-NEXT: addl $4, %esp 52; MINGW-NEXT: movl %ebp, %esp 53; MINGW-NEXT: popl %ebp 54; MINGW-NEXT: retl 55; 56; LINUX-LABEL: foo: 57; LINUX: # %bb.0: 58; LINUX-NEXT: subl $28, %esp 59; LINUX-NEXT: fldt 36(%esp) 60; LINUX-NEXT: fstpt 16(%esp) 61; LINUX-NEXT: leal 32(%esp), %eax 62; LINUX-NEXT: movl %eax, (%esp) 63; LINUX-NEXT: calll escape@PLT 64; LINUX-NEXT: leal 16(%esp), %eax 65; LINUX-NEXT: movl %eax, (%esp) 66; LINUX-NEXT: calll escape@PLT 67; LINUX-NEXT: leal 48(%esp), %eax 68; LINUX-NEXT: movl %eax, (%esp) 69; LINUX-NEXT: calll escape@PLT 70; LINUX-NEXT: addl $28, %esp 71; LINUX-NEXT: retl 72; 73; DARWIN-LABEL: foo: 74; DARWIN: ## %bb.0: 75; DARWIN-NEXT: subl $44, %esp 76; DARWIN-NEXT: fldt 64(%esp) 77; DARWIN-NEXT: fstpt 16(%esp) 78; DARWIN-NEXT: leal 48(%esp), %eax 79; DARWIN-NEXT: movl %eax, (%esp) 80; DARWIN-NEXT: calll _escape 81; DARWIN-NEXT: leal 16(%esp), %eax 82; DARWIN-NEXT: movl %eax, (%esp) 83; DARWIN-NEXT: calll _escape 84; DARWIN-NEXT: leal 80(%esp), %eax 85; DARWIN-NEXT: movl %eax, (%esp) 86; DARWIN-NEXT: calll _escape 87; DARWIN-NEXT: addl $44, %esp 88; DARWIN-NEXT: retl 89 %4 = alloca i32, align 4 90 %5 = alloca x86_fp80, align 16 91 %6 = alloca i32, align 4 92 store i32 %0, ptr %4, align 4 93 store x86_fp80 %1, ptr %5, align 16 94 store i32 %2, ptr %6, align 4 95 call void @escape(ptr nonnull %4) 96 call void @escape(ptr nonnull %5) 97 call void @escape(ptr nonnull %6) 98 ret void 99} 100 101declare void @escape(ptr) 102