brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.0 KiB · 4cf5669 Raw
264 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -verify-machineinstrs < %s -mtriple=ppc32-- -mcpu=g3 | FileCheck %s --check-prefix=G33; RUN: llc -verify-machineinstrs < %s -mtriple=ppc32-- -mcpu=g5 | FileCheck %s --check-prefix=G54 5; Test that vectors are scalarized/lowered correctly.6 7%f4 = type <4 x float>8%i4 = type <4 x i32>9 10define void @splat(ptr %P, ptr %Q, float %X) nounwind {11; G3-LABEL: splat:12; G3:       # %bb.0:13; G3-NEXT:    lfs 0, 12(4)14; G3-NEXT:    lfs 2, 8(4)15; G3-NEXT:    lfs 3, 4(4)16; G3-NEXT:    fadds 0, 0, 117; G3-NEXT:    lfs 4, 0(4)18; G3-NEXT:    stfs 0, 12(3)19; G3-NEXT:    fadds 0, 2, 120; G3-NEXT:    stfs 0, 8(3)21; G3-NEXT:    fadds 0, 3, 122; G3-NEXT:    stfs 0, 4(3)23; G3-NEXT:    fadds 0, 4, 124; G3-NEXT:    stfs 0, 0(3)25; G3-NEXT:    blr26;27; G5-LABEL: splat:28; G5:       # %bb.0:29; G5-NEXT:    stwu 1, -32(1)30; G5-NEXT:    stfs 1, 16(1)31; G5-NEXT:    addi 5, 1, 1632; G5-NEXT:    lvx 2, 0, 533; G5-NEXT:    lvx 3, 0, 434; G5-NEXT:    vspltw 2, 2, 035; G5-NEXT:    vaddfp 2, 3, 236; G5-NEXT:    stvx 2, 0, 337; G5-NEXT:    addi 1, 1, 3238; G5-NEXT:    blr39  %tmp = insertelement %f4 undef, float %X, i32 0   ; <%f4> [#uses=1]40  %tmp2 = insertelement %f4 %tmp, float %X, i32 1   ; <%f4> [#uses=1]41  %tmp4 = insertelement %f4 %tmp2, float %X, i32 2    ; <%f4> [#uses=1]42  %tmp6 = insertelement %f4 %tmp4, float %X, i32 3    ; <%f4> [#uses=1]43  %q = load %f4, ptr %Q         ; <%f4> [#uses=1]44  %R = fadd %f4 %q, %tmp6    ; <%f4> [#uses=1]45  store %f4 %R, ptr %P46  ret void47}48 49define void @splat_i4(ptr %P, ptr %Q, i32 %X) nounwind {50; G3-LABEL: splat_i4:51; G3:       # %bb.0:52; G3-NEXT:    lwz 6, 12(4)53; G3-NEXT:    lwz 7, 8(4)54; G3-NEXT:    lwz 8, 4(4)55; G3-NEXT:    add 6, 6, 556; G3-NEXT:    lwz 4, 0(4)57; G3-NEXT:    stw 6, 12(3)58; G3-NEXT:    add 6, 7, 559; G3-NEXT:    stw 6, 8(3)60; G3-NEXT:    add 6, 8, 561; G3-NEXT:    add 4, 4, 562; G3-NEXT:    stw 6, 4(3)63; G3-NEXT:    stw 4, 0(3)64; G3-NEXT:    blr65;66; G5-LABEL: splat_i4:67; G5:       # %bb.0:68; G5-NEXT:    stwu 1, -32(1)69; G5-NEXT:    stw 5, 16(1)70; G5-NEXT:    addi 5, 1, 1671; G5-NEXT:    lvx 2, 0, 572; G5-NEXT:    lvx 3, 0, 473; G5-NEXT:    vspltw 2, 2, 074; G5-NEXT:    vadduwm 2, 3, 275; G5-NEXT:    stvx 2, 0, 376; G5-NEXT:    addi 1, 1, 3277; G5-NEXT:    blr78  %tmp = insertelement %i4 undef, i32 %X, i32 0     ; <%i4> [#uses=1]79  %tmp2 = insertelement %i4 %tmp, i32 %X, i32 1     ; <%i4> [#uses=1]80  %tmp4 = insertelement %i4 %tmp2, i32 %X, i32 2    ; <%i4> [#uses=1]81  %tmp6 = insertelement %i4 %tmp4, i32 %X, i32 3    ; <%i4> [#uses=1]82  %q = load %i4, ptr %Q         ; <%i4> [#uses=1]83  %R = add %i4 %q, %tmp6    ; <%i4> [#uses=1]84  store %i4 %R, ptr %P85  ret void86}87 88define void @splat_imm_i32(ptr %P, ptr %Q, i32 %X) nounwind {89; G3-LABEL: splat_imm_i32:90; G3:       # %bb.0:91; G3-NEXT:    lwz 5, 12(4)92; G3-NEXT:    lwz 6, 8(4)93; G3-NEXT:    lwz 7, 4(4)94; G3-NEXT:    addi 5, 5, -195; G3-NEXT:    lwz 4, 0(4)96; G3-NEXT:    stw 5, 12(3)97; G3-NEXT:    addi 5, 6, -198; G3-NEXT:    stw 5, 8(3)99; G3-NEXT:    addi 5, 7, -1100; G3-NEXT:    addi 4, 4, -1101; G3-NEXT:    stw 5, 4(3)102; G3-NEXT:    stw 4, 0(3)103; G3-NEXT:    blr104;105; G5-LABEL: splat_imm_i32:106; G5:       # %bb.0:107; G5-NEXT:    lvx 2, 0, 4108; G5-NEXT:    vspltisb 3, -1109; G5-NEXT:    vadduwm 2, 2, 3110; G5-NEXT:    stvx 2, 0, 3111; G5-NEXT:    blr112  %q = load %i4, ptr %Q         ; <%i4> [#uses=1]113  %R = add %i4 %q, < i32 -1, i32 -1, i32 -1, i32 -1 >       ; <%i4> [#uses=1]114  store %i4 %R, ptr %P115  ret void116}117 118define void @splat_imm_i16(ptr %P, ptr %Q, i32 %X) nounwind {119; G3-LABEL: splat_imm_i16:120; G3:       # %bb.0:121; G3-NEXT:    lwz 5, 8(4)122; G3-NEXT:    lwz 6, 0(4)123; G3-NEXT:    lwz 7, 4(4)124; G3-NEXT:    addi 5, 5, 1125; G3-NEXT:    lwz 4, 12(4)126; G3-NEXT:    addi 6, 6, 1127; G3-NEXT:    addi 7, 7, 1128; G3-NEXT:    addi 4, 4, 1129; G3-NEXT:    addis 4, 4, 1130; G3-NEXT:    stw 4, 12(3)131; G3-NEXT:    addis 4, 5, 1132; G3-NEXT:    stw 4, 8(3)133; G3-NEXT:    addis 4, 7, 1134; G3-NEXT:    stw 4, 4(3)135; G3-NEXT:    addis 4, 6, 1136; G3-NEXT:    stw 4, 0(3)137; G3-NEXT:    blr138;139; G5-LABEL: splat_imm_i16:140; G5:       # %bb.0:141; G5-NEXT:    lvx 2, 0, 4142; G5-NEXT:    vspltish 3, 1143; G5-NEXT:    vadduwm 2, 2, 3144; G5-NEXT:    stvx 2, 0, 3145; G5-NEXT:    blr146  %q = load %i4, ptr %Q         ; <%i4> [#uses=1]147  %R = add %i4 %q, < i32 65537, i32 65537, i32 65537, i32 65537 >   ; <%i4> [#uses=1]148  store %i4 %R, ptr %P149  ret void150}151 152define void @splat_h(i16 %tmp, ptr %dst) nounwind {153; G3-LABEL: splat_h:154; G3:       # %bb.0:155; G3-NEXT:    sth 3, 14(4)156; G3-NEXT:    sth 3, 12(4)157; G3-NEXT:    sth 3, 10(4)158; G3-NEXT:    sth 3, 8(4)159; G3-NEXT:    sth 3, 6(4)160; G3-NEXT:    sth 3, 4(4)161; G3-NEXT:    sth 3, 2(4)162; G3-NEXT:    sth 3, 0(4)163; G3-NEXT:    blr164;165; G5-LABEL: splat_h:166; G5:       # %bb.0:167; G5-NEXT:    stwu 1, -32(1)168; G5-NEXT:    sth 3, 16(1)169; G5-NEXT:    addi 3, 1, 16170; G5-NEXT:    lvx 2, 0, 3171; G5-NEXT:    vsplth 2, 2, 0172; G5-NEXT:    stvx 2, 0, 4173; G5-NEXT:    addi 1, 1, 32174; G5-NEXT:    blr175  %tmp.upgrd.1 = insertelement <8 x i16> undef, i16 %tmp, i32 0176  %tmp72 = insertelement <8 x i16> %tmp.upgrd.1, i16 %tmp, i32 1177  %tmp73 = insertelement <8 x i16> %tmp72, i16 %tmp, i32 2178  %tmp74 = insertelement <8 x i16> %tmp73, i16 %tmp, i32 3179  %tmp75 = insertelement <8 x i16> %tmp74, i16 %tmp, i32 4180  %tmp76 = insertelement <8 x i16> %tmp75, i16 %tmp, i32 5181  %tmp77 = insertelement <8 x i16> %tmp76, i16 %tmp, i32 6182  %tmp78 = insertelement <8 x i16> %tmp77, i16 %tmp, i32 7183  %tmp78.upgrd.2 = bitcast <8 x i16> %tmp78 to <16 x i8>184  store <16 x i8> %tmp78.upgrd.2, ptr %dst185  ret void186}187 188define void @spltish(ptr %A, ptr %B) nounwind {189; G3-LABEL: spltish:190; G3:       # %bb.0:191; G3-NEXT:    stwu 1, -48(1)192; G3-NEXT:    stw 30, 40(1) # 4-byte Folded Spill193; G3-NEXT:    lbz 5, 0(4)194; G3-NEXT:    lbz 30, 15(4)195; G3-NEXT:    stw 29, 36(1) # 4-byte Folded Spill196; G3-NEXT:    lbz 29, 13(4)197; G3-NEXT:    stw 28, 32(1) # 4-byte Folded Spill198; G3-NEXT:    lbz 28, 11(4)199; G3-NEXT:    stw 27, 28(1) # 4-byte Folded Spill200; G3-NEXT:    lbz 27, 9(4)201; G3-NEXT:    stw 24, 16(1) # 4-byte Folded Spill202; G3-NEXT:    stw 25, 20(1) # 4-byte Folded Spill203; G3-NEXT:    stw 26, 24(1) # 4-byte Folded Spill204; G3-NEXT:    lbz 6, 2(4)205; G3-NEXT:    lbz 7, 4(4)206; G3-NEXT:    lbz 8, 6(4)207; G3-NEXT:    lbz 9, 8(4)208; G3-NEXT:    lbz 10, 10(4)209; G3-NEXT:    lbz 11, 12(4)210; G3-NEXT:    lbz 12, 14(4)211; G3-NEXT:    lbz 26, 7(4)212; G3-NEXT:    lbz 25, 5(4)213; G3-NEXT:    lbz 24, 3(4)214; G3-NEXT:    lbz 4, 1(4)215; G3-NEXT:    stb 5, 0(3)216; G3-NEXT:    addi 5, 30, -15217; G3-NEXT:    stb 5, 15(3)218; G3-NEXT:    addi 5, 29, -15219; G3-NEXT:    stb 5, 13(3)220; G3-NEXT:    addi 5, 28, -15221; G3-NEXT:    stb 5, 11(3)222; G3-NEXT:    addi 5, 27, -15223; G3-NEXT:    stb 5, 9(3)224; G3-NEXT:    addi 5, 26, -15225; G3-NEXT:    stb 5, 7(3)226; G3-NEXT:    addi 5, 25, -15227; G3-NEXT:    stb 5, 5(3)228; G3-NEXT:    addi 5, 24, -15229; G3-NEXT:    addi 4, 4, -15230; G3-NEXT:    stb 12, 14(3)231; G3-NEXT:    stb 11, 12(3)232; G3-NEXT:    stb 10, 10(3)233; G3-NEXT:    stb 9, 8(3)234; G3-NEXT:    stb 8, 6(3)235; G3-NEXT:    stb 7, 4(3)236; G3-NEXT:    stb 6, 2(3)237; G3-NEXT:    stb 5, 3(3)238; G3-NEXT:    stb 4, 1(3)239; G3-NEXT:    lwz 30, 40(1) # 4-byte Folded Reload240; G3-NEXT:    lwz 29, 36(1) # 4-byte Folded Reload241; G3-NEXT:    lwz 28, 32(1) # 4-byte Folded Reload242; G3-NEXT:    lwz 27, 28(1) # 4-byte Folded Reload243; G3-NEXT:    lwz 26, 24(1) # 4-byte Folded Reload244; G3-NEXT:    lwz 25, 20(1) # 4-byte Folded Reload245; G3-NEXT:    lwz 24, 16(1) # 4-byte Folded Reload246; G3-NEXT:    addi 1, 1, 48247; G3-NEXT:    blr248;249; G5-LABEL: spltish:250; G5:       # %bb.0:251; G5-NEXT:    lvx 2, 0, 4252; G5-NEXT:    vspltish 3, 15253; G5-NEXT:    vsububm 2, 2, 3254; G5-NEXT:    stvx 2, 0, 3255; G5-NEXT:    blr256  %tmp = load <16 x i8>, ptr %B         ; <<16 x i8>> [#uses=1]257  %tmp.s = bitcast <16 x i8> %tmp to <16 x i8>      ; <<16 x i8>> [#uses=1]258  %tmp4 = sub <16 x i8> %tmp.s, bitcast (<8 x i16> < i16 15, i16 15, i16 15, i16 15, i16 15, i16259 15, i16 15, i16 15 > to <16 x i8>)       ; <<16 x i8>> [#uses=1]260  %tmp4.u = bitcast <16 x i8> %tmp4 to <16 x i8>    ; <<16 x i8>> [#uses=1]261  store <16 x i8> %tmp4.u, ptr %A262  ret void263}264