brintos

brintos / llvm-project-archived public Read only

0
0
Text · 12.3 KiB · ba7680b Raw
296 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, or(B, C), eqv(B, C)) for <4 x i32>14define <4 x i32> @ternary_A_or_BC_eqv_BC_4x32(<4 x i1> %A, <4 x i32> %B, <4 x i32> %C) {15; CHECK-LABEL: ternary_A_or_BC_eqv_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, 15121; CHECK-NEXT:    blr22entry:23  %or = or <4 x i32> %B, %C24  %xor = xor <4 x i32> %B, %C25  %eqv = xor <4 x i32> %xor, <i32 -1, i32 -1, i32 -1, i32 -1>  ; Vector eqv operation26  %res = select <4 x i1> %A, <4 x i32> %or, <4 x i32> %eqv27  ret <4 x i32> %res28}29 30; Function to test ternary(A, or(B, C), eqv(B, C)) for <2 x i64>31define <2 x i64> @ternary_A_or_BC_eqv_BC_2x64(<2 x i1> %A, <2 x i64> %B, <2 x i64> %C) {32; CHECK-LABEL: ternary_A_or_BC_eqv_BC_2x64:33; CHECK:       # %bb.0: # %entry34; CHECK-NEXT:    xxlxor v5, v5, v535; CHECK-NEXT:    xxsplti32dx v5, 1, 6336; CHECK-NEXT:    vsld v2, v2, v537; CHECK-NEXT:    vsrad v2, v2, v538; CHECK-NEXT:    xxeval v2, v2, v3, v4, 15139; CHECK-NEXT:    blr40entry:41  %or = or <2 x i64> %B, %C42  %xor = xor <2 x i64> %B, %C43  %eqv = xor <2 x i64> %xor, <i64 -1, i64 -1>  ; Vector eqv operation44  %res = select <2 x i1> %A, <2 x i64> %or, <2 x i64> %eqv45  ret <2 x i64> %res46}47 48; Function to test ternary(A, or(B, C), eqv(B, C)) for <16 x i8>49define <16 x i8> @ternary_A_or_BC_eqv_BC_16x8(<16 x i1> %A, <16 x i8> %B, <16 x i8> %C) {50; CHECK-LABEL: ternary_A_or_BC_eqv_BC_16x8:51; CHECK:       # %bb.0: # %entry52; CHECK-NEXT:    xxspltib v5, 753; CHECK-NEXT:    vslb v2, v2, v554; CHECK-NEXT:    vsrab v2, v2, v555; CHECK-NEXT:    xxeval v2, v2, v3, v4, 15156; CHECK-NEXT:    blr57entry:58  %or = or <16 x i8> %B, %C59  %xor = xor <16 x i8> %B, %C60  %eqv = xor <16 x i8> %xor, <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 eqv operation61  %res = select <16 x i1> %A, <16 x i8> %or, <16 x i8> %eqv62  ret <16 x i8> %res63}64 65; Function to test ternary(A, or(B, C), eqv(B, C)) for <8 x i16>66define <8 x i16> @ternary_A_or_BC_eqv_BC_8x16(<8 x i1> %A, <8 x i16> %B, <8 x i16> %C) {67; CHECK-LABEL: ternary_A_or_BC_eqv_BC_8x16:68; CHECK:       # %bb.0: # %entry69; CHECK-NEXT:    xxspltiw v5, 98305570; CHECK-NEXT:    vslh v2, v2, v571; CHECK-NEXT:    vsrah v2, v2, v572; CHECK-NEXT:    xxeval v2, v2, v3, v4, 15173; CHECK-NEXT:    blr74entry:75  %or = or <8 x i16> %B, %C76  %xor = xor <8 x i16> %B, %C77  %eqv = xor <8 x i16> %xor, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>  ; Vector eqv operation78  %res = select <8 x i1> %A, <8 x i16> %or, <8 x i16> %eqv79  ret <8 x i16> %res80}81 82; Function to test ternary(A, nor(B, C), eqv(B, C)) for <4 x i32>83define <4 x i32> @ternary_A_nor_BC_eqv_BC_4x32(<4 x i1> %A, <4 x i32> %B, <4 x i32> %C) {84; CHECK-LABEL: ternary_A_nor_BC_eqv_BC_4x32:85; CHECK:       # %bb.0: # %entry86; CHECK-NEXT:    xxleqv v5, v5, v587; CHECK-NEXT:    vslw v2, v2, v588; CHECK-NEXT:    vsraw v2, v2, v589; CHECK-NEXT:    xxeval v2, v2, v3, v4, 15290; CHECK-NEXT:    blr91entry:92  %or = or <4 x i32> %B, %C93  %nor = xor <4 x i32> %or, <i32 -1, i32 -1, i32 -1, i32 -1>  ; Vector NOR operation94  %xor = xor <4 x i32> %B, %C95  %eqv = xor <4 x i32> %xor, <i32 -1, i32 -1, i32 -1, i32 -1>  ; Vector eqv operation96  %res = select <4 x i1> %A, <4 x i32> %nor, <4 x i32> %eqv97  ret <4 x i32> %res98}99 100; Function to test ternary(A, nor(B, C), eqv(B, C)) for <2 x i64>101define <2 x i64> @ternary_A_nor_BC_eqv_BC_2x64(<2 x i1> %A, <2 x i64> %B, <2 x i64> %C) {102; CHECK-LABEL: ternary_A_nor_BC_eqv_BC_2x64:103; CHECK:       # %bb.0: # %entry104; CHECK-NEXT:    xxlxor v5, v5, v5105; CHECK-NEXT:    xxsplti32dx v5, 1, 63106; CHECK-NEXT:    vsld v2, v2, v5107; CHECK-NEXT:    vsrad v2, v2, v5108; CHECK-NEXT:    xxeval v2, v2, v3, v4, 152109; CHECK-NEXT:    blr110entry:111  %or = or <2 x i64> %B, %C112  %nor = xor <2 x i64> %or, <i64 -1, i64 -1>  ; Vector NOR operation113  %xor = xor <2 x i64> %B, %C114  %eqv = xor <2 x i64> %xor, <i64 -1, i64 -1>  ; Vector eqv operation115  %res = select <2 x i1> %A, <2 x i64> %nor, <2 x i64> %eqv116  ret <2 x i64> %res117}118 119; Function to test ternary(A, nor(B, C), eqv(B, C)) for <16 x i8>120define <16 x i8> @ternary_A_nor_BC_eqv_BC_16x8(<16 x i1> %A, <16 x i8> %B, <16 x i8> %C) {121; CHECK-LABEL: ternary_A_nor_BC_eqv_BC_16x8:122; CHECK:       # %bb.0: # %entry123; CHECK-NEXT:    xxspltib v5, 7124; CHECK-NEXT:    vslb v2, v2, v5125; CHECK-NEXT:    vsrab v2, v2, v5126; CHECK-NEXT:    xxeval v2, v2, v3, v4, 152127; CHECK-NEXT:    blr128entry:129  %or = or <16 x i8> %B, %C130  %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 operation131  %xor = xor <16 x i8> %B, %C132  %eqv = xor <16 x i8> %xor, <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 eqv operation133  %res = select <16 x i1> %A, <16 x i8> %nor, <16 x i8> %eqv134  ret <16 x i8> %res135}136 137; Function to test ternary(A, nor(B, C), eqv(B, C)) for <8 x i16>138define <8 x i16> @ternary_A_nor_BC_eqv_BC_8x16(<8 x i1> %A, <8 x i16> %B, <8 x i16> %C) {139; CHECK-LABEL: ternary_A_nor_BC_eqv_BC_8x16:140; CHECK:       # %bb.0: # %entry141; CHECK-NEXT:    xxspltiw v5, 983055142; CHECK-NEXT:    vslh v2, v2, v5143; CHECK-NEXT:    vsrah v2, v2, v5144; CHECK-NEXT:    xxeval v2, v2, v3, v4, 152145; CHECK-NEXT:    blr146entry:147  %or = or <8 x i16> %B, %C148  %nor = xor <8 x i16> %or, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>  ; Vector NOR operation149  %xor = xor <8 x i16> %B, %C150  %eqv = xor <8 x i16> %xor, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>  ; Vector eqv operation151  %res = select <8 x i1> %A, <8 x i16> %nor, <8 x i16> %eqv152  ret <8 x i16> %res153}154 155; Function to test ternary(A, not(C), eqv(B, C)) for <4 x i32>156define <4 x i32> @ternary_A_not_C_eqv_BC_4x32(<4 x i1> %A, <4 x i32> %B, <4 x i32> %C) {157; CHECK-LABEL: ternary_A_not_C_eqv_BC_4x32:158; CHECK:       # %bb.0: # %entry159; CHECK-NEXT:    xxleqv v5, v5, v5160; CHECK-NEXT:    vslw v2, v2, v5161; CHECK-NEXT:    vsraw v2, v2, v5162; CHECK-NEXT:    xxeval v2, v2, v3, v4, 154163; CHECK-NEXT:    blr164entry:165  %not = xor <4 x i32> %C, <i32 -1, i32 -1, i32 -1, i32 -1>  ; Vector not operation166  %xor = xor <4 x i32> %B, %C167  %eqv = xor <4 x i32> %xor, <i32 -1, i32 -1, i32 -1, i32 -1>  ; Vector eqv operation168  %res = select <4 x i1> %A, <4 x i32> %not, <4 x i32> %eqv169  ret <4 x i32> %res170}171 172; Function to test ternary(A, not(C), eqv(B, C)) for <2 x i64>173define <2 x i64> @ternary_A_not_C_eqv_BC_2x64(<2 x i1> %A, <2 x i64> %B, <2 x i64> %C) {174; CHECK-LABEL: ternary_A_not_C_eqv_BC_2x64:175; CHECK:       # %bb.0: # %entry176; CHECK-NEXT:    xxlxor v5, v5, v5177; CHECK-NEXT:    xxsplti32dx v5, 1, 63178; CHECK-NEXT:    vsld v2, v2, v5179; CHECK-NEXT:    vsrad v2, v2, v5180; CHECK-NEXT:    xxeval v2, v2, v3, v4, 154181; CHECK-NEXT:    blr182entry:183  %not = xor <2 x i64> %C, <i64 -1, i64 -1>  ; Vector not operation184  %xor = xor <2 x i64> %B, %C185  %eqv = xor <2 x i64> %xor, <i64 -1, i64 -1>  ; Vector eqv operation186  %res = select <2 x i1> %A, <2 x i64> %not, <2 x i64> %eqv187  ret <2 x i64> %res188}189 190; Function to test ternary(A, not(C), eqv(B, C)) for <16 x i8>191define <16 x i8> @ternary_A_not_C_eqv_BC_16x8(<16 x i1> %A, <16 x i8> %B, <16 x i8> %C) {192; CHECK-LABEL: ternary_A_not_C_eqv_BC_16x8:193; CHECK:       # %bb.0: # %entry194; CHECK-NEXT:    xxspltib v5, 7195; CHECK-NEXT:    vslb v2, v2, v5196; CHECK-NEXT:    vsrab v2, v2, v5197; CHECK-NEXT:    xxeval v2, v2, v3, v4, 154198; CHECK-NEXT:    blr199entry:200  %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 operation201  %xor = xor <16 x i8> %B, %C202  %eqv = xor <16 x i8> %xor, <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 eqv operation203  %res = select <16 x i1> %A, <16 x i8> %not, <16 x i8> %eqv204  ret <16 x i8> %res205}206 207; Function to test ternary(A, not(C), eqv(B, C)) for <8 x i16>208define <8 x i16> @ternary_A_not_C_eqv_BC_8x16(<8 x i1> %A, <8 x i16> %B, <8 x i16> %C) {209; CHECK-LABEL: ternary_A_not_C_eqv_BC_8x16:210; CHECK:       # %bb.0: # %entry211; CHECK-NEXT:    xxspltiw v5, 983055212; CHECK-NEXT:    vslh v2, v2, v5213; CHECK-NEXT:    vsrah v2, v2, v5214; CHECK-NEXT:    xxeval v2, v2, v3, v4, 154215; CHECK-NEXT:    blr216entry:217  %not = xor <8 x i16> %C, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>  ; Vector not operation218  %xor = xor <8 x i16> %B, %C219  %eqv = xor <8 x i16> %xor, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>  ; Vector eqv operation220  %res = select <8 x i1> %A, <8 x i16> %not, <8 x i16> %eqv221  ret <8 x i16> %res222}223 224; Function to test ternary(A, nand(B, C), eqv(B, C)) for <4 x i32>225define <4 x i32> @ternary_A_nand_BC_eqv_BC_4x32(<4 x i1> %A, <4 x i32> %B, <4 x i32> %C) {226; CHECK-LABEL: ternary_A_nand_BC_eqv_BC_4x32:227; CHECK:       # %bb.0: # %entry228; CHECK-NEXT:    xxleqv v5, v5, v5229; CHECK-NEXT:    vslw v2, v2, v5230; CHECK-NEXT:    vsraw v2, v2, v5231; CHECK-NEXT:    xxeval v2, v2, v3, v4, 158232; CHECK-NEXT:    blr233entry:234  %and = and <4 x i32> %B, %C235  %nand = xor <4 x i32> %and, <i32 -1, i32 -1, i32 -1, i32 -1>  ; Vector nand operation236  %xor = xor <4 x i32> %B, %C237  %eqv = xor <4 x i32> %xor, <i32 -1, i32 -1, i32 -1, i32 -1>  ; Vector eqv operation238  %res = select <4 x i1> %A, <4 x i32> %nand, <4 x i32> %eqv239  ret <4 x i32> %res240}241 242; Function to test ternary(A, nand(B, C), eqv(B, C)) for <2 x i64>243define <2 x i64> @ternary_A_nand_BC_eqv_BC_2x64(<2 x i1> %A, <2 x i64> %B, <2 x i64> %C) {244; CHECK-LABEL: ternary_A_nand_BC_eqv_BC_2x64:245; CHECK:       # %bb.0: # %entry246; CHECK-NEXT:    xxlxor v5, v5, v5247; CHECK-NEXT:    xxsplti32dx v5, 1, 63248; CHECK-NEXT:    vsld v2, v2, v5249; CHECK-NEXT:    vsrad v2, v2, v5250; CHECK-NEXT:    xxeval v2, v2, v3, v4, 158251; CHECK-NEXT:    blr252entry:253  %and = and <2 x i64> %B, %C254  %nand = xor <2 x i64> %and, <i64 -1, i64 -1>  ; Vector nand operation255  %xor = xor <2 x i64> %B, %C256  %eqv = xor <2 x i64> %xor, <i64 -1, i64 -1>  ; Vector eqv operation257  %res = select <2 x i1> %A, <2 x i64> %nand, <2 x i64> %eqv258  ret <2 x i64> %res259}260 261; Function to test ternary(A, nand(B, C), eqv(B, C)) for <16 x i8>262define <16 x i8> @ternary_A_nand_BC_eqv_BC_16x8(<16 x i1> %A, <16 x i8> %B, <16 x i8> %C) {263; CHECK-LABEL: ternary_A_nand_BC_eqv_BC_16x8:264; CHECK:       # %bb.0: # %entry265; CHECK-NEXT:    xxspltib v5, 7266; CHECK-NEXT:    vslb v2, v2, v5267; CHECK-NEXT:    vsrab v2, v2, v5268; CHECK-NEXT:    xxeval v2, v2, v3, v4, 158269; CHECK-NEXT:    blr270entry:271  %and = and <16 x i8> %B, %C272  %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 operation273  %xor = xor <16 x i8> %B, %C274  %eqv = xor <16 x i8> %xor, <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 eqv operation275  %res = select <16 x i1> %A, <16 x i8> %nand, <16 x i8> %eqv276  ret <16 x i8> %res277}278 279; Function to test ternary(A, nand(B, C), eqv(B, C)) for <8 x i16>280define <8 x i16> @ternary_A_nand_BC_eqv_BC_8x16(<8 x i1> %A, <8 x i16> %B, <8 x i16> %C) {281; CHECK-LABEL: ternary_A_nand_BC_eqv_BC_8x16:282; CHECK:       # %bb.0: # %entry283; CHECK-NEXT:    xxspltiw v5, 983055284; CHECK-NEXT:    vslh v2, v2, v5285; CHECK-NEXT:    vsrah v2, v2, v5286; CHECK-NEXT:    xxeval v2, v2, v3, v4, 158287; CHECK-NEXT:    blr288entry:289  %and = and <8 x i16> %B, %C290  %nand = xor <8 x i16> %and, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>  ; Vector nand operation291  %xor = xor <8 x i16> %B, %C292  %eqv = xor <8 x i16> %xor, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>  ; Vector eqv operation293  %res = select <8 x i1> %A, <8 x i16> %nand, <8 x i16> %eqv294  ret <8 x i16> %res295}296