brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.8 KiB · de9af01 Raw
106 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=sparc -relocation-model=pic < %s | FileCheck --check-prefix=SPARC %s3; RUN: llc -mtriple=sparc64 -relocation-model=pic < %s | FileCheck --check-prefix=SPARC64 %s4 5@x = external thread_local global i86 7;; Test that we don't over-allocate stack space when calling __tls_get_addr8;; with the call frame pseudos able to be eliminated.9define ptr @no_alloca() nounwind {10; SPARC-LABEL: no_alloca:11; SPARC:       ! %bb.0: ! %entry12; SPARC-NEXT:    save %sp, -96, %sp13; SPARC-NEXT:  .Ltmp0:14; SPARC-NEXT:    call .Ltmp115; SPARC-NEXT:  .Ltmp2:16; SPARC-NEXT:    sethi %hi(_GLOBAL_OFFSET_TABLE_+(.Ltmp2-.Ltmp0)), %i017; SPARC-NEXT:  .Ltmp1:18; SPARC-NEXT:    or %i0, %lo(_GLOBAL_OFFSET_TABLE_+(.Ltmp1-.Ltmp0)), %i019; SPARC-NEXT:    add %i0, %o7, %i020; SPARC-NEXT:    sethi %tgd_hi22(x), %i121; SPARC-NEXT:    add %i1, %tgd_lo10(x), %i122; SPARC-NEXT:    add %i0, %i1, %o0, %tgd_add(x)23; SPARC-NEXT:    call __tls_get_addr, %tgd_call(x)24; SPARC-NEXT:    nop25; SPARC-NEXT:    ret26; SPARC-NEXT:    restore %g0, %o0, %o027;28; SPARC64-LABEL: no_alloca:29; SPARC64:       ! %bb.0: ! %entry30; SPARC64-NEXT:    save %sp, -128, %sp31; SPARC64-NEXT:  .Ltmp0:32; SPARC64-NEXT:    rd %pc, %o733; SPARC64-NEXT:  .Ltmp2:34; SPARC64-NEXT:    sethi %hi(_GLOBAL_OFFSET_TABLE_+(.Ltmp2-.Ltmp0)), %i035; SPARC64-NEXT:  .Ltmp1:36; SPARC64-NEXT:    or %i0, %lo(_GLOBAL_OFFSET_TABLE_+(.Ltmp1-.Ltmp0)), %i037; SPARC64-NEXT:    add %i0, %o7, %i038; SPARC64-NEXT:    sethi %tgd_hi22(x), %i139; SPARC64-NEXT:    add %i1, %tgd_lo10(x), %i140; SPARC64-NEXT:    add %i0, %i1, %o0, %tgd_add(x)41; SPARC64-NEXT:    call __tls_get_addr, %tgd_call(x)42; SPARC64-NEXT:    nop43; SPARC64-NEXT:    ret44; SPARC64-NEXT:    restore %g0, %o0, %o045entry:46  %0 = call ptr @llvm.threadlocal.address.p0(ptr @x)47  ret ptr %048}49 50;; Test that %sp is valid for the call to __tls_get_addr. We store to a dynamic51;; alloca in order to prevent eliminating any call frame pseudos from the call.52define ptr @dynamic_alloca(i64 %n) nounwind {53; SPARC-LABEL: dynamic_alloca:54; SPARC:       ! %bb.0: ! %entry55; SPARC-NEXT:    save %sp, -96, %sp56; SPARC-NEXT:  .Ltmp3:57; SPARC-NEXT:    call .Ltmp458; SPARC-NEXT:  .Ltmp5:59; SPARC-NEXT:    sethi %hi(_GLOBAL_OFFSET_TABLE_+(.Ltmp5-.Ltmp3)), %i060; SPARC-NEXT:  .Ltmp4:61; SPARC-NEXT:    or %i0, %lo(_GLOBAL_OFFSET_TABLE_+(.Ltmp4-.Ltmp3)), %i062; SPARC-NEXT:    add %i0, %o7, %i063; SPARC-NEXT:    sethi %tgd_hi22(x), %i264; SPARC-NEXT:    add %i2, %tgd_lo10(x), %i265; SPARC-NEXT:    add %i0, %i2, %o0, %tgd_add(x)66; SPARC-NEXT:    call __tls_get_addr, %tgd_call(x)67; SPARC-NEXT:    nop68; SPARC-NEXT:    add %i1, 7, %i069; SPARC-NEXT:    and %i0, -8, %i070; SPARC-NEXT:    sub %sp, %i0, %i071; SPARC-NEXT:    add %i0, -8, %sp72; SPARC-NEXT:    mov 1, %i173; SPARC-NEXT:    stb %i1, [%i0+88]74; SPARC-NEXT:    ret75; SPARC-NEXT:    restore %g0, %o0, %o076;77; SPARC64-LABEL: dynamic_alloca:78; SPARC64:       ! %bb.0: ! %entry79; SPARC64-NEXT:    save %sp, -128, %sp80; SPARC64-NEXT:  .Ltmp3:81; SPARC64-NEXT:    rd %pc, %o782; SPARC64-NEXT:  .Ltmp5:83; SPARC64-NEXT:    sethi %hi(_GLOBAL_OFFSET_TABLE_+(.Ltmp5-.Ltmp3)), %i184; SPARC64-NEXT:  .Ltmp4:85; SPARC64-NEXT:    or %i1, %lo(_GLOBAL_OFFSET_TABLE_+(.Ltmp4-.Ltmp3)), %i186; SPARC64-NEXT:    add %i1, %o7, %i187; SPARC64-NEXT:    sethi %tgd_hi22(x), %i288; SPARC64-NEXT:    add %i2, %tgd_lo10(x), %i289; SPARC64-NEXT:    add %i1, %i2, %o0, %tgd_add(x)90; SPARC64-NEXT:    call __tls_get_addr, %tgd_call(x)91; SPARC64-NEXT:    nop92; SPARC64-NEXT:    add %i0, 15, %i093; SPARC64-NEXT:    and %i0, -16, %i094; SPARC64-NEXT:    sub %sp, %i0, %i095; SPARC64-NEXT:    mov %i0, %sp96; SPARC64-NEXT:    mov 1, %i197; SPARC64-NEXT:    stb %i1, [%i0+2175]98; SPARC64-NEXT:    ret99; SPARC64-NEXT:    restore %g0, %o0, %o0100entry:101  %0 = call ptr @llvm.threadlocal.address.p0(ptr @x)102  %1 = alloca i8, i64 %n103  store i8 1, ptr %1104  ret ptr %0105}106