brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.7 KiB · 98e62e5 Raw
223 lines · plain
1; RUN: llc < %s -mtriple aarch64-linux-gnu -mattr=+pauth -verify-machineinstrs -disable-post-ra \2; RUN:   -global-isel=0 -o - %s | FileCheck %s3; RUN: llc < %s -mtriple aarch64-linux-gnu -mattr=+pauth -verify-machineinstrs -disable-post-ra \4; RUN:   -global-isel=1 -global-isel-abort=1 -o - %s | FileCheck %s5 6define i32 @test() #0 {7; CHECK-LABEL: test:8; CHECK:       %bb.0:9; CHECK-NEXT:    str x19, [sp, #-16]!10; CHECK-NEXT:    mov w0, wzr11; CHECK-NEXT:    //APP12; CHECK-NEXT:    //NO_APP13; CHECK-NEXT:    ldr x19, [sp], #1614; CHECK-NEXT:    ret15  call void asm sideeffect "", "~{x19}"()16  ret i32 017}18 19define i32 @test_alloca() #0 {20; CHECK-LABEL: test_alloca:21; CHECK:       %bb.0:22; CHECK-NEXT:    sub sp, sp, #3223; CHECK-NEXT:    mov x8, sp24; CHECK-NEXT:    mov w0, wzr25; CHECK-NEXT:    //APP26; CHECK-NEXT:    //NO_APP27; CHECK-NEXT:    add sp, sp, #3228; CHECK-NEXT:    ret29  %p = alloca i8, i32 3230  call void asm sideeffect "", "r"(ptr %p)31  ret i32 032}33 34define i32 @test_realign_alloca() #0 {35; CHECK-LABEL: test_realign_alloca:36; CHECK:       %bb.0:37; CHECK-NEXT:    pacibsp38; CHECK-NEXT:    stp x29, x30, [sp, #-16]!39; CHECK-NEXT:    mov x29, sp40; CHECK-NEXT:    sub x9, sp, #11241; CHECK-NEXT:    and sp, x9, #0xffffffffffffff8042; CHECK-NEXT:    mov x8, sp43; CHECK-NEXT:    mov w0, wzr44; CHECK-NEXT:    //APP45; CHECK-NEXT:    //NO_APP46; CHECK-NEXT:    mov sp, x2947; CHECK-NEXT:    ldp x29, x30, [sp], #1648; CHECK-NEXT:    retab49  %p = alloca i8, i32 32, align 12850  call void asm sideeffect "", "r"(ptr %p)51  ret i32 052}53 54define i32 @test_big_alloca() #0 {55; CHECK-LABEL: test_big_alloca:56; CHECK:       %bb.0:57; CHECK-NEXT:    str x29, [sp, #-16]!58; CHECK-NEXT:    sub sp, sp, #102459; CHECK-NEXT:    mov x8, sp60; CHECK-NEXT:    mov w0, wzr61; CHECK-NEXT:    //APP62; CHECK-NEXT:    //NO_APP63; CHECK-NEXT:    add sp, sp, #102464; CHECK-NEXT:    ldr x29, [sp], #1665; CHECK-NEXT:    ret66  %p = alloca i8, i32 102467  call void asm sideeffect "", "r"(ptr %p)68  ret i32 069}70 71define i32 @test_var_alloca(i32 %s) #0 {72  %p = alloca i8, i32 %s73  call void asm sideeffect "", "r"(ptr %p)74  ret i32 075}76 77define i32 @test_noframe_saved(ptr %p) #0 {78; CHECK-LABEL: test_noframe_saved:79; CHECK:       %bb.0:80 81 82; CHECK-NEXT:  str     x29, [sp, #-96]!83; CHECK-NEXT:  stp     x28, x27, [sp, #16]84; CHECK-NEXT:  stp     x26, x25, [sp, #32]85; CHECK-NEXT:  stp     x24, x23, [sp, #48]86; CHECK-NEXT:  stp     x22, x21, [sp, #64]87; CHECK-NEXT:  stp     x20, x19, [sp, #80]88; CHECK-NEXT:  ldr     w29, [x0]89; CHECK-NEXT:  //APP90; CHECK-NEXT:  //NO_APP91; CHECK-NEXT:  mov     w0, w2992; CHECK-NEXT:  ldp     x20, x19, [sp, #80]93; CHECK-NEXT:  ldp     x22, x21, [sp, #64]94; CHECK-NEXT:  ldp     x24, x23, [sp, #48]95; CHECK-NEXT:  ldp     x26, x25, [sp, #32]96; CHECK-NEXT:  ldp     x28, x27, [sp, #16]97; CHECK-NEXT:  ldr     x29, [sp], #9698; CHECK-NEXT:  ret99  %v = load i32, ptr %p100  call void asm sideeffect "", "~{x0},~{x1},~{x2},~{x3},~{x4},~{x5},~{x6},~{x7},~{x8},~{x9},~{x10},~{x11},~{x12},~{x13},~{x14},~{x15},~{x16},~{x17},~{x18},~{x19},~{x20},~{x21},~{x22},~{x23},~{x24},~{x25},~{x26},~{x27},~{x28}"()101  ret i32 %v102}103 104define void @test_noframe() #0 {105; CHECK-LABEL: test_noframe:106; CHECK:       %bb.0:107; CHECK-NEXT:    ret108  ret void109}110 111; FIXME: Inefficient lowering of @llvm.returnaddress112define ptr @test_returnaddress_0() #0 {113; CHECK-LABEL: test_returnaddress_0:114; CHECK:       %bb.0:115; CHECK-NEXT:    mov x0, x30116; CHECK-NEXT:    xpaci x0117; CHECK-NEXT:    ret118  %r = call ptr @llvm.returnaddress(i32 0)119  ret ptr %r120}121 122define ptr @test_returnaddress_1() #0 {123; CHECK-LABEL: test_returnaddress_1:124; CHECK:       %bb.0:125; CHECK-NEXT:    pacibsp126; CHECK-NEXT:    stp x29, x30, [sp, #-16]!127; CHECK-NEXT:    mov x29, sp128; CHECK-NEXT:    ldr x8, [x29]129; CHECK-NEXT:    ldr x0, [x8, #8]130; CHECK-NEXT:    xpaci x0131; CHECK-NEXT:    ldp x29, x30, [sp], #16132; CHECK-NEXT:    retab133  %r = call ptr @llvm.returnaddress(i32 1)134  ret ptr %r135}136 137define void @test_noframe_alloca() #0 {138; CHECK-LABEL: test_noframe_alloca:139; CHECK:       %bb.0:140; CHECK-NEXT:    sub sp, sp, #16141; CHECK-NEXT:    add x8, sp, #12142; CHECK-NEXT:    //APP143; CHECK-NEXT:    //NO_APP144; CHECK-NEXT:    add sp, sp, #16145; CHECK-NEXT:    ret146  %p = alloca i8, i32 1147  call void asm sideeffect "", "r"(ptr %p)148  ret void149}150 151define void @test_call() #0 {152; CHECK-LABEL: test_call:153; CHECK:       %bb.0:154; CHECK-NEXT:    pacibsp155; CHECK-NEXT:    str x30, [sp, #-16]!156; CHECK-NEXT:    bl bar157; CHECK-NEXT:    ldr x30, [sp], #16158; CHECK-NEXT:    retab159  call i32 @bar()160  ret void161}162 163define void @test_call_alloca() #0 {164; CHECK-LABEL: test_call_alloca:165; CHECK:       %bb.0:166; CHECK-NEXT:    pacibsp167; CHECK-NEXT:    str x30, [sp, #-16]168; CHECK-NEXT:    bl bar169; CHECK-NEXT:    ldr x30, [sp], #16170; CHECK-NEXT:    retab171  alloca i8172  call i32 @bar()173  ret void174}175 176define void @test_call_shrinkwrapping(i1 %c) #0 {177; CHECK-LABEL: test_call_shrinkwrapping:178; CHECK:       %bb.0:179; CHECK-NEXT:    tbz w0, #0, .LBB12_2180; CHECK-NEXT:  %bb.1:181; CHECK-NEXT:    pacibsp182; CHECK-NEXT:    str x30, [sp, #-16]!183; CHECK-NEXT:    bl bar184; CHECK-NEXT:    ldr x30, [sp], #16185; CHECK-NEXT:    autibsp186; CHECK-NEXT:  LBB12_2:187; CHECK-NEXT:    ret188  br i1 %c, label %tbb, label %fbb189tbb:190  call i32 @bar()191  br label %fbb192fbb:193  ret void194}195 196define i32 @test_tailcall() #0 {197; CHECK-LABEL: test_tailcall:198; CHECK:       %bb.0:199; CHECK-NEXT:    pacibsp200; CHECK-NEXT:    str x30, [sp, #-16]!201; CHECK-NEXT:    bl bar202; CHECK-NEXT:    ldr x30, [sp], #16203; CHECK-NEXT:    autibsp204; CHECK-NEXT:    b bar205  call i32 @bar()206  %c = tail call i32 @bar()207  ret i32 %c208}209 210define i32 @test_tailcall_noframe() #0 {211; CHECK-LABEL: test_tailcall_noframe:212; CHECK:       %bb.0:213; CHECK-NEXT:    b bar214  %c = tail call i32 @bar()215  ret i32 %c216}217 218declare i32 @bar()219 220declare ptr @llvm.returnaddress(i32)221 222attributes #0 = { nounwind "ptrauth-returns" }223