| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py |
| ; RUN: llc -mtriple=aarch64-unknown-linux-gnu -O0 -global-isel=0 -o - < %s | FileCheck %s --check-prefixes=CHECK,CHECK-SD |
| ; RUN: llc -mtriple=aarch64-unknown-linux-gnu -O0 -global-isel=1 -global-isel-abort=1 -o - < %s | FileCheck %s --check-prefixes=CHECK,CHECK-GI |
| |
| target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32" |
| |
| %struct.__va_list = type { ptr, ptr, ptr, i32, i32 } |
| |
| declare void @llvm.va_start(ptr) nounwind |
| declare void @llvm.va_end(ptr) nounwind |
| declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) |
| declare void @llvm.va_start.p0(ptr) |
| declare void @llvm.va_end.p0(ptr) |
| declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) |
| |
| define i64 @vararg(...) #0 { |
| ; CHECK-SD-LABEL: vararg: |
| ; CHECK-SD: // %bb.0: // %entry |
| ; CHECK-SD-NEXT: sub sp, sp, #224 |
| ; CHECK-SD-NEXT: .cfi_def_cfa_offset 224 |
| ; CHECK-SD-NEXT: stp x29, x30, [sp, #208] // 16-byte Folded Spill |
| ; CHECK-SD-NEXT: add x29, sp, #208 |
| ; CHECK-SD-NEXT: .cfi_def_cfa w29, 16 |
| ; CHECK-SD-NEXT: .cfi_offset w30, -8 |
| ; CHECK-SD-NEXT: .cfi_offset w29, -16 |
| ; CHECK-SD-NEXT: str q7, [sp, #112] |
| ; CHECK-SD-NEXT: str q6, [sp, #96] |
| ; CHECK-SD-NEXT: str q5, [sp, #80] |
| ; CHECK-SD-NEXT: str q4, [sp, #64] |
| ; CHECK-SD-NEXT: str q3, [sp, #48] |
| ; CHECK-SD-NEXT: str q2, [sp, #32] |
| ; CHECK-SD-NEXT: str q1, [sp, #16] |
| ; CHECK-SD-NEXT: str q0, [sp] |
| ; CHECK-SD-NEXT: stur x7, [x29, #-16] |
| ; CHECK-SD-NEXT: stur x6, [x29, #-24] |
| ; CHECK-SD-NEXT: stur x5, [x29, #-32] |
| ; CHECK-SD-NEXT: stur x4, [x29, #-40] |
| ; CHECK-SD-NEXT: stur x3, [x29, #-48] |
| ; CHECK-SD-NEXT: stur x2, [x29, #-56] |
| ; CHECK-SD-NEXT: stur x1, [x29, #-64] |
| ; CHECK-SD-NEXT: stur x0, [x29, #-72] |
| ; CHECK-SD-NEXT: mov w8, #-128 // =0xffffff80 |
| ; CHECK-SD-NEXT: str w8, [x29, #20] |
| ; CHECK-SD-NEXT: mov w8, #-64 // =0xffffffc0 |
| ; CHECK-SD-NEXT: str w8, [x29, #16] |
| ; CHECK-SD-NEXT: add x8, x29, #16 |
| ; CHECK-SD-NEXT: stur x8, [x29, #-8] |
| ; CHECK-SD-NEXT: mov x8, sp |
| ; CHECK-SD-NEXT: add x8, x8, #128 |
| ; CHECK-SD-NEXT: str x8, [x29, #8] |
| ; CHECK-SD-NEXT: sub x8, x29, #72 |
| ; CHECK-SD-NEXT: add x8, x8, #64 |
| ; CHECK-SD-NEXT: str x8, [x29] |
| ; CHECK-SD-NEXT: mov w8, #1 // =0x1 |
| ; CHECK-SD-NEXT: mov w0, w8 |
| ; CHECK-SD-NEXT: .cfi_def_cfa wsp, 224 |
| ; CHECK-SD-NEXT: ldp x29, x30, [sp, #208] // 16-byte Folded Reload |
| ; CHECK-SD-NEXT: add sp, sp, #224 |
| ; CHECK-SD-NEXT: .cfi_def_cfa_offset 0 |
| ; CHECK-SD-NEXT: .cfi_restore w30 |
| ; CHECK-SD-NEXT: .cfi_restore w29 |
| ; CHECK-SD-NEXT: ret |
| ; |
| ; CHECK-GI-LABEL: vararg: |
| ; CHECK-GI: // %bb.0: // %entry |
| ; CHECK-GI-NEXT: sub sp, sp, #224 |
| ; CHECK-GI-NEXT: .cfi_def_cfa_offset 224 |
| ; CHECK-GI-NEXT: stp x29, x30, [sp, #208] // 16-byte Folded Spill |
| ; CHECK-GI-NEXT: add x29, sp, #208 |
| ; CHECK-GI-NEXT: .cfi_def_cfa w29, 16 |
| ; CHECK-GI-NEXT: .cfi_offset w30, -8 |
| ; CHECK-GI-NEXT: .cfi_offset w29, -16 |
| ; CHECK-GI-NEXT: stur x0, [x29, #-64] |
| ; CHECK-GI-NEXT: stur x1, [x29, #-56] |
| ; CHECK-GI-NEXT: stur x2, [x29, #-48] |
| ; CHECK-GI-NEXT: stur x3, [x29, #-40] |
| ; CHECK-GI-NEXT: stur x4, [x29, #-32] |
| ; CHECK-GI-NEXT: stur x5, [x29, #-24] |
| ; CHECK-GI-NEXT: stur x6, [x29, #-16] |
| ; CHECK-GI-NEXT: stur x7, [x29, #-8] |
| ; CHECK-GI-NEXT: str q0, [sp, #16] |
| ; CHECK-GI-NEXT: str q1, [sp, #32] |
| ; CHECK-GI-NEXT: str q2, [sp, #48] |
| ; CHECK-GI-NEXT: str q3, [sp, #64] |
| ; CHECK-GI-NEXT: str q4, [sp, #80] |
| ; CHECK-GI-NEXT: str q5, [sp, #96] |
| ; CHECK-GI-NEXT: str q6, [sp, #112] |
| ; CHECK-GI-NEXT: str q7, [sp, #128] |
| ; CHECK-GI-NEXT: add x9, sp, #8 |
| ; CHECK-GI-NEXT: add x8, x29, #16 |
| ; CHECK-GI-NEXT: str x8, [x9] |
| ; CHECK-GI-NEXT: add x8, x29, #0 |
| ; CHECK-GI-NEXT: str x8, [x9, #8] |
| ; CHECK-GI-NEXT: add x8, sp, #144 |
| ; CHECK-GI-NEXT: str x8, [x9, #16] |
| ; CHECK-GI-NEXT: mov w8, #-64 // =0xffffffc0 |
| ; CHECK-GI-NEXT: str w8, [x9, #24] |
| ; CHECK-GI-NEXT: mov w8, #-128 // =0xffffff80 |
| ; CHECK-GI-NEXT: str w8, [x9, #28] |
| ; CHECK-GI-NEXT: mov w8, #1 // =0x1 |
| ; CHECK-GI-NEXT: mov w0, w8 |
| ; CHECK-GI-NEXT: .cfi_def_cfa wsp, 224 |
| ; CHECK-GI-NEXT: ldp x29, x30, [sp, #208] // 16-byte Folded Reload |
| ; CHECK-GI-NEXT: add sp, sp, #224 |
| ; CHECK-GI-NEXT: .cfi_def_cfa_offset 0 |
| ; CHECK-GI-NEXT: .cfi_restore w30 |
| ; CHECK-GI-NEXT: .cfi_restore w29 |
| ; CHECK-GI-NEXT: ret |
| entry: |
| %g = alloca ptr, align 4 |
| call void @llvm.va_start(ptr %g) |
| ret i64 1 |
| } |
| |
| define i64 @vararg_many_gpr(i64 %a1, i64 %a2, i64 %a3, i64 %a4, i64 %a5, i64 %a6, i64 %a7, ...) #0 { |
| ; CHECK-SD-LABEL: vararg_many_gpr: |
| ; CHECK-SD: // %bb.0: // %entry |
| ; CHECK-SD-NEXT: sub sp, sp, #160 |
| ; CHECK-SD-NEXT: .cfi_def_cfa_offset 160 |
| ; CHECK-SD-NEXT: stp x29, x30, [sp, #144] // 16-byte Folded Spill |
| ; CHECK-SD-NEXT: add x29, sp, #144 |
| ; CHECK-SD-NEXT: .cfi_def_cfa w29, 16 |
| ; CHECK-SD-NEXT: .cfi_offset w30, -8 |
| ; CHECK-SD-NEXT: .cfi_offset w29, -16 |
| ; CHECK-SD-NEXT: str q7, [sp, #112] |
| ; CHECK-SD-NEXT: str q6, [sp, #96] |
| ; CHECK-SD-NEXT: str q5, [sp, #80] |
| ; CHECK-SD-NEXT: str q4, [sp, #64] |
| ; CHECK-SD-NEXT: str q3, [sp, #48] |
| ; CHECK-SD-NEXT: str q2, [sp, #32] |
| ; CHECK-SD-NEXT: str q1, [sp, #16] |
| ; CHECK-SD-NEXT: str q0, [sp] |
| ; CHECK-SD-NEXT: stur x7, [x29, #-16] |
| ; CHECK-SD-NEXT: mov w8, #-128 // =0xffffff80 |
| ; CHECK-SD-NEXT: str w8, [x29, #20] |
| ; CHECK-SD-NEXT: mov w8, #-8 // =0xfffffff8 |
| ; CHECK-SD-NEXT: str w8, [x29, #16] |
| ; CHECK-SD-NEXT: add x8, x29, #16 |
| ; CHECK-SD-NEXT: stur x8, [x29, #-8] |
| ; CHECK-SD-NEXT: mov x8, sp |
| ; CHECK-SD-NEXT: add x8, x8, #128 |
| ; CHECK-SD-NEXT: str x8, [x29, #8] |
| ; CHECK-SD-NEXT: sub x8, x29, #16 |
| ; CHECK-SD-NEXT: add x8, x8, #8 |
| ; CHECK-SD-NEXT: str x8, [x29] |
| ; CHECK-SD-NEXT: mov w8, #1 // =0x1 |
| ; CHECK-SD-NEXT: mov w0, w8 |
| ; CHECK-SD-NEXT: .cfi_def_cfa wsp, 160 |
| ; CHECK-SD-NEXT: ldp x29, x30, [sp, #144] // 16-byte Folded Reload |
| ; CHECK-SD-NEXT: add sp, sp, #160 |
| ; CHECK-SD-NEXT: .cfi_def_cfa_offset 0 |
| ; CHECK-SD-NEXT: .cfi_restore w30 |
| ; CHECK-SD-NEXT: .cfi_restore w29 |
| ; CHECK-SD-NEXT: ret |
| ; |
| ; CHECK-GI-LABEL: vararg_many_gpr: |
| ; CHECK-GI: // %bb.0: // %entry |
| ; CHECK-GI-NEXT: sub sp, sp, #176 |
| ; CHECK-GI-NEXT: .cfi_def_cfa_offset 176 |
| ; CHECK-GI-NEXT: stp x29, x30, [sp, #160] // 16-byte Folded Spill |
| ; CHECK-GI-NEXT: add x29, sp, #160 |
| ; CHECK-GI-NEXT: .cfi_def_cfa w29, 16 |
| ; CHECK-GI-NEXT: .cfi_offset w30, -8 |
| ; CHECK-GI-NEXT: .cfi_offset w29, -16 |
| ; CHECK-GI-NEXT: stur x7, [x29, #-8] |
| ; CHECK-GI-NEXT: str q0, [sp, #16] |
| ; CHECK-GI-NEXT: str q1, [sp, #32] |
| ; CHECK-GI-NEXT: str q2, [sp, #48] |
| ; CHECK-GI-NEXT: str q3, [sp, #64] |
| ; CHECK-GI-NEXT: str q4, [sp, #80] |
| ; CHECK-GI-NEXT: str q5, [sp, #96] |
| ; CHECK-GI-NEXT: str q6, [sp, #112] |
| ; CHECK-GI-NEXT: str q7, [sp, #128] |
| ; CHECK-GI-NEXT: add x9, sp, #8 |
| ; CHECK-GI-NEXT: add x8, x29, #16 |
| ; CHECK-GI-NEXT: str x8, [x9] |
| ; CHECK-GI-NEXT: add x8, x29, #0 |
| ; CHECK-GI-NEXT: str x8, [x9, #8] |
| ; CHECK-GI-NEXT: add x8, sp, #144 |
| ; CHECK-GI-NEXT: str x8, [x9, #16] |
| ; CHECK-GI-NEXT: mov w8, #-8 // =0xfffffff8 |
| ; CHECK-GI-NEXT: str w8, [x9, #24] |
| ; CHECK-GI-NEXT: mov w8, #-128 // =0xffffff80 |
| ; CHECK-GI-NEXT: str w8, [x9, #28] |
| ; CHECK-GI-NEXT: mov w8, #1 // =0x1 |
| ; CHECK-GI-NEXT: mov w0, w8 |
| ; CHECK-GI-NEXT: .cfi_def_cfa wsp, 176 |
| ; CHECK-GI-NEXT: ldp x29, x30, [sp, #160] // 16-byte Folded Reload |
| ; CHECK-GI-NEXT: add sp, sp, #176 |
| ; CHECK-GI-NEXT: .cfi_def_cfa_offset 0 |
| ; CHECK-GI-NEXT: .cfi_restore w30 |
| ; CHECK-GI-NEXT: .cfi_restore w29 |
| ; CHECK-GI-NEXT: ret |
| entry: |
| %g = alloca ptr, align 4 |
| call void @llvm.va_start(ptr %g) |
| ret i64 1 |
| } |
| |
| define i64 @vararg_many_float(float %a1, float %a2, float %a3, float %a4, float %a5, float %a6, float %a7, ...) #0 { |
| ; CHECK-SD-LABEL: vararg_many_float: |
| ; CHECK-SD: // %bb.0: // %entry |
| ; CHECK-SD-NEXT: sub sp, sp, #112 |
| ; CHECK-SD-NEXT: .cfi_def_cfa_offset 112 |
| ; CHECK-SD-NEXT: stp x29, x30, [sp, #96] // 16-byte Folded Spill |
| ; CHECK-SD-NEXT: add x29, sp, #96 |
| ; CHECK-SD-NEXT: .cfi_def_cfa w29, 16 |
| ; CHECK-SD-NEXT: .cfi_offset w30, -8 |
| ; CHECK-SD-NEXT: .cfi_offset w29, -16 |
| ; CHECK-SD-NEXT: str q7, [sp] |
| ; CHECK-SD-NEXT: str x7, [sp, #80] |
| ; CHECK-SD-NEXT: str x6, [sp, #72] |
| ; CHECK-SD-NEXT: str x5, [sp, #64] |
| ; CHECK-SD-NEXT: str x4, [sp, #56] |
| ; CHECK-SD-NEXT: str x3, [sp, #48] |
| ; CHECK-SD-NEXT: str x2, [sp, #40] |
| ; CHECK-SD-NEXT: str x1, [sp, #32] |
| ; CHECK-SD-NEXT: str x0, [sp, #24] |
| ; CHECK-SD-NEXT: mov w8, #-16 // =0xfffffff0 |
| ; CHECK-SD-NEXT: str w8, [x29, #20] |
| ; CHECK-SD-NEXT: mov w8, #-64 // =0xffffffc0 |
| ; CHECK-SD-NEXT: str w8, [x29, #16] |
| ; CHECK-SD-NEXT: add x8, x29, #16 |
| ; CHECK-SD-NEXT: stur x8, [x29, #-8] |
| ; CHECK-SD-NEXT: mov x8, sp |
| ; CHECK-SD-NEXT: add x8, x8, #16 |
| ; CHECK-SD-NEXT: str x8, [x29, #8] |
| ; CHECK-SD-NEXT: add x8, sp, #24 |
| ; CHECK-SD-NEXT: add x8, x8, #64 |
| ; CHECK-SD-NEXT: str x8, [x29] |
| ; CHECK-SD-NEXT: mov w8, #1 // =0x1 |
| ; CHECK-SD-NEXT: mov w0, w8 |
| ; CHECK-SD-NEXT: .cfi_def_cfa wsp, 112 |
| ; CHECK-SD-NEXT: ldp x29, x30, [sp, #96] // 16-byte Folded Reload |
| ; CHECK-SD-NEXT: add sp, sp, #112 |
| ; CHECK-SD-NEXT: .cfi_def_cfa_offset 0 |
| ; CHECK-SD-NEXT: .cfi_restore w30 |
| ; CHECK-SD-NEXT: .cfi_restore w29 |
| ; CHECK-SD-NEXT: ret |
| ; |
| ; CHECK-GI-LABEL: vararg_many_float: |
| ; CHECK-GI: // %bb.0: // %entry |
| ; CHECK-GI-NEXT: sub sp, sp, #112 |
| ; CHECK-GI-NEXT: .cfi_def_cfa_offset 112 |
| ; CHECK-GI-NEXT: stp x29, x30, [sp, #96] // 16-byte Folded Spill |
| ; CHECK-GI-NEXT: add x29, sp, #96 |
| ; CHECK-GI-NEXT: .cfi_def_cfa w29, 16 |
| ; CHECK-GI-NEXT: .cfi_offset w30, -8 |
| ; CHECK-GI-NEXT: .cfi_offset w29, -16 |
| ; CHECK-GI-NEXT: str x0, [sp, #32] |
| ; CHECK-GI-NEXT: str x1, [sp, #40] |
| ; CHECK-GI-NEXT: str x2, [sp, #48] |
| ; CHECK-GI-NEXT: str x3, [sp, #56] |
| ; CHECK-GI-NEXT: str x4, [sp, #64] |
| ; CHECK-GI-NEXT: str x5, [sp, #72] |
| ; CHECK-GI-NEXT: str x6, [sp, #80] |
| ; CHECK-GI-NEXT: str x7, [sp, #88] |
| ; CHECK-GI-NEXT: str q7, [sp, #16] |
| ; CHECK-GI-NEXT: add x9, sp, #8 |
| ; CHECK-GI-NEXT: add x8, x29, #16 |
| ; CHECK-GI-NEXT: str x8, [x9] |
| ; CHECK-GI-NEXT: add x8, sp, #96 |
| ; CHECK-GI-NEXT: str x8, [x9, #8] |
| ; CHECK-GI-NEXT: add x8, sp, #32 |
| ; CHECK-GI-NEXT: str x8, [x9, #16] |
| ; CHECK-GI-NEXT: mov w8, #-64 // =0xffffffc0 |
| ; CHECK-GI-NEXT: str w8, [x9, #24] |
| ; CHECK-GI-NEXT: mov w8, #-16 // =0xfffffff0 |
| ; CHECK-GI-NEXT: str w8, [x9, #28] |
| ; CHECK-GI-NEXT: mov w8, #1 // =0x1 |
| ; CHECK-GI-NEXT: mov w0, w8 |
| ; CHECK-GI-NEXT: .cfi_def_cfa wsp, 112 |
| ; CHECK-GI-NEXT: ldp x29, x30, [sp, #96] // 16-byte Folded Reload |
| ; CHECK-GI-NEXT: add sp, sp, #112 |
| ; CHECK-GI-NEXT: .cfi_def_cfa_offset 0 |
| ; CHECK-GI-NEXT: .cfi_restore w30 |
| ; CHECK-GI-NEXT: .cfi_restore w29 |
| ; CHECK-GI-NEXT: ret |
| entry: |
| %g = alloca ptr, align 4 |
| call void @llvm.va_start(ptr %g) |
| ret i64 1 |
| } |
| |
| define i64 @gpr1_fpr1(i32 %i, float %f, ...) #0 { |
| ; CHECK-SD-LABEL: gpr1_fpr1: |
| ; CHECK-SD: // %bb.0: // %entry |
| ; CHECK-SD-NEXT: sub sp, sp, #192 |
| ; CHECK-SD-NEXT: .cfi_def_cfa_offset 192 |
| ; CHECK-SD-NEXT: stp x29, x30, [sp, #176] // 16-byte Folded Spill |
| ; CHECK-SD-NEXT: add x29, sp, #176 |
| ; CHECK-SD-NEXT: .cfi_def_cfa w29, 16 |
| ; CHECK-SD-NEXT: .cfi_offset w30, -8 |
| ; CHECK-SD-NEXT: .cfi_offset w29, -16 |
| ; CHECK-SD-NEXT: str q7, [sp, #96] |
| ; CHECK-SD-NEXT: str q6, [sp, #80] |
| ; CHECK-SD-NEXT: str q5, [sp, #64] |
| ; CHECK-SD-NEXT: str q4, [sp, #48] |
| ; CHECK-SD-NEXT: str q3, [sp, #32] |
| ; CHECK-SD-NEXT: str q2, [sp, #16] |
| ; CHECK-SD-NEXT: str q1, [sp] |
| ; CHECK-SD-NEXT: stur x7, [x29, #-16] |
| ; CHECK-SD-NEXT: stur x6, [x29, #-24] |
| ; CHECK-SD-NEXT: stur x5, [x29, #-32] |
| ; CHECK-SD-NEXT: stur x4, [x29, #-40] |
| ; CHECK-SD-NEXT: stur x3, [x29, #-48] |
| ; CHECK-SD-NEXT: stur x2, [x29, #-56] |
| ; CHECK-SD-NEXT: stur x1, [x29, #-64] |
| ; CHECK-SD-NEXT: mov w8, #-112 // =0xffffff90 |
| ; CHECK-SD-NEXT: str w8, [x29, #20] |
| ; CHECK-SD-NEXT: mov w8, #-56 // =0xffffffc8 |
| ; CHECK-SD-NEXT: str w8, [x29, #16] |
| ; CHECK-SD-NEXT: add x8, x29, #16 |
| ; CHECK-SD-NEXT: stur x8, [x29, #-8] |
| ; CHECK-SD-NEXT: mov x8, sp |
| ; CHECK-SD-NEXT: add x8, x8, #112 |
| ; CHECK-SD-NEXT: str x8, [x29, #8] |
| ; CHECK-SD-NEXT: sub x8, x29, #64 |
| ; CHECK-SD-NEXT: add x8, x8, #56 |
| ; CHECK-SD-NEXT: str x8, [x29] |
| ; CHECK-SD-NEXT: mov w8, #1 // =0x1 |
| ; CHECK-SD-NEXT: mov w0, w8 |
| ; CHECK-SD-NEXT: .cfi_def_cfa wsp, 192 |
| ; CHECK-SD-NEXT: ldp x29, x30, [sp, #176] // 16-byte Folded Reload |
| ; CHECK-SD-NEXT: add sp, sp, #192 |
| ; CHECK-SD-NEXT: .cfi_def_cfa_offset 0 |
| ; CHECK-SD-NEXT: .cfi_restore w30 |
| ; CHECK-SD-NEXT: .cfi_restore w29 |
| ; CHECK-SD-NEXT: ret |
| ; |
| ; CHECK-GI-LABEL: gpr1_fpr1: |
| ; CHECK-GI: // %bb.0: // %entry |
| ; CHECK-GI-NEXT: sub sp, sp, #208 |
| ; CHECK-GI-NEXT: .cfi_def_cfa_offset 208 |
| ; CHECK-GI-NEXT: stp x29, x30, [sp, #192] // 16-byte Folded Spill |
| ; CHECK-GI-NEXT: add x29, sp, #192 |
| ; CHECK-GI-NEXT: .cfi_def_cfa w29, 16 |
| ; CHECK-GI-NEXT: .cfi_offset w30, -8 |
| ; CHECK-GI-NEXT: .cfi_offset w29, -16 |
| ; CHECK-GI-NEXT: stur x1, [x29, #-56] |
| ; CHECK-GI-NEXT: stur x2, [x29, #-48] |
| ; CHECK-GI-NEXT: stur x3, [x29, #-40] |
| ; CHECK-GI-NEXT: stur x4, [x29, #-32] |
| ; CHECK-GI-NEXT: stur x5, [x29, #-24] |
| ; CHECK-GI-NEXT: stur x6, [x29, #-16] |
| ; CHECK-GI-NEXT: stur x7, [x29, #-8] |
| ; CHECK-GI-NEXT: str q1, [sp, #16] |
| ; CHECK-GI-NEXT: str q2, [sp, #32] |
| ; CHECK-GI-NEXT: str q3, [sp, #48] |
| ; CHECK-GI-NEXT: str q4, [sp, #64] |
| ; CHECK-GI-NEXT: str q5, [sp, #80] |
| ; CHECK-GI-NEXT: str q6, [sp, #96] |
| ; CHECK-GI-NEXT: str q7, [sp, #112] |
| ; CHECK-GI-NEXT: add x9, sp, #8 |
| ; CHECK-GI-NEXT: add x8, x29, #16 |
| ; CHECK-GI-NEXT: str x8, [x9] |
| ; CHECK-GI-NEXT: add x8, x29, #0 |
| ; CHECK-GI-NEXT: str x8, [x9, #8] |
| ; CHECK-GI-NEXT: add x8, sp, #128 |
| ; CHECK-GI-NEXT: str x8, [x9, #16] |
| ; CHECK-GI-NEXT: mov w8, #-56 // =0xffffffc8 |
| ; CHECK-GI-NEXT: str w8, [x9, #24] |
| ; CHECK-GI-NEXT: mov w8, #-112 // =0xffffff90 |
| ; CHECK-GI-NEXT: str w8, [x9, #28] |
| ; CHECK-GI-NEXT: mov w8, #1 // =0x1 |
| ; CHECK-GI-NEXT: mov w0, w8 |
| ; CHECK-GI-NEXT: .cfi_def_cfa wsp, 208 |
| ; CHECK-GI-NEXT: ldp x29, x30, [sp, #192] // 16-byte Folded Reload |
| ; CHECK-GI-NEXT: add sp, sp, #208 |
| ; CHECK-GI-NEXT: .cfi_def_cfa_offset 0 |
| ; CHECK-GI-NEXT: .cfi_restore w30 |
| ; CHECK-GI-NEXT: .cfi_restore w29 |
| ; CHECK-GI-NEXT: ret |
| entry: |
| %g = alloca ptr, align 4 |
| call void @llvm.va_start(ptr %g) |
| ret i64 1 |
| } |
| |
| ; To make the outputs more readable |
| attributes #0 = { uwtable "frame-pointer"="all" } |
| |
| ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line: |
| ; CHECK: {{.*}} |