brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.4 KiB · c4b36c5 Raw
288 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-pc-win32              | FileCheck %s3; RUN: llc < %s -mtriple=x86_64-pc-win32 -mattr=+sahf | FileCheck %s4; RUN: llc < %s -mtriple=x86_64-uefi              | FileCheck %s5; RUN: llc < %s -mtriple=x86_64-uefi -mattr=+sahf | FileCheck %s6 7define i32 @f1(i32 %p1, i32 %p2, i32 %p3, i32 %p4, i32 %p5) "frame-pointer"="all" {8; CHECK-LABEL: f1:9; CHECK:       # %bb.0:10; CHECK-NEXT:    pushq %rbp11; CHECK-NEXT:    .seh_pushreg %rbp12; CHECK-NEXT:    movq %rsp, %rbp13; CHECK-NEXT:    .seh_setframe %rbp, 014; CHECK-NEXT:    .seh_endprologue15; CHECK-NEXT:    movl 48(%rbp), %eax16; CHECK-NEXT:    .seh_startepilogue17; CHECK-NEXT:    popq %rbp18; CHECK-NEXT:    .seh_endepilogue19; CHECK-NEXT:    retq20; CHECK-NEXT:    .seh_endproc21  ret i32 %p522}23 24define void @f2(i32 %p, ...) "frame-pointer"="all" {25; CHECK-LABEL: f2:26; CHECK:       # %bb.0:27; CHECK-NEXT:    pushq %rbp28; CHECK-NEXT:    .seh_pushreg %rbp29; CHECK-NEXT:    pushq %rax30; CHECK-NEXT:    .seh_stackalloc 831; CHECK-NEXT:    movq %rsp, %rbp32; CHECK-NEXT:    .seh_setframe %rbp, 033; CHECK-NEXT:    .seh_endprologue34; CHECK-NEXT:    movq %rdx, 32(%rbp)35; CHECK-NEXT:    movq %r8, 40(%rbp)36; CHECK-NEXT:    movq %r9, 48(%rbp)37; CHECK-NEXT:    leaq 32(%rbp), %rax38; CHECK-NEXT:    movq %rax, (%rbp)39; CHECK-NEXT:    .seh_startepilogue40; CHECK-NEXT:    addq $8, %rsp41; CHECK-NEXT:    popq %rbp42; CHECK-NEXT:    .seh_endepilogue43; CHECK-NEXT:    retq44; CHECK-NEXT:    .seh_endproc45  %ap = alloca i8, align 846  call void @llvm.va_start(ptr %ap)47  ret void48}49 50define ptr @f3() "frame-pointer"="all" {51; CHECK-LABEL: f3:52; CHECK:       # %bb.0:53; CHECK-NEXT:    pushq %rbp54; CHECK-NEXT:    .seh_pushreg %rbp55; CHECK-NEXT:    movq %rsp, %rbp56; CHECK-NEXT:    .seh_setframe %rbp, 057; CHECK-NEXT:    .seh_endprologue58; CHECK-NEXT:    movq 8(%rbp), %rax59; CHECK-NEXT:    .seh_startepilogue60; CHECK-NEXT:    popq %rbp61; CHECK-NEXT:    .seh_endepilogue62; CHECK-NEXT:    retq63; CHECK-NEXT:    .seh_endproc64  %ra = call ptr @llvm.returnaddress(i32 0)65  ret ptr %ra66}67 68define ptr @f4() "frame-pointer"="all" {69; CHECK-LABEL: f4:70; CHECK:       # %bb.0:71; CHECK-NEXT:    pushq %rbp72; CHECK-NEXT:    .seh_pushreg %rbp73; CHECK-NEXT:    subq $304, %rsp # imm = 0x13074; CHECK-NEXT:    .seh_stackalloc 30475; CHECK-NEXT:    leaq {{[0-9]+}}(%rsp), %rbp76; CHECK-NEXT:    .seh_setframe %rbp, 12877; CHECK-NEXT:    .seh_endprologue78; CHECK-NEXT:    movq 184(%rbp), %rax79; CHECK-NEXT:    .seh_startepilogue80; CHECK-NEXT:    addq $304, %rsp # imm = 0x13081; CHECK-NEXT:    popq %rbp82; CHECK-NEXT:    .seh_endepilogue83; CHECK-NEXT:    retq84; CHECK-NEXT:    .seh_endproc85  alloca [300 x i8]86  %ra = call ptr @llvm.returnaddress(i32 0)87  ret ptr %ra88}89 90declare void @external(ptr)91 92define void @f5() "frame-pointer"="all" {93; CHECK-LABEL: f5:94; CHECK:       # %bb.0:95; CHECK-NEXT:    pushq %rbp96; CHECK-NEXT:    .seh_pushreg %rbp97; CHECK-NEXT:    subq $336, %rsp # imm = 0x15098; CHECK-NEXT:    .seh_stackalloc 33699; CHECK-NEXT:    leaq {{[0-9]+}}(%rsp), %rbp100; CHECK-NEXT:    .seh_setframe %rbp, 128101; CHECK-NEXT:    .seh_endprologue102; CHECK-NEXT:    leaq -92(%rbp), %rcx103; CHECK-NEXT:    callq external104; CHECK-NEXT:    nop105; CHECK-NEXT:    .seh_startepilogue106; CHECK-NEXT:    addq $336, %rsp # imm = 0x150107; CHECK-NEXT:    popq %rbp108; CHECK-NEXT:    .seh_endepilogue109; CHECK-NEXT:    retq110; CHECK-NEXT:    .seh_endproc111  %a = alloca [300 x i8]112  call void @external(ptr %a)113  ret void114}115 116define void @f6(i32 %p, ...) "frame-pointer"="all" {117; CHECK-LABEL: f6:118; CHECK:       # %bb.0:119; CHECK-NEXT:    pushq %rbp120; CHECK-NEXT:    .seh_pushreg %rbp121; CHECK-NEXT:    subq $336, %rsp # imm = 0x150122; CHECK-NEXT:    .seh_stackalloc 336123; CHECK-NEXT:    leaq {{[0-9]+}}(%rsp), %rbp124; CHECK-NEXT:    .seh_setframe %rbp, 128125; CHECK-NEXT:    .seh_endprologue126; CHECK-NEXT:    leaq -92(%rbp), %rcx127; CHECK-NEXT:    callq external128; CHECK-NEXT:    nop129; CHECK-NEXT:    .seh_startepilogue130; CHECK-NEXT:    addq $336, %rsp # imm = 0x150131; CHECK-NEXT:    popq %rbp132; CHECK-NEXT:    .seh_endepilogue133; CHECK-NEXT:    retq134; CHECK-NEXT:    .seh_endproc135  %a = alloca [300 x i8]136  call void @external(ptr %a)137  ret void138}139 140define i32 @f7(i32 %a, i32 %b, i32 %c, i32 %d, i32 %e) "frame-pointer"="all" {141; CHECK-LABEL: f7:142; CHECK:       # %bb.0:143; CHECK-NEXT:    pushq %rbp144; CHECK-NEXT:    .seh_pushreg %rbp145; CHECK-NEXT:    subq $304, %rsp # imm = 0x130146; CHECK-NEXT:    .seh_stackalloc 304147; CHECK-NEXT:    leaq {{[0-9]+}}(%rsp), %rbp148; CHECK-NEXT:    .seh_setframe %rbp, 128149; CHECK-NEXT:    .seh_endprologue150; CHECK-NEXT:    andq $-64, %rsp151; CHECK-NEXT:    movl 224(%rbp), %eax152; CHECK-NEXT:    .seh_startepilogue153; CHECK-NEXT:    leaq 176(%rbp), %rsp154; CHECK-NEXT:    popq %rbp155; CHECK-NEXT:    .seh_endepilogue156; CHECK-NEXT:    retq157; CHECK-NEXT:    .seh_endproc158  alloca [300 x i8], align 64159  ret i32 %e160}161 162define i32 @f8(i32 %a, i32 %b, i32 %c, i32 %d, i32 %e) "frame-pointer"="all" {163; CHECK-LABEL: f8:164; CHECK:       # %bb.0:165; CHECK-NEXT:    pushq %rbp166; CHECK-NEXT:    .seh_pushreg %rbp167; CHECK-NEXT:    pushq %rsi168; CHECK-NEXT:    .seh_pushreg %rsi169; CHECK-NEXT:    pushq %rbx170; CHECK-NEXT:    .seh_pushreg %rbx171; CHECK-NEXT:    subq $352, %rsp # imm = 0x160172; CHECK-NEXT:    .seh_stackalloc 352173; CHECK-NEXT:    leaq {{[0-9]+}}(%rsp), %rbp174; CHECK-NEXT:    .seh_setframe %rbp, 128175; CHECK-NEXT:    .seh_endprologue176; CHECK-NEXT:    andq $-64, %rsp177; CHECK-NEXT:    movq %rsp, %rbx178; CHECK-NEXT:    movl 288(%rbp), %esi179; CHECK-NEXT:    movl %ecx, %eax180; CHECK-NEXT:    leaq 15(,%rax,4), %rax181; CHECK-NEXT:    andq $-16, %rax182; CHECK-NEXT:    callq __chkstk183; CHECK-NEXT:    subq %rax, %rsp184; CHECK-NEXT:    subq $32, %rsp185; CHECK-NEXT:    movq %rbx, %rcx186; CHECK-NEXT:    callq external187; CHECK-NEXT:    addq $32, %rsp188; CHECK-NEXT:    movl %esi, %eax189; CHECK-NEXT:    .seh_startepilogue190; CHECK-NEXT:    leaq 224(%rbp), %rsp191; CHECK-NEXT:    popq %rbx192; CHECK-NEXT:    popq %rsi193; CHECK-NEXT:    popq %rbp194; CHECK-NEXT:    .seh_endepilogue195; CHECK-NEXT:    retq196; CHECK-NEXT:    .seh_endproc197  %alloca = alloca [300 x i8], align 64198  alloca i32, i32 %a199  call void @external(ptr %alloca)200  ret i32 %e201}202 203define i64 @f9() {204; CHECK-LABEL: f9:205; CHECK:       # %bb.0: # %entry206; CHECK-NEXT:    pushq %rbp207; CHECK-NEXT:    .seh_pushreg %rbp208; CHECK-NEXT:    movq %rsp, %rbp209; CHECK-NEXT:    .seh_setframe %rbp, 0210; CHECK-NEXT:    .seh_endprologue211; CHECK-NEXT:    pushfq212; CHECK-NEXT:    popq %rax213; CHECK-NEXT:    .seh_startepilogue214; CHECK-NEXT:    popq %rbp215; CHECK-NEXT:    .seh_endepilogue216; CHECK-NEXT:    retq217; CHECK-NEXT:    .seh_endproc218entry:219  %call = call i64 @llvm.x86.flags.read.u64()220  ret i64 %call221}222 223declare i64 @dummy()224 225define i64 @f10(ptr %foo, i64 %bar, i64 %baz) {226; CHECK-LABEL: f10:227; CHECK:       # %bb.0:228; CHECK-NEXT:    pushq %rsi229; CHECK-NEXT:    .seh_pushreg %rsi230; CHECK-NEXT:    pushq %rbx231; CHECK-NEXT:    .seh_pushreg %rbx232; CHECK-NEXT:    subq $40, %rsp233; CHECK-NEXT:    .seh_stackalloc 40234; CHECK-NEXT:    .seh_endprologue235; CHECK-NEXT:    movq %rdx, %rsi236; CHECK-NEXT:    movq %rdx, %rax237; CHECK-NEXT:    lock cmpxchgq %r8, (%rcx)238; CHECK-NEXT:    sete %bl239; CHECK-NEXT:    callq dummy240; CHECK-NEXT:    testb %bl, %bl241; CHECK-NEXT:    cmoveq %rsi, %rax242; CHECK-NEXT:    .seh_startepilogue243; CHECK-NEXT:    addq $40, %rsp244; CHECK-NEXT:    popq %rbx245; CHECK-NEXT:    popq %rsi246; CHECK-NEXT:    .seh_endepilogue247; CHECK-NEXT:    retq248; CHECK-NEXT:    .seh_endproc249  %cx = cmpxchg ptr %foo, i64 %bar, i64 %baz seq_cst seq_cst250  %v = extractvalue { i64, i1 } %cx, 0251  %p = extractvalue { i64, i1 } %cx, 1252  %call = call i64 @dummy()253  %sel = select i1 %p, i64 %call, i64 %bar254  ret i64 %sel255}256 257define ptr @f11() "frame-pointer"="all" {258; CHECK-LABEL: f11:259; CHECK:       # %bb.0:260; CHECK-NEXT:    pushq %rbp261; CHECK-NEXT:    .seh_pushreg %rbp262; CHECK-NEXT:    movq %rsp, %rbp263; CHECK-NEXT:    .seh_setframe %rbp, 0264; CHECK-NEXT:    .seh_endprologue265; CHECK-NEXT:    leaq 8(%rbp), %rax266; CHECK-NEXT:    .seh_startepilogue267; CHECK-NEXT:    popq %rbp268; CHECK-NEXT:    .seh_endepilogue269; CHECK-NEXT:    retq270; CHECK-NEXT:    .seh_endproc271  %aora = call ptr @llvm.addressofreturnaddress()272  ret ptr %aora273}274 275define ptr @f12() {276; CHECK-LABEL: f12:277; CHECK:       # %bb.0:278; CHECK-NEXT:    movq %rsp, %rax279; CHECK-NEXT:    retq280  %aora = call ptr @llvm.addressofreturnaddress()281  ret ptr %aora282}283 284declare ptr @llvm.returnaddress(i32) nounwind readnone285declare ptr @llvm.addressofreturnaddress() nounwind readnone286declare i64 @llvm.x86.flags.read.u64()287declare void @llvm.va_start(ptr) nounwind288