brintos

brintos / llvm-project-archived public Read only

0
0
Text · 16.5 KiB · a868fa5 Raw
455 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=i386-pc-windows-msvc < %s -o - | FileCheck -check-prefix=MSVC-X86 %s3; RUN: llc -mtriple=x86_64-pc-windows-msvc < %s -o - | FileCheck -check-prefix=MSVC-X64 %s4 5; Make sure fastisel falls back and does something secure.6; RUN: llc -mtriple=i686-pc-windows-msvc -O0 < %s -o - | FileCheck -check-prefix=MSVC-X86-O0 %s7; RUN: llc -mtriple=x86_64-pc-windows-msvc -O0 < %s -o - | FileCheck -check-prefix=MSVC-X64-O0 %s8 9@"\01LC" = internal constant [11 x i8] c"buf == %s\0A\00"    ; <ptr> [#uses=1]10 11define void @test(ptr %a) nounwind ssp {12; MSVC-X86-LABEL: test:13; MSVC-X86:       # %bb.0: # %entry14; MSVC-X86-NEXT:    pushl %esi15; MSVC-X86-NEXT:    subl $12, %esp16; MSVC-X86-NEXT:    movl ___security_cookie, %eax17; MSVC-X86-NEXT:    xorl %esp, %eax18; MSVC-X86-NEXT:    movl %eax, {{[0-9]+}}(%esp)19; MSVC-X86-NEXT:    movl %esp, %esi20; MSVC-X86-NEXT:    pushl {{[0-9]+}}(%esp)21; MSVC-X86-NEXT:    pushl %esi22; MSVC-X86-NEXT:    calll _strcpy23; MSVC-X86-NEXT:    addl $8, %esp24; MSVC-X86-NEXT:    pushl %esi25; MSVC-X86-NEXT:    pushl $LC26; MSVC-X86-NEXT:    calll _printf27; MSVC-X86-NEXT:    addl $8, %esp28; MSVC-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax29; MSVC-X86-NEXT:    xorl %esp, %eax30; MSVC-X86-NEXT:    movl ___security_cookie, %ecx31; MSVC-X86-NEXT:    cmpl %eax, %ecx32; MSVC-X86-NEXT:    jne LBB0_233; MSVC-X86-NEXT:  # %bb.1: # %return34; MSVC-X86-NEXT:    addl $12, %esp35; MSVC-X86-NEXT:    popl %esi36; MSVC-X86-NEXT:    retl37; MSVC-X86-NEXT:  LBB0_2: # %return38; MSVC-X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx39; MSVC-X86-NEXT:    xorl %esp, %ecx40; MSVC-X86-NEXT:    calll @__security_check_cookie@441;42; MSVC-X64-LABEL: test:43; MSVC-X64:       # %bb.0: # %entry44; MSVC-X64-NEXT:    pushq %rsi45; MSVC-X64-NEXT:    subq $64, %rsp46; MSVC-X64-NEXT:    movq %rcx, %rdx47; MSVC-X64-NEXT:    movq __security_cookie(%rip), %rax48; MSVC-X64-NEXT:    xorq %rsp, %rax49; MSVC-X64-NEXT:    movq %rax, {{[0-9]+}}(%rsp)50; MSVC-X64-NEXT:    movq %rcx, {{[0-9]+}}(%rsp)51; MSVC-X64-NEXT:    leaq {{[0-9]+}}(%rsp), %rsi52; MSVC-X64-NEXT:    movq %rsi, %rcx53; MSVC-X64-NEXT:    callq strcpy54; MSVC-X64-NEXT:    leaq LC(%rip), %rcx55; MSVC-X64-NEXT:    movq %rsi, %rdx56; MSVC-X64-NEXT:    callq printf57; MSVC-X64-NEXT:    movq {{[0-9]+}}(%rsp), %rax58; MSVC-X64-NEXT:    xorq %rsp, %rax59; MSVC-X64-NEXT:    movq __security_cookie(%rip), %rcx60; MSVC-X64-NEXT:    cmpq %rax, %rcx61; MSVC-X64-NEXT:    jne .LBB0_262; MSVC-X64-NEXT:  # %bb.1: # %return63; MSVC-X64-NEXT:    addq $64, %rsp64; MSVC-X64-NEXT:    popq %rsi65; MSVC-X64-NEXT:    retq66; MSVC-X64-NEXT:  .LBB0_2: # %return67; MSVC-X64-NEXT:    movq {{[0-9]+}}(%rsp), %rcx68; MSVC-X64-NEXT:    xorq %rsp, %rcx69; MSVC-X64-NEXT:    callq __security_check_cookie70;71; MSVC-X86-O0-LABEL: test:72; MSVC-X86-O0:       # %bb.0: # %entry73; MSVC-X86-O0-NEXT:    subl $20, %esp74; MSVC-X86-O0-NEXT:    movl {{[0-9]+}}(%esp), %eax75; MSVC-X86-O0-NEXT:    movl ___security_cookie, %eax76; MSVC-X86-O0-NEXT:    xorl %esp, %eax77; MSVC-X86-O0-NEXT:    movl %eax, {{[0-9]+}}(%esp)78; MSVC-X86-O0-NEXT:    movl {{[0-9]+}}(%esp), %ecx79; MSVC-X86-O0-NEXT:    movl %esp, %eax80; MSVC-X86-O0-NEXT:    movl %ecx, 4(%eax)81; MSVC-X86-O0-NEXT:    leal {{[0-9]+}}(%esp), %ecx82; MSVC-X86-O0-NEXT:    movl %ecx, (%eax)83; MSVC-X86-O0-NEXT:    calll _strcpy84; MSVC-X86-O0-NEXT:    leal LC, %ecx85; MSVC-X86-O0-NEXT:    leal {{[0-9]+}}(%esp), %eax86; MSVC-X86-O0-NEXT:    movl %ecx, (%esp)87; MSVC-X86-O0-NEXT:    movl %eax, {{[0-9]+}}(%esp)88; MSVC-X86-O0-NEXT:    calll _printf89; MSVC-X86-O0-NEXT:  # %bb.1: # %return90; MSVC-X86-O0-NEXT:    movl {{[0-9]+}}(%esp), %ecx91; MSVC-X86-O0-NEXT:    xorl %esp, %ecx92; MSVC-X86-O0-NEXT:    movl ___security_cookie, %eax93; MSVC-X86-O0-NEXT:    subl %ecx, %eax94; MSVC-X86-O0-NEXT:    jne LBB0_395; MSVC-X86-O0-NEXT:    jmp LBB0_296; MSVC-X86-O0-NEXT:  LBB0_3: # %return97; MSVC-X86-O0-NEXT:    movl {{[0-9]+}}(%esp), %ecx98; MSVC-X86-O0-NEXT:    xorl %esp, %ecx99; MSVC-X86-O0-NEXT:    calll @__security_check_cookie@4100; MSVC-X86-O0-NEXT:  LBB0_2: # %return101; MSVC-X86-O0-NEXT:    addl $20, %esp102; MSVC-X86-O0-NEXT:    retl103;104; MSVC-X64-O0-LABEL: test:105; MSVC-X64-O0:       # %bb.0: # %entry106; MSVC-X64-O0-NEXT:    subq $56, %rsp107; MSVC-X64-O0-NEXT:    movq __security_cookie(%rip), %rax108; MSVC-X64-O0-NEXT:    xorq %rsp, %rax109; MSVC-X64-O0-NEXT:    movq %rax, {{[0-9]+}}(%rsp)110; MSVC-X64-O0-NEXT:    movq %rcx, {{[0-9]+}}(%rsp)111; MSVC-X64-O0-NEXT:    movq {{[0-9]+}}(%rsp), %rdx112; MSVC-X64-O0-NEXT:    leaq {{[0-9]+}}(%rsp), %rcx113; MSVC-X64-O0-NEXT:    callq strcpy114; MSVC-X64-O0-NEXT:    leaq LC(%rip), %rcx115; MSVC-X64-O0-NEXT:    leaq {{[0-9]+}}(%rsp), %rdx116; MSVC-X64-O0-NEXT:    callq printf117; MSVC-X64-O0-NEXT:  # %bb.1: # %return118; MSVC-X64-O0-NEXT:    movq {{[0-9]+}}(%rsp), %rcx119; MSVC-X64-O0-NEXT:    xorq %rsp, %rcx120; MSVC-X64-O0-NEXT:    movq __security_cookie(%rip), %rax121; MSVC-X64-O0-NEXT:    subq %rcx, %rax122; MSVC-X64-O0-NEXT:    jne .LBB0_3123; MSVC-X64-O0-NEXT:    jmp .LBB0_2124; MSVC-X64-O0-NEXT:  .LBB0_3: # %return125; MSVC-X64-O0-NEXT:    movq {{[0-9]+}}(%rsp), %rcx126; MSVC-X64-O0-NEXT:    xorq %rsp, %rcx127; MSVC-X64-O0-NEXT:    callq __security_check_cookie128; MSVC-X64-O0-NEXT:  .LBB0_2: # %return129; MSVC-X64-O0-NEXT:    addq $56, %rsp130; MSVC-X64-O0-NEXT:    retq131 132entry:133 %a_addr = alloca ptr    ; <ptr> [#uses=2]134 %buf = alloca [8 x i8]    ; <ptr> [#uses=2]135 store ptr %a, ptr %a_addr136 %0 = load ptr, ptr %a_addr, align 4    ; <ptr> [#uses=1]137 %1 = call ptr @strcpy(ptr %buf, ptr %0) nounwind   ; <ptr> [#uses=0]138 %2 = call i32 (ptr, ...) @printf(ptr @"\01LC", ptr %buf) nounwind    ; <i32> [#uses=0]139 br label %return140 141return:    ; preds = %entry142 ret void143}144 145declare void @escape(ptr)146 147define void @test_vla(i32 %n) nounwind ssp {148; MSVC-X86-LABEL: test_vla:149; MSVC-X86:       # %bb.0:150; MSVC-X86-NEXT:    pushl %ebp151; MSVC-X86-NEXT:    movl %esp, %ebp152; MSVC-X86-NEXT:    pushl %eax153; MSVC-X86-NEXT:    movl 8(%ebp), %eax154; MSVC-X86-NEXT:    movl ___security_cookie, %ecx155; MSVC-X86-NEXT:    xorl %ebp, %ecx156; MSVC-X86-NEXT:    movl %ecx, -4(%ebp)157; MSVC-X86-NEXT:    shll $2, %eax158; MSVC-X86-NEXT:    calll __chkstk159; MSVC-X86-NEXT:    movl %esp, %eax160; MSVC-X86-NEXT:    pushl %eax161; MSVC-X86-NEXT:    calll _escape162; MSVC-X86-NEXT:    addl $4, %esp163; MSVC-X86-NEXT:    movl -4(%ebp), %eax164; MSVC-X86-NEXT:    xorl %ebp, %eax165; MSVC-X86-NEXT:    movl ___security_cookie, %ecx166; MSVC-X86-NEXT:    cmpl %eax, %ecx167; MSVC-X86-NEXT:    jne LBB1_2168; MSVC-X86-NEXT:  # %bb.1:169; MSVC-X86-NEXT:    movl %ebp, %esp170; MSVC-X86-NEXT:    popl %ebp171; MSVC-X86-NEXT:    retl172; MSVC-X86-NEXT:  LBB1_2:173; MSVC-X86-NEXT:    movl -4(%ebp), %ecx174; MSVC-X86-NEXT:    xorl %ebp, %ecx175; MSVC-X86-NEXT:    calll @__security_check_cookie@4176;177; MSVC-X64-LABEL: test_vla:178; MSVC-X64:       # %bb.0:179; MSVC-X64-NEXT:    pushq %rbp180; MSVC-X64-NEXT:    subq $16, %rsp181; MSVC-X64-NEXT:    leaq {{[0-9]+}}(%rsp), %rbp182; MSVC-X64-NEXT:    movq __security_cookie(%rip), %rax183; MSVC-X64-NEXT:    xorq %rbp, %rax184; MSVC-X64-NEXT:    movq %rax, -8(%rbp)185; MSVC-X64-NEXT:    movl %ecx, %eax186; MSVC-X64-NEXT:    leaq 15(,%rax,4), %rax187; MSVC-X64-NEXT:    andq $-16, %rax188; MSVC-X64-NEXT:    callq __chkstk189; MSVC-X64-NEXT:    subq %rax, %rsp190; MSVC-X64-NEXT:    movq %rsp, %rcx191; MSVC-X64-NEXT:    subq $32, %rsp192; MSVC-X64-NEXT:    callq escape193; MSVC-X64-NEXT:    addq $32, %rsp194; MSVC-X64-NEXT:    movq -8(%rbp), %rax195; MSVC-X64-NEXT:    xorq %rbp, %rax196; MSVC-X64-NEXT:    movq __security_cookie(%rip), %rcx197; MSVC-X64-NEXT:    cmpq %rax, %rcx198; MSVC-X64-NEXT:    jne .LBB1_2199; MSVC-X64-NEXT:  # %bb.1:200; MSVC-X64-NEXT:    movq %rbp, %rsp201; MSVC-X64-NEXT:    popq %rbp202; MSVC-X64-NEXT:    retq203; MSVC-X64-NEXT:  .LBB1_2:204; MSVC-X64-NEXT:    movq -8(%rbp), %rcx205; MSVC-X64-NEXT:    xorq %rbp, %rcx206; MSVC-X64-NEXT:    subq $32, %rsp207; MSVC-X64-NEXT:    callq __security_check_cookie208;209; MSVC-X86-O0-LABEL: test_vla:210; MSVC-X86-O0:       # %bb.0:211; MSVC-X86-O0-NEXT:    pushl %ebp212; MSVC-X86-O0-NEXT:    movl %esp, %ebp213; MSVC-X86-O0-NEXT:    pushl %eax214; MSVC-X86-O0-NEXT:    movl 8(%ebp), %eax215; MSVC-X86-O0-NEXT:    movl ___security_cookie, %ecx216; MSVC-X86-O0-NEXT:    xorl %ebp, %ecx217; MSVC-X86-O0-NEXT:    movl %ecx, -4(%ebp)218; MSVC-X86-O0-NEXT:    shll $2, %eax219; MSVC-X86-O0-NEXT:    calll __chkstk220; MSVC-X86-O0-NEXT:    movl %esp, %eax221; MSVC-X86-O0-NEXT:    subl $4, %esp222; MSVC-X86-O0-NEXT:    movl %eax, (%esp)223; MSVC-X86-O0-NEXT:    calll _escape224; MSVC-X86-O0-NEXT:    addl $4, %esp225; MSVC-X86-O0-NEXT:    movl -4(%ebp), %ecx226; MSVC-X86-O0-NEXT:    xorl %ebp, %ecx227; MSVC-X86-O0-NEXT:    movl ___security_cookie, %eax228; MSVC-X86-O0-NEXT:    subl %ecx, %eax229; MSVC-X86-O0-NEXT:    jne LBB1_2230; MSVC-X86-O0-NEXT:    jmp LBB1_1231; MSVC-X86-O0-NEXT:  LBB1_2:232; MSVC-X86-O0-NEXT:    movl -4(%ebp), %ecx233; MSVC-X86-O0-NEXT:    xorl %ebp, %ecx234; MSVC-X86-O0-NEXT:    calll @__security_check_cookie@4235; MSVC-X86-O0-NEXT:  LBB1_1:236; MSVC-X86-O0-NEXT:    movl %ebp, %esp237; MSVC-X86-O0-NEXT:    popl %ebp238; MSVC-X86-O0-NEXT:    retl239;240; MSVC-X64-O0-LABEL: test_vla:241; MSVC-X64-O0:       # %bb.0:242; MSVC-X64-O0-NEXT:    pushq %rbp243; MSVC-X64-O0-NEXT:    subq $16, %rsp244; MSVC-X64-O0-NEXT:    leaq {{[0-9]+}}(%rsp), %rbp245; MSVC-X64-O0-NEXT:    movq __security_cookie(%rip), %rax246; MSVC-X64-O0-NEXT:    xorq %rbp, %rax247; MSVC-X64-O0-NEXT:    movq %rax, -8(%rbp)248; MSVC-X64-O0-NEXT:    movl %ecx, %eax249; MSVC-X64-O0-NEXT:    # kill: def $rax killed $eax250; MSVC-X64-O0-NEXT:    leaq 15(,%rax,4), %rax251; MSVC-X64-O0-NEXT:    andq $-16, %rax252; MSVC-X64-O0-NEXT:    callq __chkstk253; MSVC-X64-O0-NEXT:    subq %rax, %rsp254; MSVC-X64-O0-NEXT:    movq %rsp, %rcx255; MSVC-X64-O0-NEXT:    subq $32, %rsp256; MSVC-X64-O0-NEXT:    callq escape257; MSVC-X64-O0-NEXT:    addq $32, %rsp258; MSVC-X64-O0-NEXT:    movq -8(%rbp), %rcx259; MSVC-X64-O0-NEXT:    xorq %rbp, %rcx260; MSVC-X64-O0-NEXT:    movq __security_cookie(%rip), %rax261; MSVC-X64-O0-NEXT:    subq %rcx, %rax262; MSVC-X64-O0-NEXT:    jne .LBB1_2263; MSVC-X64-O0-NEXT:    jmp .LBB1_1264; MSVC-X64-O0-NEXT:  .LBB1_2:265; MSVC-X64-O0-NEXT:    movq -8(%rbp), %rcx266; MSVC-X64-O0-NEXT:    xorq %rbp, %rcx267; MSVC-X64-O0-NEXT:    subq $32, %rsp268; MSVC-X64-O0-NEXT:    callq __security_check_cookie269; MSVC-X64-O0-NEXT:  .LBB1_1:270; MSVC-X64-O0-NEXT:    movq %rbp, %rsp271; MSVC-X64-O0-NEXT:    popq %rbp272; MSVC-X64-O0-NEXT:    retq273  %vla = alloca i32, i32 %n274  call void @escape(ptr %vla)275  ret void276}277 278; This case is interesting because we address local variables with RBX but XOR279; the guard value with RBP. That's fine, either value will do, as long as they280; are the same across the life of the frame.281 282define void @test_vla_realign(i32 %n) nounwind ssp {283; MSVC-X86-LABEL: test_vla_realign:284; MSVC-X86:       # %bb.0:285; MSVC-X86-NEXT:    pushl %ebp286; MSVC-X86-NEXT:    movl %esp, %ebp287; MSVC-X86-NEXT:    pushl %edi288; MSVC-X86-NEXT:    pushl %esi289; MSVC-X86-NEXT:    andl $-32, %esp290; MSVC-X86-NEXT:    subl $32, %esp291; MSVC-X86-NEXT:    movl %esp, %esi292; MSVC-X86-NEXT:    movl 8(%ebp), %eax293; MSVC-X86-NEXT:    movl ___security_cookie, %ecx294; MSVC-X86-NEXT:    xorl %ebp, %ecx295; MSVC-X86-NEXT:    movl %ecx, 12(%esi)296; MSVC-X86-NEXT:    shll $2, %eax297; MSVC-X86-NEXT:    calll __chkstk298; MSVC-X86-NEXT:    movl %esp, %edi299; MSVC-X86-NEXT:    movl %esi, %eax300; MSVC-X86-NEXT:    pushl %eax301; MSVC-X86-NEXT:    calll _escape302; MSVC-X86-NEXT:    addl $4, %esp303; MSVC-X86-NEXT:    pushl %edi304; MSVC-X86-NEXT:    calll _escape305; MSVC-X86-NEXT:    addl $4, %esp306; MSVC-X86-NEXT:    movl 12(%esi), %eax307; MSVC-X86-NEXT:    xorl %ebp, %eax308; MSVC-X86-NEXT:    movl ___security_cookie, %ecx309; MSVC-X86-NEXT:    cmpl %eax, %ecx310; MSVC-X86-NEXT:    jne LBB2_2311; MSVC-X86-NEXT:  # %bb.1:312; MSVC-X86-NEXT:    leal -8(%ebp), %esp313; MSVC-X86-NEXT:    popl %esi314; MSVC-X86-NEXT:    popl %edi315; MSVC-X86-NEXT:    popl %ebp316; MSVC-X86-NEXT:    retl317; MSVC-X86-NEXT:  LBB2_2:318; MSVC-X86-NEXT:    movl 12(%esi), %ecx319; MSVC-X86-NEXT:    xorl %ebp, %ecx320; MSVC-X86-NEXT:    calll @__security_check_cookie@4321;322; MSVC-X64-LABEL: test_vla_realign:323; MSVC-X64:       # %bb.0:324; MSVC-X64-NEXT:    pushq %rbp325; MSVC-X64-NEXT:    pushq %rsi326; MSVC-X64-NEXT:    pushq %rbx327; MSVC-X64-NEXT:    subq $32, %rsp328; MSVC-X64-NEXT:    leaq {{[0-9]+}}(%rsp), %rbp329; MSVC-X64-NEXT:    andq $-32, %rsp330; MSVC-X64-NEXT:    movq %rsp, %rbx331; MSVC-X64-NEXT:    movq __security_cookie(%rip), %rax332; MSVC-X64-NEXT:    xorq %rbp, %rax333; MSVC-X64-NEXT:    movq %rax, 24(%rbx)334; MSVC-X64-NEXT:    movl %ecx, %eax335; MSVC-X64-NEXT:    leaq 15(,%rax,4), %rax336; MSVC-X64-NEXT:    andq $-16, %rax337; MSVC-X64-NEXT:    callq __chkstk338; MSVC-X64-NEXT:    subq %rax, %rsp339; MSVC-X64-NEXT:    movq %rsp, %rsi340; MSVC-X64-NEXT:    subq $32, %rsp341; MSVC-X64-NEXT:    movq %rbx, %rcx342; MSVC-X64-NEXT:    callq escape343; MSVC-X64-NEXT:    movq %rsi, %rcx344; MSVC-X64-NEXT:    callq escape345; MSVC-X64-NEXT:    addq $32, %rsp346; MSVC-X64-NEXT:    movq 24(%rbx), %rax347; MSVC-X64-NEXT:    xorq %rbp, %rax348; MSVC-X64-NEXT:    movq __security_cookie(%rip), %rcx349; MSVC-X64-NEXT:    cmpq %rax, %rcx350; MSVC-X64-NEXT:    jne .LBB2_2351; MSVC-X64-NEXT:  # %bb.1:352; MSVC-X64-NEXT:    movq %rbp, %rsp353; MSVC-X64-NEXT:    popq %rbx354; MSVC-X64-NEXT:    popq %rsi355; MSVC-X64-NEXT:    popq %rbp356; MSVC-X64-NEXT:    retq357; MSVC-X64-NEXT:  .LBB2_2:358; MSVC-X64-NEXT:    movq 24(%rbx), %rcx359; MSVC-X64-NEXT:    xorq %rbp, %rcx360; MSVC-X64-NEXT:    subq $32, %rsp361; MSVC-X64-NEXT:    callq __security_check_cookie362;363; MSVC-X86-O0-LABEL: test_vla_realign:364; MSVC-X86-O0:       # %bb.0:365; MSVC-X86-O0-NEXT:    pushl %ebp366; MSVC-X86-O0-NEXT:    movl %esp, %ebp367; MSVC-X86-O0-NEXT:    pushl %esi368; MSVC-X86-O0-NEXT:    andl $-32, %esp369; MSVC-X86-O0-NEXT:    subl $64, %esp370; MSVC-X86-O0-NEXT:    movl %esp, %esi371; MSVC-X86-O0-NEXT:    movl 8(%ebp), %eax372; MSVC-X86-O0-NEXT:    movl ___security_cookie, %ecx373; MSVC-X86-O0-NEXT:    xorl %ebp, %ecx374; MSVC-X86-O0-NEXT:    movl %ecx, 48(%esi)375; MSVC-X86-O0-NEXT:    shll $2, %eax376; MSVC-X86-O0-NEXT:    calll __chkstk377; MSVC-X86-O0-NEXT:    movl %esp, %eax378; MSVC-X86-O0-NEXT:    movl %eax, 28(%esi) # 4-byte Spill379; MSVC-X86-O0-NEXT:    leal 32(%esi), %eax380; MSVC-X86-O0-NEXT:    subl $4, %esp381; MSVC-X86-O0-NEXT:    movl %eax, (%esp)382; MSVC-X86-O0-NEXT:    calll _escape383; MSVC-X86-O0-NEXT:    movl 28(%esi), %eax # 4-byte Reload384; MSVC-X86-O0-NEXT:    movl %eax, (%esp)385; MSVC-X86-O0-NEXT:    calll _escape386; MSVC-X86-O0-NEXT:    addl $4, %esp387; MSVC-X86-O0-NEXT:    movl 48(%esi), %ecx388; MSVC-X86-O0-NEXT:    xorl %ebp, %ecx389; MSVC-X86-O0-NEXT:    movl ___security_cookie, %eax390; MSVC-X86-O0-NEXT:    subl %ecx, %eax391; MSVC-X86-O0-NEXT:    jne LBB2_2392; MSVC-X86-O0-NEXT:    jmp LBB2_1393; MSVC-X86-O0-NEXT:  LBB2_2:394; MSVC-X86-O0-NEXT:    movl 48(%esi), %ecx395; MSVC-X86-O0-NEXT:    xorl %ebp, %ecx396; MSVC-X86-O0-NEXT:    calll @__security_check_cookie@4397; MSVC-X86-O0-NEXT:  LBB2_1:398; MSVC-X86-O0-NEXT:    leal -4(%ebp), %esp399; MSVC-X86-O0-NEXT:    popl %esi400; MSVC-X86-O0-NEXT:    popl %ebp401; MSVC-X86-O0-NEXT:    retl402;403; MSVC-X64-O0-LABEL: test_vla_realign:404; MSVC-X64-O0:       # %bb.0:405; MSVC-X64-O0-NEXT:    pushq %rbp406; MSVC-X64-O0-NEXT:    pushq %rbx407; MSVC-X64-O0-NEXT:    subq $72, %rsp408; MSVC-X64-O0-NEXT:    leaq {{[0-9]+}}(%rsp), %rbp409; MSVC-X64-O0-NEXT:    andq $-32, %rsp410; MSVC-X64-O0-NEXT:    movq %rsp, %rbx411; MSVC-X64-O0-NEXT:    movq __security_cookie(%rip), %rax412; MSVC-X64-O0-NEXT:    xorq %rbp, %rax413; MSVC-X64-O0-NEXT:    movq %rax, 64(%rbx)414; MSVC-X64-O0-NEXT:    movl %ecx, %eax415; MSVC-X64-O0-NEXT:    # kill: def $rax killed $eax416; MSVC-X64-O0-NEXT:    leaq 15(,%rax,4), %rax417; MSVC-X64-O0-NEXT:    andq $-16, %rax418; MSVC-X64-O0-NEXT:    callq __chkstk419; MSVC-X64-O0-NEXT:    subq %rax, %rsp420; MSVC-X64-O0-NEXT:    movq %rsp, %rax421; MSVC-X64-O0-NEXT:    movq %rax, 24(%rbx) # 8-byte Spill422; MSVC-X64-O0-NEXT:    leaq 32(%rbx), %rcx423; MSVC-X64-O0-NEXT:    subq $32, %rsp424; MSVC-X64-O0-NEXT:    callq escape425; MSVC-X64-O0-NEXT:    movq 24(%rbx), %rcx # 8-byte Reload426; MSVC-X64-O0-NEXT:    callq escape427; MSVC-X64-O0-NEXT:    addq $32, %rsp428; MSVC-X64-O0-NEXT:    movq 64(%rbx), %rcx429; MSVC-X64-O0-NEXT:    xorq %rbp, %rcx430; MSVC-X64-O0-NEXT:    movq __security_cookie(%rip), %rax431; MSVC-X64-O0-NEXT:    subq %rcx, %rax432; MSVC-X64-O0-NEXT:    jne .LBB2_2433; MSVC-X64-O0-NEXT:    jmp .LBB2_1434; MSVC-X64-O0-NEXT:  .LBB2_2:435; MSVC-X64-O0-NEXT:    movq 64(%rbx), %rcx436; MSVC-X64-O0-NEXT:    xorq %rbp, %rcx437; MSVC-X64-O0-NEXT:    subq $32, %rsp438; MSVC-X64-O0-NEXT:    callq __security_check_cookie439; MSVC-X64-O0-NEXT:  .LBB2_1:440; MSVC-X64-O0-NEXT:    leaq 8(%rbp), %rsp441; MSVC-X64-O0-NEXT:    popq %rbx442; MSVC-X64-O0-NEXT:    popq %rbp443; MSVC-X64-O0-NEXT:    retq444  %realign = alloca i32, align 32445  %vla = alloca i32, i32 %n446  call void @escape(ptr %realign)447  call void @escape(ptr %vla)448  ret void449}450 451declare ptr @strcpy(ptr, ptr) nounwind452 453declare i32 @printf(ptr, ...) nounwind454 455