| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --no_x86_scrub_sp --version 4 |
| ; RUN: llc -O0 -mtriple=x86_64 -verify-machineinstrs < %s | FileCheck %s --check-prefix=CHECK |
| %large = type [4294967295 x i8] |
| |
| define void @foo() unnamed_addr #0 { |
| ; CHECK-LABEL: foo: |
| ; CHECK: # %bb.0: |
| ; CHECK-NEXT: movabsq $8589934472, %rax # imm = 0x1FFFFFF88 |
| ; CHECK-NEXT: subq %rax, %rsp |
| ; CHECK-NEXT: .cfi_def_cfa_offset 8589934480 |
| ; CHECK-NEXT: movabsq $4294967177, %rax # imm = 0xFFFFFF89 |
| ; CHECK-NEXT: movb $42, (%rsp,%rax) |
| ; CHECK-NEXT: movb $43, -118(%rsp) |
| ; CHECK-NEXT: movabsq $8589934472, %rax # imm = 0x1FFFFFF88 |
| ; CHECK-NEXT: addq %rax, %rsp |
| ; CHECK-NEXT: .cfi_def_cfa_offset 8 |
| ; CHECK-NEXT: retq |
| %large1 = alloca %large, align 1 |
| %large2 = alloca %large, align 1 |
| %ptrLarge1 = getelementptr inbounds %large, ptr %large1, i64 0, i64 0 |
| store i8 42, ptr %ptrLarge1, align 1 |
| %ptrLarge2 = getelementptr inbounds %large, ptr %large2, i64 0, i64 0 |
| store i8 43, ptr %ptrLarge2, align 1 |
| ret void |
| } |
| |
| declare ptr @baz(ptr, ptr, ptr, ptr) |
| |
| define ptr @scavenge_spill() unnamed_addr #0 { |
| ; CHECK-LABEL: scavenge_spill: |
| ; CHECK: # %bb.0: |
| ; CHECK-NEXT: movabsq $25769803816, %rax # imm = 0x600000028 |
| ; CHECK-NEXT: subq %rax, %rsp |
| ; CHECK-NEXT: .cfi_def_cfa_offset 25769803824 |
| ; CHECK-NEXT: movabsq $21474836521, %rax # imm = 0x500000029 |
| ; CHECK-NEXT: leaq (%rsp,%rax), %rdi |
| ; CHECK-NEXT: movabsq $17179869226, %rax # imm = 0x40000002A |
| ; CHECK-NEXT: leaq (%rsp,%rax), %rsi |
| ; CHECK-NEXT: movq %rsi, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill |
| ; CHECK-NEXT: movabsq $12884901931, %rax # imm = 0x30000002B |
| ; CHECK-NEXT: leaq (%rsp,%rax), %rdx |
| ; CHECK-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill |
| ; CHECK-NEXT: movabsq $8589934636, %rax # imm = 0x20000002C |
| ; CHECK-NEXT: leaq (%rsp,%rax), %rcx |
| ; CHECK-NEXT: movq %rcx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill |
| ; CHECK-NEXT: callq baz@PLT |
| ; CHECK-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rsi # 8-byte Reload |
| ; CHECK-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rdx # 8-byte Reload |
| ; CHECK-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rcx # 8-byte Reload |
| ; CHECK-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill |
| ; CHECK-NEXT: leaq 46(%rsp), %rdi |
| ; CHECK-NEXT: callq baz@PLT |
| ; CHECK-NEXT: # kill: def $rcx killed $rax |
| ; CHECK-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload |
| ; CHECK-NEXT: movabsq $25769803816, %rcx # imm = 0x600000028 |
| ; CHECK-NEXT: addq %rcx, %rsp |
| ; CHECK-NEXT: .cfi_def_cfa_offset 8 |
| ; CHECK-NEXT: retq |
| %large1 = alloca %large, align 1 |
| %ptrLarge1 = getelementptr inbounds %large, ptr %large1, i64 0, i64 0 |
| %large2 = alloca %large, align 1 |
| %ptrLarge2 = getelementptr inbounds %large, ptr %large2, i64 0, i64 0 |
| %large3 = alloca %large, align 1 |
| %ptrLarge3 = getelementptr inbounds %large, ptr %large3, i64 0, i64 0 |
| %large4 = alloca %large, align 1 |
| %ptrLarge4 = getelementptr inbounds %large, ptr %large4, i64 0, i64 0 |
| %large5 = alloca %large, align 1 |
| %ptrLarge5 = getelementptr inbounds %large, ptr %large5, i64 0, i64 0 |
| %ret1 = call ptr @baz(ptr %ptrLarge1, ptr %ptrLarge2, ptr %ptrLarge3, ptr %ptrLarge4) |
| %large6 = alloca %large, align 1 |
| %ptrLarge6 = getelementptr inbounds %large, ptr %large6, i64 0, i64 0 |
| %ret2 = call ptr @baz(ptr %ptrLarge6, ptr %ptrLarge2, ptr %ptrLarge3, ptr %ptrLarge4) |
| ret ptr %ret1 |
| } |