brintos

brintos / llvm-project-archived public Read only

0
0
Text · 16.1 KiB · 98c1f28 Raw
402 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; Test file to verify the emission of Vector Evaluate instructions when ternary operators are used.3 4; RUN: llc -verify-machineinstrs -mcpu=pwr10 -mtriple=powerpc64le-unknown-unknown \5; RUN:   -ppc-asm-full-reg-names --ppc-vsr-nums-as-vr < %s | FileCheck %s6 7; RUN: llc -verify-machineinstrs -mcpu=pwr10 -mtriple=powerpc-ibm-aix-xcoff \8; RUN:   -ppc-asm-full-reg-names --ppc-vsr-nums-as-vr < %s | FileCheck %s9 10; RUN: llc -verify-machineinstrs -mcpu=pwr10 -mtriple=powerpc64-ibm-aix-xcoff \11; RUN:   -ppc-asm-full-reg-names --ppc-vsr-nums-as-vr < %s | FileCheck %s12 13; Function to test ternary(A, and(B, C), not(C)) for <4 x i32>14define <4 x i32> @ternary_A_and_BC_not_C_4x32(<4 x i1> %A, <4 x i32> %B, <4 x i32> %C) {15; CHECK-LABEL: ternary_A_and_BC_not_C_4x32:16; CHECK:       # %bb.0: # %entry17; CHECK-NEXT:    xxleqv v5, v5, v518; CHECK-NEXT:    vslw v2, v2, v519; CHECK-NEXT:    vsraw v2, v2, v520; CHECK-NEXT:    xxeval v2, v2, v3, v4, 16121; CHECK-NEXT:    blr22entry:23  %and = and <4 x i32> %B, %C24  %not = xor <4 x i32> %C, <i32 -1, i32 -1, i32 -1, i32 -1>  ; Vector not operation25  %res = select <4 x i1> %A, <4 x i32> %and, <4 x i32> %not26  ret <4 x i32> %res27}28 29; Function to test ternary(A, and(B, C), not(C)) for <2 x i64>30define <2 x i64> @ternary_A_and_BC_not_C_2x64(<2 x i1> %A, <2 x i64> %B, <2 x i64> %C) {31; CHECK-LABEL: ternary_A_and_BC_not_C_2x64:32; CHECK:       # %bb.0: # %entry33; CHECK-NEXT:    xxlxor v5, v5, v534; CHECK-NEXT:    xxsplti32dx v5, 1, 6335; CHECK-NEXT:    vsld v2, v2, v536; CHECK-NEXT:    vsrad v2, v2, v537; CHECK-NEXT:    xxeval v2, v2, v3, v4, 16138; CHECK-NEXT:    blr39entry:40  %and = and <2 x i64> %B, %C41  %not = xor <2 x i64> %C, <i64 -1, i64 -1>  ; Vector not operation42  %res = select <2 x i1> %A, <2 x i64> %and, <2 x i64> %not43  ret <2 x i64> %res44}45 46; Function to test ternary(A, and(B, C), not(C)) for <16 x i8>47define <16 x i8> @ternary_A_and_BC_not_C_16x8(<16 x i1> %A, <16 x i8> %B, <16 x i8> %C) {48; CHECK-LABEL: ternary_A_and_BC_not_C_16x8:49; CHECK:       # %bb.0: # %entry50; CHECK-NEXT:    xxspltib v5, 751; CHECK-NEXT:    vslb v2, v2, v552; CHECK-NEXT:    vsrab v2, v2, v553; CHECK-NEXT:    xxeval v2, v2, v3, v4, 16154; CHECK-NEXT:    blr55entry:56  %and = and <16 x i8> %B, %C57  %not = xor <16 x i8> %C, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>  ; Vector not operation58  %res = select <16 x i1> %A, <16 x i8> %and, <16 x i8> %not59  ret <16 x i8> %res60}61 62; Function to test ternary(A, and(B, C), not(C)) for <8 x i16>63define <8 x i16> @ternary_A_and_BC_not_C_8x16(<8 x i1> %A, <8 x i16> %B, <8 x i16> %C) {64; CHECK-LABEL: ternary_A_and_BC_not_C_8x16:65; CHECK:       # %bb.0: # %entry66; CHECK-NEXT:    xxspltiw v5, 98305567; CHECK-NEXT:    vslh v2, v2, v568; CHECK-NEXT:    vsrah v2, v2, v569; CHECK-NEXT:    xxeval v2, v2, v3, v4, 16170; CHECK-NEXT:    blr71entry:72  %and = and <8 x i16> %B, %C73  %not = xor <8 x i16> %C, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>  ; Vector not operation74  %res = select <8 x i1> %A, <8 x i16> %and, <8 x i16> %not75  ret <8 x i16> %res76}77 78; Function to test ternary(A, B, not(C)) for <4 x i32>79define <4 x i32> @ternary_A_B_not_C_4x32(<4 x i1> %A, <4 x i32> %B, <4 x i32> %C) {80; CHECK-LABEL: ternary_A_B_not_C_4x32:81; CHECK:       # %bb.0: # %entry82; CHECK-NEXT:    xxleqv v5, v5, v583; CHECK-NEXT:    vslw v2, v2, v584; CHECK-NEXT:    vsraw v2, v2, v585; CHECK-NEXT:    xxeval v2, v2, v3, v4, 16386; CHECK-NEXT:    blr87entry:88  %not = xor <4 x i32> %C, <i32 -1, i32 -1, i32 -1, i32 -1>  ; Vector not operation89  %res = select <4 x i1> %A, <4 x i32> %B, <4 x i32> %not90  ret <4 x i32> %res91}92 93; Function to test ternary(A, B, not(C)) for <2 x i64>94define <2 x i64> @ternary_A_B_not_C_2x64(<2 x i1> %A, <2 x i64> %B, <2 x i64> %C) {95; CHECK-LABEL: ternary_A_B_not_C_2x64:96; CHECK:       # %bb.0: # %entry97; CHECK-NEXT:    xxlxor v5, v5, v598; CHECK-NEXT:    xxsplti32dx v5, 1, 6399; CHECK-NEXT:    vsld v2, v2, v5100; CHECK-NEXT:    vsrad v2, v2, v5101; CHECK-NEXT:    xxeval v2, v2, v3, v4, 163102; CHECK-NEXT:    blr103entry:104  %not = xor <2 x i64> %C, <i64 -1, i64 -1>  ; Vector not operation105  %res = select <2 x i1> %A, <2 x i64> %B, <2 x i64> %not106  ret <2 x i64> %res107}108 109; Function to test ternary(A, B, not(C)) for <16 x i8>110define <16 x i8> @ternary_A_B_not_C_16x8(<16 x i1> %A, <16 x i8> %B, <16 x i8> %C) {111; CHECK-LABEL: ternary_A_B_not_C_16x8:112; CHECK:       # %bb.0: # %entry113; CHECK-NEXT:    xxspltib v5, 7114; CHECK-NEXT:    vslb v2, v2, v5115; CHECK-NEXT:    vsrab v2, v2, v5116; CHECK-NEXT:    xxeval v2, v2, v3, v4, 163117; CHECK-NEXT:    blr118entry:119  %not = xor <16 x i8> %C, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>  ; Vector not operation120  %res = select <16 x i1> %A, <16 x i8> %B, <16 x i8> %not121  ret <16 x i8> %res122}123 124; Function to test ternary(A, B, not(C)) for <8 x i16>125define <8 x i16> @ternary_A_B_not_C_8x16(<8 x i1> %A, <8 x i16> %B, <8 x i16> %C) {126; CHECK-LABEL: ternary_A_B_not_C_8x16:127; CHECK:       # %bb.0: # %entry128; CHECK-NEXT:    xxspltiw v5, 983055129; CHECK-NEXT:    vslh v2, v2, v5130; CHECK-NEXT:    vsrah v2, v2, v5131; CHECK-NEXT:    xxeval v2, v2, v3, v4, 163132; CHECK-NEXT:    blr133entry:134  %not = xor <8 x i16> %C, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>  ; Vector not operation135  %res = select <8 x i1> %A, <8 x i16> %B, <8 x i16> %not136  ret <8 x i16> %res137}138 139; Function to test ternary(A, xor(B, C), not(C)) for <4 x i32>140define <4 x i32> @ternary_A_xor_BC_not_C_4x32(<4 x i1> %A, <4 x i32> %B, <4 x i32> %C) {141; CHECK-LABEL: ternary_A_xor_BC_not_C_4x32:142; CHECK:       # %bb.0: # %entry143; CHECK-NEXT:    xxleqv v5, v5, v5144; CHECK-NEXT:    vslw v2, v2, v5145; CHECK-NEXT:    vsraw v2, v2, v5146; CHECK-NEXT:    xxeval v2, v2, v3, v4, 166147; CHECK-NEXT:    blr148entry:149  %xor = xor <4 x i32> %B, %C150  %not = xor <4 x i32> %C, <i32 -1, i32 -1, i32 -1, i32 -1>  ; Vector not operation151  %res = select <4 x i1> %A, <4 x i32> %xor, <4 x i32> %not152  ret <4 x i32> %res153}154 155; Function to test ternary(A, xor(B, C), not(C)) for <2 x i64>156define <2 x i64> @ternary_A_xor_BC_not_C_2x64(<2 x i1> %A, <2 x i64> %B, <2 x i64> %C) {157; CHECK-LABEL: ternary_A_xor_BC_not_C_2x64:158; CHECK:       # %bb.0: # %entry159; CHECK-NEXT:    xxlxor v5, v5, v5160; CHECK-NEXT:    xxsplti32dx v5, 1, 63161; CHECK-NEXT:    vsld v2, v2, v5162; CHECK-NEXT:    vsrad v2, v2, v5163; CHECK-NEXT:    xxeval v2, v2, v3, v4, 166164; CHECK-NEXT:    blr165entry:166  %xor = xor <2 x i64> %B, %C167  %not = xor <2 x i64> %C, <i64 -1, i64 -1>  ; Vector not operation168  %res = select <2 x i1> %A, <2 x i64> %xor, <2 x i64> %not169  ret <2 x i64> %res170}171 172; Function to test ternary(A, xor(B, C), not(C)) for <16 x i8>173define <16 x i8> @ternary_A_xor_BC_not_C_16x8(<16 x i1> %A, <16 x i8> %B, <16 x i8> %C) {174; CHECK-LABEL: ternary_A_xor_BC_not_C_16x8:175; CHECK:       # %bb.0: # %entry176; CHECK-NEXT:    xxspltib v5, 7177; CHECK-NEXT:    vslb v2, v2, v5178; CHECK-NEXT:    vsrab v2, v2, v5179; CHECK-NEXT:    xxeval v2, v2, v3, v4, 166180; CHECK-NEXT:    blr181entry:182  %xor = xor <16 x i8> %B, %C183  %not = xor <16 x i8> %C, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>  ; Vector not operation184  %res = select <16 x i1> %A, <16 x i8> %xor, <16 x i8> %not185  ret <16 x i8> %res186}187 188; Function to test ternary(A, xor(B, C), not(C)) for <8 x i16>189define <8 x i16> @ternary_A_xor_BC_not_C_8x16(<8 x i1> %A, <8 x i16> %B, <8 x i16> %C) {190; CHECK-LABEL: ternary_A_xor_BC_not_C_8x16:191; CHECK:       # %bb.0: # %entry192; CHECK-NEXT:    xxspltiw v5, 983055193; CHECK-NEXT:    vslh v2, v2, v5194; CHECK-NEXT:    vsrah v2, v2, v5195; CHECK-NEXT:    xxeval v2, v2, v3, v4, 166196; CHECK-NEXT:    blr197entry:198  %xor = xor <8 x i16> %B, %C199  %not = xor <8 x i16> %C, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>  ; Vector not operation200  %res = select <8 x i1> %A, <8 x i16> %xor, <8 x i16> %not201  ret <8 x i16> %res202}203 204; Function to test ternary(A, or(B, C), not(C)) for <4 x i32>205define <4 x i32> @ternary_A_or_BC_not_C_4x32(<4 x i1> %A, <4 x i32> %B, <4 x i32> %C) {206; CHECK-LABEL: ternary_A_or_BC_not_C_4x32:207; CHECK:       # %bb.0: # %entry208; CHECK-NEXT:    xxleqv v5, v5, v5209; CHECK-NEXT:    vslw v2, v2, v5210; CHECK-NEXT:    vsraw v2, v2, v5211; CHECK-NEXT:    xxeval v2, v2, v3, v4, 167212; CHECK-NEXT:    blr213entry:214  %or = or <4 x i32> %B, %C215  %not = xor <4 x i32> %C, <i32 -1, i32 -1, i32 -1, i32 -1>  ; Vector not operation216  %res = select <4 x i1> %A, <4 x i32> %or, <4 x i32> %not217  ret <4 x i32> %res218}219 220; Function to test ternary(A, or(B, C), not(C)) for <2 x i64>221define <2 x i64> @ternary_A_or_BC_not_C_2x64(<2 x i1> %A, <2 x i64> %B, <2 x i64> %C) {222; CHECK-LABEL: ternary_A_or_BC_not_C_2x64:223; CHECK:       # %bb.0: # %entry224; CHECK-NEXT:    xxlxor v5, v5, v5225; CHECK-NEXT:    xxsplti32dx v5, 1, 63226; CHECK-NEXT:    vsld v2, v2, v5227; CHECK-NEXT:    vsrad v2, v2, v5228; CHECK-NEXT:    xxeval v2, v2, v3, v4, 167229; CHECK-NEXT:    blr230entry:231  %or = or <2 x i64> %B, %C232  %not = xor <2 x i64> %C, <i64 -1, i64 -1>  ; Vector not operation233  %res = select <2 x i1> %A, <2 x i64> %or, <2 x i64> %not234  ret <2 x i64> %res235}236 237; Function to test ternary(A, or(B, C), not(C)) for <16 x i8>238define <16 x i8> @ternary_A_or_BC_not_C_16x8(<16 x i1> %A, <16 x i8> %B, <16 x i8> %C) {239; CHECK-LABEL: ternary_A_or_BC_not_C_16x8:240; CHECK:       # %bb.0: # %entry241; CHECK-NEXT:    xxspltib v5, 7242; CHECK-NEXT:    vslb v2, v2, v5243; CHECK-NEXT:    vsrab v2, v2, v5244; CHECK-NEXT:    xxeval v2, v2, v3, v4, 167245; CHECK-NEXT:    blr246entry:247  %or = or <16 x i8> %B, %C248  %not = xor <16 x i8> %C, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>  ; Vector not operation249  %res = select <16 x i1> %A, <16 x i8> %or, <16 x i8> %not250  ret <16 x i8> %res251}252 253; Function to test ternary(A, or(B, C), not(C)) for <8 x i16>254define <8 x i16> @ternary_A_or_BC_not_C_8x16(<8 x i1> %A, <8 x i16> %B, <8 x i16> %C) {255; CHECK-LABEL: ternary_A_or_BC_not_C_8x16:256; CHECK:       # %bb.0: # %entry257; CHECK-NEXT:    xxspltiw v5, 983055258; CHECK-NEXT:    vslh v2, v2, v5259; CHECK-NEXT:    vsrah v2, v2, v5260; CHECK-NEXT:    xxeval v2, v2, v3, v4, 167261; CHECK-NEXT:    blr262entry:263  %or = or <8 x i16> %B, %C264  %not = xor <8 x i16> %C, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>  ; Vector not operation265  %res = select <8 x i1> %A, <8 x i16> %or, <8 x i16> %not266  ret <8 x i16> %res267}268 269; Function to test ternary(A, not(B), not(C)) for <4 x i32>270define <4 x i32> @ternary_A_not_B_not_C_4x32(<4 x i1> %A, <4 x i32> %B, <4 x i32> %C) {271; CHECK-LABEL: ternary_A_not_B_not_C_4x32:272; CHECK:       # %bb.0: # %entry273; CHECK-NEXT:    xxleqv v5, v5, v5274; CHECK-NEXT:    vslw v2, v2, v5275; CHECK-NEXT:    vsraw v2, v2, v5276; CHECK-NEXT:    xxeval v2, v2, v3, v4, 172277; CHECK-NEXT:    blr278entry:279  %not_b = xor <4 x i32> %B, <i32 -1, i32 -1, i32 -1, i32 -1>  ; Vector not operation280  %not_c = xor <4 x i32> %C, <i32 -1, i32 -1, i32 -1, i32 -1>  ; Vector not operation281  %res = select <4 x i1> %A, <4 x i32> %not_b, <4 x i32> %not_c282  ret <4 x i32> %res283}284 285; Function to test ternary(A, not(B), not(C)) for <2 x i64>286define <2 x i64> @ternary_A_not_B_not_C_2x64(<2 x i1> %A, <2 x i64> %B, <2 x i64> %C) {287; CHECK-LABEL: ternary_A_not_B_not_C_2x64:288; CHECK:       # %bb.0: # %entry289; CHECK-NEXT:    xxlxor v5, v5, v5290; CHECK-NEXT:    xxsplti32dx v5, 1, 63291; CHECK-NEXT:    vsld v2, v2, v5292; CHECK-NEXT:    vsrad v2, v2, v5293; CHECK-NEXT:    xxeval v2, v2, v3, v4, 172294; CHECK-NEXT:    blr295entry:296  %not_b = xor <2 x i64> %B, <i64 -1, i64 -1>  ; Vector not operation297  %not_c = xor <2 x i64> %C, <i64 -1, i64 -1>  ; Vector not operation298  %res = select <2 x i1> %A, <2 x i64> %not_b, <2 x i64> %not_c299  ret <2 x i64> %res300}301 302; Function to test ternary(A, not(B), not(C)) for <16 x i8>303define <16 x i8> @ternary_A_not_B_not_C_16x8(<16 x i1> %A, <16 x i8> %B, <16 x i8> %C) {304; CHECK-LABEL: ternary_A_not_B_not_C_16x8:305; CHECK:       # %bb.0: # %entry306; CHECK-NEXT:    xxspltib v5, 7307; CHECK-NEXT:    vslb v2, v2, v5308; CHECK-NEXT:    vsrab v2, v2, v5309; CHECK-NEXT:    xxeval v2, v2, v3, v4, 172310; CHECK-NEXT:    blr311entry:312  %not_b = xor <16 x i8> %B, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>  ; Vector not operation313  %not_c = xor <16 x i8> %C, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>  ; Vector not operation314  %res = select <16 x i1> %A, <16 x i8> %not_b, <16 x i8> %not_c315  ret <16 x i8> %res316}317 318; Function to test ternary(A, not(B), not(C)) for <8 x i16>319define <8 x i16> @ternary_A_not_B_not_C_8x16(<8 x i1> %A, <8 x i16> %B, <8 x i16> %C) {320; CHECK-LABEL: ternary_A_not_B_not_C_8x16:321; CHECK:       # %bb.0: # %entry322; CHECK-NEXT:    xxspltiw v5, 983055323; CHECK-NEXT:    vslh v2, v2, v5324; CHECK-NEXT:    vsrah v2, v2, v5325; CHECK-NEXT:    xxeval v2, v2, v3, v4, 172326; CHECK-NEXT:    blr327entry:328  %not_b = xor <8 x i16> %B, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>  ; Vector not operation329  %not_c = xor <8 x i16> %C, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>  ; Vector not operation330  %res = select <8 x i1> %A, <8 x i16> %not_b, <8 x i16> %not_c331  ret <8 x i16> %res332}333 334; Function to test ternary(A, nand(B, C), not(C)) for <4 x i32>335define <4 x i32> @ternary_A_nand_BC_not_C_4x32(<4 x i1> %A, <4 x i32> %B, <4 x i32> %C) {336; CHECK-LABEL: ternary_A_nand_BC_not_C_4x32:337; CHECK:       # %bb.0: # %entry338; CHECK-NEXT:    xxleqv v5, v5, v5339; CHECK-NEXT:    vslw v2, v2, v5340; CHECK-NEXT:    vsraw v2, v2, v5341; CHECK-NEXT:    xxeval v2, v2, v3, v4, 174342; CHECK-NEXT:    blr343entry:344  %and = and <4 x i32> %B, %C345  %nand = xor <4 x i32> %and, <i32 -1, i32 -1, i32 -1, i32 -1>  ; Vector nand operation346  %not = xor <4 x i32> %C, <i32 -1, i32 -1, i32 -1, i32 -1>  ; Vector not operation347  %res = select <4 x i1> %A, <4 x i32> %nand, <4 x i32> %not348  ret <4 x i32> %res349}350 351; Function to test ternary(A, nand(B, C), not(C)) for <2 x i64>352define <2 x i64> @ternary_A_nand_BC_not_C_2x64(<2 x i1> %A, <2 x i64> %B, <2 x i64> %C) {353; CHECK-LABEL: ternary_A_nand_BC_not_C_2x64:354; CHECK:       # %bb.0: # %entry355; CHECK-NEXT:    xxlxor v5, v5, v5356; CHECK-NEXT:    xxsplti32dx v5, 1, 63357; CHECK-NEXT:    vsld v2, v2, v5358; CHECK-NEXT:    vsrad v2, v2, v5359; CHECK-NEXT:    xxeval v2, v2, v3, v4, 174360; CHECK-NEXT:    blr361entry:362  %and = and <2 x i64> %B, %C363  %nand = xor <2 x i64> %and, <i64 -1, i64 -1>  ; Vector nand operation364  %not = xor <2 x i64> %C, <i64 -1, i64 -1>  ; Vector not operation365  %res = select <2 x i1> %A, <2 x i64> %nand, <2 x i64> %not366  ret <2 x i64> %res367}368 369; Function to test ternary(A, nand(B, C), not(C)) for <16 x i8>370define <16 x i8> @ternary_A_nand_BC_not_C_16x8(<16 x i1> %A, <16 x i8> %B, <16 x i8> %C) {371; CHECK-LABEL: ternary_A_nand_BC_not_C_16x8:372; CHECK:       # %bb.0: # %entry373; CHECK-NEXT:    xxspltib v5, 7374; CHECK-NEXT:    vslb v2, v2, v5375; CHECK-NEXT:    vsrab v2, v2, v5376; CHECK-NEXT:    xxeval v2, v2, v3, v4, 174377; CHECK-NEXT:    blr378entry:379  %and = and <16 x i8> %B, %C380  %nand = xor <16 x i8> %and, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>  ; Vector nand operation381  %not = xor <16 x i8> %C, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>  ; Vector not operation382  %res = select <16 x i1> %A, <16 x i8> %nand, <16 x i8> %not383  ret <16 x i8> %res384}385 386; Function to test ternary(A, nand(B, C), not(C)) for <8 x i16>387define <8 x i16> @ternary_A_nand_BC_not_C_8x16(<8 x i1> %A, <8 x i16> %B, <8 x i16> %C) {388; CHECK-LABEL: ternary_A_nand_BC_not_C_8x16:389; CHECK:       # %bb.0: # %entry390; CHECK-NEXT:    xxspltiw v5, 983055391; CHECK-NEXT:    vslh v2, v2, v5392; CHECK-NEXT:    vsrah v2, v2, v5393; CHECK-NEXT:    xxeval v2, v2, v3, v4, 174394; CHECK-NEXT:    blr395entry:396  %and = and <8 x i16> %B, %C397  %nand = xor <8 x i16> %and, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>  ; Vector nand operation398  %not = xor <8 x i16> %C, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>  ; Vector not operation399  %res = select <8 x i1> %A, <8 x i16> %nand, <8 x i16> %not400  ret <8 x i16> %res401}402