brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.0 KiB · 60e8823 Raw
173 lines · plain
1; RUN: split-file %s %t2; RUN: cat %t/main.ll %t/a.ll > %t/a2.ll3; RUN: cat %t/main.ll %t/b.ll > %t/b2.ll4; RUN: cat %t/main.ll %t/c.ll > %t/c2.ll5; RUN: cat %t/main.ll %t/d.ll > %t/d2.ll6; RUN: cat %t/main.ll %t/e.ll > %t/e2.ll7; RUN: cat %t/main.ll %t/f.ll > %t/f2.ll8; RUN: cat %t/main.ll %t/g.ll > %t/g2.ll9; RUN: cat %t/main.ll %t/h.ll > %t/h2.ll10; RUN: cat %t/main.ll %t/i.ll > %t/i2.ll11; RUN: cat %t/main.ll %t/j.ll > %t/j2.ll12; RUN: llc %t/a2.ll -verify-machineinstrs -o - | \13; RUN: FileCheck --check-prefix=CHECK --check-prefix=CHECK-NO-OFFSET %s14; RUN: llc %t/b2.ll -verify-machineinstrs -o - | \15; RUN: FileCheck --check-prefix=CHECK --check-prefix=CHECK-POSITIVE-OFFSET %s16; RUN: llc %t/c2.ll -verify-machineinstrs -o - | \17; RUN: FileCheck --check-prefix=CHECK --check-prefix=CHECK-NEGATIVE-OFFSET %s18; RUN: llc %t/d2.ll -verify-machineinstrs -o - | \19; RUN: FileCheck --check-prefix=CHECK --check-prefix=CHECK-NPOT-OFFSET %s20; RUN: llc %t/e2.ll -verify-machineinstrs -o - | \21; RUN: FileCheck --check-prefix=CHECK --check-prefix=CHECK-NPOT-NEG-OFFSET %s22; RUN: llc %t/f2.ll -verify-machineinstrs -o - | \23; RUN: FileCheck --check-prefix=CHECK-ADD --check-prefix=CHECK-257-OFFSET %s24; RUN: llc %t/g2.ll -verify-machineinstrs -o - | \25; RUN: FileCheck --check-prefix=CHECK-ADD --check-prefix=CHECK-MINUS-257-OFFSET %s26 27; XFAIL28; RUN: not --crash llc %t/h2.ll -o - 2>&1 | \29; RUN: FileCheck --check-prefix=CHECK-BAD-OFFSET %s30; RUN: not --crash llc %t/i2.ll -o - 2>&1 | \31; RUN: FileCheck --check-prefix=CHECK-BAD-OFFSET %s32; RUN: not --crash llc %t/j2.ll -o - 2>&1 | \33; RUN: FileCheck --check-prefix=CHECK-BAD-OFFSET %s34 35;--- main.ll36 37target triple = "aarch64-unknown-linux-gnu"38 39; Verify that we `mrs` from `SP_EL0` twice, rather than load from40; __stack_chk_guard.41define dso_local void @foo(i64 %t) local_unnamed_addr #0 {42; CHECK-LABEL: foo:                                    // @foo43; CHECK:         .cfi_startproc44; CHECK: // %bb.0:                               // %entry45; CHECK-NEXT:    stp     x29, x30, [sp, #-16]!           // 16-byte Folded Spill46; CHECK-NEXT:    .cfi_def_cfa_offset 1647; CHECK-NEXT:    mov     x29, sp48; CHECK-NEXT:    .cfi_def_cfa w29, 1649; CHECK-NEXT:    .cfi_offset w30, -850; CHECK-NEXT:    .cfi_offset w29, -1651; CHECK-NEXT:    .cfi_remember_state52; CHECK-NEXT:    sub     sp, sp, #1653; CHECK-NEXT:    mrs     x8, SP_EL054; CHECK-NEXT:    lsl     x9, x0, #255; CHECK-NO-OFFSET: ldr     x8, [x8]56; CHECK-POSITIVE-OFFSET: ldr x8, [x8, #8]57; CHECK-NEGATIVE-OFFSET: ldur x8, [x8, #-8]58; CHECK-NPOT-OFFSET:     ldur x8, [x8, #1]59; CHECK-NPOT-NEG-OFFSET: ldur x8, [x8, #-1]60; CHECK-NEXT:    add     x9, x9, #1561; CHECK-NEXT:    stur    x8, [x29, #-8]62; CHECK-NEXT     mov     x8, sp63; CHECK-NEXT     and     x9, x9, #0xfffffffffffffff064; CHECK-NEXT     sub     x0, x8, x965; CHECK-NEXT     mov     sp, x066; CHECK-NEXT     bl      baz67; CHECK-NEXT     mrs     x8, SP_EL068; CHECK-NO-OFFSET:       ldr x8, [x8]69; CHECK-POSITIVE-OFFSET: ldr x8, [x8, #8]70; CHECK-NEGATIVE-OFFSET: ldur x8, [x8, #-8]71; CHECK-NPOT-OFFSET:     ldur x8, [x8, #1]72; CHECK-NPOT-NEG-OFFSET: ldur x8, [x8, #-1]73; CHECK-NEXT:          ldur    x9, [x29, #-8]74; CHECK-NEXT:          cmp     x8, x975; CHECK-NEXT:          b.ne    .LBB0_276; CHECK-NEXT: // %bb.1:                               // %entry77; CHECK-NEXT:         mov     sp, x2978; CHECK-NEXT:         .cfi_def_cfa wsp, 1679; CHECK-NEXT:         ldp     x29, x30, [sp], #16             // 16-byte Folded Reload80; CHECK-NEXT:         .cfi_def_cfa_offset 081; CHECK-NEXT:         .cfi_restore w3082; CHECK-NEXT:         .cfi_restore w2983; CHECK-NEXT:         ret84; CHECK-NEXT: .LBB0_2:                                // %entry85; CHECK-NEXT:         .cfi_restore_state86; CHECK-NEXT:         bl      __stack_chk_fail87; CHECK-NEXT: .Lfunc_end0:88; CHECK-NEXT:         .size   foo, .Lfunc_end0-foo89; CHECK-NEXT:         .cfi_endproc90; CHECK-NEXT:                                        // -- End function91; CHECK-NEXT:        .section        ".note.GNU-stack","",@progbits92 93 94; CHECK-ADD:        stp     x29, x30, [sp, #-16]!           // 16-byte Folded Spill95; CHECK-ADD-NEXT:        .cfi_def_cfa_offset 1696; CHECK-ADD-NEXT:        mov     x29, sp97; CHECK-ADD-NEXT:        .cfi_def_cfa w29, 1698; CHECK-ADD-NEXT:        .cfi_offset w30, -899; CHECK-ADD-NEXT:        .cfi_offset w29, -16100; CHECK-ADD-NEXT:        .cfi_remember_state101; CHECK-ADD-NEXT:        sub     sp, sp, #16102; CHECK-ADD-NEXT:        mrs     x8, SP_EL0103; CHECK-ADD-NEXT:        lsl     x9, x0, #2104; CHECK-MINUS-257-OFFSET: sub     x8, x8, #257105; CHECK-257-OFFSET:      add     x8, x8, #257106; CHECK-ADD-NEXT:        ldr     x8, [x8]107; CHECK-ADD-NEXT:        add     x9, x9, #15108; CHECK-ADD-NEXT:        and     x9, x9, #0xfffffffffffffff0109; CHECK-ADD-NEXT:        stur    x8, [x29, #-8]110; CHECK-ADD-NEXT:        mov     x8, sp111; CHECK-ADD-NEXT:        sub     x0, x8, x9112; CHECK-ADD-NEXT:        mov     sp, x0113; CHECK-ADD-NEXT:        bl      baz114; CHECK-ADD-NEXT:        mrs     x8, SP_EL0115; CHECK-257-OFFSET:      add     x8, x8, #257116; CHECK-MINUS-257-OFFSET: sub     x8, x8, #257117; CHECK-ADD-NEXT:         ldr     x8, [x8]118; CHECK-ADD-NEXT:         ldur    x9, [x29, #-8]119; CHECK-ADD-NEXT:         cmp     x8, x9120; CHECK-ADD-NEXT:         b.ne    .LBB0_2121; CHECK-ADD-NEXT: // %bb.1:                               // %entry122; CHECK-ADD-NEXT:         mov     sp, x29123; CHECK-ADD-NEXT:         .cfi_def_cfa wsp, 16124; CHECK-ADD-NEXT:         ldp     x29, x30, [sp], #16             // 16-byte Folded Reload125; CHECK-ADD-NEXT:         .cfi_def_cfa_offset 0126; CHECK-ADD-NEXT:         .cfi_restore w30127; CHECK-ADD-NEXT:         .cfi_restore w29128; CHECK-ADD-NEXT:         ret129; CHECK-ADD-NEXT: .LBB0_2:                                // %entry130; CHECK-ADD-NEXT:         .cfi_restore_state131; CHECK-ADD-NEXT:         bl      __stack_chk_fail132; CHECK-ADD-NEXT: .Lfunc_end0:133; CHECK-ADD-NEXT:         .size   foo, .Lfunc_end0-foo134; CHECK-ADD-NEXT:         .cfi_endproc135; CHECK-ADD-NEXT:                                         // -- End function136; CHECK-ADD-NEXT:         .section        ".note.GNU-stack","",@progbits137entry:138  %vla = alloca i32, i64 %t, align 4139  call void @baz(ptr nonnull %vla)140  ret void141}142 143declare void @baz(ptr)144 145; CHECK-BAD-OFFSET: LLVM ERROR: Unable to encode Stack Protector Guard Offset146 147attributes #0 = { sspstrong uwtable }148!llvm.module.flags = !{!1, !2, !3}149 150!1 = !{i32 2, !"stack-protector-guard", !"sysreg"}151!2 = !{i32 2, !"stack-protector-guard-reg", !"sp_el0"}152 153;--- a.ll154!3 = !{i32 2, !"stack-protector-guard-offset", i32 0}155;--- b.ll156!3 = !{i32 2, !"stack-protector-guard-offset", i32 8}157;--- c.ll158!3 = !{i32 2, !"stack-protector-guard-offset", i32 -8}159;--- d.ll160!3 = !{i32 2, !"stack-protector-guard-offset", i32 1}161;--- e.ll162!3 = !{i32 2, !"stack-protector-guard-offset", i32 -1}163;--- f.ll164!3 = !{i32 2, !"stack-protector-guard-offset", i32 257}165;--- g.ll166!3 = !{i32 2, !"stack-protector-guard-offset", i32 -257}167;--- h.ll168!3 = !{i32 2, !"stack-protector-guard-offset", i32 32761}169;--- i.ll170!3 = !{i32 2, !"stack-protector-guard-offset", i32 -4096}171;--- j.ll172!3 = !{i32 2, !"stack-protector-guard-offset", i32 4097}173