brintos

brintos / llvm-project-archived public Read only

0
0
Text · 13.6 KiB · aa0b441 Raw
383 lines · plain
1; RUN: llc -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff \2; RUN:     -ppc-asm-full-reg-names < %s | FileCheck %s \3; RUN:     --check-prefix=CHECK644; RUN: llc -verify-machineinstrs -mtriple powerpc-ibm-aix-xcoff \5; RUN:     -ppc-asm-full-reg-names < %s | FileCheck %s \6; RUN:     --check-prefix=CHECK327; RUN: llc -verify-machineinstrs -mtriple powerpc64le-unknown-linux \8; RUN:     -ppc-asm-full-reg-names < %s | FileCheck %s \9; RUN:     --check-prefix=LINUX64LE10; RUN: llc -verify-machineinstrs -mtriple powerpc64-unknown-linux \11; RUN:     -ppc-asm-full-reg-names < %s | FileCheck %s \12; RUN:     --check-prefix=LINUX64BE13 14@.str = private unnamed_addr constant [47 x i8] c"TLS variable 1, 2 and non-TLS var: %s, %s, %s\0A\00", align 115@a = internal thread_local constant [5 x i8] c"tls1\00", align 116@b = internal thread_local constant [5 x i8] c"tls2\00", align 117@c = internal constant [15 x i8] c"Regular global\00", align 118@d = internal constant [10 x i32] [i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10], align 419@e = internal constant [4 x float] [float 0x4055F33340000000, float 0x4056333340000000, float 0x40567999A0000000, float 0x4056B33340000000], align 420 21declare noundef signext i32 @printf(ptr nocapture noundef readonly, ...) local_unnamed_addr #022declare nonnull ptr @llvm.threadlocal.address.p0(ptr nonnull) #123declare void @callee(ptr noundef) local_unnamed_addr #324declare void @callee2(ptr noundef) local_unnamed_addr #325 26define void @print_tls_func() {27; CHECK64-LABEL: print_tls_func:28; CHECK64:       # %bb.0: # %entry29; CHECK64-NEXT:    mflr r030; CHECK64-NEXT:    stdu r1, -112(r1)31; CHECK64-NEXT:    ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML"32; CHECK64-NEXT:    std r0, 128(r1)33; CHECK64-NEXT:    ld r6, L..C1(r2) # @_MergedGlobals34; CHECK64-NEXT:    bla .__tls_get_mod[PR]35; CHECK64-NEXT:    ld r4, L..C2(r2) # target-flags(ppc-tlsld) @a36; CHECK64-NEXT:    ld r5, L..C3(r2) # target-flags(ppc-tlsld) @b37; CHECK64-NEXT:    add r4, r3, r438; CHECK64-NEXT:    add r5, r3, r539; CHECK64-NEXT:    addi r3, r6, 7240; CHECK64-NEXT:    bl .printf[PR]41; CHECK64-NEXT:    nop42; CHECK64-NEXT:    addi r1, r1, 11243; CHECK64-NEXT:    ld r0, 16(r1)44; CHECK64-NEXT:    mtlr r045; CHECK64-NEXT:    blr46;47; CHECK32-LABEL: print_tls_func:48; CHECK32:       # %bb.0: # %entry49; CHECK32-NEXT:    mflr r050; CHECK32-NEXT:    stwu r1, -64(r1)51; CHECK32-NEXT:    lwz r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML"52; CHECK32-NEXT:    stw r0, 72(r1)53; CHECK32-NEXT:    lwz r6, L..C1(r2) # @_MergedGlobals54; CHECK32-NEXT:    bla .__tls_get_mod[PR]55; CHECK32-NEXT:    lwz r4, L..C2(r2) # target-flags(ppc-tlsld) @a56; CHECK32-NEXT:    lwz r5, L..C3(r2) # target-flags(ppc-tlsld) @b57; CHECK32-NEXT:    add r4, r3, r458; CHECK32-NEXT:    add r5, r3, r559; CHECK32-NEXT:    addi r3, r6, 7260; CHECK32-NEXT:    bl .printf[PR]61; CHECK32-NEXT:    nop62; CHECK32-NEXT:    addi r1, r1, 6463; CHECK32-NEXT:    lwz r0, 8(r1)64; CHECK32-NEXT:    mtlr r065; CHECK32-NEXT:    blr66;67; LINUX64LE-LABEL: print_tls_func:68; LINUX64LE:       # %bb.0: # %entry69; LINUX64LE-NEXT:    mflr r070; LINUX64LE-NEXT:    stdu r1, -96(r1)71; LINUX64LE-NEXT:    std r0, 112(r1)72; LINUX64LE-NEXT:    .cfi_def_cfa_offset 9673; LINUX64LE-NEXT:    .cfi_offset lr, 1674; LINUX64LE-NEXT:    addis r3, r13, a@tprel@ha75; LINUX64LE-NEXT:    addi r4, r3, a@tprel@l76; LINUX64LE-NEXT:    addis r3, r13, b@tprel@ha77; LINUX64LE-NEXT:    addi r5, r3, b@tprel@l78; LINUX64LE-NEXT:    addis r3, r2, .L_MergedGlobals@toc@ha79; LINUX64LE-NEXT:    addi r6, r3, .L_MergedGlobals@toc@l80; LINUX64LE-NEXT:    addi r3, r6, 7281; LINUX64LE-NEXT:    bl printf82; LINUX64LE-NEXT:    nop83; LINUX64LE-NEXT:    addi r1, r1, 9684; LINUX64LE-NEXT:    ld r0, 16(r1)85; LINUX64LE-NEXT:    mtlr r086; LINUX64LE-NEXT:    blr87;88; LINUX64BE-LABEL: print_tls_func:89; LINUX64BE:       # %bb.0: # %entry90; LINUX64BE-NEXT:    mflr r091; LINUX64BE-NEXT:    stdu r1, -128(r1)92; LINUX64BE-NEXT:    std r0, 144(r1)93; LINUX64BE-NEXT:    .cfi_def_cfa_offset 12894; LINUX64BE-NEXT:    .cfi_offset lr, 1695; LINUX64BE-NEXT:    .cfi_offset r30, -1696; LINUX64BE-NEXT:    addis r3, r2, a@got@tlsld@ha97; LINUX64BE-NEXT:    std r30, 112(r1) # 8-byte Folded Spill98; LINUX64BE-NEXT:    addi r3, r3, a@got@tlsld@l99; LINUX64BE-NEXT:    bl __tls_get_addr(a@tlsld)100; LINUX64BE-NEXT:    nop101; LINUX64BE-NEXT:    addis r4, r2, b@got@tlsld@ha102; LINUX64BE-NEXT:    addis r3, r3, a@dtprel@ha103; LINUX64BE-NEXT:    addi r30, r3, a@dtprel@l104; LINUX64BE-NEXT:    addi r3, r4, b@got@tlsld@l105; LINUX64BE-NEXT:    bl __tls_get_addr(b@tlsld)106; LINUX64BE-NEXT:    nop107; LINUX64BE-NEXT:    addis r3, r3, b@dtprel@ha108; LINUX64BE-NEXT:    mr r4, r30109; LINUX64BE-NEXT:    addi r5, r3, b@dtprel@l110; LINUX64BE-NEXT:    addis r3, r2, .L_MergedGlobals@toc@ha111; LINUX64BE-NEXT:    addi r6, r3, .L_MergedGlobals@toc@l112; LINUX64BE-NEXT:    addi r3, r6, 72113; LINUX64BE-NEXT:    bl printf114; LINUX64BE-NEXT:    nop115; LINUX64BE-NEXT:    ld r30, 112(r1) # 8-byte Folded Reload116; LINUX64BE-NEXT:    addi r1, r1, 128117; LINUX64BE-NEXT:    ld r0, 16(r1)118; LINUX64BE-NEXT:    mtlr r0119; LINUX64BE-NEXT:    blr120entry:121  %0 = tail call align 1 ptr @llvm.threadlocal.address.p0(ptr align 1 @a)122  %1 = tail call align 1 ptr @llvm.threadlocal.address.p0(ptr align 1 @b)123  %call = tail call signext i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str, ptr noundef nonnull %0, ptr noundef nonnull %1, ptr noundef nonnull @c)124  ret void125}126 127define void @test_func() {128; CHECK64-LABEL: test_func:129; CHECK64:       # %bb.0: # %entry130; CHECK64-NEXT:    mflr r0131; CHECK64-NEXT:    stdu r1, -112(r1)132; CHECK64-NEXT:    ld r3, L..C1(r2) # @_MergedGlobals133; CHECK64-NEXT:    std r0, 128(r1)134; CHECK64-NEXT:    addi r3, r3, 32135; CHECK64-NEXT:    bl .callee[PR]136; CHECK64-NEXT:    nop137; CHECK64-NEXT:    addi r1, r1, 112138; CHECK64-NEXT:    ld r0, 16(r1)139; CHECK64-NEXT:    mtlr r0140; CHECK64-NEXT:    blr141;142; CHECK32-LABEL: test_func:143; CHECK32:       # %bb.0: # %entry144; CHECK32-NEXT:    mflr r0145; CHECK32-NEXT:    stwu r1, -64(r1)146; CHECK32-NEXT:    lwz r3, L..C1(r2) # @_MergedGlobals147; CHECK32-NEXT:    stw r0, 72(r1)148; CHECK32-NEXT:    addi r3, r3, 32149; CHECK32-NEXT:    bl .callee[PR]150; CHECK32-NEXT:    nop151; CHECK32-NEXT:    addi r1, r1, 64152; CHECK32-NEXT:    lwz r0, 8(r1)153; CHECK32-NEXT:    mtlr r0154; CHECK32-NEXT:    blr155 156; LINUX64LE-LABEL: test_func:157; LINUX64LE:       # %bb.0: # %entry158; LINUX64LE-NEXT:    mflr r0159; LINUX64LE-NEXT:    stdu r1, -32(r1)160; LINUX64LE-NEXT:    std r0, 48(r1)161; LINUX64LE-NEXT:    .cfi_def_cfa_offset 32162; LINUX64LE-NEXT:    .cfi_offset lr, 16163; LINUX64LE-NEXT:    addis r3, r2, .L_MergedGlobals@toc@ha164; LINUX64LE-NEXT:    addi r3, r3, .L_MergedGlobals@toc@l165; LINUX64LE-NEXT:    addi r3, r3, 32166; LINUX64LE-NEXT:    bl callee167; LINUX64LE-NEXT:    nop168; LINUX64LE-NEXT:    addi r1, r1, 32169; LINUX64LE-NEXT:    ld r0, 16(r1)170; LINUX64LE-NEXT:    mtlr r0171; LINUX64LE-NEXT:    blr172;173; LINUX64BE-LABEL: test_func:174; LINUX64BE:       # %bb.0: # %entry175; LINUX64BE-NEXT:    mflr r0176; LINUX64BE-NEXT:    stdu r1, -112(r1)177; LINUX64BE-NEXT:    std r0, 128(r1)178; LINUX64BE-NEXT:    .cfi_def_cfa_offset 112179; LINUX64BE-NEXT:    .cfi_offset lr, 16180; LINUX64BE-NEXT:    addis r3, r2, .L_MergedGlobals@toc@ha181; LINUX64BE-NEXT:    addi r3, r3, .L_MergedGlobals@toc@l182; LINUX64BE-NEXT:    addi r3, r3, 32183; LINUX64BE-NEXT:    bl callee184; LINUX64BE-NEXT:    nop185; LINUX64BE-NEXT:    addi r1, r1, 112186; LINUX64BE-NEXT:    ld r0, 16(r1)187; LINUX64BE-NEXT:    mtlr r0188; LINUX64BE-NEXT:    blr189entry:190  tail call void @callee(ptr noundef nonnull @d) #4191  ret void192}193 194define void @test_func2() {195; CHECK64-LABEL: test_func2:196; CHECK64:       # %bb.0: # %entry197; CHECK64-NEXT:    mflr r0198; CHECK64-NEXT:    stdu r1, -112(r1)199; CHECK64-NEXT:    ld r3, L..C1(r2) # @_MergedGlobals200; CHECK64-NEXT:    std r0, 128(r1)201; CHECK64-NEXT:    addi r3, r3, 16202; CHECK64-NEXT:    bl .callee2[PR]203; CHECK64-NEXT:    nop204; CHECK64-NEXT:    addi r1, r1, 112205; CHECK64-NEXT:    ld r0, 16(r1)206; CHECK64-NEXT:    mtlr r0207; CHECK64-NEXT:    blr208;209; CHECK32-LABEL: test_func2:210; CHECK32:       # %bb.0: # %entry211; CHECK32-NEXT:    mflr r0212; CHECK32-NEXT:    stwu r1, -64(r1)213; CHECK32-NEXT:    lwz r3, L..C1(r2) # @_MergedGlobals214; CHECK32-NEXT:    stw r0, 72(r1)215; CHECK32-NEXT:    addi r3, r3, 16216; CHECK32-NEXT:    bl .callee2[PR]217; CHECK32-NEXT:    nop218; CHECK32-NEXT:    addi r1, r1, 64219; CHECK32-NEXT:    lwz r0, 8(r1)220; CHECK32-NEXT:    mtlr r0221; CHECK32-NEXT:    blr222;223; LINUX64LE-LABEL: test_func2:224; LINUX64LE:       # %bb.0: # %entry225; LINUX64LE-NEXT:    mflr r0226; LINUX64LE-NEXT:    stdu r1, -32(r1)227; LINUX64LE-NEXT:    std r0, 48(r1)228; LINUX64LE-NEXT:    .cfi_def_cfa_offset 32229; LINUX64LE-NEXT:    .cfi_offset lr, 16230; LINUX64LE-NEXT:    addis r3, r2, .L_MergedGlobals@toc@ha231; LINUX64LE-NEXT:    addi r3, r3, .L_MergedGlobals@toc@l232; LINUX64LE-NEXT:    addi r3, r3, 16233; LINUX64LE-NEXT:    bl callee2234; LINUX64LE-NEXT:    nop235; LINUX64LE-NEXT:    addi r1, r1, 32236; LINUX64LE-NEXT:    ld r0, 16(r1)237; LINUX64LE-NEXT:    mtlr r0238; LINUX64LE-NEXT:    blr239;240; LINUX64BE-LABEL: test_func2:241; LINUX64BE:       # %bb.0: # %entry242; LINUX64BE-NEXT:    mflr r0243; LINUX64BE-NEXT:    stdu r1, -112(r1)244; LINUX64BE-NEXT:    std r0, 128(r1)245; LINUX64BE-NEXT:    .cfi_def_cfa_offset 112246; LINUX64BE-NEXT:    .cfi_offset lr, 16247; LINUX64BE-NEXT:    addis r3, r2, .L_MergedGlobals@toc@ha248; LINUX64BE-NEXT:    addi r3, r3, .L_MergedGlobals@toc@l249; LINUX64BE-NEXT:    addi r3, r3, 16250; LINUX64BE-NEXT:    bl callee2251; LINUX64BE-NEXT:    nop252; LINUX64BE-NEXT:    addi r1, r1, 112253; LINUX64BE-NEXT:    ld r0, 16(r1)254; LINUX64BE-NEXT:    mtlr r0255; LINUX64BE-NEXT:    blr256entry:257  tail call void @callee2(ptr noundef nonnull @e) #4258  ret void259}260 261; Check the contents of the TLS data and the _MergedGlobals structure to262; check that TLS data has been skipped during global merge.263 264; CHECK64: 	.csect a[TL],2265; CHECK64-NEXT:	.lglobl	a[TL]266; CHECK64-NEXT:	.string	"tls1"267; CHECK64:	.csect b[TL],2268; CHECK64-NEXT:	.lglobl	b[TL]269; CHECK64-NEXT:	.string	"tls2"270; CHECK64:	.csect L.._MergedGlobals[RO],2271; CHECK64:	.align	2272; CHECK64-LABEL: c:273; CHECK64:	.string	"Regular global"274; CHECK64-LABEL: e:275; CHECK64:	.vbyte	4, 0x42af999a276; CHECK64-NEXT:	.vbyte	4, 0x42b1999a277; CHECK64-NEXT:	.vbyte	4, 0x42b3cccd278; CHECK64-NEXT:	.vbyte	4, 0x42b5999a279; CHECK64-LABEL: d:280; CHECK64:	.vbyte	4, 1281; CHECK64-NEXT:	.vbyte	4, 2282; CHECK64-NEXT:	.vbyte	4, 3283; CHECK64-NEXT:	.vbyte	4, 4284; CHECK64-NEXT:	.vbyte	4, 5285; CHECK64-NEXT:	.vbyte	4, 6286; CHECK64-NEXT:	.vbyte	4, 7287; CHECK64-NEXT:	.vbyte	4, 8288; CHECK64-NEXT:	.vbyte	4, 9289; CHECK64-NEXT:	.vbyte	4, 10290; CHECK64-LABEL: L...str291; CHECK64:	.byte	'T,'L,'S,' ,'v,'a,'r,'i,'a,'b,'l,'e,' ,'1,',,' ,'2,' ,'a,'n,'d,' ,'n,'o,'n,'-,'T,'L,'S,' ,'v,'a,'r,':,' ,'%,'s,',,' ,'%,'s,',,' ,'%,'s,0012,0000292; CHECK64: L..C1:293; CHECK64-NEXT: .tc L.._MergedGlobals[TC],L.._MergedGlobals[RO]294; CHECK64: L..C2:295; CHECK64-NEXT:	.tc a[TC],a[TL]@ld296; CHECK64: L..C3:297; CHECK64-NEXT:	.tc b[TC],b[TL]@ld298 299; CHECK32: 	.csect a[TL],2300; CHECK32-NEXT:	.lglobl	a[TL]301; CHECK32-NEXT:	.string	"tls1"302; CHECK32:	.csect b[TL],2303; CHECK32-NEXT:	.lglobl	b[TL]304; CHECK32-NEXT:	.string	"tls2"305; CHECK32:	.csect L.._MergedGlobals[RO],2306; CHECK32:	.align	2307; CHECK32-LABEL: c:308; CHECK32:	.string "Regular global"309; CHECK32-LABEL: e:310; CHECK32:	.vbyte	4, 0x42af999a311; CHECK32-NEXT:	.vbyte	4, 0x42b1999a312; CHECK32-NEXT:	.vbyte	4, 0x42b3cccd313; CHECK32-NEXT:	.vbyte	4, 0x42b5999a314; CHECK32-LABEL: d:315; CHECK32:	.vbyte	4, 1316; CHECK32-NEXT:	.vbyte	4, 2317; CHECK32-NEXT:	.vbyte	4, 3318; CHECK32-NEXT:	.vbyte	4, 4319; CHECK32-NEXT:	.vbyte	4, 5320; CHECK32-NEXT:	.vbyte	4, 6321; CHECK32-NEXT:	.vbyte	4, 7322; CHECK32-NEXT:	.vbyte	4, 8323; CHECK32-NEXT:	.vbyte	4, 9324; CHECK32-NEXT:	.vbyte	4, 10325; CHECK32-LABEL: L...str:326; CHECK32:	.byte	'T,'L,'S,' ,'v,'a,'r,'i,'a,'b,'l,'e,' ,'1,',,' ,'2,' ,'a,'n,'d,' ,'n,'o,'n,'-,'T,'L,'S,' ,'v,'a,'r,':,' ,'%,'s,',,' ,'%,'s,',,' ,'%,'s,0012,0000327; CHECK32: L..C1:328; CHECK32-NEXT: .tc L.._MergedGlobals[TC],L.._MergedGlobals[RO]329; CHECK32: L..C2:330; CHECK32-NEXT:	.tc a[TC],a[TL]@ld331; CHECK32: L..C3:332; CHECK32-NEXT:	.tc b[TC],b[TL]@ld333 334; LINUX64LE: a:335; LINUX64LE-NEXT:       .asciz  "tls1"336; LINUX64LE-NEXT:       .size   a, 5337; LINUX64LE: b:338; LINUX64LE-NEXT:       .asciz  "tls2"339; LINUX64LE-NEXT:       .size   b, 5340; LINUX64LE: .L_MergedGlobals:341; LINUX64LE-NEXT:       .asciz  "Regular global"342; LINUX64LE-NEXT:       .space  1343; LINUX64LE-NEXT:       .long   0x42af999a344; LINUX64LE-NEXT:       .long   0x42b1999a345; LINUX64LE-NEXT:       .long   0x42b3cccd346; LINUX64LE-NEXT:       .long   0x42b5999a347; LINUX64LE-NEXT:       .long   1348; LINUX64LE-NEXT:       .long   2349; LINUX64LE-NEXT:       .long   3350; LINUX64LE-NEXT:       .long   4351; LINUX64LE-NEXT:       .long   5352; LINUX64LE-NEXT:       .long   6353; LINUX64LE-NEXT:       .long   7354; LINUX64LE-NEXT:       .long   8355; LINUX64LE-NEXT:       .long   9356; LINUX64LE-NEXT:       .long   10357; LINUX64LE-NEXT:       .asciz  "TLS variable 1, 2 and non-TLS var: %s, %s, %s\n"358 359; LINUX64BE: a:360; LINUX64BE-NEXT:       .asciz  "tls1"361; LINUX64BE-NEXT:       .size   a, 5362; LINUX64BE: b:363; LINUX64BE-NEXT:       .asciz  "tls2"364; LINUX64BE-NEXT:       .size   b, 5365; LINUX64BE: .L_MergedGlobals:366; LINUX64BE-NEXT:       .asciz  "Regular global"367; LINUX64BE-NEXT:       .space  1368; LINUX64BE-NEXT:       .long   0x42af999a369; LINUX64BE-NEXT:       .long   0x42b1999a370; LINUX64BE-NEXT:       .long   0x42b3cccd371; LINUX64BE-NEXT:       .long   0x42b5999a372; LINUX64BE-NEXT:       .long   1373; LINUX64BE-NEXT:       .long   2374; LINUX64BE-NEXT:       .long   3375; LINUX64BE-NEXT:       .long   4376; LINUX64BE-NEXT:       .long   5377; LINUX64BE-NEXT:       .long   6378; LINUX64BE-NEXT:       .long   7379; LINUX64BE-NEXT:       .long   8380; LINUX64BE-NEXT:       .long   9381; LINUX64BE-NEXT:       .long   10382; LINUX64BE-NEXT:       .asciz  "TLS variable 1, 2 and non-TLS var: %s, %s, %s\n"383