brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.6 KiB · 72f4fa3 Raw
130 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -O3 < %s | FileCheck %s3 4target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"5target triple = "x86_64-unknown-unknown"6 7; Check that we don't crash on handling of various types of constants8; (including non-integer constants)9define void @test_legal_constants() gc "statepoint-example" {10; CHECK-LABEL: test_legal_constants:11; CHECK:       # %bb.0:12; CHECK-NEXT:    pushq %rax13; CHECK-NEXT:    .cfi_def_cfa_offset 1614; CHECK-NEXT:    callq foo@PLT15; CHECK-NEXT:  .Ltmp0:16; CHECK-NEXT:    popq %rax17; CHECK-NEXT:    .cfi_def_cfa_offset 818; CHECK-NEXT:    retq19  %statepoint_token = call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 2882400000, i32 0, ptr elementtype(void ()) @foo, i32 0, i32 2, i32 0, i32 0) #0 [ "deopt" (float 2.0, double 3.0, i8 5, i16 22, i32 8, i64 9, ptr addrspace(1) null) ]20  ret void21}22 23; Ensure we can allocate and assign values in registers for each type24define void @test_registers(float %v1, double %v2, i8 %v3, i16 %v4, i32 %v5, i64 %v6, ptr addrspace(1) %v7) gc "statepoint-example" {25; CHECK-LABEL: test_registers:26; CHECK:       # %bb.0:27; CHECK-NEXT:    pushq %rax28; CHECK-NEXT:    .cfi_def_cfa_offset 1629; CHECK-NEXT:    movq %r8, (%rsp)30; CHECK-NEXT:    callq foo@PLT31; CHECK-NEXT:  .Ltmp1:32; CHECK-NEXT:    popq %rax33; CHECK-NEXT:    .cfi_def_cfa_offset 834; CHECK-NEXT:    retq35  %statepoint_token = call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 2882400000, i32 0, ptr elementtype(void ()) @foo, i32 0, i32 2, i32 0, i32 0) #0 [ "deopt" (float %v1, double %v2, i8 %v3, i16 %v4, i32 %v5, i64 %v6, ptr addrspace(1) %v7) ]36  ret void37}38 39; For constants which definitely *don't* fit in registers, can we still40; encode them in the stackmap?41define void @test_illegal_constants() gc "statepoint-example" {42; CHECK-LABEL: test_illegal_constants:43; CHECK:       # %bb.0:44; CHECK-NEXT:    subq $248, %rsp45; CHECK-NEXT:    .cfi_def_cfa_offset 25646; CHECK-NEXT:    xorps %xmm0, %xmm047; CHECK-NEXT:    movaps %xmm0, {{[0-9]+}}(%rsp)48; CHECK-NEXT:    movaps %xmm0, {{[0-9]+}}(%rsp)49; CHECK-NEXT:    movaps %xmm0, {{[0-9]+}}(%rsp)50; CHECK-NEXT:    movaps %xmm0, {{[0-9]+}}(%rsp)51; CHECK-NEXT:    movaps %xmm0, {{[0-9]+}}(%rsp)52; CHECK-NEXT:    movaps %xmm0, {{[0-9]+}}(%rsp)53; CHECK-NEXT:    movaps %xmm0, {{[0-9]+}}(%rsp)54; CHECK-NEXT:    movaps %xmm0, {{[0-9]+}}(%rsp)55; CHECK-NEXT:    movaps %xmm0, {{[0-9]+}}(%rsp)56; CHECK-NEXT:    movaps %xmm0, {{[0-9]+}}(%rsp)57; CHECK-NEXT:    movaps %xmm0, {{[0-9]+}}(%rsp)58; CHECK-NEXT:    movq $0, {{[0-9]+}}(%rsp)59; CHECK-NEXT:    movq $144, {{[0-9]+}}(%rsp)60; CHECK-NEXT:    movq $0, {{[0-9]+}}(%rsp)61; CHECK-NEXT:    movq $144, (%rsp)62; CHECK-NEXT:    movq $0, {{[0-9]+}}(%rsp)63; CHECK-NEXT:    movq $144, {{[0-9]+}}(%rsp)64; CHECK-NEXT:    movq $0, {{[0-9]+}}(%rsp)65; CHECK-NEXT:    movq $144, {{[0-9]+}}(%rsp)66; CHECK-NEXT:    callq foo@PLT67; CHECK-NEXT:  .Ltmp2:68; CHECK-NEXT:    addq $248, %rsp69; CHECK-NEXT:    .cfi_def_cfa_offset 870; CHECK-NEXT:    retq71  %statepoint_token = call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 2882400000, i32 0, ptr elementtype(void ()) @foo, i32 0, i32 2, i32 0, i32 0) #0 [ "deopt" (i128 144, i256 144, i512 144, i1024 144) ]72  ret void73}74 75; Ensure we don't crash w/a value which can't fit in a76; register, and must be spilled.77define void @test_illegal_values(i128 %v1, i256 %v2, i512 %v3, i1024 %v4) gc "statepoint-example" {78; CHECK-LABEL: test_illegal_values:79; CHECK:       # %bb.0:80; CHECK-NEXT:    subq $248, %rsp81; CHECK-NEXT:    .cfi_def_cfa_offset 25682; CHECK-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm083; CHECK-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm184; CHECK-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm285; CHECK-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm386; CHECK-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm487; CHECK-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm588; CHECK-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm689; CHECK-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm790; CHECK-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm891; CHECK-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm992; CHECK-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm1093; CHECK-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm1194; CHECK-NEXT:    movq %r9, {{[0-9]+}}(%rsp)95; CHECK-NEXT:    movq %r8, {{[0-9]+}}(%rsp)96; CHECK-NEXT:    movq %rcx, {{[0-9]+}}(%rsp)97; CHECK-NEXT:    movq %rdx, {{[0-9]+}}(%rsp)98; CHECK-NEXT:    movq %rsi, {{[0-9]+}}(%rsp)99; CHECK-NEXT:    movq %rdi, (%rsp)100; CHECK-NEXT:    movaps %xmm11, {{[0-9]+}}(%rsp)101; CHECK-NEXT:    movaps %xmm10, {{[0-9]+}}(%rsp)102; CHECK-NEXT:    movaps %xmm9, {{[0-9]+}}(%rsp)103; CHECK-NEXT:    movaps %xmm8, {{[0-9]+}}(%rsp)104; CHECK-NEXT:    movaps %xmm7, {{[0-9]+}}(%rsp)105; CHECK-NEXT:    movaps %xmm6, {{[0-9]+}}(%rsp)106; CHECK-NEXT:    movaps %xmm5, {{[0-9]+}}(%rsp)107; CHECK-NEXT:    movaps %xmm4, {{[0-9]+}}(%rsp)108; CHECK-NEXT:    movaps %xmm3, {{[0-9]+}}(%rsp)109; CHECK-NEXT:    movaps %xmm2, {{[0-9]+}}(%rsp)110; CHECK-NEXT:    movaps %xmm1, {{[0-9]+}}(%rsp)111; CHECK-NEXT:    movaps %xmm0, {{[0-9]+}}(%rsp)112; CHECK-NEXT:    callq foo@PLT113; CHECK-NEXT:  .Ltmp3:114; CHECK-NEXT:    addq $248, %rsp115; CHECK-NEXT:    .cfi_def_cfa_offset 8116; CHECK-NEXT:    retq117  %statepoint_token = call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 2882400000, i32 0, ptr elementtype(void ()) @foo, i32 0, i32 2, i32 0, i32 0) #0 [ "deopt" (i128 %v1, i256 %v2, i512 %v3, i1024 %v4) ]118  ret void119}120 121 122;; TODO: Add a test for illegal register values (i.e. spilling).  A123;; trivial one currently crashes.124 125declare void @foo()126 127declare token @llvm.experimental.gc.statepoint.p0(i64 , i32 , ptr, i32 , i32 , ...)128 129attributes #0 = { "deopt-lowering"="live-in" }130