brintos

brintos / llvm-project-archived public Read only

0
0
Text · 21.7 KiB · 435555d Raw
761 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i386-linux-gnu | FileCheck -check-prefix=X86_LINUX %s3; RUN: llc < %s -mtriple=x86_64-linux-gnu | FileCheck -check-prefix=X64_LINUX %s4; RUN: llc < %s -mtriple=i386-linux-gnu -fast-isel | FileCheck -check-prefix=X86_LINUX %s5; RUN: llc < %s -mtriple=x86_64-linux-gnu -fast-isel | FileCheck -check-prefix=X64_LINUX %s6; RUN: llc < %s -mtriple=i686-pc-win32 | FileCheck -check-prefix=X86_WIN %s7; RUN: llc < %s -mtriple=x86_64-pc-win32 | FileCheck -check-prefix=X64_WIN %s8; RUN: llc < %s -mtriple=i686-pc-windows-gnu | FileCheck -check-prefix=MINGW32 %s9; RUN: llc < %s -mtriple=x86_64-pc-windows-gnu | FileCheck -check-prefix=X64_WIN %s10 11@i1 = dso_local thread_local global i32 1512@i2 = external thread_local global i3213@i3 = internal thread_local global i32 1514@i4 = hidden thread_local global i32 1515@i5 = external hidden thread_local global i3216@i6 = external protected thread_local global i3217@s1 = dso_local thread_local global i16 1518@b1 = dso_local thread_local global i8 019@b2 = dso_local thread_local(localexec) global i8 020 21define dso_local i32 @f1() {22; X86_LINUX-LABEL: f1:23; X86_LINUX:       # %bb.0: # %entry24; X86_LINUX-NEXT:    movl %gs:i1@NTPOFF, %eax25; X86_LINUX-NEXT:    retl26;27; X64_LINUX-LABEL: f1:28; X64_LINUX:       # %bb.0: # %entry29; X64_LINUX-NEXT:    movl %fs:i1@TPOFF, %eax30; X64_LINUX-NEXT:    retq31;32; X86_WIN-LABEL: f1:33; X86_WIN:       # %bb.0: # %entry34; X86_WIN-NEXT:    movl __tls_index, %eax35; X86_WIN-NEXT:    movl %fs:__tls_array, %ecx36; X86_WIN-NEXT:    movl (%ecx,%eax,4), %eax37; X86_WIN-NEXT:    movl _i1@SECREL32(%eax), %eax38; X86_WIN-NEXT:    retl39;40; X64_WIN-LABEL: f1:41; X64_WIN:       # %bb.0: # %entry42; X64_WIN-NEXT:    movl _tls_index(%rip), %eax43; X64_WIN-NEXT:    movq %gs:88, %rcx44; X64_WIN-NEXT:    movq (%rcx,%rax,8), %rax45; X64_WIN-NEXT:    movl i1@SECREL32(%rax), %eax46; X64_WIN-NEXT:    retq47;48; MINGW32-LABEL: f1:49; MINGW32:       # %bb.0: # %entry50; MINGW32-NEXT:    movl __tls_index, %eax51; MINGW32-NEXT:    movl %fs:44, %ecx52; MINGW32-NEXT:    movl (%ecx,%eax,4), %eax53; MINGW32-NEXT:    movl _i1@SECREL32(%eax), %eax54; MINGW32-NEXT:    retl55 56entry:57  %tmp1 = load i32, ptr @i158  ret i32 %tmp159}60 61define dso_local ptr @f2() {62; X86_LINUX-LABEL: f2:63; X86_LINUX:       # %bb.0: # %entry64; X86_LINUX-NEXT:    movl %gs:0, %eax65; X86_LINUX-NEXT:    leal i1@NTPOFF(%eax), %eax66; X86_LINUX-NEXT:    retl67;68; X64_LINUX-LABEL: f2:69; X64_LINUX:       # %bb.0: # %entry70; X64_LINUX-NEXT:    movq %fs:0, %rax71; X64_LINUX-NEXT:    leaq i1@TPOFF(%rax), %rax72; X64_LINUX-NEXT:    retq73;74; X86_WIN-LABEL: f2:75; X86_WIN:       # %bb.0: # %entry76; X86_WIN-NEXT:    movl __tls_index, %eax77; X86_WIN-NEXT:    movl %fs:__tls_array, %ecx78; X86_WIN-NEXT:    movl (%ecx,%eax,4), %eax79; X86_WIN-NEXT:    leal _i1@SECREL32(%eax), %eax80; X86_WIN-NEXT:    retl81;82; X64_WIN-LABEL: f2:83; X64_WIN:       # %bb.0: # %entry84; X64_WIN-NEXT:    movl _tls_index(%rip), %eax85; X64_WIN-NEXT:    movq %gs:88, %rcx86; X64_WIN-NEXT:    movq (%rcx,%rax,8), %rax87; X64_WIN-NEXT:    leaq i1@SECREL32(%rax), %rax88; X64_WIN-NEXT:    retq89;90; MINGW32-LABEL: f2:91; MINGW32:       # %bb.0: # %entry92; MINGW32-NEXT:    movl __tls_index, %eax93; MINGW32-NEXT:    movl %fs:44, %ecx94; MINGW32-NEXT:    movl (%ecx,%eax,4), %eax95; MINGW32-NEXT:    leal _i1@SECREL32(%eax), %eax96; MINGW32-NEXT:    retl97 98entry:99  ret ptr @i1100}101 102define dso_local i32 @f3() nounwind {103; X86_LINUX-LABEL: f3:104; X86_LINUX:       # %bb.0: # %entry105; X86_LINUX-NEXT:    movl i2@INDNTPOFF, %eax106; X86_LINUX-NEXT:    movl %gs:(%eax), %eax107; X86_LINUX-NEXT:    retl108;109; X64_LINUX-LABEL: f3:110; X64_LINUX:       # %bb.0: # %entry111; X64_LINUX-NEXT:    movq i2@GOTTPOFF(%rip), %rax112; X64_LINUX-NEXT:    movl %fs:(%rax), %eax113; X64_LINUX-NEXT:    retq114;115; X86_WIN-LABEL: f3:116; X86_WIN:       # %bb.0: # %entry117; X86_WIN-NEXT:    movl __tls_index, %eax118; X86_WIN-NEXT:    movl %fs:__tls_array, %ecx119; X86_WIN-NEXT:    movl (%ecx,%eax,4), %eax120; X86_WIN-NEXT:    movl _i2@SECREL32(%eax), %eax121; X86_WIN-NEXT:    retl122;123; X64_WIN-LABEL: f3:124; X64_WIN:       # %bb.0: # %entry125; X64_WIN-NEXT:    movl _tls_index(%rip), %eax126; X64_WIN-NEXT:    movq %gs:88, %rcx127; X64_WIN-NEXT:    movq (%rcx,%rax,8), %rax128; X64_WIN-NEXT:    movl i2@SECREL32(%rax), %eax129; X64_WIN-NEXT:    retq130;131; MINGW32-LABEL: f3:132; MINGW32:       # %bb.0: # %entry133; MINGW32-NEXT:    movl __tls_index, %eax134; MINGW32-NEXT:    movl %fs:44, %ecx135; MINGW32-NEXT:    movl (%ecx,%eax,4), %eax136; MINGW32-NEXT:    movl _i2@SECREL32(%eax), %eax137; MINGW32-NEXT:    retl138 139entry:140  %tmp1 = load i32, ptr @i2141  ret i32 %tmp1142}143 144define dso_local ptr @f4() {145; X86_LINUX-LABEL: f4:146; X86_LINUX:       # %bb.0: # %entry147; X86_LINUX-NEXT:    movl %gs:0, %eax148; X86_LINUX-NEXT:    addl i2@INDNTPOFF, %eax149; X86_LINUX-NEXT:    retl150;151; X64_LINUX-LABEL: f4:152; X64_LINUX:       # %bb.0: # %entry153; X64_LINUX-NEXT:    movq %fs:0, %rax154; X64_LINUX-NEXT:    addq i2@GOTTPOFF(%rip), %rax155; X64_LINUX-NEXT:    retq156;157; X86_WIN-LABEL: f4:158; X86_WIN:       # %bb.0: # %entry159; X86_WIN-NEXT:    movl __tls_index, %eax160; X86_WIN-NEXT:    movl %fs:__tls_array, %ecx161; X86_WIN-NEXT:    movl (%ecx,%eax,4), %eax162; X86_WIN-NEXT:    leal _i2@SECREL32(%eax), %eax163; X86_WIN-NEXT:    retl164;165; X64_WIN-LABEL: f4:166; X64_WIN:       # %bb.0: # %entry167; X64_WIN-NEXT:    movl _tls_index(%rip), %eax168; X64_WIN-NEXT:    movq %gs:88, %rcx169; X64_WIN-NEXT:    movq (%rcx,%rax,8), %rax170; X64_WIN-NEXT:    leaq i2@SECREL32(%rax), %rax171; X64_WIN-NEXT:    retq172;173; MINGW32-LABEL: f4:174; MINGW32:       # %bb.0: # %entry175; MINGW32-NEXT:    movl __tls_index, %eax176; MINGW32-NEXT:    movl %fs:44, %ecx177; MINGW32-NEXT:    movl (%ecx,%eax,4), %eax178; MINGW32-NEXT:    leal _i2@SECREL32(%eax), %eax179; MINGW32-NEXT:    retl180 181entry:182  ret ptr @i2183}184 185define dso_local i32 @f5() nounwind {186; X86_LINUX-LABEL: f5:187; X86_LINUX:       # %bb.0: # %entry188; X86_LINUX-NEXT:    movl %gs:i3@NTPOFF, %eax189; X86_LINUX-NEXT:    retl190;191; X64_LINUX-LABEL: f5:192; X64_LINUX:       # %bb.0: # %entry193; X64_LINUX-NEXT:    movl %fs:i3@TPOFF, %eax194; X64_LINUX-NEXT:    retq195;196; X86_WIN-LABEL: f5:197; X86_WIN:       # %bb.0: # %entry198; X86_WIN-NEXT:    movl __tls_index, %eax199; X86_WIN-NEXT:    movl %fs:__tls_array, %ecx200; X86_WIN-NEXT:    movl (%ecx,%eax,4), %eax201; X86_WIN-NEXT:    movl _i3@SECREL32(%eax), %eax202; X86_WIN-NEXT:    retl203;204; X64_WIN-LABEL: f5:205; X64_WIN:       # %bb.0: # %entry206; X64_WIN-NEXT:    movl _tls_index(%rip), %eax207; X64_WIN-NEXT:    movq %gs:88, %rcx208; X64_WIN-NEXT:    movq (%rcx,%rax,8), %rax209; X64_WIN-NEXT:    movl i3@SECREL32(%rax), %eax210; X64_WIN-NEXT:    retq211;212; MINGW32-LABEL: f5:213; MINGW32:       # %bb.0: # %entry214; MINGW32-NEXT:    movl __tls_index, %eax215; MINGW32-NEXT:    movl %fs:44, %ecx216; MINGW32-NEXT:    movl (%ecx,%eax,4), %eax217; MINGW32-NEXT:    movl _i3@SECREL32(%eax), %eax218; MINGW32-NEXT:    retl219 220entry:221  %tmp1 = load i32, ptr @i3222  ret i32 %tmp1223}224 225define dso_local ptr @f6() {226; X86_LINUX-LABEL: f6:227; X86_LINUX:       # %bb.0: # %entry228; X86_LINUX-NEXT:    movl %gs:0, %eax229; X86_LINUX-NEXT:    leal i3@NTPOFF(%eax), %eax230; X86_LINUX-NEXT:    retl231;232; X64_LINUX-LABEL: f6:233; X64_LINUX:       # %bb.0: # %entry234; X64_LINUX-NEXT:    movq %fs:0, %rax235; X64_LINUX-NEXT:    leaq i3@TPOFF(%rax), %rax236; X64_LINUX-NEXT:    retq237;238; X86_WIN-LABEL: f6:239; X86_WIN:       # %bb.0: # %entry240; X86_WIN-NEXT:    movl __tls_index, %eax241; X86_WIN-NEXT:    movl %fs:__tls_array, %ecx242; X86_WIN-NEXT:    movl (%ecx,%eax,4), %eax243; X86_WIN-NEXT:    leal _i3@SECREL32(%eax), %eax244; X86_WIN-NEXT:    retl245;246; X64_WIN-LABEL: f6:247; X64_WIN:       # %bb.0: # %entry248; X64_WIN-NEXT:    movl _tls_index(%rip), %eax249; X64_WIN-NEXT:    movq %gs:88, %rcx250; X64_WIN-NEXT:    movq (%rcx,%rax,8), %rax251; X64_WIN-NEXT:    leaq i3@SECREL32(%rax), %rax252; X64_WIN-NEXT:    retq253;254; MINGW32-LABEL: f6:255; MINGW32:       # %bb.0: # %entry256; MINGW32-NEXT:    movl __tls_index, %eax257; MINGW32-NEXT:    movl %fs:44, %ecx258; MINGW32-NEXT:    movl (%ecx,%eax,4), %eax259; MINGW32-NEXT:    leal _i3@SECREL32(%eax), %eax260; MINGW32-NEXT:    retl261 262entry:263  ret ptr @i3264}265 266define dso_local i32 @f7() {267; X86_LINUX-LABEL: f7:268; X86_LINUX:       # %bb.0: # %entry269; X86_LINUX-NEXT:    movl %gs:i4@NTPOFF, %eax270; X86_LINUX-NEXT:    retl271;272; X64_LINUX-LABEL: f7:273; X64_LINUX:       # %bb.0: # %entry274; X64_LINUX-NEXT:    movl %fs:i4@TPOFF, %eax275; X64_LINUX-NEXT:    retq276;277; X86_WIN-LABEL: f7:278; X86_WIN:       # %bb.0: # %entry279; X86_WIN-NEXT:    movl __tls_index, %eax280; X86_WIN-NEXT:    movl %fs:__tls_array, %ecx281; X86_WIN-NEXT:    movl (%ecx,%eax,4), %eax282; X86_WIN-NEXT:    movl _i4@SECREL32(%eax), %eax283; X86_WIN-NEXT:    retl284;285; X64_WIN-LABEL: f7:286; X64_WIN:       # %bb.0: # %entry287; X64_WIN-NEXT:    movl _tls_index(%rip), %eax288; X64_WIN-NEXT:    movq %gs:88, %rcx289; X64_WIN-NEXT:    movq (%rcx,%rax,8), %rax290; X64_WIN-NEXT:    movl i4@SECREL32(%rax), %eax291; X64_WIN-NEXT:    retq292;293; MINGW32-LABEL: f7:294; MINGW32:       # %bb.0: # %entry295; MINGW32-NEXT:    movl __tls_index, %eax296; MINGW32-NEXT:    movl %fs:44, %ecx297; MINGW32-NEXT:    movl (%ecx,%eax,4), %eax298; MINGW32-NEXT:    movl _i4@SECREL32(%eax), %eax299; MINGW32-NEXT:    retl300 301entry:302  %tmp1 = load i32, ptr @i4303  ret i32 %tmp1304}305 306define dso_local ptr @f8() {307; X86_LINUX-LABEL: f8:308; X86_LINUX:       # %bb.0: # %entry309; X86_LINUX-NEXT:    movl %gs:0, %eax310; X86_LINUX-NEXT:    leal i4@NTPOFF(%eax), %eax311; X86_LINUX-NEXT:    retl312;313; X64_LINUX-LABEL: f8:314; X64_LINUX:       # %bb.0: # %entry315; X64_LINUX-NEXT:    movq %fs:0, %rax316; X64_LINUX-NEXT:    leaq i4@TPOFF(%rax), %rax317; X64_LINUX-NEXT:    retq318;319; X86_WIN-LABEL: f8:320; X86_WIN:       # %bb.0: # %entry321; X86_WIN-NEXT:    movl __tls_index, %eax322; X86_WIN-NEXT:    movl %fs:__tls_array, %ecx323; X86_WIN-NEXT:    movl (%ecx,%eax,4), %eax324; X86_WIN-NEXT:    leal _i4@SECREL32(%eax), %eax325; X86_WIN-NEXT:    retl326;327; X64_WIN-LABEL: f8:328; X64_WIN:       # %bb.0: # %entry329; X64_WIN-NEXT:    movl _tls_index(%rip), %eax330; X64_WIN-NEXT:    movq %gs:88, %rcx331; X64_WIN-NEXT:    movq (%rcx,%rax,8), %rax332; X64_WIN-NEXT:    leaq i4@SECREL32(%rax), %rax333; X64_WIN-NEXT:    retq334;335; MINGW32-LABEL: f8:336; MINGW32:       # %bb.0: # %entry337; MINGW32-NEXT:    movl __tls_index, %eax338; MINGW32-NEXT:    movl %fs:44, %ecx339; MINGW32-NEXT:    movl (%ecx,%eax,4), %eax340; MINGW32-NEXT:    leal _i4@SECREL32(%eax), %eax341; MINGW32-NEXT:    retl342 343entry:344  ret ptr @i4345}346 347define dso_local i32 @f9() {348; X86_LINUX-LABEL: f9:349; X86_LINUX:       # %bb.0: # %entry350; X86_LINUX-NEXT:    movl %gs:i5@NTPOFF, %eax351; X86_LINUX-NEXT:    retl352;353; X64_LINUX-LABEL: f9:354; X64_LINUX:       # %bb.0: # %entry355; X64_LINUX-NEXT:    movl %fs:i5@TPOFF, %eax356; X64_LINUX-NEXT:    retq357;358; X86_WIN-LABEL: f9:359; X86_WIN:       # %bb.0: # %entry360; X86_WIN-NEXT:    movl __tls_index, %eax361; X86_WIN-NEXT:    movl %fs:__tls_array, %ecx362; X86_WIN-NEXT:    movl (%ecx,%eax,4), %eax363; X86_WIN-NEXT:    movl _i5@SECREL32(%eax), %eax364; X86_WIN-NEXT:    retl365;366; X64_WIN-LABEL: f9:367; X64_WIN:       # %bb.0: # %entry368; X64_WIN-NEXT:    movl _tls_index(%rip), %eax369; X64_WIN-NEXT:    movq %gs:88, %rcx370; X64_WIN-NEXT:    movq (%rcx,%rax,8), %rax371; X64_WIN-NEXT:    movl i5@SECREL32(%rax), %eax372; X64_WIN-NEXT:    retq373;374; MINGW32-LABEL: f9:375; MINGW32:       # %bb.0: # %entry376; MINGW32-NEXT:    movl __tls_index, %eax377; MINGW32-NEXT:    movl %fs:44, %ecx378; MINGW32-NEXT:    movl (%ecx,%eax,4), %eax379; MINGW32-NEXT:    movl _i5@SECREL32(%eax), %eax380; MINGW32-NEXT:    retl381 382entry:383  %tmp1 = load i32, ptr @i5384  ret i32 %tmp1385}386 387define dso_local ptr @f10() {388; X86_LINUX-LABEL: f10:389; X86_LINUX:       # %bb.0: # %entry390; X86_LINUX-NEXT:    movl %gs:0, %eax391; X86_LINUX-NEXT:    leal i5@NTPOFF(%eax), %eax392; X86_LINUX-NEXT:    retl393;394; X64_LINUX-LABEL: f10:395; X64_LINUX:       # %bb.0: # %entry396; X64_LINUX-NEXT:    movq %fs:0, %rax397; X64_LINUX-NEXT:    leaq i5@TPOFF(%rax), %rax398; X64_LINUX-NEXT:    retq399;400; X86_WIN-LABEL: f10:401; X86_WIN:       # %bb.0: # %entry402; X86_WIN-NEXT:    movl __tls_index, %eax403; X86_WIN-NEXT:    movl %fs:__tls_array, %ecx404; X86_WIN-NEXT:    movl (%ecx,%eax,4), %eax405; X86_WIN-NEXT:    leal _i5@SECREL32(%eax), %eax406; X86_WIN-NEXT:    retl407;408; X64_WIN-LABEL: f10:409; X64_WIN:       # %bb.0: # %entry410; X64_WIN-NEXT:    movl _tls_index(%rip), %eax411; X64_WIN-NEXT:    movq %gs:88, %rcx412; X64_WIN-NEXT:    movq (%rcx,%rax,8), %rax413; X64_WIN-NEXT:    leaq i5@SECREL32(%rax), %rax414; X64_WIN-NEXT:    retq415;416; MINGW32-LABEL: f10:417; MINGW32:       # %bb.0: # %entry418; MINGW32-NEXT:    movl __tls_index, %eax419; MINGW32-NEXT:    movl %fs:44, %ecx420; MINGW32-NEXT:    movl (%ecx,%eax,4), %eax421; MINGW32-NEXT:    leal _i5@SECREL32(%eax), %eax422; MINGW32-NEXT:    retl423 424entry:425  ret ptr @i5426}427 428define i16 @f11() {429; X86_LINUX-LABEL: f11:430; X86_LINUX:       # %bb.0: # %entry431; X86_LINUX-NEXT:    movzwl %gs:s1@NTPOFF, %eax432; X86_LINUX-NEXT:    retl433;434; X64_LINUX-LABEL: f11:435; X64_LINUX:       # %bb.0: # %entry436; X64_LINUX-NEXT:    movzwl %fs:s1@TPOFF, %eax437; X64_LINUX-NEXT:    retq438;439; X86_WIN-LABEL: f11:440; X86_WIN:       # %bb.0: # %entry441; X86_WIN-NEXT:    movl __tls_index, %eax442; X86_WIN-NEXT:    movl %fs:__tls_array, %ecx443; X86_WIN-NEXT:    movl (%ecx,%eax,4), %eax444; X86_WIN-NEXT:    movzwl _s1@SECREL32(%eax), %eax445; X86_WIN-NEXT:    retl446;447; X64_WIN-LABEL: f11:448; X64_WIN:       # %bb.0: # %entry449; X64_WIN-NEXT:    movl _tls_index(%rip), %eax450; X64_WIN-NEXT:    movq %gs:88, %rcx451; X64_WIN-NEXT:    movq (%rcx,%rax,8), %rax452; X64_WIN-NEXT:    movzwl s1@SECREL32(%rax), %eax453; X64_WIN-NEXT:    retq454;455; MINGW32-LABEL: f11:456; MINGW32:       # %bb.0: # %entry457; MINGW32-NEXT:    movl __tls_index, %eax458; MINGW32-NEXT:    movl %fs:44, %ecx459; MINGW32-NEXT:    movl (%ecx,%eax,4), %eax460; MINGW32-NEXT:    movzwl _s1@SECREL32(%eax), %eax461; MINGW32-NEXT:    retl462 463entry:464  %tmp1 = load i16, ptr @s1465  ret i16 %tmp1466}467 468define dso_local i32 @f12() {469; X86_LINUX-LABEL: f12:470; X86_LINUX:       # %bb.0: # %entry471; X86_LINUX-NEXT:    movswl %gs:s1@NTPOFF, %eax472; X86_LINUX-NEXT:    retl473;474; X64_LINUX-LABEL: f12:475; X64_LINUX:       # %bb.0: # %entry476; X64_LINUX-NEXT:    movswl %fs:s1@TPOFF, %eax477; X64_LINUX-NEXT:    retq478;479; X86_WIN-LABEL: f12:480; X86_WIN:       # %bb.0: # %entry481; X86_WIN-NEXT:    movl __tls_index, %eax482; X86_WIN-NEXT:    movl %fs:__tls_array, %ecx483; X86_WIN-NEXT:    movl (%ecx,%eax,4), %eax484; X86_WIN-NEXT:    movswl _s1@SECREL32(%eax), %eax485; X86_WIN-NEXT:    retl486;487; X64_WIN-LABEL: f12:488; X64_WIN:       # %bb.0: # %entry489; X64_WIN-NEXT:    movl _tls_index(%rip), %eax490; X64_WIN-NEXT:    movq %gs:88, %rcx491; X64_WIN-NEXT:    movq (%rcx,%rax,8), %rax492; X64_WIN-NEXT:    movswl s1@SECREL32(%rax), %eax493; X64_WIN-NEXT:    retq494;495; MINGW32-LABEL: f12:496; MINGW32:       # %bb.0: # %entry497; MINGW32-NEXT:    movl __tls_index, %eax498; MINGW32-NEXT:    movl %fs:44, %ecx499; MINGW32-NEXT:    movl (%ecx,%eax,4), %eax500; MINGW32-NEXT:    movswl _s1@SECREL32(%eax), %eax501; MINGW32-NEXT:    retl502 503 504entry:505  %tmp1 = load i16, ptr @s1506  %tmp2 = sext i16 %tmp1 to i32507  ret i32 %tmp2508}509 510define dso_local i8 @f13() {511; X86_LINUX-LABEL: f13:512; X86_LINUX:       # %bb.0: # %entry513; X86_LINUX-NEXT:    movzbl %gs:b1@NTPOFF, %eax514; X86_LINUX-NEXT:    retl515;516; X64_LINUX-LABEL: f13:517; X64_LINUX:       # %bb.0: # %entry518; X64_LINUX-NEXT:    movzbl %fs:b1@TPOFF, %eax519; X64_LINUX-NEXT:    retq520;521; X86_WIN-LABEL: f13:522; X86_WIN:       # %bb.0: # %entry523; X86_WIN-NEXT:    movl __tls_index, %eax524; X86_WIN-NEXT:    movl %fs:__tls_array, %ecx525; X86_WIN-NEXT:    movl (%ecx,%eax,4), %eax526; X86_WIN-NEXT:    movzbl _b1@SECREL32(%eax), %eax527; X86_WIN-NEXT:    retl528;529; X64_WIN-LABEL: f13:530; X64_WIN:       # %bb.0: # %entry531; X64_WIN-NEXT:    movl _tls_index(%rip), %eax532; X64_WIN-NEXT:    movq %gs:88, %rcx533; X64_WIN-NEXT:    movq (%rcx,%rax,8), %rax534; X64_WIN-NEXT:    movzbl b1@SECREL32(%rax), %eax535; X64_WIN-NEXT:    retq536;537; MINGW32-LABEL: f13:538; MINGW32:       # %bb.0: # %entry539; MINGW32-NEXT:    movl __tls_index, %eax540; MINGW32-NEXT:    movl %fs:44, %ecx541; MINGW32-NEXT:    movl (%ecx,%eax,4), %eax542; MINGW32-NEXT:    movzbl _b1@SECREL32(%eax), %eax543; MINGW32-NEXT:    retl544 545entry:546  %tmp1 = load i8, ptr @b1547  ret i8 %tmp1548}549 550define dso_local i32 @f14() {551; X86_LINUX-LABEL: f14:552; X86_LINUX:       # %bb.0: # %entry553; X86_LINUX-NEXT:    movsbl %gs:b1@NTPOFF, %eax554; X86_LINUX-NEXT:    retl555;556; X64_LINUX-LABEL: f14:557; X64_LINUX:       # %bb.0: # %entry558; X64_LINUX-NEXT:    movsbl %fs:b1@TPOFF, %eax559; X64_LINUX-NEXT:    retq560;561; X86_WIN-LABEL: f14:562; X86_WIN:       # %bb.0: # %entry563; X86_WIN-NEXT:    movl __tls_index, %eax564; X86_WIN-NEXT:    movl %fs:__tls_array, %ecx565; X86_WIN-NEXT:    movl (%ecx,%eax,4), %eax566; X86_WIN-NEXT:    movsbl _b1@SECREL32(%eax), %eax567; X86_WIN-NEXT:    retl568;569; X64_WIN-LABEL: f14:570; X64_WIN:       # %bb.0: # %entry571; X64_WIN-NEXT:    movl _tls_index(%rip), %eax572; X64_WIN-NEXT:    movq %gs:88, %rcx573; X64_WIN-NEXT:    movq (%rcx,%rax,8), %rax574; X64_WIN-NEXT:    movsbl b1@SECREL32(%rax), %eax575; X64_WIN-NEXT:    retq576;577; MINGW32-LABEL: f14:578; MINGW32:       # %bb.0: # %entry579; MINGW32-NEXT:    movl __tls_index, %eax580; MINGW32-NEXT:    movl %fs:44, %ecx581; MINGW32-NEXT:    movl (%ecx,%eax,4), %eax582; MINGW32-NEXT:    movsbl _b1@SECREL32(%eax), %eax583; MINGW32-NEXT:    retl584 585entry:586  %tmp1 = load i8, ptr @b1587  %tmp2 = sext i8 %tmp1 to i32588  ret i32 %tmp2589}590 591define dso_local ptr @f15() {592; X86_LINUX-LABEL: f15:593; X86_LINUX:       # %bb.0: # %entry594; X86_LINUX-NEXT:    movl %gs:0, %eax595; X86_LINUX-NEXT:    leal b2@NTPOFF(%eax), %eax596; X86_LINUX-NEXT:    retl597;598; X64_LINUX-LABEL: f15:599; X64_LINUX:       # %bb.0: # %entry600; X64_LINUX-NEXT:    movq %fs:0, %rax601; X64_LINUX-NEXT:    leaq b2@TPOFF(%rax), %rax602; X64_LINUX-NEXT:    retq603;604; X86_WIN-LABEL: f15:605; X86_WIN:       # %bb.0: # %entry606; X86_WIN-NEXT:    movl %fs:__tls_array, %eax607; X86_WIN-NEXT:    movl (%eax), %eax608; X86_WIN-NEXT:    leal _b2@SECREL32(%eax), %eax609; X86_WIN-NEXT:    retl610;611; X64_WIN-LABEL: f15:612; X64_WIN:       # %bb.0: # %entry613; X64_WIN-NEXT:    movq %gs:88, %rax614; X64_WIN-NEXT:    movq (%rax), %rax615; X64_WIN-NEXT:    leaq b2@SECREL32(%rax), %rax616; X64_WIN-NEXT:    retq617;618; MINGW32-LABEL: f15:619; MINGW32:       # %bb.0: # %entry620; MINGW32-NEXT:    movl %fs:44, %eax621; MINGW32-NEXT:    movl (%eax), %eax622; MINGW32-NEXT:    leal _b2@SECREL32(%eax), %eax623; MINGW32-NEXT:    retl624entry:625  ret ptr @b2626}627 628 629define dso_local ptr @f16() {630; X86_LINUX-LABEL: f16:631; X86_LINUX:       # %bb.0:632; X86_LINUX-NEXT:    movl %gs:0, %eax633; X86_LINUX-NEXT:    leal i6@NTPOFF(%eax), %eax634; X86_LINUX-NEXT:    retl635;636; X64_LINUX-LABEL: f16:637; X64_LINUX:       # %bb.0:638; X64_LINUX-NEXT:    movq %fs:0, %rax639; X64_LINUX-NEXT:    leaq i6@TPOFF(%rax), %rax640; X64_LINUX-NEXT:    retq641;642; X86_WIN-LABEL: f16:643; X86_WIN:       # %bb.0:644; X86_WIN-NEXT:    movl __tls_index, %eax645; X86_WIN-NEXT:    movl %fs:__tls_array, %ecx646; X86_WIN-NEXT:    movl (%ecx,%eax,4), %eax647; X86_WIN-NEXT:    leal _i6@SECREL32(%eax), %eax648; X86_WIN-NEXT:    retl649;650; X64_WIN-LABEL: f16:651; X64_WIN:       # %bb.0:652; X64_WIN-NEXT:    movl _tls_index(%rip), %eax653; X64_WIN-NEXT:    movq %gs:88, %rcx654; X64_WIN-NEXT:    movq (%rcx,%rax,8), %rax655; X64_WIN-NEXT:    leaq i6@SECREL32(%rax), %rax656; X64_WIN-NEXT:    retq657;658; MINGW32-LABEL: f16:659; MINGW32:       # %bb.0:660; MINGW32-NEXT:    movl __tls_index, %eax661; MINGW32-NEXT:    movl %fs:44, %ecx662; MINGW32-NEXT:    movl (%ecx,%eax,4), %eax663; MINGW32-NEXT:    leal _i6@SECREL32(%eax), %eax664; MINGW32-NEXT:    retl665 666 667  ret ptr @i6668}669 670; NOTE: Similar to f1() but with direct TLS segment access disabled671define dso_local i32 @f17() #0 {672; X86_LINUX-LABEL: f17:673; X86_LINUX:       # %bb.0: # %entry674; X86_LINUX-NEXT:    movl %gs:0, %eax675; X86_LINUX-NEXT:    movl i1@NTPOFF(%eax), %eax676; X86_LINUX-NEXT:    retl677;678; X64_LINUX-LABEL: f17:679; X64_LINUX:       # %bb.0: # %entry680; X64_LINUX-NEXT:    movq %fs:0, %rax681; X64_LINUX-NEXT:    movl i1@TPOFF(%rax), %eax682; X64_LINUX-NEXT:    retq683;684; X86_WIN-LABEL: f17:685; X86_WIN:       # %bb.0: # %entry686; X86_WIN-NEXT:    movl __tls_index, %eax687; X86_WIN-NEXT:    movl %fs:__tls_array, %ecx688; X86_WIN-NEXT:    movl (%ecx,%eax,4), %eax689; X86_WIN-NEXT:    movl _i1@SECREL32(%eax), %eax690; X86_WIN-NEXT:    retl691;692; X64_WIN-LABEL: f17:693; X64_WIN:       # %bb.0: # %entry694; X64_WIN-NEXT:    movl _tls_index(%rip), %eax695; X64_WIN-NEXT:    movq %gs:88, %rcx696; X64_WIN-NEXT:    movq (%rcx,%rax,8), %rax697; X64_WIN-NEXT:    movl i1@SECREL32(%rax), %eax698; X64_WIN-NEXT:    retq699;700; MINGW32-LABEL: f17:701; MINGW32:       # %bb.0: # %entry702; MINGW32-NEXT:    movl __tls_index, %eax703; MINGW32-NEXT:    movl %fs:44, %ecx704; MINGW32-NEXT:    movl (%ecx,%eax,4), %eax705; MINGW32-NEXT:    movl _i1@SECREL32(%eax), %eax706; MINGW32-NEXT:    retl707 708entry:709  %tmp1 = load i32, ptr @i1710  ret i32 %tmp1711}712 713; NOTE: Similar to f3() but with direct TLS segment access disabled714define dso_local i32 @f18() #1 {715; X86_LINUX-LABEL: f18:716; X86_LINUX:       # %bb.0: # %entry717; X86_LINUX-NEXT:    movl i2@INDNTPOFF, %eax718; X86_LINUX-NEXT:    movl %gs:0, %ecx719; X86_LINUX-NEXT:    movl (%ecx,%eax), %eax720; X86_LINUX-NEXT:    retl721;722; X64_LINUX-LABEL: f18:723; X64_LINUX:       # %bb.0: # %entry724; X64_LINUX-NEXT:    movq i2@GOTTPOFF(%rip), %rax725; X64_LINUX-NEXT:    movq %fs:0, %rcx726; X64_LINUX-NEXT:    movl (%rcx,%rax), %eax727; X64_LINUX-NEXT:    retq728;729; X86_WIN-LABEL: f18:730; X86_WIN:       # %bb.0: # %entry731; X86_WIN-NEXT:    movl __tls_index, %eax732; X86_WIN-NEXT:    movl %fs:__tls_array, %ecx733; X86_WIN-NEXT:    movl (%ecx,%eax,4), %eax734; X86_WIN-NEXT:    movl _i2@SECREL32(%eax), %eax735; X86_WIN-NEXT:    retl736;737; X64_WIN-LABEL: f18:738; X64_WIN:       # %bb.0: # %entry739; X64_WIN-NEXT:    movl _tls_index(%rip), %eax740; X64_WIN-NEXT:    movq %gs:88, %rcx741; X64_WIN-NEXT:    movq (%rcx,%rax,8), %rax742; X64_WIN-NEXT:    movl i2@SECREL32(%rax), %eax743; X64_WIN-NEXT:    retq744;745; MINGW32-LABEL: f18:746; MINGW32:       # %bb.0: # %entry747; MINGW32-NEXT:    movl __tls_index, %eax748; MINGW32-NEXT:    movl %fs:44, %ecx749; MINGW32-NEXT:    movl (%ecx,%eax,4), %eax750; MINGW32-NEXT:    movl _i2@SECREL32(%eax), %eax751; MINGW32-NEXT:    retl752 753 754entry:755  %tmp1 = load i32, ptr @i2756  ret i32 %tmp1757}758 759attributes #0 = { "indirect-tls-seg-refs" }760attributes #1 = { nounwind "indirect-tls-seg-refs" }761