1*5b058709SFelix (Ting Wang); RUN: llc -verify-machineinstrs -mcpu=pwr7 -mattr=-altivec -mtriple powerpc64-ibm-aix-xcoff \ 2*5b058709SFelix (Ting Wang); RUN: --code-model=small < %s | FileCheck %s --check-prefixes=SMALL64,SMALL 3*5b058709SFelix (Ting Wang); RUN: llc -verify-machineinstrs -mcpu=pwr7 -mattr=-altivec -mtriple powerpc64-ibm-aix-xcoff \ 4*5b058709SFelix (Ting Wang); RUN: --code-model=large < %s | FileCheck %s --check-prefixes=LARGE64,LARGE 5*5b058709SFelix (Ting Wang); RUN: llc -verify-machineinstrs -mcpu=pwr7 -mattr=-altivec -mtriple powerpc-ibm-aix-xcoff \ 6*5b058709SFelix (Ting Wang); RUN: --code-model=small < %s | FileCheck %s --check-prefixes=SMALL32,SMALL 7*5b058709SFelix (Ting Wang); RUN: llc -verify-machineinstrs -mcpu=pwr7 -mattr=-altivec -mtriple powerpc-ibm-aix-xcoff \ 8*5b058709SFelix (Ting Wang); RUN: --code-model=large < %s | FileCheck %s --check-prefixes=LARGE32,LARGE 9*5b058709SFelix (Ting Wang); RUN: llc -verify-machineinstrs -mcpu=pwr7 -mattr=-altivec -mtriple powerpc64-ibm-aix-xcoff \ 10*5b058709SFelix (Ting Wang); RUN: --code-model=small -O0 < %s | FileCheck %s --check-prefixes=WITHDUP 11*5b058709SFelix (Ting Wang); RUN: llc -verify-machineinstrs -mcpu=pwr7 -mattr=-altivec -mtriple powerpc64-ibm-aix-xcoff \ 12*5b058709SFelix (Ting Wang); RUN: --code-model=small -O1 < %s | FileCheck %s --check-prefixes=NODUP 13*5b058709SFelix (Ting Wang) 14*5b058709SFelix (Ting Wang)@TGInit = thread_local(localdynamic) global i32 42, align 4 15*5b058709SFelix (Ting Wang)@TGUninit = thread_local(localdynamic) global i32 0, align 4 16*5b058709SFelix (Ting Wang)@TIInit = internal thread_local(localdynamic) global i32 42, align 4 17*5b058709SFelix (Ting Wang)@TIUninit = internal thread_local(localdynamic) global i32 0, align 4 18*5b058709SFelix (Ting Wang)@TWInit = weak thread_local(localdynamic) global i32 42, align 4 19*5b058709SFelix (Ting Wang)@TWUninit = weak thread_local(localdynamic) global i32 0, align 4 20*5b058709SFelix (Ting Wang)@x = thread_local(localdynamic) global i32 42, align 4 21*5b058709SFelix (Ting Wang)@y = thread_local(localdynamic) global i32 42, align 4 22*5b058709SFelix (Ting Wang) 23*5b058709SFelix (Ting Wang)define i32 @loadTGInit() { 24*5b058709SFelix (Ting Wang); SMALL-LABEL: loadTGInit: 25*5b058709SFelix (Ting Wang); SMALL64: ld [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2) 26*5b058709SFelix (Ting Wang); SMALL32: lwz [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2) 27*5b058709SFelix (Ting Wang); SMALL: bla .__tls_get_mod[PR] 28*5b058709SFelix (Ting Wang); SMALL64: ld [[OffsetR:[0-9]+]], [[TGInitL:L..C[0-9]+]](2) 29*5b058709SFelix (Ting Wang); SMALL32: lwz [[OffsetR:[0-9]+]], [[TGInitL:L..C[0-9]+]](2) 30*5b058709SFelix (Ting Wang); SMALL: lwzx [[TGInitValR:[0-9]+]], [[ModuleHandleR]], [[OffsetR]] 31*5b058709SFelix (Ting Wang); 32*5b058709SFelix (Ting Wang); LARGE-LABEL: loadTGInit: 33*5b058709SFelix (Ting Wang); LARGE64: addis [[ModuleHandleHR:[0-9]+]], [[ModuleHandleL:L..C[0-9]+]]@u(2) 34*5b058709SFelix (Ting Wang); LARGE: addis [[OffsetHR:[0-9]+]], [[TGInitL:L..C[0-9]+]]@u(2) 35*5b058709SFelix (Ting Wang); LARGE32: addis [[ModuleHandleHR:[0-9]+]], [[ModuleHandleL:L..C[0-9]+]]@u(2) 36*5b058709SFelix (Ting Wang); LARGE64: ld [[ModuleHandleR:3]], [[ModuleHandleL]]@l([[ModuleHandleHR]]) 37*5b058709SFelix (Ting Wang); LARGE32: lwz [[ModuleHandleR:3]], [[ModuleHandleL]]@l([[ModuleHandleHR]]) 38*5b058709SFelix (Ting Wang); LARGE: bla .__tls_get_mod[PR] 39*5b058709SFelix (Ting Wang); LARGE64: ld [[OffsetR:[0-9]+]], [[TGInitL:L..C[0-9]+]]@l([[OffsetHR]]) 40*5b058709SFelix (Ting Wang); LARGE32: lwz [[OffsetR:[0-9]+]], [[TGInitL:L..C[0-9]+]]@l([[OffsetHR]]) 41*5b058709SFelix (Ting Wang); LARGE: lwzx [[TGInitValR:[0-9]+]], [[ModuleHandleR]], [[OffsetR]] 42*5b058709SFelix (Ting Wang)entry: 43*5b058709SFelix (Ting Wang) %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @TGInit) 44*5b058709SFelix (Ting Wang) %1 = load i32, ptr %0, align 4 45*5b058709SFelix (Ting Wang) ret i32 %1 46*5b058709SFelix (Ting Wang)} 47*5b058709SFelix (Ting Wang) 48*5b058709SFelix (Ting Wang)define void @storeTGInit(i32 noundef signext %i) { 49*5b058709SFelix (Ting Wang); SMALL-LABEL: storeTGInit: 50*5b058709SFelix (Ting Wang); SMALL64: ld [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2) 51*5b058709SFelix (Ting Wang); SMALL32: lwz [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2) 52*5b058709SFelix (Ting Wang); SMALL: bla .__tls_get_mod[PR] 53*5b058709SFelix (Ting Wang); SMALL64: ld [[OffsetR:[0-9]+]], [[TGInitL:L..C[0-9]+]](2) 54*5b058709SFelix (Ting Wang); SMALL32: lwz [[OffsetR:[0-9]+]], [[TGInitL:L..C[0-9]+]](2) 55*5b058709SFelix (Ting Wang); SMALL: stwx [[TGInitValR:[0-9]+]], [[ModuleHandleR]], [[OffsetR]] 56*5b058709SFelix (Ting Wang); 57*5b058709SFelix (Ting Wang); LARGE-LABEL: storeTGInit: 58*5b058709SFelix (Ting Wang); LARGE64: addis [[ModuleHandleHR:[0-9]+]], [[ModuleHandleL:L..C[0-9]+]]@u(2) 59*5b058709SFelix (Ting Wang); LARGE: addis [[OffsetHR:[0-9]+]], [[TGInitL:L..C[0-9]+]]@u(2) 60*5b058709SFelix (Ting Wang); LARGE32: addis [[ModuleHandleHR:[0-9]+]], [[ModuleHandleL:L..C[0-9]+]]@u(2) 61*5b058709SFelix (Ting Wang); LARGE64: ld [[ModuleHandleR:3]], [[ModuleHandleL]]@l([[ModuleHandleHR]]) 62*5b058709SFelix (Ting Wang); LARGE32: lwz [[ModuleHandleR:3]], [[ModuleHandleL]]@l([[ModuleHandleHR]]) 63*5b058709SFelix (Ting Wang); LARGE: bla .__tls_get_mod[PR] 64*5b058709SFelix (Ting Wang); LARGE64: ld [[OffsetR:[0-9]+]], [[TGInitL:L..C[0-9]+]]@l([[OffsetHR]]) 65*5b058709SFelix (Ting Wang); LARGE32: lwz [[OffsetR:[0-9]+]], [[TGInitL:L..C[0-9]+]]@l([[OffsetHR]]) 66*5b058709SFelix (Ting Wang); LARGE: stwx [[TGInitValR:[0-9]+]], [[ModuleHandleR]], [[OffsetR]] 67*5b058709SFelix (Ting Wang)entry: 68*5b058709SFelix (Ting Wang) %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @TGInit) 69*5b058709SFelix (Ting Wang) store i32 %i, ptr %0, align 4 70*5b058709SFelix (Ting Wang) ret void 71*5b058709SFelix (Ting Wang)} 72*5b058709SFelix (Ting Wang) 73*5b058709SFelix (Ting Wang)define i32 @loadTGUninit() { 74*5b058709SFelix (Ting Wang); SMALL-LABEL: loadTGUninit: 75*5b058709SFelix (Ting Wang); SMALL64: ld [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2) 76*5b058709SFelix (Ting Wang); SMALL32: lwz [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2) 77*5b058709SFelix (Ting Wang); SMALL: bla .__tls_get_mod[PR] 78*5b058709SFelix (Ting Wang); SMALL64: ld [[OffsetR:[0-9]+]], [[TGUninitL:L..C[0-9]+]](2) 79*5b058709SFelix (Ting Wang); SMALL32: lwz [[OffsetR:[0-9]+]], [[TGUninitL:L..C[0-9]+]](2) 80*5b058709SFelix (Ting Wang); SMALL: lwzx [[TGInitValR:[0-9]+]], [[ModuleHandleR]], [[OffsetR]] 81*5b058709SFelix (Ting Wang); 82*5b058709SFelix (Ting Wang); LARGE-LABEL: loadTGUninit: 83*5b058709SFelix (Ting Wang); LARGE64: addis [[ModuleHandleHR:[0-9]+]], [[ModuleHandleL:L..C[0-9]+]]@u(2) 84*5b058709SFelix (Ting Wang); LARGE: addis [[OffsetHR:[0-9]+]], [[TGUninitL:L..C[0-9]+]]@u(2) 85*5b058709SFelix (Ting Wang); LARGE32: addis [[ModuleHandleHR:[0-9]+]], [[ModuleHandleL:L..C[0-9]+]]@u(2) 86*5b058709SFelix (Ting Wang); LARGE64: ld [[ModuleHandleR:3]], [[ModuleHandleL]]@l([[ModuleHandleHR]]) 87*5b058709SFelix (Ting Wang); LARGE32: lwz [[ModuleHandleR:3]], [[ModuleHandleL]]@l([[ModuleHandleHR]]) 88*5b058709SFelix (Ting Wang); LARGE: bla .__tls_get_mod[PR] 89*5b058709SFelix (Ting Wang); LARGE64: ld [[OffsetR:[0-9]+]], [[TGUninitL:L..C[0-9]+]]@l([[OffsetHR]]) 90*5b058709SFelix (Ting Wang); LARGE32: lwz [[OffsetR:[0-9]+]], [[TGUninitL:L..C[0-9]+]]@l([[OffsetHR]]) 91*5b058709SFelix (Ting Wang); LARGE: lwzx [[TGUninitValR:[0-9]+]], [[ModuleHandleR]], [[OffsetR]] 92*5b058709SFelix (Ting Wang)entry: 93*5b058709SFelix (Ting Wang) %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @TGUninit) 94*5b058709SFelix (Ting Wang) %1 = load i32, ptr %0, align 4 95*5b058709SFelix (Ting Wang) ret i32 %1 96*5b058709SFelix (Ting Wang)} 97*5b058709SFelix (Ting Wang) 98*5b058709SFelix (Ting Wang)define void @storeTGUninit(i32 noundef signext %i) { 99*5b058709SFelix (Ting Wang); SMALL-LABEL: storeTGUninit: 100*5b058709SFelix (Ting Wang); SMALL64: ld [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2) 101*5b058709SFelix (Ting Wang); SMALL32: lwz [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2) 102*5b058709SFelix (Ting Wang); SMALL: bla .__tls_get_mod[PR] 103*5b058709SFelix (Ting Wang); SMALL64: ld [[OffsetR:[0-9]+]], [[TGUninitL:L..C[0-9]+]](2) 104*5b058709SFelix (Ting Wang); SMALL32: lwz [[OffsetR:[0-9]+]], [[TGUninitL:L..C[0-9]+]](2) 105*5b058709SFelix (Ting Wang); SMALL: stwx [[TGUninitValR:[0-9]+]], [[ModuleHandleR]], [[OffsetR]] 106*5b058709SFelix (Ting Wang); 107*5b058709SFelix (Ting Wang); LARGE-LABEL: storeTGUninit: 108*5b058709SFelix (Ting Wang); LARGE64: addis [[ModuleHandleHR:[0-9]+]], [[ModuleHandleL:L..C[0-9]+]]@u(2) 109*5b058709SFelix (Ting Wang); LARGE: addis [[OffsetHR:[0-9]+]], [[TGUninitL:L..C[0-9]+]]@u(2) 110*5b058709SFelix (Ting Wang); LARGE32: addis [[ModuleHandleHR:[0-9]+]], [[ModuleHandleL:L..C[0-9]+]]@u(2) 111*5b058709SFelix (Ting Wang); LARGE64: ld [[ModuleHandleR:3]], [[ModuleHandleL]]@l([[ModuleHandleHR]]) 112*5b058709SFelix (Ting Wang); LARGE32: lwz [[ModuleHandleR:3]], [[ModuleHandleL]]@l([[ModuleHandleHR]]) 113*5b058709SFelix (Ting Wang); LARGE: bla .__tls_get_mod[PR] 114*5b058709SFelix (Ting Wang); LARGE64: ld [[OffsetR:[0-9]+]], [[TGUninitL:L..C[0-9]+]]@l([[OffsetHR]]) 115*5b058709SFelix (Ting Wang); LARGE32: lwz [[OffsetR:[0-9]+]], [[TGUninitL:L..C[0-9]+]]@l([[OffsetHR]]) 116*5b058709SFelix (Ting Wang); LARGE: stwx [[TGUninitValR:[0-9]+]], [[ModuleHandleR]], [[OffsetR]] 117*5b058709SFelix (Ting Wang)entry: 118*5b058709SFelix (Ting Wang) %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @TGUninit) 119*5b058709SFelix (Ting Wang) store i32 %i, ptr %0, align 4 120*5b058709SFelix (Ting Wang) ret void 121*5b058709SFelix (Ting Wang)} 122*5b058709SFelix (Ting Wang) 123*5b058709SFelix (Ting Wang)define i32 @loadTIInit() { 124*5b058709SFelix (Ting Wang); SMALL-LABEL: loadTIInit: 125*5b058709SFelix (Ting Wang); SMALL64: ld [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2) 126*5b058709SFelix (Ting Wang); SMALL32: lwz [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2) 127*5b058709SFelix (Ting Wang); SMALL: bla .__tls_get_mod[PR] 128*5b058709SFelix (Ting Wang); SMALL64: ld [[OffsetR:[0-9]+]], [[TIInitL:L..C[0-9]+]](2) 129*5b058709SFelix (Ting Wang); SMALL32: lwz [[OffsetR:[0-9]+]], [[TIInitL:L..C[0-9]+]](2) 130*5b058709SFelix (Ting Wang); SMALL: lwzx [[TIInitValR:[0-9]+]], [[ModuleHandleR]], [[OffsetR]] 131*5b058709SFelix (Ting Wang); 132*5b058709SFelix (Ting Wang); LARGE-LABEL: loadTIInit: 133*5b058709SFelix (Ting Wang); LARGE64: addis [[ModuleHandleHR:[0-9]+]], [[ModuleHandleL:L..C[0-9]+]]@u(2) 134*5b058709SFelix (Ting Wang); LARGE: addis [[OffsetHR:[0-9]+]], [[TIInitL:L..C[0-9]+]]@u(2) 135*5b058709SFelix (Ting Wang); LARGE32: addis [[ModuleHandleHR:[0-9]+]], [[ModuleHandleL:L..C[0-9]+]]@u(2) 136*5b058709SFelix (Ting Wang); LARGE64: ld [[ModuleHandleR:3]], [[ModuleHandleL]]@l([[ModuleHandleHR]]) 137*5b058709SFelix (Ting Wang); LARGE32: lwz [[ModuleHandleR:3]], [[ModuleHandleL]]@l([[ModuleHandleHR]]) 138*5b058709SFelix (Ting Wang); LARGE: bla .__tls_get_mod[PR] 139*5b058709SFelix (Ting Wang); LARGE64: ld [[OffsetR:[0-9]+]], [[TIInitL:L..C[0-9]+]]@l([[OffsetHR]]) 140*5b058709SFelix (Ting Wang); LARGE32: lwz [[OffsetR:[0-9]+]], [[TIInitL:L..C[0-9]+]]@l([[OffsetHR]]) 141*5b058709SFelix (Ting Wang); LARGE: lwzx [[TIInitValR:[0-9]+]], [[ModuleHandleR]], [[OffsetR]] 142*5b058709SFelix (Ting Wang)entry: 143*5b058709SFelix (Ting Wang) %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @TIInit) 144*5b058709SFelix (Ting Wang) %1 = load i32, ptr %0, align 4 145*5b058709SFelix (Ting Wang) ret i32 %1 146*5b058709SFelix (Ting Wang)} 147*5b058709SFelix (Ting Wang) 148*5b058709SFelix (Ting Wang)define void @storeTIInit(i32 noundef signext %i) { 149*5b058709SFelix (Ting Wang); SMALL-LABEL: storeTIInit: 150*5b058709SFelix (Ting Wang); SMALL64: ld [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2) 151*5b058709SFelix (Ting Wang); SMALL32: lwz [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2) 152*5b058709SFelix (Ting Wang); SMALL: bla .__tls_get_mod[PR] 153*5b058709SFelix (Ting Wang); SMALL64: ld [[OffsetR:[0-9]+]], [[TIInitL:L..C[0-9]+]](2) 154*5b058709SFelix (Ting Wang); SMALL32: lwz [[OffsetR:[0-9]+]], [[TIInitL:L..C[0-9]+]](2) 155*5b058709SFelix (Ting Wang); SMALL: stwx [[TIInitValR:[0-9]+]], [[ModuleHandleR]], [[OffsetR]] 156*5b058709SFelix (Ting Wang); 157*5b058709SFelix (Ting Wang); LARGE-LABEL: storeTIInit: 158*5b058709SFelix (Ting Wang); LARGE64: addis [[ModuleHandleHR:[0-9]+]], [[ModuleHandleL:L..C[0-9]+]]@u(2) 159*5b058709SFelix (Ting Wang); LARGE: addis [[OffsetHR:[0-9]+]], [[TIInitL:L..C[0-9]+]]@u(2) 160*5b058709SFelix (Ting Wang); LARGE32: addis [[ModuleHandleHR:[0-9]+]], [[ModuleHandleL:L..C[0-9]+]]@u(2) 161*5b058709SFelix (Ting Wang); LARGE64: ld [[ModuleHandleR:3]], [[ModuleHandleL]]@l([[ModuleHandleHR]]) 162*5b058709SFelix (Ting Wang); LARGE32: lwz [[ModuleHandleR:3]], [[ModuleHandleL]]@l([[ModuleHandleHR]]) 163*5b058709SFelix (Ting Wang); LARGE: bla .__tls_get_mod[PR] 164*5b058709SFelix (Ting Wang); LARGE64: ld [[OffsetR:[0-9]+]], [[TIInitL:L..C[0-9]+]]@l([[OffsetHR]]) 165*5b058709SFelix (Ting Wang); LARGE32: lwz [[OffsetR:[0-9]+]], [[TIInitL:L..C[0-9]+]]@l([[OffsetHR]]) 166*5b058709SFelix (Ting Wang); LARGE: stwx [[TIInitValR:[0-9]+]], [[ModuleHandleR]], [[OffsetR]] 167*5b058709SFelix (Ting Wang)entry: 168*5b058709SFelix (Ting Wang) %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @TIInit) 169*5b058709SFelix (Ting Wang) store i32 %i, ptr %0, align 4 170*5b058709SFelix (Ting Wang) ret void 171*5b058709SFelix (Ting Wang)} 172*5b058709SFelix (Ting Wang) 173*5b058709SFelix (Ting Wang)define i32 @loadTIUninit() { 174*5b058709SFelix (Ting Wang); SMALL-LABEL: loadTIUninit: 175*5b058709SFelix (Ting Wang); SMALL64: ld [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2) 176*5b058709SFelix (Ting Wang); SMALL32: lwz [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2) 177*5b058709SFelix (Ting Wang); SMALL: bla .__tls_get_mod[PR] 178*5b058709SFelix (Ting Wang); SMALL64: ld [[OffsetR:[0-9]+]], [[TIUninitL:L..C[0-9]+]](2) 179*5b058709SFelix (Ting Wang); SMALL32: lwz [[OffsetR:[0-9]+]], [[TIUninitL:L..C[0-9]+]](2) 180*5b058709SFelix (Ting Wang); SMALL: lwzx [[TIUninitValR:[0-9]+]], [[ModuleHandleR]], [[OffsetR]] 181*5b058709SFelix (Ting Wang); 182*5b058709SFelix (Ting Wang); LARGE-LABEL: loadTIUninit: 183*5b058709SFelix (Ting Wang); LARGE64: addis [[ModuleHandleHR:[0-9]+]], [[ModuleHandleL:L..C[0-9]+]]@u(2) 184*5b058709SFelix (Ting Wang); LARGE: addis [[OffsetHR:[0-9]+]], [[TIUninitL:L..C[0-9]+]]@u(2) 185*5b058709SFelix (Ting Wang); LARGE32: addis [[ModuleHandleHR:[0-9]+]], [[ModuleHandleL:L..C[0-9]+]]@u(2) 186*5b058709SFelix (Ting Wang); LARGE64: ld [[ModuleHandleR:3]], [[ModuleHandleL]]@l([[ModuleHandleHR]]) 187*5b058709SFelix (Ting Wang); LARGE32: lwz [[ModuleHandleR:3]], [[ModuleHandleL]]@l([[ModuleHandleHR]]) 188*5b058709SFelix (Ting Wang); LARGE: bla .__tls_get_mod[PR] 189*5b058709SFelix (Ting Wang); LARGE64: ld [[OffsetR:[0-9]+]], [[TIUninitL:L..C[0-9]+]]@l([[OffsetHR]]) 190*5b058709SFelix (Ting Wang); LARGE32: lwz [[OffsetR:[0-9]+]], [[TIUninitL:L..C[0-9]+]]@l([[OffsetHR]]) 191*5b058709SFelix (Ting Wang); LARGE: lwzx [[TIUninitValR:[0-9]+]], [[ModuleHandleR]], [[OffsetR]] 192*5b058709SFelix (Ting Wang)entry: 193*5b058709SFelix (Ting Wang) %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @TIUninit) 194*5b058709SFelix (Ting Wang) %1 = load i32, ptr %0, align 4 195*5b058709SFelix (Ting Wang) ret i32 %1 196*5b058709SFelix (Ting Wang)} 197*5b058709SFelix (Ting Wang) 198*5b058709SFelix (Ting Wang)define void @storeTIUninit(i32 noundef signext %i) { 199*5b058709SFelix (Ting Wang); SMALL-LABEL: storeTIUninit: 200*5b058709SFelix (Ting Wang); SMALL64: ld [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2) 201*5b058709SFelix (Ting Wang); SMALL32: lwz [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2) 202*5b058709SFelix (Ting Wang); SMALL: bla .__tls_get_mod[PR] 203*5b058709SFelix (Ting Wang); SMALL64: ld [[OffsetR:[0-9]+]], [[TIUninitL:L..C[0-9]+]](2) 204*5b058709SFelix (Ting Wang); SMALL32: lwz [[OffsetR:[0-9]+]], [[TIUninitL:L..C[0-9]+]](2) 205*5b058709SFelix (Ting Wang); SMALL: stwx [[TIUninitValR:[0-9]+]], [[ModuleHandleR]], [[OffsetR]] 206*5b058709SFelix (Ting Wang); 207*5b058709SFelix (Ting Wang); LARGE-LABEL: storeTIUninit: 208*5b058709SFelix (Ting Wang); LARGE64: addis [[ModuleHandleHR:[0-9]+]], [[ModuleHandleL:L..C[0-9]+]]@u(2) 209*5b058709SFelix (Ting Wang); LARGE: addis [[OffsetHR:[0-9]+]], [[TIUninitL:L..C[0-9]+]]@u(2) 210*5b058709SFelix (Ting Wang); LARGE32: addis [[ModuleHandleHR:[0-9]+]], [[ModuleHandleL:L..C[0-9]+]]@u(2) 211*5b058709SFelix (Ting Wang); LARGE64: ld [[ModuleHandleR:3]], [[ModuleHandleL]]@l([[ModuleHandleHR]]) 212*5b058709SFelix (Ting Wang); LARGE32: lwz [[ModuleHandleR:3]], [[ModuleHandleL]]@l([[ModuleHandleHR]]) 213*5b058709SFelix (Ting Wang); LARGE: bla .__tls_get_mod[PR] 214*5b058709SFelix (Ting Wang); LARGE64: ld [[OffsetR:[0-9]+]], [[TIUninitL:L..C[0-9]+]]@l([[OffsetHR]]) 215*5b058709SFelix (Ting Wang); LARGE32: lwz [[OffsetR:[0-9]+]], [[TIUninitL:L..C[0-9]+]]@l([[OffsetHR]]) 216*5b058709SFelix (Ting Wang); LARGE: stwx [[TIUninitValR:[0-9]+]], [[ModuleHandleR]], [[OffsetR]] 217*5b058709SFelix (Ting Wang)entry: 218*5b058709SFelix (Ting Wang) %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @TIUninit) 219*5b058709SFelix (Ting Wang) store i32 %i, ptr %0, align 4 220*5b058709SFelix (Ting Wang) ret void 221*5b058709SFelix (Ting Wang)} 222*5b058709SFelix (Ting Wang) 223*5b058709SFelix (Ting Wang)define i32 @loadTWInit() { 224*5b058709SFelix (Ting Wang); SMALL-LABEL: loadTWInit: 225*5b058709SFelix (Ting Wang); SMALL64: ld [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2) 226*5b058709SFelix (Ting Wang); SMALL32: lwz [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2) 227*5b058709SFelix (Ting Wang); SMALL: bla .__tls_get_mod[PR] 228*5b058709SFelix (Ting Wang); SMALL64: ld [[OffsetR:[0-9]+]], [[TWInitL:L..C[0-9]+]](2) 229*5b058709SFelix (Ting Wang); SMALL32: lwz [[OffsetR:[0-9]+]], [[TWInitL:L..C[0-9]+]](2) 230*5b058709SFelix (Ting Wang); SMALL: lwzx [[TWInitValR:[0-9]+]], [[ModuleHandleR]], [[OffsetR]] 231*5b058709SFelix (Ting Wang); 232*5b058709SFelix (Ting Wang); LARGE-LABEL: loadTWInit: 233*5b058709SFelix (Ting Wang); LARGE64: addis [[ModuleHandleHR:[0-9]+]], [[ModuleHandleL:L..C[0-9]+]]@u(2) 234*5b058709SFelix (Ting Wang); LARGE: addis [[OffsetHR:[0-9]+]], [[TWInitL:L..C[0-9]+]]@u(2) 235*5b058709SFelix (Ting Wang); LARGE32: addis [[ModuleHandleHR:[0-9]+]], [[ModuleHandleL:L..C[0-9]+]]@u(2) 236*5b058709SFelix (Ting Wang); LARGE64: ld [[ModuleHandleR:3]], [[ModuleHandleL]]@l([[ModuleHandleHR]]) 237*5b058709SFelix (Ting Wang); LARGE32: lwz [[ModuleHandleR:3]], [[ModuleHandleL]]@l([[ModuleHandleHR]]) 238*5b058709SFelix (Ting Wang); LARGE: bla .__tls_get_mod[PR] 239*5b058709SFelix (Ting Wang); LARGE64: ld [[OffsetR:[0-9]+]], [[TWInitL:L..C[0-9]+]]@l([[OffsetHR]]) 240*5b058709SFelix (Ting Wang); LARGE32: lwz [[OffsetR:[0-9]+]], [[TWInitL:L..C[0-9]+]]@l([[OffsetHR]]) 241*5b058709SFelix (Ting Wang); LARGE: lwzx [[TWInitValR:[0-9]+]], [[ModuleHandleR]], [[OffsetR]] 242*5b058709SFelix (Ting Wang)entry: 243*5b058709SFelix (Ting Wang) %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @TWInit) 244*5b058709SFelix (Ting Wang) %1 = load i32, ptr %0, align 4 245*5b058709SFelix (Ting Wang) ret i32 %1 246*5b058709SFelix (Ting Wang)} 247*5b058709SFelix (Ting Wang) 248*5b058709SFelix (Ting Wang)define void @storeTWInit(i32 noundef signext %i) { 249*5b058709SFelix (Ting Wang); SMALL-LABEL: storeTWInit: 250*5b058709SFelix (Ting Wang); SMALL64: ld [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2) 251*5b058709SFelix (Ting Wang); SMALL32: lwz [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2) 252*5b058709SFelix (Ting Wang); SMALL: bla .__tls_get_mod[PR] 253*5b058709SFelix (Ting Wang); SMALL64: ld [[OffsetR:[0-9]+]], [[TWInitL:L..C[0-9]+]](2) 254*5b058709SFelix (Ting Wang); SMALL32: lwz [[OffsetR:[0-9]+]], [[TWInitL:L..C[0-9]+]](2) 255*5b058709SFelix (Ting Wang); SMALL: stwx [[TWInitValR:[0-9]+]], [[ModuleHandleR]], [[OffsetR]] 256*5b058709SFelix (Ting Wang); 257*5b058709SFelix (Ting Wang); LARGE-LABEL: storeTWInit: 258*5b058709SFelix (Ting Wang); LARGE64: addis [[ModuleHandleHR:[0-9]+]], [[ModuleHandleL:L..C[0-9]+]]@u(2) 259*5b058709SFelix (Ting Wang); LARGE: addis [[OffsetHR:[0-9]+]], [[TWInitL:L..C[0-9]+]]@u(2) 260*5b058709SFelix (Ting Wang); LARGE32: addis [[ModuleHandleHR:[0-9]+]], [[ModuleHandleL:L..C[0-9]+]]@u(2) 261*5b058709SFelix (Ting Wang); LARGE64: ld [[ModuleHandleR:3]], [[ModuleHandleL]]@l([[ModuleHandleHR]]) 262*5b058709SFelix (Ting Wang); LARGE32: lwz [[ModuleHandleR:3]], [[ModuleHandleL]]@l([[ModuleHandleHR]]) 263*5b058709SFelix (Ting Wang); LARGE: bla .__tls_get_mod[PR] 264*5b058709SFelix (Ting Wang); LARGE64: ld [[OffsetR:[0-9]+]], [[TWInitL:L..C[0-9]+]]@l([[OffsetHR]]) 265*5b058709SFelix (Ting Wang); LARGE32: lwz [[OffsetR:[0-9]+]], [[TWInitL:L..C[0-9]+]]@l([[OffsetHR]]) 266*5b058709SFelix (Ting Wang); LARGE: stwx [[TWInitValR:[0-9]+]], [[ModuleHandleR]], [[OffsetR]] 267*5b058709SFelix (Ting Wang)entry: 268*5b058709SFelix (Ting Wang) %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @TWInit) 269*5b058709SFelix (Ting Wang) store i32 %i, ptr %0, align 4 270*5b058709SFelix (Ting Wang) ret void 271*5b058709SFelix (Ting Wang)} 272*5b058709SFelix (Ting Wang) 273*5b058709SFelix (Ting Wang)define i32 @loadTWUninit() { 274*5b058709SFelix (Ting Wang); SMALL-LABEL: loadTWUninit: 275*5b058709SFelix (Ting Wang); SMALL64: ld [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2) 276*5b058709SFelix (Ting Wang); SMALL32: lwz [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2) 277*5b058709SFelix (Ting Wang); SMALL: bla .__tls_get_mod[PR] 278*5b058709SFelix (Ting Wang); SMALL64: ld [[OffsetR:[0-9]+]], [[TWUninitL:L..C[0-9]+]](2) 279*5b058709SFelix (Ting Wang); SMALL32: lwz [[OffsetR:[0-9]+]], [[TWUninitL:L..C[0-9]+]](2) 280*5b058709SFelix (Ting Wang); SMALL: lwzx [[TWUninitValR:[0-9]+]], [[ModuleHandleR]], [[OffsetR]] 281*5b058709SFelix (Ting Wang); 282*5b058709SFelix (Ting Wang); LARGE-LABEL: loadTWUninit: 283*5b058709SFelix (Ting Wang); LARGE64: addis [[ModuleHandleHR:[0-9]+]], [[ModuleHandleL:L..C[0-9]+]]@u(2) 284*5b058709SFelix (Ting Wang); LARGE: addis [[OffsetHR:[0-9]+]], [[TWUninitL:L..C[0-9]+]]@u(2) 285*5b058709SFelix (Ting Wang); LARGE32: addis [[ModuleHandleHR:[0-9]+]], [[ModuleHandleL:L..C[0-9]+]]@u(2) 286*5b058709SFelix (Ting Wang); LARGE64: ld [[ModuleHandleR:3]], [[ModuleHandleL]]@l([[ModuleHandleHR]]) 287*5b058709SFelix (Ting Wang); LARGE32: lwz [[ModuleHandleR:3]], [[ModuleHandleL]]@l([[ModuleHandleHR]]) 288*5b058709SFelix (Ting Wang); LARGE: bla .__tls_get_mod[PR] 289*5b058709SFelix (Ting Wang); LARGE64: ld [[OffsetR:[0-9]+]], [[TWUninitL:L..C[0-9]+]]@l([[OffsetHR]]) 290*5b058709SFelix (Ting Wang); LARGE32: lwz [[OffsetR:[0-9]+]], [[TWUninitL:L..C[0-9]+]]@l([[OffsetHR]]) 291*5b058709SFelix (Ting Wang); LARGE: lwzx [[TWUninitValR:[0-9]+]], [[ModuleHandleR]], [[OffsetR]] 292*5b058709SFelix (Ting Wang)entry: 293*5b058709SFelix (Ting Wang) %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @TWUninit) 294*5b058709SFelix (Ting Wang) %1 = load i32, ptr %0, align 4 295*5b058709SFelix (Ting Wang) ret i32 %1 296*5b058709SFelix (Ting Wang)} 297*5b058709SFelix (Ting Wang) 298*5b058709SFelix (Ting Wang)define void @storeTWUninit(i32 noundef signext %i) { 299*5b058709SFelix (Ting Wang); SMALL-LABEL: storeTWUninit: 300*5b058709SFelix (Ting Wang); SMALL64: ld [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2) 301*5b058709SFelix (Ting Wang); SMALL32: lwz [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2) 302*5b058709SFelix (Ting Wang); SMALL: bla .__tls_get_mod[PR] 303*5b058709SFelix (Ting Wang); SMALL64: ld [[OffsetR:[0-9]+]], [[TWUninitL:L..C[0-9]+]](2) 304*5b058709SFelix (Ting Wang); SMALL32: lwz [[OffsetR:[0-9]+]], [[TWUninitL:L..C[0-9]+]](2) 305*5b058709SFelix (Ting Wang); SMALL: stwx [[TWUninitValR:[0-9]+]], [[ModuleHandleR]], [[OffsetR]] 306*5b058709SFelix (Ting Wang); 307*5b058709SFelix (Ting Wang); LARGE-LABEL: storeTWUninit: 308*5b058709SFelix (Ting Wang); LARGE64: addis [[ModuleHandleHR:[0-9]+]], [[ModuleHandleL:L..C[0-9]+]]@u(2) 309*5b058709SFelix (Ting Wang); LARGE: addis [[OffsetHR:[0-9]+]], [[TWUninitL:L..C[0-9]+]]@u(2) 310*5b058709SFelix (Ting Wang); LARGE32: addis [[ModuleHandleHR:[0-9]+]], [[ModuleHandleL:L..C[0-9]+]]@u(2) 311*5b058709SFelix (Ting Wang); LARGE64: ld [[ModuleHandleR:3]], [[ModuleHandleL]]@l([[ModuleHandleHR]]) 312*5b058709SFelix (Ting Wang); LARGE32: lwz [[ModuleHandleR:3]], [[ModuleHandleL]]@l([[ModuleHandleHR]]) 313*5b058709SFelix (Ting Wang); LARGE: bla .__tls_get_mod[PR] 314*5b058709SFelix (Ting Wang); LARGE64: ld [[OffsetR:[0-9]+]], [[TWUninitL:L..C[0-9]+]]@l([[OffsetHR]]) 315*5b058709SFelix (Ting Wang); LARGE32: lwz [[OffsetR:[0-9]+]], [[TWUninitL:L..C[0-9]+]]@l([[OffsetHR]]) 316*5b058709SFelix (Ting Wang); LARGE: stwx [[TWUninitValR:[0-9]+]], [[ModuleHandleR]], [[OffsetR]] 317*5b058709SFelix (Ting Wang)entry: 318*5b058709SFelix (Ting Wang) %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @TWUninit) 319*5b058709SFelix (Ting Wang) store i32 %i, ptr %0, align 4 320*5b058709SFelix (Ting Wang) ret void 321*5b058709SFelix (Ting Wang)} 322*5b058709SFelix (Ting Wang) 323*5b058709SFelix (Ting Wang)define i32 @DedupTlsGetMod() #0 { 324*5b058709SFelix (Ting Wang); WITHDUP-LABEL: DedupTlsGetMod: 325*5b058709SFelix (Ting Wang); WITHDUP: ld [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2) 326*5b058709SFelix (Ting Wang); WITHDUP-NEXT: bla .__tls_get_mod[PR] 327*5b058709SFelix (Ting Wang); WITHDUP-NEXT: ld [[OffsetXR:[0-9]+]], [[X:L..C[0-9]+]](2) 328*5b058709SFelix (Ting Wang); WITHDUP: ld [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2) 329*5b058709SFelix (Ting Wang); WITHDUP-NEXT: bla .__tls_get_mod[PR] 330*5b058709SFelix (Ting Wang); WITHDUP: ld [[OffsetYR:[0-9]+]], [[Y:L..C[0-9]+]](2) 331*5b058709SFelix (Ting Wang); WITHDUP-LABEL: L..DedupTlsGetMod0: 332*5b058709SFelix (Ting Wang); 333*5b058709SFelix (Ting Wang); NODUP-LABEL: DedupTlsGetMod: 334*5b058709SFelix (Ting Wang); NODUP: ld [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2) 335*5b058709SFelix (Ting Wang); NODUP-NEXT: bla .__tls_get_mod[PR] 336*5b058709SFelix (Ting Wang); NODUP-NEXT: ld [[OffsetXR:[0-9]+]], [[X:L..C[0-9]+]](2) 337*5b058709SFelix (Ting Wang); NODUP-NEXT: ld [[OffsetYR:[0-9]+]], [[Y:L..C[0-9]+]](2) 338*5b058709SFelix (Ting Wang); NODUP-NEXT: lwzx [[XValR:[0-9]+]], [[ModuleHandleR]], [[OffsetXR]] 339*5b058709SFelix (Ting Wang); NODUP-NEXT: lwzx [[YValR:[0-9]+]], [[ModuleHandleR]], [[OffsetYR]] 340*5b058709SFelix (Ting Wang); NODUP-LABEL: L..DedupTlsGetMod0: 341*5b058709SFelix (Ting Wang)entry: 342*5b058709SFelix (Ting Wang) %retval = alloca i32, align 4 343*5b058709SFelix (Ting Wang) store i32 0, ptr %retval, align 4 344*5b058709SFelix (Ting Wang) %0 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @x) 345*5b058709SFelix (Ting Wang) %1 = load i32, ptr %0, align 4 346*5b058709SFelix (Ting Wang) %2 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @y) 347*5b058709SFelix (Ting Wang) %3 = load i32, ptr %2, align 4 348*5b058709SFelix (Ting Wang) %add = add nsw i32 %1, %3 349*5b058709SFelix (Ting Wang) ret i32 %add 350*5b058709SFelix (Ting Wang)} 351*5b058709SFelix (Ting Wang) 352*5b058709SFelix (Ting Wang); SMALL: .extern .__tls_get_mod[PR] 353*5b058709SFelix (Ting Wang); LARGE: .extern .__tls_get_mod[PR] 354*5b058709SFelix (Ting Wang); SMALL-NOT: .extern _Renamed..5f24__TLSML[TC] 355*5b058709SFelix (Ting Wang); LARGE-NOT: .extern _Renamed..5f24__TLSML[TC] 356*5b058709SFelix (Ting Wang) 357*5b058709SFelix (Ting Wang); SMALL: [[ModuleHandleL]]: 358*5b058709SFelix (Ting Wang); SMALL-NEXT: .tc _Renamed..5f24__TLSML[TC],_Renamed..5f24__TLSML[TC]@ml 359*5b058709SFelix (Ting Wang); SMALL-NEXT: .rename _Renamed..5f24__TLSML[TC],"_$TLSML" 360*5b058709SFelix (Ting Wang); SMALL: [[TGInitL]]: 361*5b058709SFelix (Ting Wang); SMALL-NEXT: .tc TGInit[TC],TGInit[TL]@ld 362*5b058709SFelix (Ting Wang); SMALL: [[TGUninitL]]: 363*5b058709SFelix (Ting Wang); SMALL-NEXT: .tc TGUninit[TC],TGUninit[TL]@ld 364*5b058709SFelix (Ting Wang); SMALL: [[TIInitL]]: 365*5b058709SFelix (Ting Wang); SMALL-NEXT: .tc TIInit[TC],TIInit[TL]@ld 366*5b058709SFelix (Ting Wang); SMALL: [[TIUninitL]]: 367*5b058709SFelix (Ting Wang); SMALL-NEXT: .tc TIUninit[TC],TIUninit[UL]@ld 368*5b058709SFelix (Ting Wang); SMALL: [[TWInitL]]: 369*5b058709SFelix (Ting Wang); SMALL-NEXT: .tc TWInit[TC],TWInit[TL]@ld 370*5b058709SFelix (Ting Wang); SMALL: [[TWUninitL]]: 371*5b058709SFelix (Ting Wang); SMALL-NEXT: .tc TWUninit[TC],TWUninit[TL]@ld 372*5b058709SFelix (Ting Wang) 373*5b058709SFelix (Ting Wang); LARGE64: [[ModuleHandleL]]: 374*5b058709SFelix (Ting Wang); LARGE64-NEXT: .tc _Renamed..5f24__TLSML[TC],_Renamed..5f24__TLSML[TC]@ml 375*5b058709SFelix (Ting Wang); LARGE64-NEXT: .rename _Renamed..5f24__TLSML[TC],"_$TLSML" 376*5b058709SFelix (Ting Wang); LARGE64: [[TGInitL]]: 377*5b058709SFelix (Ting Wang); LARGE64-NEXT: .tc TGInit[TE],TGInit[TL]@ld 378*5b058709SFelix (Ting Wang); 379*5b058709SFelix (Ting Wang); LARGE32: [[TGInitL]]: 380*5b058709SFelix (Ting Wang); LARGE32-NEXT: .tc TGInit[TE],TGInit[TL]@ld 381*5b058709SFelix (Ting Wang); LARGE32: [[ModuleHandleL]]: 382*5b058709SFelix (Ting Wang); LARGE32-NEXT: .tc _Renamed..5f24__TLSML[TC],_Renamed..5f24__TLSML[TC]@ml 383*5b058709SFelix (Ting Wang); LARGE32-NEXT: .rename _Renamed..5f24__TLSML[TC],"_$TLSML" 384*5b058709SFelix (Ting Wang); 385*5b058709SFelix (Ting Wang); LARGE: [[TGUninitL]]: 386*5b058709SFelix (Ting Wang); LARGE-NEXT: .tc TGUninit[TE],TGUninit[TL]@ld 387*5b058709SFelix (Ting Wang); LARGE: [[TIInitL]]: 388*5b058709SFelix (Ting Wang); LARGE-NEXT: .tc TIInit[TE],TIInit[TL]@ld 389*5b058709SFelix (Ting Wang); LARGE: [[TIUninitL]]: 390*5b058709SFelix (Ting Wang); LARGE-NEXT: .tc TIUninit[TE],TIUninit[UL]@ld 391*5b058709SFelix (Ting Wang); LARGE: [[TWInitL]]: 392*5b058709SFelix (Ting Wang); LARGE-NEXT: .tc TWInit[TE],TWInit[TL]@ld 393*5b058709SFelix (Ting Wang); LARGE: [[TWUninitL]]: 394*5b058709SFelix (Ting Wang); LARGE-NEXT: .tc TWUninit[TE],TWUninit[TL]@ld 395*5b058709SFelix (Ting Wang) 396*5b058709SFelix (Ting Wang)declare nonnull ptr @llvm.threadlocal.address.p0(ptr nonnull) 397