| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 3 |
| ; RUN: llc -verify-machineinstrs -mcpu=pwr7 -ppc-asm-full-reg-names \ |
| ; RUN: -mattr=+aix-small-local-dynamic-tls -mtriple powerpc64-ibm-aix-xcoff < %s \ |
| ; RUN: | FileCheck %s --check-prefix=SMALL-LOCAL-DYNAMIC-SMALLCM64 |
| ; RUN: llc -verify-machineinstrs -mcpu=pwr7 -ppc-asm-full-reg-names \ |
| ; RUN: -mattr=+aix-small-local-dynamic-tls -mtriple powerpc64-ibm-aix-xcoff --code-model=large \ |
| ; RUN: < %s | FileCheck %s --check-prefix=SMALL-LOCAL-DYNAMIC-LARGECM64 |
| ; RUN: llc -O0 -verify-machineinstrs -mcpu=pwr7 -ppc-asm-full-reg-names \ |
| ; RUN: -mattr=+aix-small-local-dynamic-tls -mtriple powerpc64-ibm-aix-xcoff < %s \ |
| ; RUN: | FileCheck %s --check-prefix=SMALL-LOCAL-DYNAMIC-SMALLCM64-O0 |
| ; RUN: llc -O0 -verify-machineinstrs -mcpu=pwr7 -ppc-asm-full-reg-names \ |
| ; RUN: -mattr=+aix-small-local-dynamic-tls -mtriple powerpc64-ibm-aix-xcoff --code-model=large \ |
| ; RUN: < %s | FileCheck %s --check-prefix=SMALL-LOCAL-DYNAMIC-LARGECM64-O0 |
| ; RUN: llc -verify-machineinstrs -mcpu=pwr7 -ppc-asm-full-reg-names \ |
| ; RUN: -mtriple powerpc64-ibm-aix-xcoff < %s \ |
| ; RUN: | FileCheck %s --check-prefix=DEFAULT-LOCAL-DYNAMIC-SMALLCM64 |
| ; RUN: llc -verify-machineinstrs -mcpu=pwr7 -ppc-asm-full-reg-names \ |
| ; RUN: -mtriple powerpc64-ibm-aix-xcoff --code-model=large \ |
| ; RUN: < %s | FileCheck %s \ |
| ; RUN: --check-prefix=DEFAULT-LOCAL-DYNAMIC-LARGECM64 |
| ; RUN: llc -O0 -verify-machineinstrs -mcpu=pwr7 -ppc-asm-full-reg-names \ |
| ; RUN: -mtriple powerpc64-ibm-aix-xcoff < %s \ |
| ; RUN: | FileCheck %s --check-prefix=DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0 |
| ; RUN: llc -O0 -verify-machineinstrs -mcpu=pwr7 -ppc-asm-full-reg-names \ |
| ; RUN: -mtriple powerpc64-ibm-aix-xcoff --code-model=large \ |
| ; RUN: < %s | FileCheck %s \ |
| ; RUN: --check-prefix=DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0 |
| |
| declare nonnull ptr @llvm.threadlocal.address.p0(ptr nonnull) #1 |
| @tlv_int_init = local_unnamed_addr global i32 87, align 4 |
| |
| @tlv_char = thread_local(localdynamic) global i8 1, align 1 |
| @tlv_short = thread_local(localdynamic) global i8 1, align 2 |
| @tlv_int = thread_local(localdynamic) global i32 1, align 4 |
| @internal_tlv_int = internal thread_local(localdynamic) global i32 1, align 4 |
| @tlv_long = thread_local(localdynamic) global i64 1, align 8 |
| @internal_tlv_long = internal thread_local(localdynamic) global i64 1, align 8 |
| @tlv_float = thread_local(localdynamic) global float 1.000000e+00, align 4 |
| @internal_tlv_double = internal thread_local(localdynamic) global double 1.000000e+00, align 8 |
| |
| %struct.anon = type { i32 } |
| @ThreadLocalStructAlign1 = thread_local(localdynamic) global %struct.anon zeroinitializer, align 1 |
| @ThreadLocalStructAlign4 = thread_local(localdynamic) global %struct.anon zeroinitializer, align 4 |
| @a = thread_local(localdynamic) global [87 x i32] zeroinitializer, align 4 |
| |
| define nonnull ptr @AddrTest1() local_unnamed_addr { |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-LABEL: AddrTest1: |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: stdu r1, -48(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: std r0, 64(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: la r3, a[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: addi r3, r3, 12 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: addi r1, r1, 48 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: blr |
| ; |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-LABEL: AddrTest1: |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: stdu r1, -48(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: addis r3, L..C0@u(r2) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: std r0, 64(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r3, L..C0@l(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: la r3, a[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: addi r3, r3, 12 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: addi r1, r1, 48 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: blr |
| ; |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-LABEL: AddrTest1: |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: stdu r1, -48(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: std r0, 64(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: la r3, a[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: addi r3, r3, 12 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: addi r1, r1, 48 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: blr |
| ; |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-LABEL: AddrTest1: |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: stdu r1, -48(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: std r0, 64(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addis r3, L..C0@u(r2) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r3, L..C0@l(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: la r3, a[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addi r3, r3, 12 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addi r1, r1, 48 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-LABEL: AddrTest1: |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: stdu r1, -48(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: std r0, 64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r4, L..C1(r2) # target-flags(ppc-tlsld) @a |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: add r3, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: addi r3, r3, 12 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: addi r1, r1, 48 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-LABEL: AddrTest1: |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: stdu r1, -48(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: addis r3, L..C0@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: addis r6, L..C1@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: std r0, 64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r3, L..C0@l(r3) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r4, L..C1@l(r6) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: add r3, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: addi r3, r3, 12 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: addi r1, r1, 48 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-LABEL: AddrTest1: |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: stdu r1, -48(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: std r0, 64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r4, L..C1(r2) # target-flags(ppc-tlsld) @a |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: add r3, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: addi r3, r3, 12 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: addi r1, r1, 48 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-LABEL: AddrTest1: |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: stdu r1, -64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: std r0, 80(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addis r3, L..C0@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: std r3, 56(r1) # 8-byte Folded Spill |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addis r3, L..C1@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r3, L..C1@l(r3) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r4, 56(r1) # 8-byte Folded Reload |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r4, L..C0@l(r4) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: add r3, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addi r3, r3, 12 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addi r1, r1, 64 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: blr |
| entry: |
| %tlv_addr = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @a) |
| %arrayidx = getelementptr inbounds [87 x i32], ptr %tlv_addr, i64 0, i64 3 |
| ret ptr %arrayidx |
| } |
| |
| ; Demonstrates when offset is zero, addi for the offset is optimized out. |
| define nonnull ptr @AddrTest2() local_unnamed_addr { |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-LABEL: AddrTest2: |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: stdu r1, -48(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: std r0, 64(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: la r3, a[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: addi r1, r1, 48 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: blr |
| ; |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-LABEL: AddrTest2: |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: stdu r1, -48(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: addis r3, L..C0@u(r2) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: std r0, 64(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r3, L..C0@l(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: la r3, a[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: addi r1, r1, 48 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: blr |
| ; |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-LABEL: AddrTest2: |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: stdu r1, -48(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: std r0, 64(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: la r3, a[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: addi r1, r1, 48 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: blr |
| ; |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-LABEL: AddrTest2: |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: stdu r1, -48(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: std r0, 64(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addis r3, L..C0@u(r2) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r3, L..C0@l(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: la r3, a[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addi r1, r1, 48 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-LABEL: AddrTest2: |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: stdu r1, -48(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: std r0, 64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r4, L..C1(r2) # target-flags(ppc-tlsld) @a |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: add r3, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: addi r1, r1, 48 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-LABEL: AddrTest2: |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: stdu r1, -48(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: addis r3, L..C0@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: addis r6, L..C1@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: std r0, 64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r3, L..C0@l(r3) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r4, L..C1@l(r6) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: add r3, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: addi r1, r1, 48 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-LABEL: AddrTest2: |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: stdu r1, -48(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: std r0, 64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r4, L..C1(r2) # target-flags(ppc-tlsld) @a |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: add r3, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: addi r1, r1, 48 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-LABEL: AddrTest2: |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: stdu r1, -64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: std r0, 80(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addis r3, L..C0@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: std r3, 56(r1) # 8-byte Folded Spill |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addis r3, L..C1@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r3, L..C1@l(r3) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r4, 56(r1) # 8-byte Folded Reload |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r4, L..C0@l(r4) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: add r3, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addi r1, r1, 64 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: blr |
| entry: |
| %tlv_addr = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @a) |
| %arrayidx = getelementptr inbounds [87 x i32], ptr %tlv_addr, i64 0, i64 0 |
| ret ptr %arrayidx |
| } |
| |
| define signext i32 @testUnaligned() { |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-LABEL: testUnaligned: |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: stdu r1, -48(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: std r0, 64(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: la r3, ThreadLocalStructAlign1[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: lwa r3, 0(r3) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: addi r1, r1, 48 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: blr |
| ; |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-LABEL: testUnaligned: |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: stdu r1, -48(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: addis r3, L..C0@u(r2) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: std r0, 64(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r3, L..C0@l(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: la r3, ThreadLocalStructAlign1[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: lwa r3, 0(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: addi r1, r1, 48 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: blr |
| ; |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-LABEL: testUnaligned: |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: stdu r1, -48(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: std r0, 64(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: la r3, ThreadLocalStructAlign1[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: lwa r3, 0(r3) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: addi r1, r1, 48 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: blr |
| ; |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-LABEL: testUnaligned: |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: stdu r1, -48(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: std r0, 64(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addis r3, L..C0@u(r2) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r3, L..C0@l(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: la r3, ThreadLocalStructAlign1[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: lwa r3, 0(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addi r1, r1, 48 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-LABEL: testUnaligned: |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: stdu r1, -48(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: std r0, 64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r4, L..C2(r2) # target-flags(ppc-tlsld) @ThreadLocalStructAlign1 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: lwax r3, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: addi r1, r1, 48 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-LABEL: testUnaligned: |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: stdu r1, -48(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: addis r3, L..C0@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: addis r6, L..C2@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: std r0, 64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r3, L..C0@l(r3) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r4, L..C2@l(r6) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: lwax r3, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: addi r1, r1, 48 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-LABEL: testUnaligned: |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: stdu r1, -48(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: std r0, 64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r4, L..C2(r2) # target-flags(ppc-tlsld) @ThreadLocalStructAlign1 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: add r3, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: lwa r3, 0(r3) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: addi r1, r1, 48 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-LABEL: testUnaligned: |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: stdu r1, -64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: std r0, 80(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addis r3, L..C2@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: std r3, 56(r1) # 8-byte Folded Spill |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addis r3, L..C1@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r3, L..C1@l(r3) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r4, 56(r1) # 8-byte Folded Reload |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r4, L..C2@l(r4) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: add r3, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: lwa r3, 0(r3) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addi r1, r1, 64 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: blr |
| entry: |
| %tlv_addr1 = call align 1 ptr @llvm.threadlocal.address.p0(ptr align 1 @ThreadLocalStructAlign1) |
| %x = getelementptr inbounds %struct.anon, ptr %tlv_addr1, i32 0, i32 0 |
| %value1 = load i32, ptr %x, align 1 |
| ret i32 %value1 |
| } |
| |
| define signext i32 @testAligned() { |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-LABEL: testAligned: |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: stdu r1, -48(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: std r0, 64(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: lwa r3, ThreadLocalStructAlign4[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: addi r1, r1, 48 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: blr |
| ; |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-LABEL: testAligned: |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: stdu r1, -48(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: addis r3, L..C0@u(r2) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: std r0, 64(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r3, L..C0@l(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: lwa r3, ThreadLocalStructAlign4[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: addi r1, r1, 48 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: blr |
| ; |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-LABEL: testAligned: |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: stdu r1, -48(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: std r0, 64(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: la r3, ThreadLocalStructAlign4[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: lwa r3, 0(r3) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: addi r1, r1, 48 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: blr |
| ; |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-LABEL: testAligned: |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: stdu r1, -48(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: std r0, 64(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addis r3, L..C0@u(r2) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r3, L..C0@l(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: la r3, ThreadLocalStructAlign4[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: lwa r3, 0(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addi r1, r1, 48 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-LABEL: testAligned: |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: stdu r1, -48(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: std r0, 64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r4, L..C3(r2) # target-flags(ppc-tlsld) @ThreadLocalStructAlign4 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: lwax r3, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: addi r1, r1, 48 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-LABEL: testAligned: |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: stdu r1, -48(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: addis r3, L..C0@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: addis r6, L..C3@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: std r0, 64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r3, L..C0@l(r3) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r4, L..C3@l(r6) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: lwax r3, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: addi r1, r1, 48 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-LABEL: testAligned: |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: stdu r1, -48(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: std r0, 64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r4, L..C3(r2) # target-flags(ppc-tlsld) @ThreadLocalStructAlign4 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: add r3, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: lwa r3, 0(r3) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: addi r1, r1, 48 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-LABEL: testAligned: |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: stdu r1, -64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: std r0, 80(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addis r3, L..C3@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: std r3, 56(r1) # 8-byte Folded Spill |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addis r3, L..C1@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r3, L..C1@l(r3) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r4, 56(r1) # 8-byte Folded Reload |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r4, L..C3@l(r4) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: add r3, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: lwa r3, 0(r3) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addi r1, r1, 64 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: blr |
| entry: |
| %tlv_addr1 = call align 1 ptr @llvm.threadlocal.address.p0(ptr align 4 @ThreadLocalStructAlign4) |
| %x = getelementptr inbounds %struct.anon, ptr %tlv_addr1, i32 0, i32 0 |
| %value1 = load i32, ptr %x, align 1 |
| ret i32 %value1 |
| } |
| |
| define void @testChar(i8 noundef signext %x) { |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-LABEL: testChar: |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: stdu r1, -48(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: mr r6, r3 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: std r0, 64(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: stb r6, tlv_char[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: addi r1, r1, 48 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: blr |
| ; |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-LABEL: testChar: |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: stdu r1, -48(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: mr r6, r3 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: addis r3, L..C0@u(r2) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: std r0, 64(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r3, L..C0@l(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: stb r6, tlv_char[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: addi r1, r1, 48 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: blr |
| ; |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-LABEL: testChar: |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: stdu r1, -64(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: std r0, 80(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: # kill: def $r3 killed $r3 killed $x3 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: stw r3, 60(r1) # 4-byte Folded Spill |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mr r4, r3 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: lwz r3, 60(r1) # 4-byte Folded Reload |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: la r4, tlv_char[TL]@ld(r4) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: stb r3, 0(r4) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: addi r1, r1, 64 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: blr |
| ; |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-LABEL: testChar: |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: stdu r1, -64(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: std r0, 80(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: # kill: def $r3 killed $r3 killed $x3 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: stw r3, 60(r1) # 4-byte Folded Spill |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addis r3, L..C0@u(r2) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r3, L..C0@l(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mr r4, r3 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: lwz r3, 60(r1) # 4-byte Folded Reload |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: la r4, tlv_char[TL]@ld(r4) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: stb r3, 0(r4) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addi r1, r1, 64 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-LABEL: testChar: |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: stdu r1, -48(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: mr r6, r3 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: std r0, 64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r4, L..C4(r2) # target-flags(ppc-tlsld) @tlv_char |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: stbx r6, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: addi r1, r1, 48 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-LABEL: testChar: |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: stdu r1, -48(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: mr r6, r3 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: addis r3, L..C0@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: addis r7, L..C4@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: std r0, 64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r3, L..C0@l(r3) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r4, L..C4@l(r7) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: stbx r6, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: addi r1, r1, 48 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-LABEL: testChar: |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: stdu r1, -64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: std r0, 80(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: # kill: def $r3 killed $r3 killed $x3 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: stw r3, 60(r1) # 4-byte Folded Spill |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mr r4, r3 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: lwz r3, 60(r1) # 4-byte Folded Reload |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r5, L..C4(r2) # target-flags(ppc-tlsld) @tlv_char |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: add r4, r4, r5 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: stb r3, 0(r4) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: addi r1, r1, 64 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-LABEL: testChar: |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: stdu r1, -64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: std r0, 80(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: # kill: def $r3 killed $r3 killed $x3 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: stw r3, 60(r1) # 4-byte Folded Spill |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addis r3, L..C4@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: std r3, 48(r1) # 8-byte Folded Spill |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addis r3, L..C1@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r3, L..C1@l(r3) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r5, 48(r1) # 8-byte Folded Reload |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mr r4, r3 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: lwz r3, 60(r1) # 4-byte Folded Reload |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r5, L..C4@l(r5) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: add r4, r4, r5 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: stb r3, 0(r4) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addi r1, r1, 64 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: blr |
| entry: |
| %tlv_addr = tail call align 1 ptr @llvm.threadlocal.address.p0(ptr align 1 @tlv_char) |
| store i8 %x, ptr %tlv_addr, align 1 |
| ret void |
| } |
| |
| define void @testShort(i16 noundef signext %x) { |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-LABEL: testShort: |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: stdu r1, -48(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: mr r6, r3 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: std r0, 64(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: sth r6, tlv_short[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: addi r1, r1, 48 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: blr |
| ; |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-LABEL: testShort: |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: stdu r1, -48(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: mr r6, r3 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: addis r3, L..C0@u(r2) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: std r0, 64(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r3, L..C0@l(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: sth r6, tlv_short[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: addi r1, r1, 48 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: blr |
| ; |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-LABEL: testShort: |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: stdu r1, -64(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: std r0, 80(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: # kill: def $r3 killed $r3 killed $x3 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: stw r3, 60(r1) # 4-byte Folded Spill |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mr r4, r3 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: lwz r3, 60(r1) # 4-byte Folded Reload |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: la r4, tlv_short[TL]@ld(r4) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: sth r3, 0(r4) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: addi r1, r1, 64 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: blr |
| ; |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-LABEL: testShort: |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: stdu r1, -64(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: std r0, 80(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: # kill: def $r3 killed $r3 killed $x3 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: stw r3, 60(r1) # 4-byte Folded Spill |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addis r3, L..C0@u(r2) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r3, L..C0@l(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mr r4, r3 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: lwz r3, 60(r1) # 4-byte Folded Reload |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: la r4, tlv_short[TL]@ld(r4) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: sth r3, 0(r4) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addi r1, r1, 64 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-LABEL: testShort: |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: stdu r1, -48(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: mr r6, r3 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: std r0, 64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r4, L..C5(r2) # target-flags(ppc-tlsld) @tlv_short |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: sthx r6, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: addi r1, r1, 48 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-LABEL: testShort: |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: stdu r1, -48(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: mr r6, r3 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: addis r3, L..C0@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: addis r7, L..C5@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: std r0, 64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r3, L..C0@l(r3) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r4, L..C5@l(r7) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: sthx r6, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: addi r1, r1, 48 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-LABEL: testShort: |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: stdu r1, -64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: std r0, 80(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: # kill: def $r3 killed $r3 killed $x3 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: stw r3, 60(r1) # 4-byte Folded Spill |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mr r4, r3 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: lwz r3, 60(r1) # 4-byte Folded Reload |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r5, L..C5(r2) # target-flags(ppc-tlsld) @tlv_short |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: add r4, r4, r5 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: sth r3, 0(r4) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: addi r1, r1, 64 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-LABEL: testShort: |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: stdu r1, -64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: std r0, 80(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: # kill: def $r3 killed $r3 killed $x3 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: stw r3, 60(r1) # 4-byte Folded Spill |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addis r3, L..C5@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: std r3, 48(r1) # 8-byte Folded Spill |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addis r3, L..C1@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r3, L..C1@l(r3) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r5, 48(r1) # 8-byte Folded Reload |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mr r4, r3 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: lwz r3, 60(r1) # 4-byte Folded Reload |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r5, L..C5@l(r5) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: add r4, r4, r5 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: sth r3, 0(r4) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addi r1, r1, 64 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: blr |
| entry: |
| %tlv_addr = tail call align 2 ptr @llvm.threadlocal.address.p0(ptr align 2 @tlv_short) |
| store i16 %x, ptr %tlv_addr, align 2 |
| ret void |
| } |
| |
| define signext i32 @testInt1() { |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-LABEL: testInt1: |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: stdu r1, -48(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: std r0, 64(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: lwa r3, tlv_int[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: addi r1, r1, 48 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: blr |
| ; |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-LABEL: testInt1: |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: stdu r1, -48(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: addis r3, L..C0@u(r2) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: std r0, 64(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r3, L..C0@l(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: lwa r3, tlv_int[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: addi r1, r1, 48 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: blr |
| ; |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-LABEL: testInt1: |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: stdu r1, -48(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: std r0, 64(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: la r3, tlv_int[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: lwa r3, 0(r3) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: addi r1, r1, 48 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: blr |
| ; |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-LABEL: testInt1: |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: stdu r1, -48(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: std r0, 64(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addis r3, L..C0@u(r2) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r3, L..C0@l(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: la r3, tlv_int[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: lwa r3, 0(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addi r1, r1, 48 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-LABEL: testInt1: |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: stdu r1, -48(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: std r0, 64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r4, L..C6(r2) # target-flags(ppc-tlsld) @tlv_int |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: lwax r3, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: addi r1, r1, 48 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-LABEL: testInt1: |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: stdu r1, -48(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: addis r3, L..C0@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: addis r6, L..C6@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: std r0, 64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r3, L..C0@l(r3) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r4, L..C6@l(r6) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: lwax r3, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: addi r1, r1, 48 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-LABEL: testInt1: |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: stdu r1, -48(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: std r0, 64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r4, L..C6(r2) # target-flags(ppc-tlsld) @tlv_int |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: add r3, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: lwa r3, 0(r3) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: addi r1, r1, 48 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-LABEL: testInt1: |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: stdu r1, -64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: std r0, 80(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addis r3, L..C6@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: std r3, 56(r1) # 8-byte Folded Spill |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addis r3, L..C1@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r3, L..C1@l(r3) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r4, 56(r1) # 8-byte Folded Reload |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r4, L..C6@l(r4) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: add r3, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: lwa r3, 0(r3) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addi r1, r1, 64 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: blr |
| entry: |
| %tlv_addr = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @tlv_int) |
| %value = load i32, ptr %tlv_addr, align 4 |
| ret i32 %value |
| } |
| |
| define signext i32 @testInt2() { |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-LABEL: testInt2: |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: stdu r1, -48(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: std r0, 64(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r4, L..C1(r2) # @tlv_int_init |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: lwz r3, internal_tlv_int[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: lwz r4, 0(r4) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: add r3, r4, r3 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: extsw r3, r3 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: addi r1, r1, 48 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: blr |
| ; |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-LABEL: testInt2: |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: stdu r1, -48(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: addis r3, L..C0@u(r2) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: std r0, 64(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r3, L..C0@l(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: addis r4, L..C1@u(r2) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r4, L..C1@l(r4) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: lwz r3, internal_tlv_int[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: lwz r4, 0(r4) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: add r3, r4, r3 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: extsw r3, r3 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: addi r1, r1, 48 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: blr |
| ; |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-LABEL: testInt2: |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: stdu r1, -48(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: std r0, 64(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: la r3, internal_tlv_int[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: lwz r4, 0(r3) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r3, L..C1(r2) # @tlv_int_init |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: lwz r3, 0(r3) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: add r3, r3, r4 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: extsw r3, r3 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: addi r1, r1, 48 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: blr |
| ; |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-LABEL: testInt2: |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: stdu r1, -48(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: std r0, 64(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addis r3, L..C0@u(r2) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r3, L..C0@l(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: la r3, internal_tlv_int[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: lwz r4, 0(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addis r3, L..C1@u(r2) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r3, L..C1@l(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: lwz r3, 0(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: add r3, r3, r4 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: extsw r3, r3 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addi r1, r1, 48 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-LABEL: testInt2: |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: stdu r1, -48(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: std r0, 64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r4, L..C7(r2) # target-flags(ppc-tlsld) @internal_tlv_int |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: lwzx r3, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r4, L..C8(r2) # @tlv_int_init |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: lwz r4, 0(r4) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: add r3, r4, r3 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: extsw r3, r3 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: addi r1, r1, 48 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-LABEL: testInt2: |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: stdu r1, -48(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: addis r3, L..C0@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: addis r6, L..C7@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: std r0, 64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r3, L..C0@l(r3) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r4, L..C7@l(r6) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: lwzx r3, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: addis r4, L..C8@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r4, L..C8@l(r4) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: lwz r4, 0(r4) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: add r3, r4, r3 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: extsw r3, r3 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: addi r1, r1, 48 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-LABEL: testInt2: |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: stdu r1, -48(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: std r0, 64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r4, L..C7(r2) # target-flags(ppc-tlsld) @internal_tlv_int |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: add r3, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: lwz r4, 0(r3) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r3, L..C8(r2) # @tlv_int_init |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: lwz r3, 0(r3) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: add r3, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: extsw r3, r3 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: addi r1, r1, 48 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-LABEL: testInt2: |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: stdu r1, -64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: std r0, 80(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addis r3, L..C7@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: std r3, 56(r1) # 8-byte Folded Spill |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addis r3, L..C1@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r3, L..C1@l(r3) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r4, 56(r1) # 8-byte Folded Reload |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r4, L..C7@l(r4) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: add r3, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: lwz r4, 0(r3) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addis r3, L..C8@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r3, L..C8@l(r3) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: lwz r3, 0(r3) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: add r3, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: extsw r3, r3 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addi r1, r1, 64 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: blr |
| entry: |
| %tlv_addr = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @internal_tlv_int) |
| %tlv_val = load i32, ptr %tlv_addr, align 4 |
| %global_val = load i32, ptr @tlv_int_init, align 4 |
| %sum = add nsw i32 %global_val, %tlv_val |
| ret i32 %sum |
| } |
| |
| define signext i64 @testLong1() { |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-LABEL: testLong1: |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: stdu r1, -48(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: std r0, 64(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r3, tlv_long[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: addi r1, r1, 48 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: blr |
| ; |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-LABEL: testLong1: |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: stdu r1, -48(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: addis r3, L..C0@u(r2) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: std r0, 64(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r3, L..C0@l(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r3, tlv_long[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: addi r1, r1, 48 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: blr |
| ; |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-LABEL: testLong1: |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: stdu r1, -48(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: std r0, 64(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: la r3, tlv_long[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r3, 0(r3) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: addi r1, r1, 48 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: blr |
| ; |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-LABEL: testLong1: |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: stdu r1, -48(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: std r0, 64(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addis r3, L..C0@u(r2) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r3, L..C0@l(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: la r3, tlv_long[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r3, 0(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addi r1, r1, 48 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-LABEL: testLong1: |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: stdu r1, -48(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: std r0, 64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r4, L..C9(r2) # target-flags(ppc-tlsld) @tlv_long |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: ldx r3, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: addi r1, r1, 48 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-LABEL: testLong1: |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: stdu r1, -48(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: addis r3, L..C0@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: addis r6, L..C9@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: std r0, 64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r3, L..C0@l(r3) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r4, L..C9@l(r6) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: ldx r3, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: addi r1, r1, 48 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-LABEL: testLong1: |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: stdu r1, -48(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: std r0, 64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r4, L..C9(r2) # target-flags(ppc-tlsld) @tlv_long |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: add r3, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r3, 0(r3) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: addi r1, r1, 48 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-LABEL: testLong1: |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: stdu r1, -64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: std r0, 80(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addis r3, L..C9@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: std r3, 56(r1) # 8-byte Folded Spill |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addis r3, L..C1@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r3, L..C1@l(r3) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r4, 56(r1) # 8-byte Folded Reload |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r4, L..C9@l(r4) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: add r3, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r3, 0(r3) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addi r1, r1, 64 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: blr |
| entry: |
| %tlv_addr = tail call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @tlv_long) |
| %value = load i64, ptr %tlv_addr, align 4 |
| ret i64 %value |
| } |
| |
| define void @testLong2(i64 noundef signext %x) { |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-LABEL: testLong2: |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: stdu r1, -48(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: std r0, 64(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r4, internal_tlv_long[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: addi r4, r4, 9 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: std r4, internal_tlv_long[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: addi r1, r1, 48 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: blr |
| ; |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-LABEL: testLong2: |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: stdu r1, -48(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: addis r3, L..C0@u(r2) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: std r0, 64(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r3, L..C0@l(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r4, internal_tlv_long[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: addi r4, r4, 9 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: std r4, internal_tlv_long[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: addi r1, r1, 48 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: blr |
| ; |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-LABEL: testLong2: |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: stdu r1, -48(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: std r0, 64(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: la r4, internal_tlv_long[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r3, 0(r4) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: addi r3, r3, 9 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: std r3, 0(r4) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: addi r1, r1, 48 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: blr |
| ; |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-LABEL: testLong2: |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: stdu r1, -48(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: std r0, 64(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addis r3, L..C0@u(r2) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r3, L..C0@l(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: la r4, internal_tlv_long[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r3, 0(r4) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addi r3, r3, 9 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: std r3, 0(r4) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addi r1, r1, 48 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-LABEL: testLong2: |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: stdu r1, -48(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: std r0, 64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r4, L..C10(r2) # target-flags(ppc-tlsld) @internal_tlv_long |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: ldx r5, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: addi r5, r5, 9 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: stdx r5, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: addi r1, r1, 48 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-LABEL: testLong2: |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: stdu r1, -48(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: addis r3, L..C0@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: addis r6, L..C10@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: std r0, 64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r3, L..C0@l(r3) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r4, L..C10@l(r6) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: ldx r5, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: addi r5, r5, 9 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: stdx r5, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: addi r1, r1, 48 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-LABEL: testLong2: |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: stdu r1, -48(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: std r0, 64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r4, L..C10(r2) # target-flags(ppc-tlsld) @internal_tlv_long |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: add r4, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r3, 0(r4) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: addi r3, r3, 9 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: std r3, 0(r4) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: addi r1, r1, 48 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-LABEL: testLong2: |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: stdu r1, -64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: std r0, 80(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addis r3, L..C10@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: std r3, 56(r1) # 8-byte Folded Spill |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addis r3, L..C1@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r3, L..C1@l(r3) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r4, 56(r1) # 8-byte Folded Reload |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r4, L..C10@l(r4) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: add r4, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r3, 0(r4) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addi r3, r3, 9 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: std r3, 0(r4) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addi r1, r1, 64 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: blr |
| entry: |
| %tlv_addr = tail call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @internal_tlv_long) |
| %value = load i64, ptr %tlv_addr, align 8 |
| %add = add nsw i64 %value, 9 |
| store i64 %add, ptr %tlv_addr, align 8 |
| ret void |
| } |
| |
| define i32 @testLong3() { |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-LABEL: testLong3: |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: stdu r1, -48(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: std r0, 64(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r3, tlv_long[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: addi r1, r1, 48 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: blr |
| ; |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-LABEL: testLong3: |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: stdu r1, -48(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: addis r3, L..C0@u(r2) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: std r0, 64(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r3, L..C0@l(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r3, tlv_long[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: addi r1, r1, 48 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: blr |
| ; |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-LABEL: testLong3: |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: stdu r1, -48(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: std r0, 64(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: la r3, tlv_long[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r3, 0(r3) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: # kill: def $r3 killed $r3 killed $x3 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: clrldi r3, r3, 32 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: addi r1, r1, 48 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: blr |
| ; |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-LABEL: testLong3: |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: stdu r1, -48(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: std r0, 64(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addis r3, L..C0@u(r2) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r3, L..C0@l(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: la r3, tlv_long[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r3, 0(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: # kill: def $r3 killed $r3 killed $x3 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: clrldi r3, r3, 32 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addi r1, r1, 48 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-LABEL: testLong3: |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: stdu r1, -48(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: std r0, 64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r4, L..C9(r2) # target-flags(ppc-tlsld) @tlv_long |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: ldx r3, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: addi r1, r1, 48 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-LABEL: testLong3: |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: stdu r1, -48(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: addis r3, L..C0@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: addis r6, L..C9@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: std r0, 64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r3, L..C0@l(r3) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r4, L..C9@l(r6) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: ldx r3, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: addi r1, r1, 48 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-LABEL: testLong3: |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: stdu r1, -48(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: std r0, 64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r4, L..C9(r2) # target-flags(ppc-tlsld) @tlv_long |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: add r3, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r3, 0(r3) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: # kill: def $r3 killed $r3 killed $x3 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: clrldi r3, r3, 32 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: addi r1, r1, 48 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-LABEL: testLong3: |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: stdu r1, -64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: std r0, 80(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addis r3, L..C9@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: std r3, 56(r1) # 8-byte Folded Spill |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addis r3, L..C1@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r3, L..C1@l(r3) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r4, 56(r1) # 8-byte Folded Reload |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r4, L..C9@l(r4) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: add r3, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r3, 0(r3) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: # kill: def $r3 killed $r3 killed $x3 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: clrldi r3, r3, 32 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addi r1, r1, 64 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: blr |
| entry: |
| %tlv_addr = tail call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @tlv_long) |
| %value = load i64, ptr %tlv_addr, align 8 |
| %conv = trunc i64 %value to i32 |
| ret i32 %conv |
| } |
| |
| define void @testFloat1(float noundef %x) { |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-LABEL: testFloat1: |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: stdu r1, -48(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: vspltisw v2, 1 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: std r0, 64(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: vspltisw v3, 8 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: xvcvsxwdp vs0, vs34 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: lfs f1, tlv_float[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: fadds f0, f1, f0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: xvcvsxwdp vs1, vs35 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: fadds f0, f0, f1 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: stfs f0, tlv_float[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: addi r1, r1, 48 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: blr |
| ; |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-LABEL: testFloat1: |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: stdu r1, -48(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: vspltisw v2, 1 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: addis r3, L..C0@u(r2) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: std r0, 64(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r3, L..C0@l(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: vspltisw v3, 8 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: xvcvsxwdp vs0, vs34 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: lfs f1, tlv_float[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: fadds f0, f1, f0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: xvcvsxwdp vs1, vs35 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: fadds f0, f0, f1 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: stfs f0, tlv_float[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: addi r1, r1, 48 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: blr |
| ; |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-LABEL: testFloat1: |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: stdu r1, -48(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: std r0, 64(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: la r3, tlv_float[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: lfs f0, 0(r3) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r4, L..C2(r2) # %const.1 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: lfs f1, 0(r4) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: fadds f0, f0, f1 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r4, L..C3(r2) # %const.0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: lfs f1, 0(r4) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: fadds f0, f0, f1 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: stfs f0, 0(r3) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: addi r1, r1, 48 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: blr |
| ; |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-LABEL: testFloat1: |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: stdu r1, -48(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: std r0, 64(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addis r3, L..C0@u(r2) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r3, L..C0@l(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: la r3, tlv_float[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: lfs f0, 0(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addis r4, L..C2@u(r2) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r4, L..C2@l(r4) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: lfs f1, 0(r4) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: fadds f0, f0, f1 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addis r4, L..C3@u(r2) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r4, L..C3@l(r4) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: lfs f1, 0(r4) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: fadds f0, f0, f1 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: stfs f0, 0(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addi r1, r1, 48 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-LABEL: testFloat1: |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: stdu r1, -48(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: vspltisw v2, 1 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: std r0, 64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: vspltisw v3, 8 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: xvcvsxwdp vs0, vs34 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r4, L..C11(r2) # target-flags(ppc-tlsld) @tlv_float |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: lfsx f1, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: fadds f0, f1, f0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: xvcvsxwdp vs1, vs35 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: fadds f0, f0, f1 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: stfsx f0, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: addi r1, r1, 48 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-LABEL: testFloat1: |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: stdu r1, -48(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: addis r3, L..C0@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: vspltisw v2, 1 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: addis r6, L..C11@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r3, L..C0@l(r3) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: std r0, 64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: vspltisw v3, 8 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: xvcvsxwdp vs0, vs34 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r4, L..C11@l(r6) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: lfsx f1, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: fadds f0, f1, f0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: xvcvsxwdp vs1, vs35 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: fadds f0, f0, f1 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: stfsx f0, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: addi r1, r1, 48 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-LABEL: testFloat1: |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: stdu r1, -48(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: std r0, 64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r4, L..C11(r2) # target-flags(ppc-tlsld) @tlv_float |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: add r3, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: lfs f0, 0(r3) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r4, L..C12(r2) # %const.1 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: lfs f1, 0(r4) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: fadds f0, f0, f1 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r4, L..C13(r2) # %const.0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: lfs f1, 0(r4) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: fadds f0, f0, f1 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: stfs f0, 0(r3) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: addi r1, r1, 48 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-LABEL: testFloat1: |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: stdu r1, -64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: std r0, 80(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addis r3, L..C11@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: std r3, 56(r1) # 8-byte Folded Spill |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addis r3, L..C1@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r3, L..C1@l(r3) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r4, 56(r1) # 8-byte Folded Reload |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r4, L..C11@l(r4) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: add r3, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: lfs f0, 0(r3) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addis r4, L..C12@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r4, L..C12@l(r4) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: lfs f1, 0(r4) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: fadds f0, f0, f1 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addis r4, L..C13@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r4, L..C13@l(r4) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: lfs f1, 0(r4) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: fadds f0, f0, f1 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: stfs f0, 0(r3) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addi r1, r1, 64 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: blr |
| entry: |
| %tlv_addr = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @tlv_float) |
| %value = load float, ptr %tlv_addr, align 4 |
| %inc = fadd float %value, 1.000000e+00 |
| %add = fadd float %inc, 8.000000e+00 |
| store float %add, ptr %tlv_addr, align 4 |
| ret void |
| } |
| |
| define i32 @testFloat2() { |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-LABEL: testFloat2: |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: stdu r1, -64(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: std r0, 80(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: lfs f0, tlv_float[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: addi r3, r1, 60 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: xscvdpsxws f0, f0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: stfiwx f0, 0, r3 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: lwz r3, 60(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: addi r1, r1, 64 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: blr |
| ; |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-LABEL: testFloat2: |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: stdu r1, -64(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: addis r3, L..C0@u(r2) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: std r0, 80(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r3, L..C0@l(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: lfs f0, tlv_float[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: addi r3, r1, 60 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: xscvdpsxws f0, f0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: stfiwx f0, 0, r3 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: lwz r3, 60(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: addi r1, r1, 64 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: blr |
| ; |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-LABEL: testFloat2: |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: stdu r1, -64(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: std r0, 80(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: la r3, tlv_float[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: lfs f0, 0(r3) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: fctiwz f0, f0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: stfd f0, 56(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: lwa r3, 60(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: clrldi r3, r3, 32 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: addi r1, r1, 64 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: blr |
| ; |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-LABEL: testFloat2: |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: stdu r1, -64(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: std r0, 80(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addis r3, L..C0@u(r2) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r3, L..C0@l(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: la r3, tlv_float[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: lfs f0, 0(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: fctiwz f0, f0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: stfd f0, 56(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: lwa r3, 60(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: clrldi r3, r3, 32 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addi r1, r1, 64 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-LABEL: testFloat2: |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: stdu r1, -64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: std r0, 80(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r4, L..C11(r2) # target-flags(ppc-tlsld) @tlv_float |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: lfsx f0, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: addi r3, r1, 60 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: xscvdpsxws f0, f0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: stfiwx f0, 0, r3 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: lwz r3, 60(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: addi r1, r1, 64 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-LABEL: testFloat2: |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: stdu r1, -64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: addis r3, L..C0@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: addis r6, L..C11@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: std r0, 80(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r3, L..C0@l(r3) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r4, L..C11@l(r6) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: lfsx f0, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: addi r3, r1, 60 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: xscvdpsxws f0, f0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: stfiwx f0, 0, r3 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: lwz r3, 60(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: addi r1, r1, 64 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-LABEL: testFloat2: |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: stdu r1, -64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: std r0, 80(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r4, L..C11(r2) # target-flags(ppc-tlsld) @tlv_float |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: add r3, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: lfs f0, 0(r3) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: fctiwz f0, f0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: stfd f0, 56(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: lwa r3, 60(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: clrldi r3, r3, 32 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: addi r1, r1, 64 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-LABEL: testFloat2: |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: stdu r1, -64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: std r0, 80(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addis r3, L..C11@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: std r3, 48(r1) # 8-byte Folded Spill |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addis r3, L..C1@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r3, L..C1@l(r3) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r4, 48(r1) # 8-byte Folded Reload |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r4, L..C11@l(r4) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: add r3, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: lfs f0, 0(r3) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: fctiwz f0, f0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: stfd f0, 56(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: lwa r3, 60(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: clrldi r3, r3, 32 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addi r1, r1, 64 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: blr |
| entry: |
| %tlv_addr = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @tlv_float) |
| %value = load float, ptr %tlv_addr, align 4 |
| %conv = fptosi float %value to i32 |
| ret i32 %conv |
| } |
| |
| define void @testDouble1(double noundef %x) { |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-LABEL: testDouble1: |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: stdu r1, -48(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: std r0, 64(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: stfd f1, internal_tlv_double[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: addi r1, r1, 48 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: blr |
| ; |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-LABEL: testDouble1: |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: stdu r1, -48(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: addis r3, L..C0@u(r2) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: std r0, 64(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r3, L..C0@l(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: stfd f1, internal_tlv_double[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: addi r1, r1, 48 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: blr |
| ; |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-LABEL: testDouble1: |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: stdu r1, -48(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: std r0, 64(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: la r3, internal_tlv_double[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: stxsdx f1, 0, r3 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: addi r1, r1, 48 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: blr |
| ; |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-LABEL: testDouble1: |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: stdu r1, -48(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: std r0, 64(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addis r3, L..C0@u(r2) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r3, L..C0@l(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: la r3, internal_tlv_double[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: stxsdx f1, 0, r3 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addi r1, r1, 48 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-LABEL: testDouble1: |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: stdu r1, -48(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: std r0, 64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r4, L..C12(r2) # target-flags(ppc-tlsld) @internal_tlv_double |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: stfdx f1, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: addi r1, r1, 48 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-LABEL: testDouble1: |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: stdu r1, -48(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: addis r3, L..C0@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: addis r6, L..C12@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: std r0, 64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r3, L..C0@l(r3) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r4, L..C12@l(r6) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: stfdx f1, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: addi r1, r1, 48 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-LABEL: testDouble1: |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: stdu r1, -48(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: std r0, 64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r4, L..C14(r2) # target-flags(ppc-tlsld) @internal_tlv_double |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: add r3, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: stxsdx f1, 0, r3 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: addi r1, r1, 48 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-LABEL: testDouble1: |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: stdu r1, -64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: std r0, 80(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addis r3, L..C14@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: std r3, 56(r1) # 8-byte Folded Spill |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addis r3, L..C1@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r3, L..C1@l(r3) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r4, 56(r1) # 8-byte Folded Reload |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r4, L..C14@l(r4) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: add r3, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: stxsdx f1, 0, r3 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addi r1, r1, 64 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: blr |
| entry: |
| %tlv_addr = tail call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @internal_tlv_double) |
| store double %x, ptr %tlv_addr, align 8 |
| ret void |
| } |
| |
| define i32 @testDouble2() { |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-LABEL: testDouble2: |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: stdu r1, -64(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: std r0, 80(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: lfd f0, internal_tlv_double[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: addi r3, r1, 60 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: xscvdpsxws f0, f0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: stfiwx f0, 0, r3 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: lwz r3, 60(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: addi r1, r1, 64 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT: blr |
| ; |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-LABEL: testDouble2: |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: stdu r1, -64(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: addis r3, L..C0@u(r2) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: std r0, 80(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r3, L..C0@l(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: lfd f0, internal_tlv_double[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: addi r3, r1, 60 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: xscvdpsxws f0, f0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: stfiwx f0, 0, r3 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: lwz r3, 60(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: addi r1, r1, 64 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT: blr |
| ; |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-LABEL: testDouble2: |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: stdu r1, -64(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: std r0, 80(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: la r3, internal_tlv_double[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: lfd f0, 0(r3) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: # kill: def $f1 killed $f0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: xscvdpsxws f0, f0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: addi r3, r1, 52 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: stfiwx f0, 0, r3 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: lwz r3, 52(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: clrldi r3, r3, 32 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: addi r1, r1, 64 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: blr |
| ; |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-LABEL: testDouble2: |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0: # %bb.0: # %entry |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mflr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: stdu r1, -64(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: std r0, 80(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addis r3, L..C0@u(r2) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r3, L..C0@l(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: la r3, internal_tlv_double[TL]@ld(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: lfd f0, 0(r3) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: # kill: def $f1 killed $f0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: xscvdpsxws f0, f0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addi r3, r1, 52 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: stfiwx f0, 0, r3 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: lwz r3, 52(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: clrldi r3, r3, 32 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addi r1, r1, 64 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r0, 16(r1) |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mtlr r0 |
| ; SMALL-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-LABEL: testDouble2: |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: stdu r1, -64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: std r0, 80(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r4, L..C12(r2) # target-flags(ppc-tlsld) @internal_tlv_double |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: lfdx f0, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: addi r3, r1, 60 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: xscvdpsxws f0, f0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: stfiwx f0, 0, r3 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: lwz r3, 60(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: addi r1, r1, 64 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-LABEL: testDouble2: |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: stdu r1, -64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: addis r3, L..C0@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: addis r6, L..C12@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: std r0, 80(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r3, L..C0@l(r3) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r4, L..C12@l(r6) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: lfdx f0, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: addi r3, r1, 60 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: xscvdpsxws f0, f0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: stfiwx f0, 0, r3 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: lwz r3, 60(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: addi r1, r1, 64 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-LABEL: testDouble2: |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: stdu r1, -64(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: std r0, 80(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML" |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r4, L..C14(r2) # target-flags(ppc-tlsld) @internal_tlv_double |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: lfdx f0, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: xscvdpsxws f0, f0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: addi r3, r1, 52 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: stfiwx f0, 0, r3 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: lwz r3, 52(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: clrldi r3, r3, 32 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: addi r1, r1, 64 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-SMALLCM64-O0-NEXT: blr |
| ; |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-LABEL: testDouble2: |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0: # %bb.0: # %entry |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mflr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: stdu r1, -80(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: std r0, 96(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addis r3, L..C14@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: std r3, 56(r1) # 8-byte Folded Spill |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addis r3, L..C1@u(r2) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r3, L..C1@l(r3) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: bla .__tls_get_mod[PR] |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r4, 56(r1) # 8-byte Folded Reload |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r4, L..C14@l(r4) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: lfdx f0, r3, r4 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: xscvdpsxws f0, f0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addi r3, r1, 68 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: stfiwx f0, 0, r3 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: lwz r3, 68(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: clrldi r3, r3, 32 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: addi r1, r1, 80 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: ld r0, 16(r1) |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: mtlr r0 |
| ; DEFAULT-LOCAL-DYNAMIC-LARGECM64-O0-NEXT: blr |
| entry: |
| %tlv_addr = tail call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @internal_tlv_double) |
| %value = load double, ptr %tlv_addr, align 8 |
| %conv = fptosi double %value to i32 |
| ret i32 %conv |
| } |