|  | ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 | 
|  | ; RUN: llc -mtriple=sparc-unknown-linux  < %s | FileCheck -check-prefix=LINUX32 %s | 
|  | ; RUN: llc -mtriple=sparc64-unknown-linux  < %s | FileCheck -check-prefix=LINUX64 %s | 
|  | ; RUN: llc -mtriple=sparc-unknown-solaris < %s | FileCheck -check-prefixes=SOLARIS32 %s | 
|  | ; RUN: llc -mtriple=sparc64-unknown-solaris < %s | FileCheck -check-prefixes=SOLARIS64 %s | 
|  | ; RUN: llc -mtriple=sparc-unknown-openbsd  < %s | FileCheck -check-prefix=OPENBSD32 %s | 
|  | ; RUN: llc -mtriple=sparc64-unknown-openbsd  < %s | FileCheck -check-prefix=OPENBSD64 %s | 
|  |  | 
|  | define void @func() sspreq nounwind { | 
|  | ; LINUX32-LABEL: func: | 
|  | ; LINUX32:       ! %bb.0: | 
|  | ; LINUX32-NEXT:    save %sp, -104, %sp | 
|  | ; LINUX32-NEXT:    ld [%g7+20], %i0 | 
|  | ; LINUX32-NEXT:    st %i0, [%fp+-4] | 
|  | ; LINUX32-NEXT:    call capture | 
|  | ; LINUX32-NEXT:    add %fp, -8, %o0 | 
|  | ; LINUX32-NEXT:    ld [%fp+-4], %i0 | 
|  | ; LINUX32-NEXT:    ld [%g7+20], %i1 | 
|  | ; LINUX32-NEXT:    cmp %i1, %i0 | 
|  | ; LINUX32-NEXT:    bne .LBB0_2 | 
|  | ; LINUX32-NEXT:    nop | 
|  | ; LINUX32-NEXT:  ! %bb.1: | 
|  | ; LINUX32-NEXT:    ret | 
|  | ; LINUX32-NEXT:    restore | 
|  | ; LINUX32-NEXT:  .LBB0_2: | 
|  | ; LINUX32-NEXT:    call __stack_chk_fail | 
|  | ; LINUX32-NEXT:    nop | 
|  | ; | 
|  | ; LINUX64-LABEL: func: | 
|  | ; LINUX64:         .register %g7, #ignore | 
|  | ; LINUX64-NEXT:  ! %bb.0: | 
|  | ; LINUX64-NEXT:    save %sp, -192, %sp | 
|  | ; LINUX64-NEXT:    ldx [%g7+40], %i0 | 
|  | ; LINUX64-NEXT:    stx %i0, [%fp+2039] | 
|  | ; LINUX64-NEXT:    call capture | 
|  | ; LINUX64-NEXT:    add %fp, 2035, %o0 | 
|  | ; LINUX64-NEXT:    ldx [%fp+2039], %i0 | 
|  | ; LINUX64-NEXT:    ldx [%g7+40], %i1 | 
|  | ; LINUX64-NEXT:    cmp %i1, %i0 | 
|  | ; LINUX64-NEXT:    bne %xcc, .LBB0_2 | 
|  | ; LINUX64-NEXT:    nop | 
|  | ; LINUX64-NEXT:  ! %bb.1: | 
|  | ; LINUX64-NEXT:    ret | 
|  | ; LINUX64-NEXT:    restore | 
|  | ; LINUX64-NEXT:  .LBB0_2: | 
|  | ; LINUX64-NEXT:    call __stack_chk_fail | 
|  | ; LINUX64-NEXT:    nop | 
|  | ; | 
|  | ; SOLARIS32-LABEL: func: | 
|  | ; SOLARIS32:       ! %bb.0: | 
|  | ; SOLARIS32-NEXT:    save %sp, -104, %sp | 
|  | ; SOLARIS32-NEXT:    sethi %hi(__stack_chk_guard), %i0 | 
|  | ; SOLARIS32-NEXT:    ld [%i0+%lo(__stack_chk_guard)], %i1 | 
|  | ; SOLARIS32-NEXT:    st %i1, [%fp+-4] | 
|  | ; SOLARIS32-NEXT:    call capture | 
|  | ; SOLARIS32-NEXT:    add %fp, -8, %o0 | 
|  | ; SOLARIS32-NEXT:    ld [%i0+%lo(__stack_chk_guard)], %i0 | 
|  | ; SOLARIS32-NEXT:    ld [%fp+-4], %i1 | 
|  | ; SOLARIS32-NEXT:    cmp %i0, %i1 | 
|  | ; SOLARIS32-NEXT:    bne .LBB0_2 | 
|  | ; SOLARIS32-NEXT:    nop | 
|  | ; SOLARIS32-NEXT:  ! %bb.1: | 
|  | ; SOLARIS32-NEXT:    ret | 
|  | ; SOLARIS32-NEXT:    restore | 
|  | ; SOLARIS32-NEXT:  .LBB0_2: | 
|  | ; SOLARIS32-NEXT:    call __stack_chk_fail | 
|  | ; SOLARIS32-NEXT:    nop | 
|  | ; | 
|  | ; SOLARIS64-LABEL: func: | 
|  | ; SOLARIS64:       ! %bb.0: | 
|  | ; SOLARIS64-NEXT:    save %sp, -192, %sp | 
|  | ; SOLARIS64-NEXT:    sethi %h44(__stack_chk_guard), %i0 | 
|  | ; SOLARIS64-NEXT:    add %i0, %m44(__stack_chk_guard), %i0 | 
|  | ; SOLARIS64-NEXT:    sllx %i0, 12, %i0 | 
|  | ; SOLARIS64-NEXT:    ldx [%i0+%l44(__stack_chk_guard)], %i1 | 
|  | ; SOLARIS64-NEXT:    stx %i1, [%fp+2039] | 
|  | ; SOLARIS64-NEXT:    call capture | 
|  | ; SOLARIS64-NEXT:    add %fp, 2035, %o0 | 
|  | ; SOLARIS64-NEXT:    ldx [%i0+%l44(__stack_chk_guard)], %i0 | 
|  | ; SOLARIS64-NEXT:    ldx [%fp+2039], %i1 | 
|  | ; SOLARIS64-NEXT:    cmp %i0, %i1 | 
|  | ; SOLARIS64-NEXT:    bne %xcc, .LBB0_2 | 
|  | ; SOLARIS64-NEXT:    nop | 
|  | ; SOLARIS64-NEXT:  ! %bb.1: | 
|  | ; SOLARIS64-NEXT:    ret | 
|  | ; SOLARIS64-NEXT:    restore | 
|  | ; SOLARIS64-NEXT:  .LBB0_2: | 
|  | ; SOLARIS64-NEXT:    call __stack_chk_fail | 
|  | ; SOLARIS64-NEXT:    nop | 
|  | ; | 
|  | ; OPENBSD32-LABEL: func: | 
|  | ; OPENBSD32:       ! %bb.0: | 
|  | ; OPENBSD32-NEXT:    save %sp, -104, %sp | 
|  | ; OPENBSD32-NEXT:    sethi %hi(__guard_local), %i0 | 
|  | ; OPENBSD32-NEXT:    ld [%i0+%lo(__guard_local)], %i1 | 
|  | ; OPENBSD32-NEXT:    st %i1, [%fp+-4] | 
|  | ; OPENBSD32-NEXT:    call capture | 
|  | ; OPENBSD32-NEXT:    add %fp, -8, %o0 | 
|  | ; OPENBSD32-NEXT:    ld [%i0+%lo(__guard_local)], %i0 | 
|  | ; OPENBSD32-NEXT:    ld [%fp+-4], %i1 | 
|  | ; OPENBSD32-NEXT:    cmp %i0, %i1 | 
|  | ; OPENBSD32-NEXT:    bne .LBB0_2 | 
|  | ; OPENBSD32-NEXT:    nop | 
|  | ; OPENBSD32-NEXT:  ! %bb.1: ! %SP_return | 
|  | ; OPENBSD32-NEXT:    ret | 
|  | ; OPENBSD32-NEXT:    restore | 
|  | ; OPENBSD32-NEXT:  .LBB0_2: ! %CallStackCheckFailBlk | 
|  | ; OPENBSD32-NEXT:    sethi %hi(.LSSH), %i0 | 
|  | ; OPENBSD32-NEXT:    call __stack_smash_handler | 
|  | ; OPENBSD32-NEXT:    add %i0, %lo(.LSSH), %o0 | 
|  | ; | 
|  | ; OPENBSD64-LABEL: func: | 
|  | ; OPENBSD64:       ! %bb.0: | 
|  | ; OPENBSD64-NEXT:    save %sp, -192, %sp | 
|  | ; OPENBSD64-NEXT:    sethi %h44(__guard_local), %i0 | 
|  | ; OPENBSD64-NEXT:    add %i0, %m44(__guard_local), %i0 | 
|  | ; OPENBSD64-NEXT:    sllx %i0, 12, %i0 | 
|  | ; OPENBSD64-NEXT:    ldx [%i0+%l44(__guard_local)], %i1 | 
|  | ; OPENBSD64-NEXT:    stx %i1, [%fp+2039] | 
|  | ; OPENBSD64-NEXT:    call capture | 
|  | ; OPENBSD64-NEXT:    add %fp, 2035, %o0 | 
|  | ; OPENBSD64-NEXT:    ldx [%i0+%l44(__guard_local)], %i0 | 
|  | ; OPENBSD64-NEXT:    ldx [%fp+2039], %i1 | 
|  | ; OPENBSD64-NEXT:    cmp %i0, %i1 | 
|  | ; OPENBSD64-NEXT:    bne %xcc, .LBB0_2 | 
|  | ; OPENBSD64-NEXT:    nop | 
|  | ; OPENBSD64-NEXT:  ! %bb.1: ! %SP_return | 
|  | ; OPENBSD64-NEXT:    ret | 
|  | ; OPENBSD64-NEXT:    restore | 
|  | ; OPENBSD64-NEXT:  .LBB0_2: ! %CallStackCheckFailBlk | 
|  | ; OPENBSD64-NEXT:    sethi %h44(.LSSH), %i0 | 
|  | ; OPENBSD64-NEXT:    add %i0, %m44(.LSSH), %i0 | 
|  | ; OPENBSD64-NEXT:    sllx %i0, 12, %i0 | 
|  | ; OPENBSD64-NEXT:    call __stack_smash_handler | 
|  | ; OPENBSD64-NEXT:    add %i0, %l44(.LSSH), %o0 | 
|  | %alloca = alloca i32, align 4 | 
|  | call void @capture(ptr %alloca) | 
|  | ret void | 
|  | } | 
|  |  | 
|  | declare void @capture(ptr) |