1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -O0 -mtriple=aarch64-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: ldr x8, [x0, #8] 9; CHECK-NEXT: ldr d0, [x0] 10; CHECK-NEXT: // implicit-def: $q1 11; CHECK-NEXT: mov v1.16b, v0.16b 12; CHECK-NEXT: mov v1.d[1], x8 13; CHECK-NEXT: cnt v1.16b, v1.16b 14; CHECK-NEXT: uaddlv h2, v1.16b 15; CHECK-NEXT: // implicit-def: $q1 16; CHECK-NEXT: mov v1.16b, v2.16b 17; CHECK-NEXT: fmov w1, s1 18; CHECK-NEXT: mov w0, w1 19; CHECK-NEXT: ret 20Entry: 21 %1 = load i128, i128* %0, align 16 22 %2 = tail call i128 @llvm.ctpop.i128(i128 %1) 23 %3 = trunc i128 %2 to i8 24 ret i8 %3 25} 26 27; Function Attrs: nounwind readnone speculatable willreturn 28declare i128 @llvm.ctpop.i128(i128) 29 30; Function Attrs: nobuiltin nounwind readonly 31define i16 @popcount256(i256* nocapture nonnull readonly %0) { 32; CHECK-LABEL: popcount256: 33; CHECK: // %bb.0: // %Entry 34; CHECK-NEXT: ldr x8, [x0, #8] 35; CHECK-NEXT: ldr x9, [x0, #24] 36; CHECK-NEXT: ldr d0, [x0, #16] 37; CHECK-NEXT: // implicit-def: $q1 38; CHECK-NEXT: mov v1.16b, v0.16b 39; CHECK-NEXT: mov v1.d[1], x9 40; CHECK-NEXT: cnt v1.16b, v1.16b 41; CHECK-NEXT: uaddlv h2, v1.16b 42; CHECK-NEXT: // implicit-def: $q1 43; CHECK-NEXT: mov v1.16b, v2.16b 44; CHECK-NEXT: fmov w10, s1 45; CHECK-NEXT: ldr d0, [x0] 46; CHECK-NEXT: // implicit-def: $q1 47; CHECK-NEXT: mov v1.16b, v0.16b 48; CHECK-NEXT: mov v1.d[1], x8 49; CHECK-NEXT: cnt v1.16b, v1.16b 50; CHECK-NEXT: uaddlv h2, v1.16b 51; CHECK-NEXT: // implicit-def: $q1 52; CHECK-NEXT: mov v1.16b, v2.16b 53; CHECK-NEXT: fmov w11, s1 54; CHECK-NEXT: add w0, w11, w10 55; CHECK-NEXT: ret 56Entry: 57 %1 = load i256, i256* %0, align 16 58 %2 = tail call i256 @llvm.ctpop.i256(i256 %1) 59 %3 = trunc i256 %2 to i16 60 ret i16 %3 61} 62 63; Function Attrs: nounwind readnone speculatable willreturn 64declare i256 @llvm.ctpop.i256(i256) 65 66define <1 x i128> @popcount1x128(<1 x i128> %0) { 67; CHECK-LABEL: popcount1x128: 68; CHECK: // %bb.0: // %Entry 69; CHECK-NEXT: // implicit-def: $q0 70; CHECK-NEXT: fmov d0, x0 71; CHECK-NEXT: mov v0.d[1], x1 72; CHECK-NEXT: cnt v0.16b, v0.16b 73; CHECK-NEXT: uaddlv h1, v0.16b 74; CHECK-NEXT: // implicit-def: $q0 75; CHECK-NEXT: mov v0.16b, v1.16b 76; CHECK-NEXT: fmov w2, s0 77; CHECK-NEXT: mov w0, w2 78; CHECK-NEXT: movi v0.2d, #0000000000000000 79; CHECK-NEXT: mov x1, v0.d[1] 80; CHECK-NEXT: ret 81Entry: 82 %1 = tail call <1 x i128> @llvm.ctpop.v1.i128(<1 x i128> %0) 83 ret <1 x i128> %1 84} 85 86declare <1 x i128> @llvm.ctpop.v1.i128(<1 x i128>) 87