brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.2 KiB · 1546a0f Raw
124 lines · plain
1; RUN: llc -mtriple x86_64-unknown-windows-msvc %s -o - | FileCheck %s -check-prefix CHECK642; RUN: llc -mtriple i686-windows-msvc %s -o - | FileCheck %s -check-prefix CHECK323 4define void @simple(ptr swiftasync %context) "frame-pointer"="all" {5  ret void6}7 8; CHECK64-LABEL: simple:9; CHECK64: pushq   %rbp10; CHECK64: pushq   %rax11; CHECK64: movq    %rsp, %rbp12; CHECK64: movq    %r14, (%rbp)13; CHECK64: addq    $8, %rsp14; CHECK64: popq    %rbp15; CHECK64: retq16 17; CHECK32-LABEL: simple:18; CHECK32: movl    8(%ebp), [[TMP:%.*]]19; CHECK32: movl    [[TMP]], {{.*}}(%ebp)20 21define void @more_csrs(ptr swiftasync %context) "frame-pointer"="all" {22  call void asm sideeffect "", "~{r15}"()23  ret void24}25 26; CHECK64-LABEL: more_csrs:27; CHECK64: pushq   %rbp28; CHECK64: .seh_pushreg %rbp29; CHECK64: pushq   %r1530; CHECK64: .seh_pushreg %r1531; CHECK64: pushq   %rax32; CHECK64: .seh_stackalloc 833; CHECK64: movq    %rsp, %rbp34; CHECK64: .seh_setframe %rbp, 035; CHECK64: .seh_endprologue36; CHECK64: movq    %r14, (%rbp)37; [...]38; CHECK64: .seh_startepilogue39; CHECK64: addq    $8, %rsp40; CHECK64: popq    %r1541; CHECK64: popq    %rbp42; CHECK64: .seh_endepilogue43; CHECK64: retq44 45declare void @f(ptr)46 47define void @locals(ptr swiftasync %context) "frame-pointer"="all" {48  %var = alloca i32, i32 1049  call void @f(ptr %var)50  ret void51}52 53; CHECK64-LABEL: locals:54; CHECK64: pushq   %rbp55; CHECK64: .seh_pushreg %rbp56; CHECK64: subq    $80, %rsp57; CHECK64: movq	%r14, -8(%rbp)58 59; CHECK64: leaq    -48(%rbp), %rcx60; CHECK64: callq   f61 62; CHECK64: addq    $80, %rsp63; CHECK64: popq    %rbp64; CHECK64: retq65 66define void @use_input_context(ptr swiftasync %context, ptr %ptr) "frame-pointer"="all" {67  store ptr %context, ptr %ptr68  ret void69}70 71; CHECK64-LABEL: use_input_context:72; CHECK64: movq    %r14, (%rcx)73 74declare ptr @llvm.swift.async.context.addr()75 76define ptr @context_in_func() "frmae-pointer"="non-leaf" {77  %ptr = call ptr @llvm.swift.async.context.addr()78  ret ptr %ptr79}80 81; CHECK64-LABEL: context_in_func:82; CHECK64: movq   %rsp, %rax83 84; CHECK32-LABEL: context_in_func:85; CHECK32: movl    %esp, %eax86 87define void @write_frame_context(ptr swiftasync %context, ptr %new_context) "frame-pointer"="non-leaf" {88  %ptr = call ptr @llvm.swift.async.context.addr()89  store ptr %new_context, ptr %ptr90  ret void91}92 93; CHECK64-LABEL: write_frame_context:94; CHECK64: movq    %rcx, (%rsp)95 96define void @simple_fp_elim(ptr swiftasync %context) "frame-pointer"="non-leaf" {97  ret void98}99 100; CHECK64-LABEL: simple_fp_elim:101; CHECK64-NOT: btsq102 103define void @manylocals_and_overwritten_context(ptr swiftasync %context, ptr %new_context) "frame-pointer"="all" {104  %ptr = call ptr @llvm.swift.async.context.addr()105  store ptr %new_context, ptr %ptr106  %var1 = alloca i64, i64 1107  call void @f(ptr %var1)108  %var2 = alloca i64, i64 16109  call void @f(ptr %var2)110  %ptr2 = call ptr @llvm.swift.async.context.addr()111  store ptr %new_context, ptr %ptr2112  ret void113}114 115; CHECK64-LABEL: manylocals_and_overwritten_context:116; CHECK64:       pushq	%rbp117; CHECK64:       subq	$184, %rsp118; CHECK64:       leaq	128(%rsp), %rbp119; CHECK64:       movq	%rcx, %rsi120; CHECK64:       movq	%rcx, 48(%rbp)121; CHECK64:       callq	f122; CHECK64:       callq	f123; CHECK64:       movq	%rsi, 48(%rbp)124