brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.8 KiB · 9d11b1f Raw
371 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mcpu=pwr9 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \3; RUN:   -mtriple=powerpc64le-unknown-linux-gnu -verify-machineinstrs < %s | FileCheck  %s \4; RUN:   -check-prefix=P9-VSX5; RUN: llc -mcpu=pwr9 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \6; RUN:   -mtriple=powerpc64le-unknown-linux-gnu -verify-machineinstrs -mattr=-vsx < %s | FileCheck  %s \7; RUN:   -check-prefix=P9-NOVSX8; RUN: llc -mcpu=pwr8 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \9; RUN:   -mtriple=powerpc64le-unknown-linux-gnu -verify-machineinstrs < %s | FileCheck  %s \10; RUN:   -check-prefix=P8-VSX11; RUN: llc -mcpu=pwr8 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \12; RUN:   -mtriple=powerpc64le-unknown-linux-gnu -verify-machineinstrs -mattr=-vsx < %s | FileCheck  %s \13; RUN:   -check-prefix=P8-NOVSX14 15define <1 x i128> @rotl_64(<1 x i128> %num) {16; P9-VSX-LABEL: rotl_64:17; P9-VSX:       # %bb.0: # %entry18; P9-VSX-NEXT:    xxswapd v2, v219; P9-VSX-NEXT:    blr20;21; P9-NOVSX-LABEL: rotl_64:22; P9-NOVSX:       # %bb.0: # %entry23; P9-NOVSX-NEXT:    vsldoi v2, v2, v2, 824; P9-NOVSX-NEXT:    blr25;26; P8-VSX-LABEL: rotl_64:27; P8-VSX:       # %bb.0: # %entry28; P8-VSX-NEXT:    xxswapd v2, v229; P8-VSX-NEXT:    blr30;31; P8-NOVSX-LABEL: rotl_64:32; P8-NOVSX:       # %bb.0: # %entry33; P8-NOVSX-NEXT:    vsldoi v2, v2, v2, 834; P8-NOVSX-NEXT:    blr35entry:36  %shl = shl <1 x i128> %num, <i128 64>37  %shr = lshr <1 x i128> %num, <i128 64>38  %or = or <1 x i128> %shl, %shr39  ret <1 x i128> %or40}41 42define <1 x i128> @rotl_32(<1 x i128> %num) {43; P9-VSX-LABEL: rotl_32:44; P9-VSX:       # %bb.0: # %entry45; P9-VSX-NEXT:    xxsldwi v2, v2, v2, 346; P9-VSX-NEXT:    blr47;48; P9-NOVSX-LABEL: rotl_32:49; P9-NOVSX:       # %bb.0: # %entry50; P9-NOVSX-NEXT:    vsldoi v2, v2, v2, 1251; P9-NOVSX-NEXT:    blr52;53; P8-VSX-LABEL: rotl_32:54; P8-VSX:       # %bb.0: # %entry55; P8-VSX-NEXT:    xxsldwi v2, v2, v2, 356; P8-VSX-NEXT:    blr57;58; P8-NOVSX-LABEL: rotl_32:59; P8-NOVSX:       # %bb.0: # %entry60; P8-NOVSX-NEXT:    vsldoi v2, v2, v2, 1261; P8-NOVSX-NEXT:    blr62entry:63  %shl = shl <1 x i128> %num, <i128 32>64  %shr = lshr <1 x i128> %num, <i128 96>65  %or = or <1 x i128> %shl, %shr66  ret <1 x i128> %or67}68 69define <1 x i128> @rotl_96(<1 x i128> %num) {70; P9-VSX-LABEL: rotl_96:71; P9-VSX:       # %bb.0: # %entry72; P9-VSX-NEXT:    xxsldwi v2, v2, v2, 173; P9-VSX-NEXT:    blr74;75; P9-NOVSX-LABEL: rotl_96:76; P9-NOVSX:       # %bb.0: # %entry77; P9-NOVSX-NEXT:    vsldoi v2, v2, v2, 478; P9-NOVSX-NEXT:    blr79;80; P8-VSX-LABEL: rotl_96:81; P8-VSX:       # %bb.0: # %entry82; P8-VSX-NEXT:    xxsldwi v2, v2, v2, 183; P8-VSX-NEXT:    blr84;85; P8-NOVSX-LABEL: rotl_96:86; P8-NOVSX:       # %bb.0: # %entry87; P8-NOVSX-NEXT:    vsldoi v2, v2, v2, 488; P8-NOVSX-NEXT:    blr89entry:90  %shl = shl <1 x i128> %num, <i128 96>91  %shr = lshr <1 x i128> %num, <i128 32>92  %or = or <1 x i128> %shl, %shr93  ret <1 x i128> %or94}95 96define <1 x i128> @rotl_16(<1 x i128> %num) {97; P9-VSX-LABEL: rotl_16:98; P9-VSX:       # %bb.0: # %entry99; P9-VSX-NEXT:    vsldoi v2, v2, v2, 14100; P9-VSX-NEXT:    blr101;102; P9-NOVSX-LABEL: rotl_16:103; P9-NOVSX:       # %bb.0: # %entry104; P9-NOVSX-NEXT:    vsldoi v2, v2, v2, 14105; P9-NOVSX-NEXT:    blr106;107; P8-VSX-LABEL: rotl_16:108; P8-VSX:       # %bb.0: # %entry109; P8-VSX-NEXT:    vsldoi v2, v2, v2, 14110; P8-VSX-NEXT:    blr111;112; P8-NOVSX-LABEL: rotl_16:113; P8-NOVSX:       # %bb.0: # %entry114; P8-NOVSX-NEXT:    vsldoi v2, v2, v2, 14115; P8-NOVSX-NEXT:    blr116entry:117  %shl = shl <1 x i128> %num, <i128 16>118  %shr = lshr <1 x i128> %num, <i128 112>119  %or = or <1 x i128> %shl, %shr120  ret <1 x i128> %or121}122 123define <1 x i128> @rotl_112(<1 x i128> %num) {124; P9-VSX-LABEL: rotl_112:125; P9-VSX:       # %bb.0: # %entry126; P9-VSX-NEXT:    vsldoi v2, v2, v2, 2127; P9-VSX-NEXT:    blr128;129; P9-NOVSX-LABEL: rotl_112:130; P9-NOVSX:       # %bb.0: # %entry131; P9-NOVSX-NEXT:    vsldoi v2, v2, v2, 2132; P9-NOVSX-NEXT:    blr133;134; P8-VSX-LABEL: rotl_112:135; P8-VSX:       # %bb.0: # %entry136; P8-VSX-NEXT:    vsldoi v2, v2, v2, 2137; P8-VSX-NEXT:    blr138;139; P8-NOVSX-LABEL: rotl_112:140; P8-NOVSX:       # %bb.0: # %entry141; P8-NOVSX-NEXT:    vsldoi v2, v2, v2, 2142; P8-NOVSX-NEXT:    blr143entry:144  %shl = shl <1 x i128> %num, <i128 112>145  %shr = lshr <1 x i128> %num, <i128 16>146  %or = or <1 x i128> %shl, %shr147  ret <1 x i128> %or148}149 150define <1 x i128> @rotl_8(<1 x i128> %num) {151; P9-VSX-LABEL: rotl_8:152; P9-VSX:       # %bb.0: # %entry153; P9-VSX-NEXT:    vsldoi v2, v2, v2, 15154; P9-VSX-NEXT:    blr155;156; P9-NOVSX-LABEL: rotl_8:157; P9-NOVSX:       # %bb.0: # %entry158; P9-NOVSX-NEXT:    vsldoi v2, v2, v2, 15159; P9-NOVSX-NEXT:    blr160;161; P8-VSX-LABEL: rotl_8:162; P8-VSX:       # %bb.0: # %entry163; P8-VSX-NEXT:    vsldoi v2, v2, v2, 15164; P8-VSX-NEXT:    blr165;166; P8-NOVSX-LABEL: rotl_8:167; P8-NOVSX:       # %bb.0: # %entry168; P8-NOVSX-NEXT:    vsldoi v2, v2, v2, 15169; P8-NOVSX-NEXT:    blr170entry:171  %shl = shl <1 x i128> %num, <i128 8>172  %shr = lshr <1 x i128> %num, <i128 120>173  %or = or <1 x i128> %shl, %shr174  ret <1 x i128> %or175}176 177define <1 x i128> @rotl_120(<1 x i128> %num) {178; P9-VSX-LABEL: rotl_120:179; P9-VSX:       # %bb.0: # %entry180; P9-VSX-NEXT:    vsldoi v2, v2, v2, 1181; P9-VSX-NEXT:    blr182;183; P9-NOVSX-LABEL: rotl_120:184; P9-NOVSX:       # %bb.0: # %entry185; P9-NOVSX-NEXT:    vsldoi v2, v2, v2, 1186; P9-NOVSX-NEXT:    blr187;188; P8-VSX-LABEL: rotl_120:189; P8-VSX:       # %bb.0: # %entry190; P8-VSX-NEXT:    vsldoi v2, v2, v2, 1191; P8-VSX-NEXT:    blr192;193; P8-NOVSX-LABEL: rotl_120:194; P8-NOVSX:       # %bb.0: # %entry195; P8-NOVSX-NEXT:    vsldoi v2, v2, v2, 1196; P8-NOVSX-NEXT:    blr197entry:198  %shl = shl <1 x i128> %num, <i128 120>199  %shr = lshr <1 x i128> %num, <i128 8>200  %or = or <1 x i128> %shl, %shr201  ret <1 x i128> %or202}203 204define <1 x i128> @rotl_28(<1 x i128> %num) {205; P9-VSX-LABEL: rotl_28:206; P9-VSX:       # %bb.0: # %entry207; P9-VSX-NEXT:    mfvsrld r4, v2208; P9-VSX-NEXT:    mfvsrd r3, v2209; P9-VSX-NEXT:    rotldi r5, r4, 28210; P9-VSX-NEXT:    rldimi r5, r3, 28, 0211; P9-VSX-NEXT:    rotldi r3, r3, 28212; P9-VSX-NEXT:    rldimi r3, r4, 28, 0213; P9-VSX-NEXT:    mtvsrdd v2, r5, r3214; P9-VSX-NEXT:    blr215;216; P9-NOVSX-LABEL: rotl_28:217; P9-NOVSX:       # %bb.0: # %entry218; P9-NOVSX-NEXT:    addi r3, r1, -32219; P9-NOVSX-NEXT:    stvx v2, 0, r3220; P9-NOVSX-NEXT:    ld r4, -32(r1)221; P9-NOVSX-NEXT:    ld r3, -24(r1)222; P9-NOVSX-NEXT:    rotldi r5, r4, 28223; P9-NOVSX-NEXT:    rldimi r5, r3, 28, 0224; P9-NOVSX-NEXT:    rotldi r3, r3, 28225; P9-NOVSX-NEXT:    rldimi r3, r4, 28, 0226; P9-NOVSX-NEXT:    std r5, -8(r1)227; P9-NOVSX-NEXT:    std r3, -16(r1)228; P9-NOVSX-NEXT:    addi r3, r1, -16229; P9-NOVSX-NEXT:    lvx v2, 0, r3230; P9-NOVSX-NEXT:    blr231;232; P8-VSX-LABEL: rotl_28:233; P8-VSX:       # %bb.0: # %entry234; P8-VSX-NEXT:    xxswapd vs0, v2235; P8-VSX-NEXT:    mfvsrd r4, v2236; P8-VSX-NEXT:    rotldi r5, r4, 28237; P8-VSX-NEXT:    mffprd r3, f0238; P8-VSX-NEXT:    rldimi r5, r3, 28, 0239; P8-VSX-NEXT:    rotldi r3, r3, 28240; P8-VSX-NEXT:    rldimi r3, r4, 28, 0241; P8-VSX-NEXT:    mtfprd f0, r5242; P8-VSX-NEXT:    mtfprd f1, r3243; P8-VSX-NEXT:    xxmrghd v2, vs1, vs0244; P8-VSX-NEXT:    blr245;246; P8-NOVSX-LABEL: rotl_28:247; P8-NOVSX:       # %bb.0: # %entry248; P8-NOVSX-NEXT:    addi r3, r1, -32249; P8-NOVSX-NEXT:    stvx v2, 0, r3250; P8-NOVSX-NEXT:    ld r4, -32(r1)251; P8-NOVSX-NEXT:    ld r3, -24(r1)252; P8-NOVSX-NEXT:    rotldi r5, r4, 28253; P8-NOVSX-NEXT:    rldimi r5, r3, 28, 0254; P8-NOVSX-NEXT:    rotldi r3, r3, 28255; P8-NOVSX-NEXT:    rldimi r3, r4, 28, 0256; P8-NOVSX-NEXT:    std r5, -8(r1)257; P8-NOVSX-NEXT:    std r3, -16(r1)258; P8-NOVSX-NEXT:    addi r3, r1, -16259; P8-NOVSX-NEXT:    lvx v2, 0, r3260; P8-NOVSX-NEXT:    blr261entry:262  %shl = shl <1 x i128> %num, <i128 28>263  %shr = lshr <1 x i128> %num, <i128 100>264  %or = or <1 x i128> %shl, %shr265  ret <1 x i128> %or266}267 268define <1 x i128> @NO_rotl(<1 x i128> %num) {269; P9-VSX-LABEL: NO_rotl:270; P9-VSX:       # %bb.0: # %entry271; P9-VSX-NEXT:    addis r3, r2, .LCPI8_0@toc@ha272; P9-VSX-NEXT:    addi r3, r3, .LCPI8_0@toc@l273; P9-VSX-NEXT:    lxv v3, 0(r3)274; P9-VSX-NEXT:    addis r3, r2, .LCPI8_1@toc@ha275; P9-VSX-NEXT:    addi r3, r3, .LCPI8_1@toc@l276; P9-VSX-NEXT:    vslo v4, v2, v3277; P9-VSX-NEXT:    vspltb v3, v3, 15278; P9-VSX-NEXT:    vsl v3, v4, v3279; P9-VSX-NEXT:    lxv v4, 0(r3)280; P9-VSX-NEXT:    vsro v2, v2, v4281; P9-VSX-NEXT:    vspltb v4, v4, 15282; P9-VSX-NEXT:    vsr v2, v2, v4283; P9-VSX-NEXT:    xxlor v2, v3, v2284; P9-VSX-NEXT:    blr285;286; P9-NOVSX-LABEL: NO_rotl:287; P9-NOVSX:       # %bb.0: # %entry288; P9-NOVSX-NEXT:    addis r3, r2, .LCPI8_0@toc@ha289; P9-NOVSX-NEXT:    addi r3, r3, .LCPI8_0@toc@l290; P9-NOVSX-NEXT:    lvx v3, 0, r3291; P9-NOVSX-NEXT:    addis r3, r2, .LCPI8_1@toc@ha292; P9-NOVSX-NEXT:    addi r3, r3, .LCPI8_1@toc@l293; P9-NOVSX-NEXT:    vslo v4, v2, v3294; P9-NOVSX-NEXT:    vspltb v3, v3, 15295; P9-NOVSX-NEXT:    vsl v3, v4, v3296; P9-NOVSX-NEXT:    lvx v4, 0, r3297; P9-NOVSX-NEXT:    vsro v2, v2, v4298; P9-NOVSX-NEXT:    vspltb v4, v4, 15299; P9-NOVSX-NEXT:    vsr v2, v2, v4300; P9-NOVSX-NEXT:    vor v2, v3, v2301; P9-NOVSX-NEXT:    blr302;303; P8-VSX-LABEL: NO_rotl:304; P8-VSX:       # %bb.0: # %entry305; P8-VSX-NEXT:    xxswapd vs0, v2306; P8-VSX-NEXT:    mfvsrd r4, v2307; P8-VSX-NEXT:    mffprd r3, f0308; P8-VSX-NEXT:    rotldi r5, r3, 20309; P8-VSX-NEXT:    sldi r3, r3, 20310; P8-VSX-NEXT:    rldimi r5, r4, 20, 0311; P8-VSX-NEXT:    mtfprd f0, r3312; P8-VSX-NEXT:    li r3, 0313; P8-VSX-NEXT:    mtfprd f1, r5314; P8-VSX-NEXT:    xxmrghd v2, vs1, vs0315; P8-VSX-NEXT:    mtfprd f0, r3316; P8-VSX-NEXT:    rldicl r3, r4, 28, 36317; P8-VSX-NEXT:    mtfprd f1, r3318; P8-VSX-NEXT:    xxmrghd v3, vs0, vs1319; P8-VSX-NEXT:    xxlor v2, v2, v3320; P8-VSX-NEXT:    blr321;322; P8-NOVSX-LABEL: NO_rotl:323; P8-NOVSX:       # %bb.0: # %entry324; P8-NOVSX-NEXT:    addis r3, r2, .LCPI8_0@toc@ha325; P8-NOVSX-NEXT:    addi r3, r3, .LCPI8_0@toc@l326; P8-NOVSX-NEXT:    lvx v3, 0, r3327; P8-NOVSX-NEXT:    addis r3, r2, .LCPI8_1@toc@ha328; P8-NOVSX-NEXT:    addi r3, r3, .LCPI8_1@toc@l329; P8-NOVSX-NEXT:    lvx v5, 0, r3330; P8-NOVSX-NEXT:    vslo v4, v2, v3331; P8-NOVSX-NEXT:    vspltb v3, v3, 15332; P8-NOVSX-NEXT:    vsl v3, v4, v3333; P8-NOVSX-NEXT:    vsro v2, v2, v5334; P8-NOVSX-NEXT:    vspltb v5, v5, 15335; P8-NOVSX-NEXT:    vsr v2, v2, v5336; P8-NOVSX-NEXT:    vor v2, v3, v2337; P8-NOVSX-NEXT:    blr338entry:339  %shl = shl <1 x i128> %num, <i128 20>340  %shr = lshr <1 x i128> %num, <i128 100>341  %or = or <1 x i128> %shl, %shr342  ret <1 x i128> %or343}344 345define <1 x i128> @shufflevector(<1 x i128> %num) {346; P9-VSX-LABEL: shufflevector:347; P9-VSX:       # %bb.0: # %entry348; P9-VSX-NEXT:    xxswapd v2, v2349; P9-VSX-NEXT:    blr350;351; P9-NOVSX-LABEL: shufflevector:352; P9-NOVSX:       # %bb.0: # %entry353; P9-NOVSX-NEXT:    vsldoi v2, v2, v2, 8354; P9-NOVSX-NEXT:    blr355;356; P8-VSX-LABEL: shufflevector:357; P8-VSX:       # %bb.0: # %entry358; P8-VSX-NEXT:    xxswapd v2, v2359; P8-VSX-NEXT:    blr360;361; P8-NOVSX-LABEL: shufflevector:362; P8-NOVSX:       # %bb.0: # %entry363; P8-NOVSX-NEXT:    vsldoi v2, v2, v2, 8364; P8-NOVSX-NEXT:    blr365entry:366  %0 = bitcast <1 x i128> %num to <2 x i64>367  %vecins2 = shufflevector <2 x i64> %0, <2 x i64> undef, <2 x i32> <i32 1, i32 0>368  %1 = bitcast <2 x i64> %vecins2 to <1 x i128>369  ret <1 x i128> %1370}371