brintos

brintos / llvm-project-archived public Read only

0
0
Text · 11.6 KiB · 0fc296c Raw
333 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), xor(B, C)) for <4 x i32>14define <4 x i32> @ternary_A_and_BC_xor_BC_4x32(<4 x i1> %A, <4 x i32> %B, <4 x i32> %C) {15; CHECK-LABEL: ternary_A_and_BC_xor_BC_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, 9721; CHECK-NEXT:    blr22entry:23  %and = and <4 x i32> %B, %C24  %xor = xor <4 x i32> %B, %C25  %res = select <4 x i1> %A, <4 x i32> %and, <4 x i32> %xor26  ret <4 x i32> %res27}28 29; Function to test ternary(A, and(B, C), xor(B, C)) for <2 x i64>30define <2 x i64> @ternary_A_and_BC_xor_BC_2x64(<2 x i1> %A, <2 x i64> %B, <2 x i64> %C) {31; CHECK-LABEL: ternary_A_and_BC_xor_BC_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, 9738; CHECK-NEXT:    blr39entry:40  %and = and <2 x i64> %B, %C41  %xor = xor <2 x i64> %B, %C42  %res = select <2 x i1> %A, <2 x i64> %and, <2 x i64> %xor43  ret <2 x i64> %res44}45 46; Function to test ternary(A, and(B, C), xor(B, C)) for <16 x i8>47define <16 x i8> @ternary_A_and_BC_xor_BC_16x8(<16 x i1> %A, <16 x i8> %B, <16 x i8> %C) {48; CHECK-LABEL: ternary_A_and_BC_xor_BC_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, 9754; CHECK-NEXT:    blr55entry:56  %and = and <16 x i8> %B, %C57  %xor = xor <16 x i8> %B, %C58  %res = select <16 x i1> %A, <16 x i8> %and, <16 x i8> %xor59  ret <16 x i8> %res60}61 62; Function to test ternary(A, and(B, C), xor(B, C)) for <8 x i16>63define <8 x i16> @ternary_A_and_BC_xor_BC_8x16(<8 x i1> %A, <8 x i16> %B, <8 x i16> %C) {64; CHECK-LABEL: ternary_A_and_BC_xor_BC_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, 9770; CHECK-NEXT:    blr71entry:72  %and = and <8 x i16> %B, %C73  %xor = xor <8 x i16> %B, %C74  %res = select <8 x i1> %A, <8 x i16> %and, <8 x i16> %xor75  ret <8 x i16> %res76}77 78; Function to test ternary(A, B, xor(B, C)) for <4 x i32>79define <4 x i32> @ternary_A_B_xor_BC_4x32(<4 x i1> %A, <4 x i32> %B, <4 x i32> %C) {80; CHECK-LABEL: ternary_A_B_xor_BC_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, 9986; CHECK-NEXT:    blr87entry:88  %xor = xor <4 x i32> %B, %C89  %res = select <4 x i1> %A, <4 x i32> %B, <4 x i32> %xor90  ret <4 x i32> %res91}92 93; Function to test ternary(A, B, xor(B, C)) for <2 x i64>94define <2 x i64> @ternary_A_B_xor_BC_2x64(<2 x i1> %A, <2 x i64> %B, <2 x i64> %C) {95; CHECK-LABEL: ternary_A_B_xor_BC_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, 99102; CHECK-NEXT:    blr103entry:104  %xor = xor <2 x i64> %B, %C105  %res = select <2 x i1> %A, <2 x i64> %B, <2 x i64> %xor106  ret <2 x i64> %res107}108 109; Function to test ternary(A, B, xor(B, C)) for <16 x i8>110define <16 x i8> @ternary_A_B_xor_BC_16x8(<16 x i1> %A, <16 x i8> %B, <16 x i8> %C) {111; CHECK-LABEL: ternary_A_B_xor_BC_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, 99117; CHECK-NEXT:    blr118entry:119  %xor = xor <16 x i8> %B, %C120  %res = select <16 x i1> %A, <16 x i8> %B, <16 x i8> %xor121  ret <16 x i8> %res122}123 124; Function to test ternary(A, B, xor(B, C)) for <8 x i16>125define <8 x i16> @ternary_A_B_xor_BC_8x16(<8 x i1> %A, <8 x i16> %B, <8 x i16> %C) {126; CHECK-LABEL: ternary_A_B_xor_BC_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, 99132; CHECK-NEXT:    blr133entry:134  %xor = xor <8 x i16> %B, %C135  %res = select <8 x i1> %A, <8 x i16> %B, <8 x i16> %xor136  ret <8 x i16> %res137}138 139; Function to test ternary(A, C, xor(B, C)) for <4 x i32>140define <4 x i32> @ternary_A_C_xor_BC_4x32(<4 x i1> %A, <4 x i32> %B, <4 x i32> %C) {141; CHECK-LABEL: ternary_A_C_xor_BC_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, 101147; CHECK-NEXT:    blr148entry:149  %xor = xor <4 x i32> %B, %C150  %res = select <4 x i1> %A, <4 x i32> %C, <4 x i32> %xor151  ret <4 x i32> %res152}153 154; Function to test ternary(A, C, xor(B, C)) for <2 x i64>155define <2 x i64> @ternary_A_C_xor_BC_2x64(<2 x i1> %A, <2 x i64> %B, <2 x i64> %C) {156; CHECK-LABEL: ternary_A_C_xor_BC_2x64:157; CHECK:       # %bb.0: # %entry158; CHECK-NEXT:    xxlxor v5, v5, v5159; CHECK-NEXT:    xxsplti32dx v5, 1, 63160; CHECK-NEXT:    vsld v2, v2, v5161; CHECK-NEXT:    vsrad v2, v2, v5162; CHECK-NEXT:    xxeval v2, v2, v3, v4, 101163; CHECK-NEXT:    blr164entry:165  %xor = xor <2 x i64> %B, %C166  %res = select <2 x i1> %A, <2 x i64> %C, <2 x i64> %xor167  ret <2 x i64> %res168}169 170; Function to test ternary(A, C, xor(B, C)) for <16 x i8>171define <16 x i8> @ternary_A_C_xor_BC_16x8(<16 x i1> %A, <16 x i8> %B, <16 x i8> %C) {172; CHECK-LABEL: ternary_A_C_xor_BC_16x8:173; CHECK:       # %bb.0: # %entry174; CHECK-NEXT:    xxspltib v5, 7175; CHECK-NEXT:    vslb v2, v2, v5176; CHECK-NEXT:    vsrab v2, v2, v5177; CHECK-NEXT:    xxeval v2, v2, v3, v4, 101178; CHECK-NEXT:    blr179entry:180  %xor = xor <16 x i8> %B, %C181  %res = select <16 x i1> %A, <16 x i8> %C, <16 x i8> %xor182  ret <16 x i8> %res183}184 185; Function to test ternary(A, C, xor(B, C)) for <8 x i16>186define <8 x i16> @ternary_A_C_xor_BC_8x16(<8 x i1> %A, <8 x i16> %B, <8 x i16> %C) {187; CHECK-LABEL: ternary_A_C_xor_BC_8x16:188; CHECK:       # %bb.0: # %entry189; CHECK-NEXT:    xxspltiw v5, 983055190; CHECK-NEXT:    vslh v2, v2, v5191; CHECK-NEXT:    vsrah v2, v2, v5192; CHECK-NEXT:    xxeval v2, v2, v3, v4, 101193; CHECK-NEXT:    blr194entry:195  %xor = xor <8 x i16> %B, %C196  %res = select <8 x i1> %A, <8 x i16> %C, <8 x i16> %xor197  ret <8 x i16> %res198}199 200; Function to test ternary(A, or(B, C), xor(B, C)) for <4 x i32>201define <4 x i32> @ternary_A_or_BC_xor_BC_4x32(<4 x i1> %A, <4 x i32> %B, <4 x i32> %C) {202; CHECK-LABEL: ternary_A_or_BC_xor_BC_4x32:203; CHECK:       # %bb.0: # %entry204; CHECK-NEXT:    xxleqv v5, v5, v5205; CHECK-NEXT:    vslw v2, v2, v5206; CHECK-NEXT:    vsraw v2, v2, v5207; CHECK-NEXT:    xxeval v2, v2, v3, v4, 103208; CHECK-NEXT:    blr209entry:210  %or = or <4 x i32> %B, %C211  %xor = xor <4 x i32> %B, %C212  %res = select <4 x i1> %A, <4 x i32> %or, <4 x i32> %xor213  ret <4 x i32> %res214}215 216; Function to test ternary(A, or(B, C), xor(B, C)) for <2 x i64>217define <2 x i64> @ternary_A_or_BC_xor_BC_2x64(<2 x i1> %A, <2 x i64> %B, <2 x i64> %C) {218; CHECK-LABEL: ternary_A_or_BC_xor_BC_2x64:219; CHECK:       # %bb.0: # %entry220; CHECK-NEXT:    xxlxor v5, v5, v5221; CHECK-NEXT:    xxsplti32dx v5, 1, 63222; CHECK-NEXT:    vsld v2, v2, v5223; CHECK-NEXT:    vsrad v2, v2, v5224; CHECK-NEXT:    xxeval v2, v2, v3, v4, 103225; CHECK-NEXT:    blr226entry:227  %or = or <2 x i64> %B, %C228  %xor = xor <2 x i64> %B, %C229  %res = select <2 x i1> %A, <2 x i64> %or, <2 x i64> %xor230  ret <2 x i64> %res231}232 233; Function to test ternary(A, or(B, C), xor(B, C)) for <16 x i8>234define <16 x i8> @ternary_A_or_BC_xor_BC_16x8(<16 x i1> %A, <16 x i8> %B, <16 x i8> %C) {235; CHECK-LABEL: ternary_A_or_BC_xor_BC_16x8:236; CHECK:       # %bb.0: # %entry237; CHECK-NEXT:    xxspltib v5, 7238; CHECK-NEXT:    vslb v2, v2, v5239; CHECK-NEXT:    vsrab v2, v2, v5240; CHECK-NEXT:    xxeval v2, v2, v3, v4, 103241; CHECK-NEXT:    blr242entry:243  %or = or <16 x i8> %B, %C244  %xor = xor <16 x i8> %B, %C245  %res = select <16 x i1> %A, <16 x i8> %or, <16 x i8> %xor246  ret <16 x i8> %res247}248 249; Function to test ternary(A, or(B, C), xor(B, C)) for <8 x i16>250define <8 x i16> @ternary_A_or_BC_xor_BC_8x16(<8 x i1> %A, <8 x i16> %B, <8 x i16> %C) {251; CHECK-LABEL: ternary_A_or_BC_xor_BC_8x16:252; CHECK:       # %bb.0: # %entry253; CHECK-NEXT:    xxspltiw v5, 983055254; CHECK-NEXT:    vslh v2, v2, v5255; CHECK-NEXT:    vsrah v2, v2, v5256; CHECK-NEXT:    xxeval v2, v2, v3, v4, 103257; CHECK-NEXT:    blr258entry:259  %or = or <8 x i16> %B, %C260  %xor = xor <8 x i16> %B, %C261  %res = select <8 x i1> %A, <8 x i16> %or, <8 x i16> %xor262  ret <8 x i16> %res263}264 265; Function to test ternary(A, nor(B, C), xor(B, C)) for <4 x i32>266define <4 x i32> @ternary_A_nor_BC_xor_BC_4x32(<4 x i1> %A, <4 x i32> %B, <4 x i32> %C) {267; CHECK-LABEL: ternary_A_nor_BC_xor_BC_4x32:268; CHECK:       # %bb.0: # %entry269; CHECK-NEXT:    xxleqv v5, v5, v5270; CHECK-NEXT:    vslw v2, v2, v5271; CHECK-NEXT:    vsraw v2, v2, v5272; CHECK-NEXT:    xxeval v2, v2, v3, v4, 104273; CHECK-NEXT:    blr274entry:275  %or = or <4 x i32> %B, %C276  %nor = xor <4 x i32> %or, <i32 -1, i32 -1, i32 -1, i32 -1>    ; vector nor operation277  %xor = xor <4 x i32> %B, %C278  %res = select <4 x i1> %A, <4 x i32> %nor, <4 x i32> %xor279  ret <4 x i32> %res280}281 282; Function to test ternary(A, nor(B, C), xor(B, C)) for <2 x i64>283define <2 x i64> @ternary_A_nor_BC_xor_BC_2x64(<2 x i1> %A, <2 x i64> %B, <2 x i64> %C) {284; CHECK-LABEL: ternary_A_nor_BC_xor_BC_2x64:285; CHECK:       # %bb.0: # %entry286; CHECK-NEXT:    xxlxor v5, v5, v5287; CHECK-NEXT:    xxsplti32dx v5, 1, 63288; CHECK-NEXT:    vsld v2, v2, v5289; CHECK-NEXT:    vsrad v2, v2, v5290; CHECK-NEXT:    xxeval v2, v2, v3, v4, 104291; CHECK-NEXT:    blr292entry:293  %or = or <2 x i64> %B, %C294  %nor = xor <2 x i64> %or, <i64 -1, i64 -1>    ; vector nor operation295  %xor = xor <2 x i64> %B, %C296  %res = select <2 x i1> %A, <2 x i64> %nor, <2 x i64> %xor297  ret <2 x i64> %res298}299 300; Function to test ternary(A, nor(B, C), xor(B, C)) for <16 x i8>301define <16 x i8> @ternary_A_nor_BC_xor_BC_16x8(<16 x i1> %A, <16 x i8> %B, <16 x i8> %C) {302; CHECK-LABEL: ternary_A_nor_BC_xor_BC_16x8:303; CHECK:       # %bb.0: # %entry304; CHECK-NEXT:    xxspltib v5, 7305; CHECK-NEXT:    vslb v2, v2, v5306; CHECK-NEXT:    vsrab v2, v2, v5307; CHECK-NEXT:    xxeval v2, v2, v3, v4, 104308; CHECK-NEXT:    blr309entry:310  %or = or <16 x i8> %B, %C311  %nor = xor <16 x i8> %or, <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 nor operation312  %xor = xor <16 x i8> %B, %C313  %res = select <16 x i1> %A, <16 x i8> %nor, <16 x i8> %xor314  ret <16 x i8> %res315}316 317; Function to test ternary(A, nor(B, C), xor(B, C)) for <8 x i16>318define <8 x i16> @ternary_A_nor_BC_xor_BC_8x16(<8 x i1> %A, <8 x i16> %B, <8 x i16> %C) {319; CHECK-LABEL: ternary_A_nor_BC_xor_BC_8x16:320; CHECK:       # %bb.0: # %entry321; CHECK-NEXT:    xxspltiw v5, 983055322; CHECK-NEXT:    vslh v2, v2, v5323; CHECK-NEXT:    vsrah v2, v2, v5324; CHECK-NEXT:    xxeval v2, v2, v3, v4, 104325; CHECK-NEXT:    blr326entry:327  %or = or <8 x i16> %B, %C328  %nor = xor <8 x i16> %or, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>    ; vector nor operation329  %xor = xor <8 x i16> %B, %C330  %res = select <8 x i1> %A, <8 x i16> %nor, <8 x i16> %xor331  ret <8 x i16> %res332}333