161 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -verify-machineinstrs -mcpu=pwr7 -mtriple=powerpc-aix- < %s | \3; RUN: FileCheck %s4; RUN: llc -verify-machineinstrs -mcpu=pwr7 -mtriple=powerpc64le-- < %s | \5; RUN: FileCheck %s --check-prefix=CHECK_LE6; RUN: llc -verify-machineinstrs -mcpu=pwr8 -mtriple=powerpc64le-- < %s | \7; RUN: FileCheck %s --check-prefix=CHECK_P8LE8define i1 @shufeq(<2 x i64> %a) #0 {9; CHECK-LABEL: shufeq:10; CHECK: # %bb.0: # %entry11; CHECK-NEXT: xxswapd 35, 3412; CHECK-NEXT: lwz 3, L..C0(2) # %const.013; CHECK-NEXT: vcmpequw 2, 2, 314; CHECK-NEXT: lxvw4x 35, 0, 315; CHECK-NEXT: addi 3, 1, -1616; CHECK-NEXT: vperm 3, 2, 2, 317; CHECK-NEXT: xxland 0, 35, 3418; CHECK-NEXT: stxvw4x 0, 0, 319; CHECK-NEXT: lwz 3, -12(1)20; CHECK-NEXT: blr21;22; CHECK_LE-LABEL: shufeq:23; CHECK_LE: # %bb.0: # %entry24; CHECK_LE-NEXT: addis 3, 2, .LCPI0_0@toc@ha25; CHECK_LE-NEXT: xxswapd 35, 3426; CHECK_LE-NEXT: addi 3, 3, .LCPI0_0@toc@l27; CHECK_LE-NEXT: lxvd2x 0, 0, 328; CHECK_LE-NEXT: addi 3, 1, -1629; CHECK_LE-NEXT: vcmpequw 2, 2, 330; CHECK_LE-NEXT: xxswapd 36, 031; CHECK_LE-NEXT: vperm 3, 2, 2, 432; CHECK_LE-NEXT: xxland 0, 35, 3433; CHECK_LE-NEXT: xxswapd 0, 034; CHECK_LE-NEXT: stxvd2x 0, 0, 335; CHECK_LE-NEXT: ld 3, -16(1)36; CHECK_LE-NEXT: blr37;38; CHECK_P8LE-LABEL: shufeq:39; CHECK_P8LE: # %bb.0: # %entry40; CHECK_P8LE-NEXT: xxswapd 35, 3441; CHECK_P8LE-NEXT: vcmpequd 2, 2, 342; CHECK_P8LE-NEXT: xxswapd 0, 3443; CHECK_P8LE-NEXT: mffprd 3, 044; CHECK_P8LE-NEXT: blr45entry:46 %0 = shufflevector <2 x i64> %a, <2 x i64> poison, <2 x i32> <i32 1, i32 undef>47 %1 = icmp eq <2 x i64> %a, %048 %2 = extractelement <2 x i1> %1, i32 049 ret i1 %250}51 52define i1 @shufne(<2 x i64> %a) #0 {53; CHECK-LABEL: shufne:54; CHECK: # %bb.0: # %entry55; CHECK-NEXT: xxswapd 35, 3456; CHECK-NEXT: lwz 3, L..C1(2) # %const.057; CHECK-NEXT: vcmpequw 2, 2, 358; CHECK-NEXT: lxvw4x 35, 0, 359; CHECK-NEXT: addi 3, 1, -1660; CHECK-NEXT: vperm 3, 2, 2, 361; CHECK-NEXT: xxland 0, 35, 3462; CHECK-NEXT: stxvw4x 0, 0, 363; CHECK-NEXT: lwz 3, -12(1)64; CHECK-NEXT: blr65;66; CHECK_LE-LABEL: shufne:67; CHECK_LE: # %bb.0: # %entry68; CHECK_LE-NEXT: addis 3, 2, .LCPI1_0@toc@ha69; CHECK_LE-NEXT: xxswapd 35, 3470; CHECK_LE-NEXT: addi 3, 3, .LCPI1_0@toc@l71; CHECK_LE-NEXT: lxvd2x 0, 0, 372; CHECK_LE-NEXT: addi 3, 1, -1673; CHECK_LE-NEXT: vcmpequw 2, 2, 374; CHECK_LE-NEXT: xxswapd 36, 075; CHECK_LE-NEXT: vperm 3, 2, 2, 476; CHECK_LE-NEXT: xxland 0, 35, 3477; CHECK_LE-NEXT: xxswapd 0, 078; CHECK_LE-NEXT: stxvd2x 0, 0, 379; CHECK_LE-NEXT: ld 3, -16(1)80; CHECK_LE-NEXT: blr81;82; CHECK_P8LE-LABEL: shufne:83; CHECK_P8LE: # %bb.0: # %entry84; CHECK_P8LE-NEXT: xxswapd 35, 3485; CHECK_P8LE-NEXT: vcmpequd 2, 2, 386; CHECK_P8LE-NEXT: xxswapd 0, 3487; CHECK_P8LE-NEXT: mffprd 3, 088; CHECK_P8LE-NEXT: blr89entry:90 %0 = shufflevector <2 x i64> %a, <2 x i64> poison, <2 x i32> <i32 1, i32 undef>91 %1 = icmp eq <2 x i64> %a, %092 %2 = extractelement <2 x i1> %1, i32 093 ret i1 %294}95 96define <2 x i64> @cmpeq(<2 x i64> noundef %a, <2 x i64> noundef %b) {97; CHECK-LABEL: cmpeq:98; CHECK: # %bb.0: # %entry99; CHECK-NEXT: lwz 3, L..C2(2) # %const.0100; CHECK-NEXT: vcmpequw 2, 2, 3101; CHECK-NEXT: lxvw4x 35, 0, 3102; CHECK-NEXT: vperm 3, 2, 2, 3103; CHECK-NEXT: xxland 34, 35, 34104; CHECK-NEXT: blr105;106; CHECK_LE-LABEL: cmpeq:107; CHECK_LE: # %bb.0: # %entry108; CHECK_LE-NEXT: addis 3, 2, .LCPI2_0@toc@ha109; CHECK_LE-NEXT: vcmpequw 2, 2, 3110; CHECK_LE-NEXT: addi 3, 3, .LCPI2_0@toc@l111; CHECK_LE-NEXT: lxvd2x 0, 0, 3112; CHECK_LE-NEXT: xxswapd 36, 0113; CHECK_LE-NEXT: vperm 3, 2, 2, 4114; CHECK_LE-NEXT: xxland 34, 35, 34115; CHECK_LE-NEXT: blr116;117; CHECK_P8LE-LABEL: cmpeq:118; CHECK_P8LE: # %bb.0: # %entry119; CHECK_P8LE-NEXT: vcmpequd 2, 2, 3120; CHECK_P8LE-NEXT: blr121entry:122 %cmp = icmp eq <2 x i64> %a, %b123 %sext = sext <2 x i1> %cmp to <2 x i64>124 ret <2 x i64> %sext125}126 127define <2 x i64> @cmpne(<2 x i64> noundef %a, <2 x i64> noundef %b) {128; CHECK-LABEL: cmpne:129; CHECK: # %bb.0: # %entry130; CHECK-NEXT: lwz 3, L..C3(2) # %const.0131; CHECK-NEXT: vcmpequw 2, 2, 3132; CHECK-NEXT: lxvw4x 35, 0, 3133; CHECK-NEXT: xxlnor 34, 34, 34134; CHECK-NEXT: vperm 3, 2, 2, 3135; CHECK-NEXT: xxlor 34, 35, 34136; CHECK-NEXT: blr137;138; CHECK_LE-LABEL: cmpne:139; CHECK_LE: # %bb.0: # %entry140; CHECK_LE-NEXT: addis 3, 2, .LCPI3_0@toc@ha141; CHECK_LE-NEXT: vcmpequw 2, 2, 3142; CHECK_LE-NEXT: addi 3, 3, .LCPI3_0@toc@l143; CHECK_LE-NEXT: lxvd2x 0, 0, 3144; CHECK_LE-NEXT: xxlnor 34, 34, 34145; CHECK_LE-NEXT: xxswapd 36, 0146; CHECK_LE-NEXT: vperm 3, 2, 2, 4147; CHECK_LE-NEXT: xxlor 34, 35, 34148; CHECK_LE-NEXT: blr149;150; CHECK_P8LE-LABEL: cmpne:151; CHECK_P8LE: # %bb.0: # %entry152; CHECK_P8LE-NEXT: vcmpequd 2, 2, 3153; CHECK_P8LE-NEXT: xxlnor 34, 34, 34154; CHECK_P8LE-NEXT: blr155entry:156 %cmp = icmp ne <2 x i64> %a, %b157 %sext = sext <2 x i1> %cmp to <2 x i64>158 ret <2 x i64> %sext159}160 161