1d5659808SAmy Kwan; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2 2d5659808SAmy Kwan; RUN: llc -verify-machineinstrs -mcpu=pwr7 -ppc-asm-full-reg-names \ 3d5659808SAmy Kwan; RUN: -mtriple powerpc64-ibm-aix-xcoff < %s | FileCheck %s \ 4d5659808SAmy Kwan; RUN: --check-prefix=SMALL64 5d5659808SAmy Kwan; RUN: llc -verify-machineinstrs -mcpu=pwr7 -ppc-asm-full-reg-names \ 6d5659808SAmy Kwan; RUN: -mtriple powerpc64-ibm-aix-xcoff --code-model=large < %s \ 7d5659808SAmy Kwan; RUN: | FileCheck %s --check-prefix=LARGE64 8f5ae0750SAmy Kwan; RUN: llc -verify-machineinstrs -mcpu=pwr7 -ppc-asm-full-reg-names \ 9f5ae0750SAmy Kwan; RUN: -mtriple powerpc-ibm-aix-xcoff < %s | FileCheck %s \ 10f5ae0750SAmy Kwan; RUN: --check-prefix=SMALL32 11f5ae0750SAmy Kwan; RUN: llc -verify-machineinstrs -mcpu=pwr7 -ppc-asm-full-reg-names \ 12f5ae0750SAmy Kwan; RUN: -mtriple powerpc-ibm-aix-xcoff --code-model=large < %s \ 13f5ae0750SAmy Kwan; RUN: | FileCheck %s --check-prefix=LARGE32 14d5659808SAmy Kwan 15d5659808SAmy Kwan@ThreadLocalVarInit = thread_local(localexec) global float 0x401D333340000000, align 4 16d5659808SAmy Kwan@VarInit = global float 0x4021666660000000, align 4 17d5659808SAmy Kwan@IThreadLocalVarUninit = internal thread_local(localexec) global float 0.000000e+00, align 4 18d5659808SAmy Kwan@IThreadLocalVarInit = internal thread_local(localexec) global float 0x4018CCCCC0000000, align 4 19d5659808SAmy Kwan@ThreadLocalVarUninit = thread_local(localexec) global float 0.000000e+00, align 4 20d5659808SAmy Kwandeclare nonnull ptr @llvm.threadlocal.address.p0(ptr nonnull) #1 21d5659808SAmy Kwan 22d5659808SAmy Kwandefine void @storeITLUninit(float noundef %x) { 23d5659808SAmy Kwan; SMALL64-LABEL: storeITLUninit: 24d5659808SAmy Kwan; SMALL64: # %bb.0: # %entry 25d5659808SAmy Kwan; SMALL64-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tprel) @IThreadLocalVarUninit 26598ccceaSAmy Kwan; SMALL64-NEXT: stfsx f1, r13, r3 27d5659808SAmy Kwan; SMALL64-NEXT: blr 28d5659808SAmy Kwan; 29d5659808SAmy Kwan; LARGE64-LABEL: storeITLUninit: 30d5659808SAmy Kwan; LARGE64: # %bb.0: # %entry 31d5659808SAmy Kwan; LARGE64-NEXT: addis r3, L..C0@u(r2) 32d5659808SAmy Kwan; LARGE64-NEXT: ld r3, L..C0@l(r3) 33598ccceaSAmy Kwan; LARGE64-NEXT: stfsx f1, r13, r3 34d5659808SAmy Kwan; LARGE64-NEXT: blr 35f5ae0750SAmy Kwan; 36f5ae0750SAmy Kwan; SMALL32-LABEL: storeITLUninit: 37f5ae0750SAmy Kwan; SMALL32: # %bb.0: # %entry 38f5ae0750SAmy Kwan; SMALL32-NEXT: mflr r0 39f5ae0750SAmy Kwan; SMALL32-NEXT: stwu r1, -32(r1) 40f5ae0750SAmy Kwan; SMALL32-NEXT: lwz r4, L..C0(r2) # target-flags(ppc-tprel) @IThreadLocalVarUninit 41f5ae0750SAmy Kwan; SMALL32-NEXT: bla .__get_tpointer[PR] 42f5ae0750SAmy Kwan; SMALL32-NEXT: stw r0, 40(r1) 43598ccceaSAmy Kwan; SMALL32-NEXT: stfsx f1, r3, r4 44f5ae0750SAmy Kwan; SMALL32-NEXT: addi r1, r1, 32 45f5ae0750SAmy Kwan; SMALL32-NEXT: lwz r0, 8(r1) 46f5ae0750SAmy Kwan; SMALL32-NEXT: mtlr r0 47f5ae0750SAmy Kwan; SMALL32-NEXT: blr 48f5ae0750SAmy Kwan; 49f5ae0750SAmy Kwan; LARGE32-LABEL: storeITLUninit: 50f5ae0750SAmy Kwan; LARGE32: # %bb.0: # %entry 51f5ae0750SAmy Kwan; LARGE32-NEXT: mflr r0 52f5ae0750SAmy Kwan; LARGE32-NEXT: stwu r1, -32(r1) 53f5ae0750SAmy Kwan; LARGE32-NEXT: stw r0, 40(r1) 54f5ae0750SAmy Kwan; LARGE32-NEXT: addis r3, L..C0@u(r2) 55f5ae0750SAmy Kwan; LARGE32-NEXT: lwz r4, L..C0@l(r3) 56f5ae0750SAmy Kwan; LARGE32-NEXT: bla .__get_tpointer[PR] 57598ccceaSAmy Kwan; LARGE32-NEXT: stfsx f1, r3, r4 58f5ae0750SAmy Kwan; LARGE32-NEXT: addi r1, r1, 32 59f5ae0750SAmy Kwan; LARGE32-NEXT: lwz r0, 8(r1) 60f5ae0750SAmy Kwan; LARGE32-NEXT: mtlr r0 61f5ae0750SAmy Kwan; LARGE32-NEXT: blr 62d5659808SAmy Kwanentry: 63d5659808SAmy Kwan %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @IThreadLocalVarUninit) 64d5659808SAmy Kwan store float %x, ptr %0, align 4 65d5659808SAmy Kwan ret void 66d5659808SAmy Kwan} 67d5659808SAmy Kwan 68d5659808SAmy Kwandefine void @storeITLInit(float noundef %x) { 69d5659808SAmy Kwan; SMALL64-LABEL: storeITLInit: 70d5659808SAmy Kwan; SMALL64: # %bb.0: # %entry 71d5659808SAmy Kwan; SMALL64-NEXT: ld r3, L..C1(r2) # target-flags(ppc-tprel) @IThreadLocalVarInit 72598ccceaSAmy Kwan; SMALL64-NEXT: stfsx f1, r13, r3 73d5659808SAmy Kwan; SMALL64-NEXT: blr 74d5659808SAmy Kwan; 75d5659808SAmy Kwan; LARGE64-LABEL: storeITLInit: 76d5659808SAmy Kwan; LARGE64: # %bb.0: # %entry 77d5659808SAmy Kwan; LARGE64-NEXT: addis r3, L..C1@u(r2) 78d5659808SAmy Kwan; LARGE64-NEXT: ld r3, L..C1@l(r3) 79598ccceaSAmy Kwan; LARGE64-NEXT: stfsx f1, r13, r3 80d5659808SAmy Kwan; LARGE64-NEXT: blr 81f5ae0750SAmy Kwan; 82f5ae0750SAmy Kwan; SMALL32-LABEL: storeITLInit: 83f5ae0750SAmy Kwan; SMALL32: # %bb.0: # %entry 84f5ae0750SAmy Kwan; SMALL32-NEXT: mflr r0 85f5ae0750SAmy Kwan; SMALL32-NEXT: stwu r1, -32(r1) 86f5ae0750SAmy Kwan; SMALL32-NEXT: lwz r4, L..C1(r2) # target-flags(ppc-tprel) @IThreadLocalVarInit 87f5ae0750SAmy Kwan; SMALL32-NEXT: bla .__get_tpointer[PR] 88f5ae0750SAmy Kwan; SMALL32-NEXT: stw r0, 40(r1) 89598ccceaSAmy Kwan; SMALL32-NEXT: stfsx f1, r3, r4 90f5ae0750SAmy Kwan; SMALL32-NEXT: addi r1, r1, 32 91f5ae0750SAmy Kwan; SMALL32-NEXT: lwz r0, 8(r1) 92f5ae0750SAmy Kwan; SMALL32-NEXT: mtlr r0 93f5ae0750SAmy Kwan; SMALL32-NEXT: blr 94f5ae0750SAmy Kwan; 95f5ae0750SAmy Kwan; LARGE32-LABEL: storeITLInit: 96f5ae0750SAmy Kwan; LARGE32: # %bb.0: # %entry 97f5ae0750SAmy Kwan; LARGE32-NEXT: mflr r0 98f5ae0750SAmy Kwan; LARGE32-NEXT: stwu r1, -32(r1) 99f5ae0750SAmy Kwan; LARGE32-NEXT: stw r0, 40(r1) 100f5ae0750SAmy Kwan; LARGE32-NEXT: addis r3, L..C1@u(r2) 101f5ae0750SAmy Kwan; LARGE32-NEXT: lwz r4, L..C1@l(r3) 102f5ae0750SAmy Kwan; LARGE32-NEXT: bla .__get_tpointer[PR] 103598ccceaSAmy Kwan; LARGE32-NEXT: stfsx f1, r3, r4 104f5ae0750SAmy Kwan; LARGE32-NEXT: addi r1, r1, 32 105f5ae0750SAmy Kwan; LARGE32-NEXT: lwz r0, 8(r1) 106f5ae0750SAmy Kwan; LARGE32-NEXT: mtlr r0 107f5ae0750SAmy Kwan; LARGE32-NEXT: blr 108d5659808SAmy Kwanentry: 109d5659808SAmy Kwan %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @IThreadLocalVarInit) 110d5659808SAmy Kwan store float %x, ptr %0, align 4 111d5659808SAmy Kwan ret void 112d5659808SAmy Kwan} 113d5659808SAmy Kwan 114d5659808SAmy Kwandefine void @storeTLUninit(float noundef %x) { 115d5659808SAmy Kwan; SMALL64-LABEL: storeTLUninit: 116d5659808SAmy Kwan; SMALL64: # %bb.0: # %entry 117d5659808SAmy Kwan; SMALL64-NEXT: ld r3, L..C2(r2) # target-flags(ppc-tprel) @ThreadLocalVarUninit 118598ccceaSAmy Kwan; SMALL64-NEXT: stfsx f1, r13, r3 119d5659808SAmy Kwan; SMALL64-NEXT: blr 120d5659808SAmy Kwan; 121d5659808SAmy Kwan; LARGE64-LABEL: storeTLUninit: 122d5659808SAmy Kwan; LARGE64: # %bb.0: # %entry 123d5659808SAmy Kwan; LARGE64-NEXT: addis r3, L..C2@u(r2) 124d5659808SAmy Kwan; LARGE64-NEXT: ld r3, L..C2@l(r3) 125598ccceaSAmy Kwan; LARGE64-NEXT: stfsx f1, r13, r3 126d5659808SAmy Kwan; LARGE64-NEXT: blr 127f5ae0750SAmy Kwan; 128f5ae0750SAmy Kwan; SMALL32-LABEL: storeTLUninit: 129f5ae0750SAmy Kwan; SMALL32: # %bb.0: # %entry 130f5ae0750SAmy Kwan; SMALL32-NEXT: mflr r0 131f5ae0750SAmy Kwan; SMALL32-NEXT: stwu r1, -32(r1) 132f5ae0750SAmy Kwan; SMALL32-NEXT: lwz r4, L..C2(r2) # target-flags(ppc-tprel) @ThreadLocalVarUninit 133f5ae0750SAmy Kwan; SMALL32-NEXT: bla .__get_tpointer[PR] 134f5ae0750SAmy Kwan; SMALL32-NEXT: stw r0, 40(r1) 135598ccceaSAmy Kwan; SMALL32-NEXT: stfsx f1, r3, r4 136f5ae0750SAmy Kwan; SMALL32-NEXT: addi r1, r1, 32 137f5ae0750SAmy Kwan; SMALL32-NEXT: lwz r0, 8(r1) 138f5ae0750SAmy Kwan; SMALL32-NEXT: mtlr r0 139f5ae0750SAmy Kwan; SMALL32-NEXT: blr 140f5ae0750SAmy Kwan; 141f5ae0750SAmy Kwan; LARGE32-LABEL: storeTLUninit: 142f5ae0750SAmy Kwan; LARGE32: # %bb.0: # %entry 143f5ae0750SAmy Kwan; LARGE32-NEXT: mflr r0 144f5ae0750SAmy Kwan; LARGE32-NEXT: stwu r1, -32(r1) 145f5ae0750SAmy Kwan; LARGE32-NEXT: stw r0, 40(r1) 146f5ae0750SAmy Kwan; LARGE32-NEXT: addis r3, L..C2@u(r2) 147f5ae0750SAmy Kwan; LARGE32-NEXT: lwz r4, L..C2@l(r3) 148f5ae0750SAmy Kwan; LARGE32-NEXT: bla .__get_tpointer[PR] 149598ccceaSAmy Kwan; LARGE32-NEXT: stfsx f1, r3, r4 150f5ae0750SAmy Kwan; LARGE32-NEXT: addi r1, r1, 32 151f5ae0750SAmy Kwan; LARGE32-NEXT: lwz r0, 8(r1) 152f5ae0750SAmy Kwan; LARGE32-NEXT: mtlr r0 153f5ae0750SAmy Kwan; LARGE32-NEXT: blr 154d5659808SAmy Kwanentry: 155d5659808SAmy Kwan %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @ThreadLocalVarUninit) 156d5659808SAmy Kwan store float %x, ptr %0, align 4 157d5659808SAmy Kwan ret void 158d5659808SAmy Kwan} 159d5659808SAmy Kwan 160d5659808SAmy Kwandefine void @storeTLInit(float noundef %x) { 161d5659808SAmy Kwan; SMALL64-LABEL: storeTLInit: 162d5659808SAmy Kwan; SMALL64: # %bb.0: # %entry 163d5659808SAmy Kwan; SMALL64-NEXT: ld r3, L..C3(r2) # target-flags(ppc-tprel) @ThreadLocalVarInit 164598ccceaSAmy Kwan; SMALL64-NEXT: stfsx f1, r13, r3 165d5659808SAmy Kwan; SMALL64-NEXT: blr 166d5659808SAmy Kwan; 167d5659808SAmy Kwan; LARGE64-LABEL: storeTLInit: 168d5659808SAmy Kwan; LARGE64: # %bb.0: # %entry 169d5659808SAmy Kwan; LARGE64-NEXT: addis r3, L..C3@u(r2) 170d5659808SAmy Kwan; LARGE64-NEXT: ld r3, L..C3@l(r3) 171598ccceaSAmy Kwan; LARGE64-NEXT: stfsx f1, r13, r3 172d5659808SAmy Kwan; LARGE64-NEXT: blr 173f5ae0750SAmy Kwan; 174f5ae0750SAmy Kwan; SMALL32-LABEL: storeTLInit: 175f5ae0750SAmy Kwan; SMALL32: # %bb.0: # %entry 176f5ae0750SAmy Kwan; SMALL32-NEXT: mflr r0 177f5ae0750SAmy Kwan; SMALL32-NEXT: stwu r1, -32(r1) 178f5ae0750SAmy Kwan; SMALL32-NEXT: lwz r4, L..C3(r2) # target-flags(ppc-tprel) @ThreadLocalVarInit 179f5ae0750SAmy Kwan; SMALL32-NEXT: bla .__get_tpointer[PR] 180f5ae0750SAmy Kwan; SMALL32-NEXT: stw r0, 40(r1) 181598ccceaSAmy Kwan; SMALL32-NEXT: stfsx f1, r3, r4 182f5ae0750SAmy Kwan; SMALL32-NEXT: addi r1, r1, 32 183f5ae0750SAmy Kwan; SMALL32-NEXT: lwz r0, 8(r1) 184f5ae0750SAmy Kwan; SMALL32-NEXT: mtlr r0 185f5ae0750SAmy Kwan; SMALL32-NEXT: blr 186f5ae0750SAmy Kwan; 187f5ae0750SAmy Kwan; LARGE32-LABEL: storeTLInit: 188f5ae0750SAmy Kwan; LARGE32: # %bb.0: # %entry 189f5ae0750SAmy Kwan; LARGE32-NEXT: mflr r0 190f5ae0750SAmy Kwan; LARGE32-NEXT: stwu r1, -32(r1) 191f5ae0750SAmy Kwan; LARGE32-NEXT: stw r0, 40(r1) 192f5ae0750SAmy Kwan; LARGE32-NEXT: addis r3, L..C3@u(r2) 193f5ae0750SAmy Kwan; LARGE32-NEXT: lwz r4, L..C3@l(r3) 194f5ae0750SAmy Kwan; LARGE32-NEXT: bla .__get_tpointer[PR] 195598ccceaSAmy Kwan; LARGE32-NEXT: stfsx f1, r3, r4 196f5ae0750SAmy Kwan; LARGE32-NEXT: addi r1, r1, 32 197f5ae0750SAmy Kwan; LARGE32-NEXT: lwz r0, 8(r1) 198f5ae0750SAmy Kwan; LARGE32-NEXT: mtlr r0 199f5ae0750SAmy Kwan; LARGE32-NEXT: blr 200d5659808SAmy Kwanentry: 201d5659808SAmy Kwan %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @ThreadLocalVarInit) 202d5659808SAmy Kwan store float %x, ptr %0, align 4 203d5659808SAmy Kwan ret void 204d5659808SAmy Kwan} 205d5659808SAmy Kwan 206d5659808SAmy Kwandefine float @loadITLUninit() { 207d5659808SAmy Kwan; SMALL64-LABEL: loadITLUninit: 208d5659808SAmy Kwan; SMALL64: # %bb.0: # %entry 209d5659808SAmy Kwan; SMALL64-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tprel) @IThreadLocalVarUninit 210598ccceaSAmy Kwan; SMALL64-NEXT: lfsx f1, r13, r3 211d5659808SAmy Kwan; SMALL64-NEXT: blr 212d5659808SAmy Kwan; 213d5659808SAmy Kwan; LARGE64-LABEL: loadITLUninit: 214d5659808SAmy Kwan; LARGE64: # %bb.0: # %entry 215d5659808SAmy Kwan; LARGE64-NEXT: addis r3, L..C0@u(r2) 216d5659808SAmy Kwan; LARGE64-NEXT: ld r3, L..C0@l(r3) 217598ccceaSAmy Kwan; LARGE64-NEXT: lfsx f1, r13, r3 218d5659808SAmy Kwan; LARGE64-NEXT: blr 219f5ae0750SAmy Kwan; 220f5ae0750SAmy Kwan; SMALL32-LABEL: loadITLUninit: 221f5ae0750SAmy Kwan; SMALL32: # %bb.0: # %entry 222f5ae0750SAmy Kwan; SMALL32-NEXT: mflr r0 223f5ae0750SAmy Kwan; SMALL32-NEXT: stwu r1, -32(r1) 224f5ae0750SAmy Kwan; SMALL32-NEXT: lwz r4, L..C0(r2) # target-flags(ppc-tprel) @IThreadLocalVarUninit 225f5ae0750SAmy Kwan; SMALL32-NEXT: stw r0, 40(r1) 226598ccceaSAmy Kwan; SMALL32-NEXT: bla .__get_tpointer[PR] 227598ccceaSAmy Kwan; SMALL32-NEXT: lfsx f1, r3, r4 228f5ae0750SAmy Kwan; SMALL32-NEXT: addi r1, r1, 32 229f5ae0750SAmy Kwan; SMALL32-NEXT: lwz r0, 8(r1) 230f5ae0750SAmy Kwan; SMALL32-NEXT: mtlr r0 231f5ae0750SAmy Kwan; SMALL32-NEXT: blr 232f5ae0750SAmy Kwan; 233f5ae0750SAmy Kwan; LARGE32-LABEL: loadITLUninit: 234f5ae0750SAmy Kwan; LARGE32: # %bb.0: # %entry 235f5ae0750SAmy Kwan; LARGE32-NEXT: mflr r0 236f5ae0750SAmy Kwan; LARGE32-NEXT: stwu r1, -32(r1) 237f5ae0750SAmy Kwan; LARGE32-NEXT: stw r0, 40(r1) 238f5ae0750SAmy Kwan; LARGE32-NEXT: addis r3, L..C0@u(r2) 239f5ae0750SAmy Kwan; LARGE32-NEXT: lwz r4, L..C0@l(r3) 240f5ae0750SAmy Kwan; LARGE32-NEXT: bla .__get_tpointer[PR] 241598ccceaSAmy Kwan; LARGE32-NEXT: lfsx f1, r3, r4 242f5ae0750SAmy Kwan; LARGE32-NEXT: addi r1, r1, 32 243f5ae0750SAmy Kwan; LARGE32-NEXT: lwz r0, 8(r1) 244f5ae0750SAmy Kwan; LARGE32-NEXT: mtlr r0 245f5ae0750SAmy Kwan; LARGE32-NEXT: blr 246d5659808SAmy Kwanentry: 247d5659808SAmy Kwan %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @IThreadLocalVarUninit) 248d5659808SAmy Kwan %1 = load float, ptr %0, align 4 249d5659808SAmy Kwan ret float %1 250d5659808SAmy Kwan} 251d5659808SAmy Kwan 252d5659808SAmy Kwandefine float @loadITLUninit2() { 253d5659808SAmy Kwan; SMALL64-LABEL: loadITLUninit2: 254d5659808SAmy Kwan; SMALL64: # %bb.0: # %entry 255d5659808SAmy Kwan; SMALL64-NEXT: ld r3, L..C0(r2) # target-flags(ppc-tprel) @IThreadLocalVarUninit 256598ccceaSAmy Kwan; SMALL64-NEXT: lfsx f0, r13, r3 257*69b056d5SQiu Chaofan; SMALL64-NEXT: ld r3, L..C4(r2) # @VarInit 258*69b056d5SQiu Chaofan; SMALL64-NEXT: lfs f1, 0(r3) 259d5659808SAmy Kwan; SMALL64-NEXT: fadds f1, f0, f1 260d5659808SAmy Kwan; SMALL64-NEXT: blr 261d5659808SAmy Kwan; 262d5659808SAmy Kwan; LARGE64-LABEL: loadITLUninit2: 263d5659808SAmy Kwan; LARGE64: # %bb.0: # %entry 264d5659808SAmy Kwan; LARGE64-NEXT: addis r3, L..C0@u(r2) 265d5659808SAmy Kwan; LARGE64-NEXT: ld r3, L..C0@l(r3) 266598ccceaSAmy Kwan; LARGE64-NEXT: lfsx f0, r13, r3 267*69b056d5SQiu Chaofan; LARGE64-NEXT: addis r3, L..C4@u(r2) 268*69b056d5SQiu Chaofan; LARGE64-NEXT: ld r3, L..C4@l(r3) 269*69b056d5SQiu Chaofan; LARGE64-NEXT: lfs f1, 0(r3) 270d5659808SAmy Kwan; LARGE64-NEXT: fadds f1, f0, f1 271d5659808SAmy Kwan; LARGE64-NEXT: blr 272f5ae0750SAmy Kwan; 273f5ae0750SAmy Kwan; SMALL32-LABEL: loadITLUninit2: 274f5ae0750SAmy Kwan; SMALL32: # %bb.0: # %entry 275f5ae0750SAmy Kwan; SMALL32-NEXT: mflr r0 276f5ae0750SAmy Kwan; SMALL32-NEXT: stwu r1, -32(r1) 277f5ae0750SAmy Kwan; SMALL32-NEXT: lwz r4, L..C0(r2) # target-flags(ppc-tprel) @IThreadLocalVarUninit 278f5ae0750SAmy Kwan; SMALL32-NEXT: stw r0, 40(r1) 279598ccceaSAmy Kwan; SMALL32-NEXT: bla .__get_tpointer[PR] 280598ccceaSAmy Kwan; SMALL32-NEXT: lfsx f0, r3, r4 281*69b056d5SQiu Chaofan; SMALL32-NEXT: lwz r3, L..C4(r2) # @VarInit 282*69b056d5SQiu Chaofan; SMALL32-NEXT: lfs f1, 0(r3) 283f5ae0750SAmy Kwan; SMALL32-NEXT: fadds f1, f0, f1 284f5ae0750SAmy Kwan; SMALL32-NEXT: addi r1, r1, 32 285f5ae0750SAmy Kwan; SMALL32-NEXT: lwz r0, 8(r1) 286f5ae0750SAmy Kwan; SMALL32-NEXT: mtlr r0 287f5ae0750SAmy Kwan; SMALL32-NEXT: blr 288f5ae0750SAmy Kwan; 289f5ae0750SAmy Kwan; LARGE32-LABEL: loadITLUninit2: 290f5ae0750SAmy Kwan; LARGE32: # %bb.0: # %entry 291f5ae0750SAmy Kwan; LARGE32-NEXT: mflr r0 292f5ae0750SAmy Kwan; LARGE32-NEXT: stwu r1, -32(r1) 293f5ae0750SAmy Kwan; LARGE32-NEXT: stw r0, 40(r1) 294f5ae0750SAmy Kwan; LARGE32-NEXT: addis r3, L..C0@u(r2) 295f5ae0750SAmy Kwan; LARGE32-NEXT: lwz r4, L..C0@l(r3) 296f5ae0750SAmy Kwan; LARGE32-NEXT: bla .__get_tpointer[PR] 297598ccceaSAmy Kwan; LARGE32-NEXT: lfsx f0, r3, r4 298f5ae0750SAmy Kwan; LARGE32-NEXT: addis r3, L..C4@u(r2) 299f5ae0750SAmy Kwan; LARGE32-NEXT: lwz r3, L..C4@l(r3) 300f5ae0750SAmy Kwan; LARGE32-NEXT: lfs f1, 0(r3) 301f5ae0750SAmy Kwan; LARGE32-NEXT: fadds f1, f0, f1 302f5ae0750SAmy Kwan; LARGE32-NEXT: addi r1, r1, 32 303f5ae0750SAmy Kwan; LARGE32-NEXT: lwz r0, 8(r1) 304f5ae0750SAmy Kwan; LARGE32-NEXT: mtlr r0 305f5ae0750SAmy Kwan; LARGE32-NEXT: blr 306d5659808SAmy Kwanentry: 307d5659808SAmy Kwan %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @IThreadLocalVarUninit) 308d5659808SAmy Kwan %1 = load float, ptr %0, align 4 309d5659808SAmy Kwan %2 = load float, ptr @VarInit, align 4 310d5659808SAmy Kwan %add = fadd float %1, %2 311d5659808SAmy Kwan ret float %add 312d5659808SAmy Kwan} 313d5659808SAmy Kwan 314d5659808SAmy Kwandefine float @loadITLInit() { 315d5659808SAmy Kwan; SMALL64-LABEL: loadITLInit: 316d5659808SAmy Kwan; SMALL64: # %bb.0: # %entry 317d5659808SAmy Kwan; SMALL64-NEXT: ld r3, L..C1(r2) # target-flags(ppc-tprel) @IThreadLocalVarInit 318598ccceaSAmy Kwan; SMALL64-NEXT: lfsx f1, r13, r3 319d5659808SAmy Kwan; SMALL64-NEXT: blr 320d5659808SAmy Kwan; 321d5659808SAmy Kwan; LARGE64-LABEL: loadITLInit: 322d5659808SAmy Kwan; LARGE64: # %bb.0: # %entry 323d5659808SAmy Kwan; LARGE64-NEXT: addis r3, L..C1@u(r2) 324d5659808SAmy Kwan; LARGE64-NEXT: ld r3, L..C1@l(r3) 325598ccceaSAmy Kwan; LARGE64-NEXT: lfsx f1, r13, r3 326d5659808SAmy Kwan; LARGE64-NEXT: blr 327f5ae0750SAmy Kwan; 328f5ae0750SAmy Kwan; SMALL32-LABEL: loadITLInit: 329f5ae0750SAmy Kwan; SMALL32: # %bb.0: # %entry 330f5ae0750SAmy Kwan; SMALL32-NEXT: mflr r0 331f5ae0750SAmy Kwan; SMALL32-NEXT: stwu r1, -32(r1) 332f5ae0750SAmy Kwan; SMALL32-NEXT: lwz r4, L..C1(r2) # target-flags(ppc-tprel) @IThreadLocalVarInit 333f5ae0750SAmy Kwan; SMALL32-NEXT: stw r0, 40(r1) 334598ccceaSAmy Kwan; SMALL32-NEXT: bla .__get_tpointer[PR] 335598ccceaSAmy Kwan; SMALL32-NEXT: lfsx f1, r3, r4 336f5ae0750SAmy Kwan; SMALL32-NEXT: addi r1, r1, 32 337f5ae0750SAmy Kwan; SMALL32-NEXT: lwz r0, 8(r1) 338f5ae0750SAmy Kwan; SMALL32-NEXT: mtlr r0 339f5ae0750SAmy Kwan; SMALL32-NEXT: blr 340f5ae0750SAmy Kwan; 341f5ae0750SAmy Kwan; LARGE32-LABEL: loadITLInit: 342f5ae0750SAmy Kwan; LARGE32: # %bb.0: # %entry 343f5ae0750SAmy Kwan; LARGE32-NEXT: mflr r0 344f5ae0750SAmy Kwan; LARGE32-NEXT: stwu r1, -32(r1) 345f5ae0750SAmy Kwan; LARGE32-NEXT: stw r0, 40(r1) 346f5ae0750SAmy Kwan; LARGE32-NEXT: addis r3, L..C1@u(r2) 347f5ae0750SAmy Kwan; LARGE32-NEXT: lwz r4, L..C1@l(r3) 348f5ae0750SAmy Kwan; LARGE32-NEXT: bla .__get_tpointer[PR] 349598ccceaSAmy Kwan; LARGE32-NEXT: lfsx f1, r3, r4 350f5ae0750SAmy Kwan; LARGE32-NEXT: addi r1, r1, 32 351f5ae0750SAmy Kwan; LARGE32-NEXT: lwz r0, 8(r1) 352f5ae0750SAmy Kwan; LARGE32-NEXT: mtlr r0 353f5ae0750SAmy Kwan; LARGE32-NEXT: blr 354d5659808SAmy Kwanentry: 355d5659808SAmy Kwan %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @IThreadLocalVarInit) 356d5659808SAmy Kwan %1 = load float, ptr %0, align 4 357d5659808SAmy Kwan ret float %1 358d5659808SAmy Kwan} 359d5659808SAmy Kwan 360d5659808SAmy Kwandefine float @loadITLInit2() { 361d5659808SAmy Kwan; SMALL64-LABEL: loadITLInit2: 362d5659808SAmy Kwan; SMALL64: # %bb.0: # %entry 363d5659808SAmy Kwan; SMALL64-NEXT: ld r3, L..C1(r2) # target-flags(ppc-tprel) @IThreadLocalVarInit 364598ccceaSAmy Kwan; SMALL64-NEXT: lfsx f0, r13, r3 365*69b056d5SQiu Chaofan; SMALL64-NEXT: ld r3, L..C4(r2) # @VarInit 366*69b056d5SQiu Chaofan; SMALL64-NEXT: lfs f1, 0(r3) 367d5659808SAmy Kwan; SMALL64-NEXT: fadds f1, f0, f1 368d5659808SAmy Kwan; SMALL64-NEXT: blr 369d5659808SAmy Kwan; 370d5659808SAmy Kwan; LARGE64-LABEL: loadITLInit2: 371d5659808SAmy Kwan; LARGE64: # %bb.0: # %entry 372d5659808SAmy Kwan; LARGE64-NEXT: addis r3, L..C1@u(r2) 373d5659808SAmy Kwan; LARGE64-NEXT: ld r3, L..C1@l(r3) 374598ccceaSAmy Kwan; LARGE64-NEXT: lfsx f0, r13, r3 375*69b056d5SQiu Chaofan; LARGE64-NEXT: addis r3, L..C4@u(r2) 376*69b056d5SQiu Chaofan; LARGE64-NEXT: ld r3, L..C4@l(r3) 377*69b056d5SQiu Chaofan; LARGE64-NEXT: lfs f1, 0(r3) 378d5659808SAmy Kwan; LARGE64-NEXT: fadds f1, f0, f1 379d5659808SAmy Kwan; LARGE64-NEXT: blr 380f5ae0750SAmy Kwan; 381f5ae0750SAmy Kwan; SMALL32-LABEL: loadITLInit2: 382f5ae0750SAmy Kwan; SMALL32: # %bb.0: # %entry 383f5ae0750SAmy Kwan; SMALL32-NEXT: mflr r0 384f5ae0750SAmy Kwan; SMALL32-NEXT: stwu r1, -32(r1) 385f5ae0750SAmy Kwan; SMALL32-NEXT: lwz r4, L..C1(r2) # target-flags(ppc-tprel) @IThreadLocalVarInit 386f5ae0750SAmy Kwan; SMALL32-NEXT: stw r0, 40(r1) 387598ccceaSAmy Kwan; SMALL32-NEXT: bla .__get_tpointer[PR] 388598ccceaSAmy Kwan; SMALL32-NEXT: lfsx f0, r3, r4 389*69b056d5SQiu Chaofan; SMALL32-NEXT: lwz r3, L..C4(r2) # @VarInit 390*69b056d5SQiu Chaofan; SMALL32-NEXT: lfs f1, 0(r3) 391f5ae0750SAmy Kwan; SMALL32-NEXT: fadds f1, f0, f1 392f5ae0750SAmy Kwan; SMALL32-NEXT: addi r1, r1, 32 393f5ae0750SAmy Kwan; SMALL32-NEXT: lwz r0, 8(r1) 394f5ae0750SAmy Kwan; SMALL32-NEXT: mtlr r0 395f5ae0750SAmy Kwan; SMALL32-NEXT: blr 396f5ae0750SAmy Kwan; 397f5ae0750SAmy Kwan; LARGE32-LABEL: loadITLInit2: 398f5ae0750SAmy Kwan; LARGE32: # %bb.0: # %entry 399f5ae0750SAmy Kwan; LARGE32-NEXT: mflr r0 400f5ae0750SAmy Kwan; LARGE32-NEXT: stwu r1, -32(r1) 401f5ae0750SAmy Kwan; LARGE32-NEXT: stw r0, 40(r1) 402f5ae0750SAmy Kwan; LARGE32-NEXT: addis r3, L..C1@u(r2) 403f5ae0750SAmy Kwan; LARGE32-NEXT: lwz r4, L..C1@l(r3) 404f5ae0750SAmy Kwan; LARGE32-NEXT: bla .__get_tpointer[PR] 405598ccceaSAmy Kwan; LARGE32-NEXT: lfsx f0, r3, r4 406f5ae0750SAmy Kwan; LARGE32-NEXT: addis r3, L..C4@u(r2) 407f5ae0750SAmy Kwan; LARGE32-NEXT: lwz r3, L..C4@l(r3) 408f5ae0750SAmy Kwan; LARGE32-NEXT: lfs f1, 0(r3) 409f5ae0750SAmy Kwan; LARGE32-NEXT: fadds f1, f0, f1 410f5ae0750SAmy Kwan; LARGE32-NEXT: addi r1, r1, 32 411f5ae0750SAmy Kwan; LARGE32-NEXT: lwz r0, 8(r1) 412f5ae0750SAmy Kwan; LARGE32-NEXT: mtlr r0 413f5ae0750SAmy Kwan; LARGE32-NEXT: blr 414d5659808SAmy Kwanentry: 415d5659808SAmy Kwan %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @IThreadLocalVarInit) 416d5659808SAmy Kwan %1 = load float, ptr %0, align 4 417d5659808SAmy Kwan %2 = load float, ptr @VarInit, align 4 418d5659808SAmy Kwan %add = fadd float %1, %2 419d5659808SAmy Kwan ret float %add 420d5659808SAmy Kwan} 421d5659808SAmy Kwan 422d5659808SAmy Kwandefine float @loadTLUninit() { 423d5659808SAmy Kwan; SMALL64-LABEL: loadTLUninit: 424d5659808SAmy Kwan; SMALL64: # %bb.0: # %entry 425d5659808SAmy Kwan; SMALL64-NEXT: ld r3, L..C2(r2) # target-flags(ppc-tprel) @ThreadLocalVarUninit 426598ccceaSAmy Kwan; SMALL64-NEXT: lfsx f1, r13, r3 427d5659808SAmy Kwan; SMALL64-NEXT: blr 428d5659808SAmy Kwan; 429d5659808SAmy Kwan; LARGE64-LABEL: loadTLUninit: 430d5659808SAmy Kwan; LARGE64: # %bb.0: # %entry 431d5659808SAmy Kwan; LARGE64-NEXT: addis r3, L..C2@u(r2) 432d5659808SAmy Kwan; LARGE64-NEXT: ld r3, L..C2@l(r3) 433598ccceaSAmy Kwan; LARGE64-NEXT: lfsx f1, r13, r3 434d5659808SAmy Kwan; LARGE64-NEXT: blr 435f5ae0750SAmy Kwan; 436f5ae0750SAmy Kwan; SMALL32-LABEL: loadTLUninit: 437f5ae0750SAmy Kwan; SMALL32: # %bb.0: # %entry 438f5ae0750SAmy Kwan; SMALL32-NEXT: mflr r0 439f5ae0750SAmy Kwan; SMALL32-NEXT: stwu r1, -32(r1) 440f5ae0750SAmy Kwan; SMALL32-NEXT: lwz r4, L..C2(r2) # target-flags(ppc-tprel) @ThreadLocalVarUninit 441f5ae0750SAmy Kwan; SMALL32-NEXT: stw r0, 40(r1) 442598ccceaSAmy Kwan; SMALL32-NEXT: bla .__get_tpointer[PR] 443598ccceaSAmy Kwan; SMALL32-NEXT: lfsx f1, r3, r4 444f5ae0750SAmy Kwan; SMALL32-NEXT: addi r1, r1, 32 445f5ae0750SAmy Kwan; SMALL32-NEXT: lwz r0, 8(r1) 446f5ae0750SAmy Kwan; SMALL32-NEXT: mtlr r0 447f5ae0750SAmy Kwan; SMALL32-NEXT: blr 448f5ae0750SAmy Kwan; 449f5ae0750SAmy Kwan; LARGE32-LABEL: loadTLUninit: 450f5ae0750SAmy Kwan; LARGE32: # %bb.0: # %entry 451f5ae0750SAmy Kwan; LARGE32-NEXT: mflr r0 452f5ae0750SAmy Kwan; LARGE32-NEXT: stwu r1, -32(r1) 453f5ae0750SAmy Kwan; LARGE32-NEXT: stw r0, 40(r1) 454f5ae0750SAmy Kwan; LARGE32-NEXT: addis r3, L..C2@u(r2) 455f5ae0750SAmy Kwan; LARGE32-NEXT: lwz r4, L..C2@l(r3) 456f5ae0750SAmy Kwan; LARGE32-NEXT: bla .__get_tpointer[PR] 457598ccceaSAmy Kwan; LARGE32-NEXT: lfsx f1, r3, r4 458f5ae0750SAmy Kwan; LARGE32-NEXT: addi r1, r1, 32 459f5ae0750SAmy Kwan; LARGE32-NEXT: lwz r0, 8(r1) 460f5ae0750SAmy Kwan; LARGE32-NEXT: mtlr r0 461f5ae0750SAmy Kwan; LARGE32-NEXT: blr 462d5659808SAmy Kwanentry: 463d5659808SAmy Kwan %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @ThreadLocalVarUninit) 464d5659808SAmy Kwan %1 = load float, ptr %0, align 4 465d5659808SAmy Kwan ret float %1 466d5659808SAmy Kwan} 467d5659808SAmy Kwan 468d5659808SAmy Kwandefine float @loadTLUninit2() { 469d5659808SAmy Kwan; SMALL64-LABEL: loadTLUninit2: 470d5659808SAmy Kwan; SMALL64: # %bb.0: # %entry 471d5659808SAmy Kwan; SMALL64-NEXT: ld r3, L..C2(r2) # target-flags(ppc-tprel) @ThreadLocalVarUninit 472598ccceaSAmy Kwan; SMALL64-NEXT: lfsx f0, r13, r3 473*69b056d5SQiu Chaofan; SMALL64-NEXT: ld r3, L..C4(r2) # @VarInit 474*69b056d5SQiu Chaofan; SMALL64-NEXT: lfs f1, 0(r3) 475d5659808SAmy Kwan; SMALL64-NEXT: fadds f1, f0, f1 476d5659808SAmy Kwan; SMALL64-NEXT: blr 477d5659808SAmy Kwan; 478d5659808SAmy Kwan; LARGE64-LABEL: loadTLUninit2: 479d5659808SAmy Kwan; LARGE64: # %bb.0: # %entry 480d5659808SAmy Kwan; LARGE64-NEXT: addis r3, L..C2@u(r2) 481d5659808SAmy Kwan; LARGE64-NEXT: ld r3, L..C2@l(r3) 482598ccceaSAmy Kwan; LARGE64-NEXT: lfsx f0, r13, r3 483*69b056d5SQiu Chaofan; LARGE64-NEXT: addis r3, L..C4@u(r2) 484*69b056d5SQiu Chaofan; LARGE64-NEXT: ld r3, L..C4@l(r3) 485*69b056d5SQiu Chaofan; LARGE64-NEXT: lfs f1, 0(r3) 486d5659808SAmy Kwan; LARGE64-NEXT: fadds f1, f0, f1 487d5659808SAmy Kwan; LARGE64-NEXT: blr 488f5ae0750SAmy Kwan; 489f5ae0750SAmy Kwan; SMALL32-LABEL: loadTLUninit2: 490f5ae0750SAmy Kwan; SMALL32: # %bb.0: # %entry 491f5ae0750SAmy Kwan; SMALL32-NEXT: mflr r0 492f5ae0750SAmy Kwan; SMALL32-NEXT: stwu r1, -32(r1) 493f5ae0750SAmy Kwan; SMALL32-NEXT: lwz r4, L..C2(r2) # target-flags(ppc-tprel) @ThreadLocalVarUninit 494f5ae0750SAmy Kwan; SMALL32-NEXT: stw r0, 40(r1) 495598ccceaSAmy Kwan; SMALL32-NEXT: bla .__get_tpointer[PR] 496598ccceaSAmy Kwan; SMALL32-NEXT: lfsx f0, r3, r4 497*69b056d5SQiu Chaofan; SMALL32-NEXT: lwz r3, L..C4(r2) # @VarInit 498*69b056d5SQiu Chaofan; SMALL32-NEXT: lfs f1, 0(r3) 499f5ae0750SAmy Kwan; SMALL32-NEXT: fadds f1, f0, f1 500f5ae0750SAmy Kwan; SMALL32-NEXT: addi r1, r1, 32 501f5ae0750SAmy Kwan; SMALL32-NEXT: lwz r0, 8(r1) 502f5ae0750SAmy Kwan; SMALL32-NEXT: mtlr r0 503f5ae0750SAmy Kwan; SMALL32-NEXT: blr 504f5ae0750SAmy Kwan; 505f5ae0750SAmy Kwan; LARGE32-LABEL: loadTLUninit2: 506f5ae0750SAmy Kwan; LARGE32: # %bb.0: # %entry 507f5ae0750SAmy Kwan; LARGE32-NEXT: mflr r0 508f5ae0750SAmy Kwan; LARGE32-NEXT: stwu r1, -32(r1) 509f5ae0750SAmy Kwan; LARGE32-NEXT: stw r0, 40(r1) 510f5ae0750SAmy Kwan; LARGE32-NEXT: addis r3, L..C2@u(r2) 511f5ae0750SAmy Kwan; LARGE32-NEXT: lwz r4, L..C2@l(r3) 512f5ae0750SAmy Kwan; LARGE32-NEXT: bla .__get_tpointer[PR] 513598ccceaSAmy Kwan; LARGE32-NEXT: lfsx f0, r3, r4 514f5ae0750SAmy Kwan; LARGE32-NEXT: addis r3, L..C4@u(r2) 515f5ae0750SAmy Kwan; LARGE32-NEXT: lwz r3, L..C4@l(r3) 516f5ae0750SAmy Kwan; LARGE32-NEXT: lfs f1, 0(r3) 517f5ae0750SAmy Kwan; LARGE32-NEXT: fadds f1, f0, f1 518f5ae0750SAmy Kwan; LARGE32-NEXT: addi r1, r1, 32 519f5ae0750SAmy Kwan; LARGE32-NEXT: lwz r0, 8(r1) 520f5ae0750SAmy Kwan; LARGE32-NEXT: mtlr r0 521f5ae0750SAmy Kwan; LARGE32-NEXT: blr 522d5659808SAmy Kwanentry: 523d5659808SAmy Kwan %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @ThreadLocalVarUninit) 524d5659808SAmy Kwan %1 = load float, ptr %0, align 4 525d5659808SAmy Kwan %2 = load float, ptr @VarInit, align 4 526d5659808SAmy Kwan %add = fadd float %1, %2 527d5659808SAmy Kwan ret float %add 528d5659808SAmy Kwan} 529d5659808SAmy Kwan 530d5659808SAmy Kwandefine float @loadTLInit() { 531d5659808SAmy Kwan; SMALL64-LABEL: loadTLInit: 532d5659808SAmy Kwan; SMALL64: # %bb.0: # %entry 533d5659808SAmy Kwan; SMALL64-NEXT: ld r3, L..C3(r2) # target-flags(ppc-tprel) @ThreadLocalVarInit 534598ccceaSAmy Kwan; SMALL64-NEXT: lfsx f1, r13, r3 535d5659808SAmy Kwan; SMALL64-NEXT: blr 536d5659808SAmy Kwan; 537d5659808SAmy Kwan; LARGE64-LABEL: loadTLInit: 538d5659808SAmy Kwan; LARGE64: # %bb.0: # %entry 539d5659808SAmy Kwan; LARGE64-NEXT: addis r3, L..C3@u(r2) 540d5659808SAmy Kwan; LARGE64-NEXT: ld r3, L..C3@l(r3) 541598ccceaSAmy Kwan; LARGE64-NEXT: lfsx f1, r13, r3 542d5659808SAmy Kwan; LARGE64-NEXT: blr 543f5ae0750SAmy Kwan; 544f5ae0750SAmy Kwan; SMALL32-LABEL: loadTLInit: 545f5ae0750SAmy Kwan; SMALL32: # %bb.0: # %entry 546f5ae0750SAmy Kwan; SMALL32-NEXT: mflr r0 547f5ae0750SAmy Kwan; SMALL32-NEXT: stwu r1, -32(r1) 548f5ae0750SAmy Kwan; SMALL32-NEXT: lwz r4, L..C3(r2) # target-flags(ppc-tprel) @ThreadLocalVarInit 549f5ae0750SAmy Kwan; SMALL32-NEXT: stw r0, 40(r1) 550598ccceaSAmy Kwan; SMALL32-NEXT: bla .__get_tpointer[PR] 551598ccceaSAmy Kwan; SMALL32-NEXT: lfsx f1, r3, r4 552f5ae0750SAmy Kwan; SMALL32-NEXT: addi r1, r1, 32 553f5ae0750SAmy Kwan; SMALL32-NEXT: lwz r0, 8(r1) 554f5ae0750SAmy Kwan; SMALL32-NEXT: mtlr r0 555f5ae0750SAmy Kwan; SMALL32-NEXT: blr 556f5ae0750SAmy Kwan; 557f5ae0750SAmy Kwan; LARGE32-LABEL: loadTLInit: 558f5ae0750SAmy Kwan; LARGE32: # %bb.0: # %entry 559f5ae0750SAmy Kwan; LARGE32-NEXT: mflr r0 560f5ae0750SAmy Kwan; LARGE32-NEXT: stwu r1, -32(r1) 561f5ae0750SAmy Kwan; LARGE32-NEXT: stw r0, 40(r1) 562f5ae0750SAmy Kwan; LARGE32-NEXT: addis r3, L..C3@u(r2) 563f5ae0750SAmy Kwan; LARGE32-NEXT: lwz r4, L..C3@l(r3) 564f5ae0750SAmy Kwan; LARGE32-NEXT: bla .__get_tpointer[PR] 565598ccceaSAmy Kwan; LARGE32-NEXT: lfsx f1, r3, r4 566f5ae0750SAmy Kwan; LARGE32-NEXT: addi r1, r1, 32 567f5ae0750SAmy Kwan; LARGE32-NEXT: lwz r0, 8(r1) 568f5ae0750SAmy Kwan; LARGE32-NEXT: mtlr r0 569f5ae0750SAmy Kwan; LARGE32-NEXT: blr 570d5659808SAmy Kwanentry: 571d5659808SAmy Kwan %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @ThreadLocalVarInit) 572d5659808SAmy Kwan %1 = load float, ptr %0, align 4 573d5659808SAmy Kwan ret float %1 574d5659808SAmy Kwan} 575d5659808SAmy Kwan 576d5659808SAmy Kwandefine float @loadTLInit2() { 577d5659808SAmy Kwan; SMALL64-LABEL: loadTLInit2: 578d5659808SAmy Kwan; SMALL64: # %bb.0: # %entry 579d5659808SAmy Kwan; SMALL64-NEXT: ld r3, L..C3(r2) # target-flags(ppc-tprel) @ThreadLocalVarInit 580598ccceaSAmy Kwan; SMALL64-NEXT: lfsx f0, r13, r3 581*69b056d5SQiu Chaofan; SMALL64-NEXT: ld r3, L..C4(r2) # @VarInit 582*69b056d5SQiu Chaofan; SMALL64-NEXT: lfs f1, 0(r3) 583d5659808SAmy Kwan; SMALL64-NEXT: fadds f1, f0, f1 584d5659808SAmy Kwan; SMALL64-NEXT: blr 585d5659808SAmy Kwan; 586d5659808SAmy Kwan; LARGE64-LABEL: loadTLInit2: 587d5659808SAmy Kwan; LARGE64: # %bb.0: # %entry 588d5659808SAmy Kwan; LARGE64-NEXT: addis r3, L..C3@u(r2) 589d5659808SAmy Kwan; LARGE64-NEXT: ld r3, L..C3@l(r3) 590598ccceaSAmy Kwan; LARGE64-NEXT: lfsx f0, r13, r3 591*69b056d5SQiu Chaofan; LARGE64-NEXT: addis r3, L..C4@u(r2) 592*69b056d5SQiu Chaofan; LARGE64-NEXT: ld r3, L..C4@l(r3) 593*69b056d5SQiu Chaofan; LARGE64-NEXT: lfs f1, 0(r3) 594d5659808SAmy Kwan; LARGE64-NEXT: fadds f1, f0, f1 595d5659808SAmy Kwan; LARGE64-NEXT: blr 596f5ae0750SAmy Kwan; 597f5ae0750SAmy Kwan; SMALL32-LABEL: loadTLInit2: 598f5ae0750SAmy Kwan; SMALL32: # %bb.0: # %entry 599f5ae0750SAmy Kwan; SMALL32-NEXT: mflr r0 600f5ae0750SAmy Kwan; SMALL32-NEXT: stwu r1, -32(r1) 601f5ae0750SAmy Kwan; SMALL32-NEXT: lwz r4, L..C3(r2) # target-flags(ppc-tprel) @ThreadLocalVarInit 602f5ae0750SAmy Kwan; SMALL32-NEXT: stw r0, 40(r1) 603598ccceaSAmy Kwan; SMALL32-NEXT: bla .__get_tpointer[PR] 604598ccceaSAmy Kwan; SMALL32-NEXT: lfsx f0, r3, r4 605*69b056d5SQiu Chaofan; SMALL32-NEXT: lwz r3, L..C4(r2) # @VarInit 606*69b056d5SQiu Chaofan; SMALL32-NEXT: lfs f1, 0(r3) 607f5ae0750SAmy Kwan; SMALL32-NEXT: fadds f1, f0, f1 608f5ae0750SAmy Kwan; SMALL32-NEXT: addi r1, r1, 32 609f5ae0750SAmy Kwan; SMALL32-NEXT: lwz r0, 8(r1) 610f5ae0750SAmy Kwan; SMALL32-NEXT: mtlr r0 611f5ae0750SAmy Kwan; SMALL32-NEXT: blr 612f5ae0750SAmy Kwan; 613f5ae0750SAmy Kwan; LARGE32-LABEL: loadTLInit2: 614f5ae0750SAmy Kwan; LARGE32: # %bb.0: # %entry 615f5ae0750SAmy Kwan; LARGE32-NEXT: mflr r0 616f5ae0750SAmy Kwan; LARGE32-NEXT: stwu r1, -32(r1) 617f5ae0750SAmy Kwan; LARGE32-NEXT: stw r0, 40(r1) 618f5ae0750SAmy Kwan; LARGE32-NEXT: addis r3, L..C3@u(r2) 619f5ae0750SAmy Kwan; LARGE32-NEXT: lwz r4, L..C3@l(r3) 620f5ae0750SAmy Kwan; LARGE32-NEXT: bla .__get_tpointer[PR] 621598ccceaSAmy Kwan; LARGE32-NEXT: lfsx f0, r3, r4 622f5ae0750SAmy Kwan; LARGE32-NEXT: addis r3, L..C4@u(r2) 623f5ae0750SAmy Kwan; LARGE32-NEXT: lwz r3, L..C4@l(r3) 624f5ae0750SAmy Kwan; LARGE32-NEXT: lfs f1, 0(r3) 625f5ae0750SAmy Kwan; LARGE32-NEXT: fadds f1, f0, f1 626f5ae0750SAmy Kwan; LARGE32-NEXT: addi r1, r1, 32 627f5ae0750SAmy Kwan; LARGE32-NEXT: lwz r0, 8(r1) 628f5ae0750SAmy Kwan; LARGE32-NEXT: mtlr r0 629f5ae0750SAmy Kwan; LARGE32-NEXT: blr 630d5659808SAmy Kwanentry: 631d5659808SAmy Kwan %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @ThreadLocalVarInit) 632d5659808SAmy Kwan %1 = load float, ptr %0, align 4 633d5659808SAmy Kwan %2 = load float, ptr @VarInit, align 4 634d5659808SAmy Kwan %add = fadd float %1, %2 635d5659808SAmy Kwan ret float %add 636d5659808SAmy Kwan} 637d5659808SAmy Kwan 638d5659808SAmy Kwan; TOC Entry Checks. 639d5659808SAmy Kwan 640d5659808SAmy Kwan; SMALL64-LABEL: .toc 641d5659808SAmy Kwan; SMALL64-LABEL: L..C0: 642d5659808SAmy Kwan; SMALL64-NEXT: .tc IThreadLocalVarUninit[TC],IThreadLocalVarUninit[UL]@le 643d5659808SAmy Kwan; SMALL64-LABEL: L..C1: 644d5659808SAmy Kwan; SMALL64-NEXT: .tc IThreadLocalVarInit[TC],IThreadLocalVarInit[TL]@le 645d5659808SAmy Kwan; SMALL64-LABEL: L..C2: 646d5659808SAmy Kwan; SMALL64-NEXT: .tc ThreadLocalVarUninit[TC],ThreadLocalVarUninit[TL]@le 647d5659808SAmy Kwan; SMALL64-LABEL: L..C3: 648d5659808SAmy Kwan; SMALL64-NEXT: .tc ThreadLocalVarInit[TC],ThreadLocalVarInit[TL]@le 649d5659808SAmy Kwan; SMALL64-LABEL: L..C4: 650d5659808SAmy Kwan; SMALL64-NEXT: .tc VarInit[TC],VarInit[RW] 651d5659808SAmy Kwan 652d5659808SAmy Kwan; LARGE64-LABEL: .toc 653d5659808SAmy Kwan; LARGE64-LABEL: L..C0: 654d5659808SAmy Kwan; LARGE64-NEXT: .tc IThreadLocalVarUninit[TE],IThreadLocalVarUninit[UL]@le 655d5659808SAmy Kwan; LARGE64-LABEL: L..C1: 656d5659808SAmy Kwan; LARGE64-NEXT: .tc IThreadLocalVarInit[TE],IThreadLocalVarInit[TL]@le 657d5659808SAmy Kwan; LARGE64-LABEL: L..C2: 658d5659808SAmy Kwan; LARGE64-NEXT: .tc ThreadLocalVarUninit[TE],ThreadLocalVarUninit[TL]@le 659d5659808SAmy Kwan; LARGE64-LABEL: L..C3: 660d5659808SAmy Kwan; LARGE64-NEXT: .tc ThreadLocalVarInit[TE],ThreadLocalVarInit[TL]@le 661d5659808SAmy Kwan; LARGE64-LABEL: L..C4: 662d5659808SAmy Kwan; LARGE64-NEXT: .tc VarInit[TE],VarInit[RW] 663f5ae0750SAmy Kwan 664f5ae0750SAmy Kwan; SMALL32-LABEL: .toc 665f5ae0750SAmy Kwan; SMALL32-LABEL: L..C0: 666f5ae0750SAmy Kwan; SMALL32-NEXT: .tc IThreadLocalVarUninit[TC],IThreadLocalVarUninit[UL]@le 667f5ae0750SAmy Kwan; SMALL32-LABEL: L..C1: 668f5ae0750SAmy Kwan; SMALL32-NEXT: .tc IThreadLocalVarInit[TC],IThreadLocalVarInit[TL]@le 669f5ae0750SAmy Kwan; SMALL32-LABEL: L..C2: 670f5ae0750SAmy Kwan; SMALL32-NEXT: .tc ThreadLocalVarUninit[TC],ThreadLocalVarUninit[TL]@le 671f5ae0750SAmy Kwan; SMALL32-LABEL: L..C3: 672f5ae0750SAmy Kwan; SMALL32-NEXT: .tc ThreadLocalVarInit[TC],ThreadLocalVarInit[TL]@le 673f5ae0750SAmy Kwan; SMALL32-LABEL: L..C4: 674f5ae0750SAmy Kwan; SMALL32-NEXT: .tc VarInit[TC],VarInit[RW] 675f5ae0750SAmy Kwan 676f5ae0750SAmy Kwan; LARGE32-LABEL: .toc 677f5ae0750SAmy Kwan; LARGE32-LABEL: L..C0: 678f5ae0750SAmy Kwan; LARGE32-NEXT: .tc IThreadLocalVarUninit[TE],IThreadLocalVarUninit[UL]@le 679f5ae0750SAmy Kwan; LARGE32-LABEL: L..C1: 680f5ae0750SAmy Kwan; LARGE32-NEXT: .tc IThreadLocalVarInit[TE],IThreadLocalVarInit[TL]@le 681f5ae0750SAmy Kwan; LARGE32-LABEL: L..C2: 682f5ae0750SAmy Kwan; LARGE32-NEXT: .tc ThreadLocalVarUninit[TE],ThreadLocalVarUninit[TL]@le 683f5ae0750SAmy Kwan; LARGE32-LABEL: L..C3: 684f5ae0750SAmy Kwan; LARGE32-NEXT: .tc ThreadLocalVarInit[TE],ThreadLocalVarInit[TL]@le 685f5ae0750SAmy Kwan; LARGE32-LABEL: L..C4: 686f5ae0750SAmy Kwan; LARGE32-NEXT: .tc VarInit[TE],VarInit[RW] 687