brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.0 KiB · 029d2da Raw
227 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=aarch64-windows -verify-machineinstrs | FileCheck %s --check-prefixes=DAGISEL3; RUN: llc < %s -mtriple=aarch64-windows -verify-machineinstrs -O0 -fast-isel | FileCheck %s --check-prefixes=O0,FASTISEL4; RUN: llc < %s -mtriple=aarch64-windows -verify-machineinstrs -O0 -global-isel | FileCheck %s --check-prefixes=O0,GISEL5 6; Check that non-vararg functions compilation is not broken7define win64cc float @foo(float %arg) nounwind {8; DAGISEL-LABEL: foo:9; DAGISEL:       // %bb.0: // %entry10; DAGISEL-NEXT:    ret11;12; O0-LABEL: foo:13; O0:       // %bb.0: // %entry14; O0-NEXT:    ret15entry:16  ret float %arg17}18 19define win64cc void @float_va_fn(float %a, i32 %b, ...) nounwind {20; DAGISEL-LABEL: float_va_fn:21; DAGISEL:       // %bb.0: // %entry22; DAGISEL-NEXT:    str x30, [sp, #-64]! // 8-byte Folded Spill23; DAGISEL-NEXT:    fmov s0, w024; DAGISEL-NEXT:    add x8, sp, #1625; DAGISEL-NEXT:    add x0, sp, #1626; DAGISEL-NEXT:    stp x2, x3, [sp, #16]27; DAGISEL-NEXT:    stp x4, x5, [sp, #32]28; DAGISEL-NEXT:    stp x6, x7, [sp, #48]29; DAGISEL-NEXT:    str x8, [sp, #8]30; DAGISEL-NEXT:    bl f_va_list31; DAGISEL-NEXT:    ldr x30, [sp], #64 // 8-byte Folded Reload32; DAGISEL-NEXT:    ret33;34; O0-LABEL: float_va_fn:35; O0:       // %bb.0: // %entry36; O0-NEXT:    sub sp, sp, #8037; O0-NEXT:    str x30, [sp, #16] // 8-byte Spill38; O0-NEXT:    str x7, [sp, #72]39; O0-NEXT:    str x6, [sp, #64]40; O0-NEXT:    str x5, [sp, #56]41; O0-NEXT:    str x4, [sp, #48]42; O0-NEXT:    str x3, [sp, #40]43; O0-NEXT:    str x2, [sp, #32]44; O0-NEXT:    fmov s0, w045; O0-NEXT:    add x8, sp, #3246; O0-NEXT:    str x8, [sp, #8]47; O0-NEXT:    ldr x0, [sp, #8]48; O0-NEXT:    bl f_va_list49; O0-NEXT:    ldr x30, [sp, #16] // 8-byte Reload50; O0-NEXT:    add sp, sp, #8051; O0-NEXT:    ret52entry:53  %ap = alloca ptr, align 854  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %ap)55  call void @llvm.va_start(ptr nonnull %ap)56  %0 = load ptr, ptr %ap, align 857  call void @f_va_list(float %a, ptr %0)58  call void @llvm.va_end(ptr nonnull %ap)59  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %ap)60  ret void61}62 63declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture)64declare void @llvm.va_start(ptr)65declare void @f_va_list(float, ptr)66declare void @llvm.va_end(ptr)67declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture)68 69define win64cc void @double_va_fn(double %a, i32 %b, ...) nounwind {70; DAGISEL-LABEL: double_va_fn:71; DAGISEL:       // %bb.0: // %entry72; DAGISEL-NEXT:    str x30, [sp, #-64]! // 8-byte Folded Spill73; DAGISEL-NEXT:    fmov d0, x074; DAGISEL-NEXT:    add x8, sp, #1675; DAGISEL-NEXT:    add x0, sp, #1676; DAGISEL-NEXT:    stp x2, x3, [sp, #16]77; DAGISEL-NEXT:    stp x4, x5, [sp, #32]78; DAGISEL-NEXT:    stp x6, x7, [sp, #48]79; DAGISEL-NEXT:    str x8, [sp, #8]80; DAGISEL-NEXT:    bl d_va_list81; DAGISEL-NEXT:    ldr x30, [sp], #64 // 8-byte Folded Reload82; DAGISEL-NEXT:    ret83;84; O0-LABEL: double_va_fn:85; O0:       // %bb.0: // %entry86; O0-NEXT:    sub sp, sp, #8087; O0-NEXT:    str x30, [sp, #16] // 8-byte Spill88; O0-NEXT:    str x7, [sp, #72]89; O0-NEXT:    str x6, [sp, #64]90; O0-NEXT:    str x5, [sp, #56]91; O0-NEXT:    str x4, [sp, #48]92; O0-NEXT:    str x3, [sp, #40]93; O0-NEXT:    str x2, [sp, #32]94; O0-NEXT:    fmov d0, x095; O0-NEXT:    add x8, sp, #3296; O0-NEXT:    str x8, [sp, #8]97; O0-NEXT:    ldr x0, [sp, #8]98; O0-NEXT:    bl d_va_list99; O0-NEXT:    ldr x30, [sp, #16] // 8-byte Reload100; O0-NEXT:    add sp, sp, #80101; O0-NEXT:    ret102entry:103  %ap = alloca ptr, align 8104  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %ap)105  call void @llvm.va_start(ptr nonnull %ap)106  %0 = load ptr, ptr %ap, align 8107  call void @d_va_list(double %a, ptr %0)108  call void @llvm.va_end(ptr nonnull %ap)109  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %ap)110  ret void111}112 113declare void @d_va_list(double, ptr)114 115define void @call_f_va() nounwind {116; DAGISEL-LABEL: call_f_va:117; DAGISEL:       // %bb.0: // %entry118; DAGISEL-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill119; DAGISEL-NEXT:    mov w0, #1065353216 // =0x3f800000120; DAGISEL-NEXT:    mov w1, #2 // =0x2121; DAGISEL-NEXT:    mov x2, #4613937818241073152 // =0x4008000000000000122; DAGISEL-NEXT:    mov w3, #4 // =0x4123; DAGISEL-NEXT:    bl other_f_va_fn124; DAGISEL-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload125; DAGISEL-NEXT:    ret126;127; FASTISEL-LABEL: call_f_va:128; FASTISEL:       // %bb.0: // %entry129; FASTISEL-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill130; FASTISEL-NEXT:    mov w0, #1065353216 // =0x3f800000131; FASTISEL-NEXT:    mov w1, #2 // =0x2132; FASTISEL-NEXT:    mov x2, #4613937818241073152 // =0x4008000000000000133; FASTISEL-NEXT:    mov w3, #4 // =0x4134; FASTISEL-NEXT:    bl other_f_va_fn135; FASTISEL-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload136; FASTISEL-NEXT:    ret137;138; GISEL-LABEL: call_f_va:139; GISEL:       // %bb.0: // %entry140; GISEL-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill141; GISEL-NEXT:    fmov s0, #1.00000000142; GISEL-NEXT:    fmov w0, s0143; GISEL-NEXT:    mov w1, #2 // =0x2144; GISEL-NEXT:    fmov d0, #3.00000000145; GISEL-NEXT:    fmov x2, d0146; GISEL-NEXT:    mov w3, #4 // =0x4147; GISEL-NEXT:    bl other_f_va_fn148; GISEL-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload149; GISEL-NEXT:    ret150entry:151  tail call win64cc void (float, i32, ...) @other_f_va_fn(float 1.000000e+00, i32 2, double 3.000000e+00, i32 4)152  ret void153}154 155declare win64cc void @other_f_va_fn(float, i32, ...)156 157define void @call_d_va() nounwind {158; DAGISEL-LABEL: call_d_va:159; DAGISEL:       // %bb.0: // %entry160; DAGISEL-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill161; DAGISEL-NEXT:    mov x0, #4607182418800017408 // =0x3ff0000000000000162; DAGISEL-NEXT:    mov w1, #2 // =0x2163; DAGISEL-NEXT:    mov x2, #4613937818241073152 // =0x4008000000000000164; DAGISEL-NEXT:    mov w3, #4 // =0x4165; DAGISEL-NEXT:    bl other_d_va_fn166; DAGISEL-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload167; DAGISEL-NEXT:    ret168;169; FASTISEL-LABEL: call_d_va:170; FASTISEL:       // %bb.0: // %entry171; FASTISEL-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill172; FASTISEL-NEXT:    mov x0, #4607182418800017408 // =0x3ff0000000000000173; FASTISEL-NEXT:    mov w1, #2 // =0x2174; FASTISEL-NEXT:    mov x2, #4613937818241073152 // =0x4008000000000000175; FASTISEL-NEXT:    mov w3, #4 // =0x4176; FASTISEL-NEXT:    bl other_d_va_fn177; FASTISEL-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload178; FASTISEL-NEXT:    ret179;180; GISEL-LABEL: call_d_va:181; GISEL:       // %bb.0: // %entry182; GISEL-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill183; GISEL-NEXT:    fmov d0, #1.00000000184; GISEL-NEXT:    fmov x0, d0185; GISEL-NEXT:    mov w1, #2 // =0x2186; GISEL-NEXT:    fmov d0, #3.00000000187; GISEL-NEXT:    fmov x2, d0188; GISEL-NEXT:    mov w3, #4 // =0x4189; GISEL-NEXT:    bl other_d_va_fn190; GISEL-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload191; GISEL-NEXT:    ret192entry:193  tail call win64cc void (double, i32, ...) @other_d_va_fn(double 1.000000e+00, i32 2, double 3.000000e+00, i32 4)194  ret void195}196 197declare win64cc void @other_d_va_fn(double, i32, ...)198 199define void @call_d_non_va() nounwind {200; DAGISEL-LABEL: call_d_non_va:201; DAGISEL:       // %bb.0: // %entry202; DAGISEL-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill203; DAGISEL-NEXT:    fmov d0, #1.00000000204; DAGISEL-NEXT:    fmov d1, #3.00000000205; DAGISEL-NEXT:    mov w0, #2 // =0x2206; DAGISEL-NEXT:    mov w1, #4 // =0x4207; DAGISEL-NEXT:    bl other_d_non_va_fn208; DAGISEL-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload209; DAGISEL-NEXT:    ret210;211; O0-LABEL: call_d_non_va:212; O0:       // %bb.0: // %entry213; O0-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill214; O0-NEXT:    fmov d0, #1.00000000215; O0-NEXT:    mov w0, #2 // =0x2216; O0-NEXT:    fmov d1, #3.00000000217; O0-NEXT:    mov w1, #4 // =0x4218; O0-NEXT:    bl other_d_non_va_fn219; O0-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload220; O0-NEXT:    ret221entry:222  tail call win64cc void (double, i32, double, i32) @other_d_non_va_fn(double 1.000000e+00, i32 2, double 3.000000e+00, i32 4)223  ret void224}225 226declare win64cc void @other_d_non_va_fn(double, i32, double, i32)227