1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -O0 -mtriple=powerpc64le-unknown-unknown | FileCheck %s 3 4; Function Attrs: nobuiltin nounwind readonly 5define i8 @popcount128(i128* nocapture nonnull readonly %0) { 6; CHECK-LABEL: popcount128: 7; CHECK: # %bb.0: # %Entry 8; CHECK-NEXT: ld 4, 0(3) 9; CHECK-NEXT: ld 3, 8(3) 10; CHECK-NEXT: popcntd 3, 3 11; CHECK-NEXT: popcntd 4, 4 12; CHECK-NEXT: add 3, 4, 3 13; CHECK-NEXT: # kill: def $r3 killed $r3 killed $x3 14; CHECK-NEXT: clrldi 3, 3, 56 15; CHECK-NEXT: blr 16Entry: 17 %1 = load i128, i128* %0, align 16 18 %2 = tail call i128 @llvm.ctpop.i128(i128 %1) 19 %3 = trunc i128 %2 to i8 20 ret i8 %3 21} 22 23; Function Attrs: nounwind readnone speculatable willreturn 24declare i128 @llvm.ctpop.i128(i128) 25 26; Function Attrs: nobuiltin nounwind readonly 27define i16 @popcount256(i256* nocapture nonnull readonly %0) { 28; CHECK-LABEL: popcount256: 29; CHECK: # %bb.0: # %Entry 30; CHECK-NEXT: ld 4, 0(3) 31; CHECK-NEXT: ld 5, 8(3) 32; CHECK-NEXT: ld 6, 16(3) 33; CHECK-NEXT: ld 3, 24(3) 34; CHECK-NEXT: popcntd 3, 3 35; CHECK-NEXT: popcntd 6, 6 36; CHECK-NEXT: add 3, 6, 3 37; CHECK-NEXT: popcntd 5, 5 38; CHECK-NEXT: popcntd 4, 4 39; CHECK-NEXT: add 4, 4, 5 40; CHECK-NEXT: add 3, 4, 3 41; CHECK-NEXT: # kill: def $r3 killed $r3 killed $x3 42; CHECK-NEXT: clrldi 3, 3, 48 43; CHECK-NEXT: blr 44Entry: 45 %1 = load i256, i256* %0, align 16 46 %2 = tail call i256 @llvm.ctpop.i256(i256 %1) 47 %3 = trunc i256 %2 to i16 48 ret i16 %3 49} 50 51; Function Attrs: nounwind readnone speculatable willreturn 52declare i256 @llvm.ctpop.i256(i256) 53 54define <1 x i128> @popcount1x128(<1 x i128> %0) { 55; CHECK-LABEL: popcount1x128: 56; CHECK: # %bb.0: # %Entry 57; CHECK-NEXT: xxlor 0, 34, 34 58; CHECK-NEXT: # kill: def $f0 killed $f0 killed $vsl0 59; CHECK-NEXT: mffprd 3, 0 60; CHECK-NEXT: popcntd 3, 3 61; CHECK-NEXT: xxswapd 0, 34 62; CHECK-NEXT: # kill: def $f0 killed $f0 killed $vsl0 63; CHECK-NEXT: mffprd 4, 0 64; CHECK-NEXT: popcntd 4, 4 65; CHECK-NEXT: add 3, 4, 3 66; CHECK-NEXT: mtfprd 0, 3 67; CHECK-NEXT: # kill: def $vsl0 killed $f0 68; CHECK-NEXT: li 3, 0 69; CHECK-NEXT: mtfprd 1, 3 70; CHECK-NEXT: # kill: def $vsl1 killed $f1 71; CHECK-NEXT: xxmrghd 34, 1, 0 72; CHECK-NEXT: blr 73Entry: 74 %1 = tail call <1 x i128> @llvm.ctpop.v1.i128(<1 x i128> %0) 75 ret <1 x i128> %1 76} 77 78declare <1 x i128> @llvm.ctpop.v1.i128(<1 x i128>) 79