107 lines · plain
1; RUN: llc -mtriple=mipsel-- -disable-mips-delay-filler \2; RUN: -relocation-model=pic < %s | FileCheck %s -check-prefix=PIC323; RUN: llc -mtriple=mips64el-- -disable-mips-delay-filler \4; RUN: -relocation-model=pic < %s | FileCheck %s -check-prefix=PIC645 6; RUN: llc -mtriple=mipsel-- -mattr=+micromips -disable-mips-delay-filler \7; RUN: -relocation-model=pic < %s | FileCheck %s -check-prefix=MM8 9@t1 = dso_preemptable thread_local global i32 0, align 410 11define dso_preemptable i32 @f1() nounwind {12entry:13 %tmp = load i32, ptr @t1, align 414 ret i32 %tmp15 16; PIC32-LABEL: f1:17; PIC32-DAG: addu $[[R0:[a-z0-9]+]], $2, $2518; PIC32-DAG: addiu $4, $[[R0]], %tlsgd(t1)19; PIC32-DAG: lw $25, %call16(__tls_get_addr)($[[R0]])20; PIC32-DAG: jalr $2521; PIC32-DAG: lw $2, 0($2)22 23; PIC64-LABEL: f1:24; PIC64-DAG: daddiu $[[R0:[a-z0-9]+]], $1, %lo(%neg(%gp_rel(f1)))25; PIC64-DAG: daddiu $4, $[[R0]], %tlsgd(t1)26; PIC64-DAG: ld $25, %call16(__tls_get_addr)($[[R0]])27; PIC64-DAG: jalr $2528; PIC64-DAG: lw $2, 0($2)29 30; MM-LABEL: f1:31; MM-DAG: addu $gp, $2, $2532; MM-DAG: addiu $4, $gp, %tlsgd(t1)33; MM-DAG: lw $25, %call16(__tls_get_addr)($gp)34; MM-DAG: jalr $2535; MM-DAG: lw16 $2, 0($2)36}37 38@t2 = external thread_local global i3239 40define dso_preemptable i32 @f2() nounwind {41entry:42 %tmp = load i32, ptr @t2, align 443 ret i32 %tmp44 45; PIC32-LABEL: f2:46; PIC32-DAG: addu $[[R0:[a-z0-9]+]], $2, $2547; PIC32-DAG: addiu $4, $[[R0]], %tlsgd(t2)48; PIC32-DAG: lw $25, %call16(__tls_get_addr)($[[R0]])49; PIC32-DAG: jalr $2550; PIC32-DAG: lw $2, 0($2)51 52; PIC64-LABEL: f2:53; PIC64-DAG: daddiu $[[R0:[a-z0-9]+]], $1, %lo(%neg(%gp_rel(f2)))54; PIC64-DAG: daddiu $4, $[[R0]], %tlsgd(t2)55; PIC64-DAG: ld $25, %call16(__tls_get_addr)($[[R0]])56; PIC64-DAG: jalr $2557; PIC64-DAG: lw $2, 0($2)58 59; MM-LABEL: f2:60; MM-DAG: addu $[[R0:[a-z0-9]+]], $2, $2561; MM-DAG: lw $25, %call16(__tls_get_addr)($[[R0]])62; MM-DAG: addiu $4, $[[R0]], %tlsgd(t2)63; MM-DAG: jalr $2564; MM-DAG: lw16 $2, 0($2)65}66 67@f3.i = internal thread_local unnamed_addr global i32 1, align 468 69define dso_preemptable i32 @f3() nounwind {70entry:71; PIC32-LABEL: f3:72; PIC32: addu $[[R0:[a-z0-9]+]], $2, $2573; PIC32: addiu $4, $[[R0]], %tlsldm(f3.i)74; PIC32: lw $25, %call16(__tls_get_addr)($[[R0]])75; PIC32: jalr $2576; PIC32: lui $[[R0:[0-9]+]], %dtprel_hi(f3.i)77; PIC32: addu $[[R1:[0-9]+]], $[[R0]], $278; PIC32: lw $[[R3:[0-9]+]], %dtprel_lo(f3.i)($[[R1]])79; PIC32: addiu $[[R3]], $[[R3]], 180; PIC32: sw $[[R3]], %dtprel_lo(f3.i)($[[R1]])81 82; PIC64-LABEL: f3:83; PIC64: lui $[[R0:[a-z0-9]+]], %hi(%neg(%gp_rel(f3)))84; PIC64: daddu $[[R0]], $[[R0]], $2585; PIC64: daddiu $[[R1:[a-z0-9]+]], $[[R0]], %lo(%neg(%gp_rel(f3)))86; PIC64: daddiu $4, $[[R1]], %tlsldm(f3.i)87; PIC64: ld $25, %call16(__tls_get_addr)($[[R1]])88; PIC64: jalr $2589; PIC64: lui $[[R0:[0-9]+]], %dtprel_hi(f3.i)90; PIC64: daddu $[[R1:[0-9]+]], $[[R0]], $291; PIC64: lw $[[R2:[0-9]+]], %dtprel_lo(f3.i)($[[R1]])92; PIC64: addiu $[[R2]], $[[R2]], 193; PIC64: sw $[[R2]], %dtprel_lo(f3.i)($[[R1]])94 95; MM-LABEL: f3:96; MM: addiu $4, ${{[a-z0-9]+}}, %tlsldm(f3.i)97; MM: jalr $2598; MM: lui $[[R0:[0-9]+]], %dtprel_hi(f3.i)99; MM: addu16 $[[R1:[0-9]+]], $[[R0]], $2100; MM: lw ${{[0-9]+}}, %dtprel_lo(f3.i)($[[R1]])101 102 %0 = load i32, ptr @f3.i, align 4103 %inc = add nsw i32 %0, 1104 store i32 %inc, ptr @f3.i, align 4105 ret i32 %inc106}107