263 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-gnu-linux < %s | FileCheck %s -check-prefix=CHECK3 4@var_char = external thread_local local_unnamed_addr global i8, align 15@var_short = external thread_local local_unnamed_addr global i16, align 26@var_int = external thread_local local_unnamed_addr global i32, align 47@var_long_long = external thread_local local_unnamed_addr global i64, align 88@var_float = external thread_local local_unnamed_addr global float, align 49@var_double = external thread_local local_unnamed_addr global double, align 810 11define dso_local zeroext i8 @test_char_one() {12; CHECK-LABEL: test_char_one:13; CHECK: # %bb.0: # %entry14; CHECK-NEXT: addis 3, 2, var_char@got@tprel@ha15; CHECK-NEXT: ld 3, var_char@got@tprel@l(3)16; CHECK-NEXT: lbzx 3, 3, var_char@tls17; CHECK-NEXT: blr18entry:19 %0 = load i8, ptr @var_char, align 1, !tbaa !420 ret i8 %021}22 23define dso_local void @test_char_two(i32 signext %a) {24; CHECK-LABEL: test_char_two:25; CHECK: # %bb.0: # %entry26; CHECK-NEXT: addis 4, 2, var_char@got@tprel@ha27; CHECK-NEXT: ld 4, var_char@got@tprel@l(4)28; CHECK-NEXT: stbx 3, 4, var_char@tls29; CHECK-NEXT: blr30entry:31 %conv = trunc i32 %a to i832 store i8 %conv, ptr @var_char, align 1, !tbaa !433 ret void34}35 36define dso_local zeroext i8 @test_char_three(i8 zeroext %a) {37; CHECK-LABEL: test_char_three:38; CHECK: # %bb.0: # %entry39; CHECK-NEXT: addis 4, 2, var_char@got@tprel@ha40; CHECK-NEXT: ld 4, var_char@got@tprel@l(4)41; CHECK-NEXT: lbzx 5, 4, var_char@tls42; CHECK-NEXT: add 3, 5, 343; CHECK-NEXT: stbx 3, 4, var_char@tls44; CHECK-NEXT: clrldi 3, 3, 5645; CHECK-NEXT: blr46entry:47 %0 = load i8, ptr @var_char, align 1, !tbaa !448 %add = add i8 %0, %a49 store i8 %add, ptr @var_char, align 1, !tbaa !450 ret i8 %add51}52 53define dso_local signext i16 @test_short_one() {54; CHECK-LABEL: test_short_one:55; CHECK: # %bb.0: # %entry56; CHECK-NEXT: addis 3, 2, var_short@got@tprel@ha57; CHECK-NEXT: ld 3, var_short@got@tprel@l(3)58; CHECK-NEXT: lhax 3, 3, var_short@tls59; CHECK-NEXT: blr60entry:61 %0 = load i16, ptr @var_short, align 2, !tbaa !762 ret i16 %063}64 65define dso_local zeroext i16 @test_short_one_zeroext() {66; CHECK-LABEL: test_short_one_zeroext:67; CHECK: # %bb.0: # %entry68; CHECK-NEXT: addis 3, 2, var_short@got@tprel@ha69; CHECK-NEXT: ld 3, var_short@got@tprel@l(3)70; CHECK-NEXT: lhzx 3, 3, var_short@tls71; CHECK-NEXT: blr72entry:73 %0 = load i16, ptr @var_short, align 2, !tbaa !774 ret i16 %075}76 77define dso_local void @test_short_two(i32 signext %a) {78; CHECK-LABEL: test_short_two:79; CHECK: # %bb.0: # %entry80; CHECK-NEXT: addis 4, 2, var_short@got@tprel@ha81; CHECK-NEXT: ld 4, var_short@got@tprel@l(4)82; CHECK-NEXT: sthx 3, 4, var_short@tls83; CHECK-NEXT: blr84entry:85 %conv = trunc i32 %a to i1686 store i16 %conv, ptr @var_short, align 2, !tbaa !787 ret void88}89 90define dso_local signext i16 @test_short_three(i16 signext %a) {91; CHECK-LABEL: test_short_three:92; CHECK: # %bb.0: # %entry93; CHECK-NEXT: addis 4, 2, var_short@got@tprel@ha94; CHECK-NEXT: ld 4, var_short@got@tprel@l(4)95; CHECK-NEXT: lhzx 5, 4, var_short@tls96; CHECK-NEXT: add 3, 5, 397; CHECK-NEXT: sthx 3, 4, var_short@tls98; CHECK-NEXT: extsh 3, 399; CHECK-NEXT: blr100entry:101 %0 = load i16, ptr @var_short, align 2, !tbaa !7102 %add = add i16 %0, %a103 store i16 %add, ptr @var_short, align 2, !tbaa !7104 ret i16 %add105}106 107define dso_local signext i32 @test_int_one() {108; CHECK-LABEL: test_int_one:109; CHECK: # %bb.0: # %entry110; CHECK-NEXT: addis 3, 2, var_int@got@tprel@ha111; CHECK-NEXT: ld 3, var_int@got@tprel@l(3)112; CHECK-NEXT: lwax 3, 3, var_int@tls113; CHECK-NEXT: blr114entry:115 %0 = load i32, ptr @var_int, align 4, !tbaa !9116 ret i32 %0117}118 119define dso_local zeroext i32 @test_int_one_zeroext() {120; CHECK-LABEL: test_int_one_zeroext:121; CHECK: # %bb.0: # %entry122; CHECK-NEXT: addis 3, 2, var_int@got@tprel@ha123; CHECK-NEXT: ld 3, var_int@got@tprel@l(3)124; CHECK-NEXT: lwzx 3, 3, var_int@tls125; CHECK-NEXT: blr126entry:127 %0 = load i32, ptr @var_int, align 4, !tbaa !9128 ret i32 %0129}130 131define dso_local void @test_int_two(i32 signext %a) {132; CHECK-LABEL: test_int_two:133; CHECK: # %bb.0: # %entry134; CHECK-NEXT: addis 4, 2, var_int@got@tprel@ha135; CHECK-NEXT: ld 4, var_int@got@tprel@l(4)136; CHECK-NEXT: stwx 3, 4, var_int@tls137; CHECK-NEXT: blr138entry:139 store i32 %a, ptr @var_int, align 4, !tbaa !9140 ret void141}142 143define dso_local signext i32 @test_int_three(i32 signext %a) {144; CHECK-LABEL: test_int_three:145; CHECK: # %bb.0: # %entry146; CHECK-NEXT: addis 4, 2, var_int@got@tprel@ha147; CHECK-NEXT: ld 4, var_int@got@tprel@l(4)148; CHECK-NEXT: lwzx 5, 4, var_int@tls149; CHECK-NEXT: add 3, 5, 3150; CHECK-NEXT: stwx 3, 4, var_int@tls151; CHECK-NEXT: extsw 3, 3152; CHECK-NEXT: blr153entry:154 %0 = load i32, ptr @var_int, align 4, !tbaa !9155 %add = add nsw i32 %0, %a156 store i32 %add, ptr @var_int, align 4, !tbaa !9157 ret i32 %add158}159 160define dso_local i64 @test_longlong_one() {161; CHECK-LABEL: test_longlong_one:162; CHECK: # %bb.0: # %entry163; CHECK-NEXT: addis 3, 2, var_long_long@got@tprel@ha164; CHECK-NEXT: ld 3, var_long_long@got@tprel@l(3)165; CHECK-NEXT: ldx 3, 3, var_long_long@tls166; CHECK-NEXT: blr167entry:168 %0 = load i64, ptr @var_long_long, align 8, !tbaa !11169 ret i64 %0170}171 172define dso_local void @test_longlong_two(i32 signext %a) {173; CHECK-LABEL: test_longlong_two:174; CHECK: # %bb.0: # %entry175; CHECK-NEXT: addis 4, 2, var_long_long@got@tprel@ha176; CHECK-NEXT: ld 4, var_long_long@got@tprel@l(4)177; CHECK-NEXT: stdx 3, 4, var_long_long@tls178; CHECK-NEXT: blr179entry:180 %conv = sext i32 %a to i64181 store i64 %conv, ptr @var_long_long, align 8, !tbaa !11182 ret void183}184 185define dso_local i64 @test_longlong_three(i64 %a) {186; CHECK-LABEL: test_longlong_three:187; CHECK: # %bb.0: # %entry188; CHECK-NEXT: addis 4, 2, var_long_long@got@tprel@ha189; CHECK-NEXT: ld 4, var_long_long@got@tprel@l(4)190; CHECK-NEXT: ldx 5, 4, var_long_long@tls191; CHECK-NEXT: add 3, 5, 3192; CHECK-NEXT: stdx 3, 4, var_long_long@tls193; CHECK-NEXT: blr194entry:195 %0 = load i64, ptr @var_long_long, align 8, !tbaa !11196 %add = add nsw i64 %0, %a197 store i64 %add, ptr @var_long_long, align 8, !tbaa !11198 ret i64 %add199}200 201define float @test_float_one() {202; CHECK-LABEL: test_float_one:203; CHECK: # %bb.0: # %entry204; CHECK-NEXT: addis 3, 2, var_float@got@tprel@ha205; CHECK-NEXT: ld 3, var_float@got@tprel@l(3)206; CHECK-NEXT: lfsx 1, 3, var_float@tls207; CHECK-NEXT: blr208entry:209 %0 = load float, ptr @var_float, align 4210 ret float %0211}212 213define void @test_float_two(float %a) {214; CHECK-LABEL: test_float_two:215; CHECK: # %bb.0: # %entry216; CHECK-NEXT: addis 3, 2, var_float@got@tprel@ha217; CHECK-NEXT: ld 3, var_float@got@tprel@l(3)218; CHECK-NEXT: stfsx 1, 3, var_float@tls219; CHECK-NEXT: blr220entry:221 store float %a, ptr @var_float, align 4222 ret void223}224 225define double @test_double_one() {226; CHECK-LABEL: test_double_one:227; CHECK: # %bb.0: # %entry228; CHECK-NEXT: addis 3, 2, var_double@got@tprel@ha229; CHECK-NEXT: ld 3, var_double@got@tprel@l(3)230; CHECK-NEXT: lfdx 1, 3, var_double@tls231; CHECK-NEXT: blr232entry:233 %0 = load double, ptr @var_double, align 8234 ret double %0235}236 237define void @test_double_two(double %a) {238; CHECK-LABEL: test_double_two:239; CHECK: # %bb.0: # %entry240; CHECK-NEXT: addis 3, 2, var_double@got@tprel@ha241; CHECK-NEXT: ld 3, var_double@got@tprel@l(3)242; CHECK-NEXT: stfdx 1, 3, var_double@tls243; CHECK-NEXT: blr244entry:245 store double %a, ptr @var_double, align 8246 ret void247}248 249!llvm.module.flags = !{!0, !1, !2}250 251!0 = !{i32 1, !"wchar_size", i32 4}252!1 = !{i32 7, !"PIC Level", i32 1}253!2 = !{i32 7, !"PIE Level", i32 1}254!4 = !{!5, !5, i64 0}255!5 = !{!"omnipotent char", !6, i64 0}256!6 = !{!"Simple C/C++ TBAA"}257!7 = !{!8, !8, i64 0}258!8 = !{!"short", !5, i64 0}259!9 = !{!10, !10, i64 0}260!10 = !{!"int", !5, i64 0}261!11 = !{!12, !12, i64 0}262!12 = !{!"long long", !5, i64 0}263