513 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -mtriple=x86_64-unknown -mattr=+sse2 -passes=slp-vectorizer -S | FileCheck %s --check-prefix=CHECK --check-prefix=SSE --check-prefix=SSE23; RUN: opt < %s -mtriple=x86_64-unknown -mattr=+sse4.2,+popcnt -passes=slp-vectorizer -S | FileCheck %s --check-prefix=CHECK --check-prefix=SSE --check-prefix=SSE424; RUN: opt < %s -mtriple=x86_64-unknown -mattr=+avx,+popcnt -passes=slp-vectorizer -S | FileCheck %s --check-prefix=CHECK --check-prefix=AVX --check-prefix=AVX15; RUN: opt < %s -mtriple=x86_64-unknown -mattr=+avx2,+popcnt -passes=slp-vectorizer -S | FileCheck %s --check-prefix=CHECK --check-prefix=AVX --check-prefix=AVX26 7target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"8 9@src64 = common global [4 x i64] zeroinitializer, align 3210@dst64 = common global [4 x i64] zeroinitializer, align 3211@src32 = common global [8 x i32] zeroinitializer, align 3212@dst32 = common global [8 x i32] zeroinitializer, align 3213@src16 = common global [16 x i16] zeroinitializer, align 3214@dst16 = common global [16 x i16] zeroinitializer, align 3215@src8 = common global [32 x i8] zeroinitializer, align 3216@dst8 = common global [32 x i8] zeroinitializer, align 3217 18declare i64 @llvm.ctpop.i64(i64)19declare i32 @llvm.ctpop.i32(i32)20declare i16 @llvm.ctpop.i16(i16)21declare i8 @llvm.ctpop.i8(i8)22 23define void @ctpop_2i64() #0 {24; SSE2-LABEL: @ctpop_2i64(25; SSE2-NEXT: [[TMP1:%.*]] = load <2 x i64>, ptr @src64, align 826; SSE2-NEXT: [[TMP2:%.*]] = call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> [[TMP1]])27; SSE2-NEXT: store <2 x i64> [[TMP2]], ptr @dst64, align 828; SSE2-NEXT: ret void29;30; SSE42-LABEL: @ctpop_2i64(31; SSE42-NEXT: [[LD0:%.*]] = load i64, ptr @src64, align 832; SSE42-NEXT: [[LD1:%.*]] = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i32 0, i64 1), align 833; SSE42-NEXT: [[CTPOP0:%.*]] = call i64 @llvm.ctpop.i64(i64 [[LD0]])34; SSE42-NEXT: [[CTPOP1:%.*]] = call i64 @llvm.ctpop.i64(i64 [[LD1]])35; SSE42-NEXT: store i64 [[CTPOP0]], ptr @dst64, align 836; SSE42-NEXT: store i64 [[CTPOP1]], ptr getelementptr inbounds ([4 x i64], ptr @dst64, i32 0, i64 1), align 837; SSE42-NEXT: ret void38;39; AVX1-LABEL: @ctpop_2i64(40; AVX1-NEXT: [[LD0:%.*]] = load i64, ptr @src64, align 841; AVX1-NEXT: [[LD1:%.*]] = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i32 0, i64 1), align 842; AVX1-NEXT: [[CTPOP0:%.*]] = call i64 @llvm.ctpop.i64(i64 [[LD0]])43; AVX1-NEXT: [[CTPOP1:%.*]] = call i64 @llvm.ctpop.i64(i64 [[LD1]])44; AVX1-NEXT: store i64 [[CTPOP0]], ptr @dst64, align 845; AVX1-NEXT: store i64 [[CTPOP1]], ptr getelementptr inbounds ([4 x i64], ptr @dst64, i32 0, i64 1), align 846; AVX1-NEXT: ret void47;48; AVX2-LABEL: @ctpop_2i64(49; AVX2-NEXT: [[TMP1:%.*]] = load <2 x i64>, ptr @src64, align 850; AVX2-NEXT: [[TMP2:%.*]] = call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> [[TMP1]])51; AVX2-NEXT: store <2 x i64> [[TMP2]], ptr @dst64, align 852; AVX2-NEXT: ret void53;54 %ld0 = load i64, ptr @src64, align 855 %ld1 = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i32 0, i64 1), align 856 %ctpop0 = call i64 @llvm.ctpop.i64(i64 %ld0)57 %ctpop1 = call i64 @llvm.ctpop.i64(i64 %ld1)58 store i64 %ctpop0, ptr @dst64, align 859 store i64 %ctpop1, ptr getelementptr inbounds ([4 x i64], ptr @dst64, i32 0, i64 1), align 860 ret void61}62 63define void @ctpop_4i64() #0 {64; SSE2-LABEL: @ctpop_4i64(65; SSE2-NEXT: [[TMP1:%.*]] = load <2 x i64>, ptr @src64, align 466; SSE2-NEXT: [[TMP2:%.*]] = call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> [[TMP1]])67; SSE2-NEXT: store <2 x i64> [[TMP2]], ptr @dst64, align 468; SSE2-NEXT: [[TMP3:%.*]] = load <2 x i64>, ptr getelementptr inbounds ([4 x i64], ptr @src64, i64 0, i64 2), align 469; SSE2-NEXT: [[TMP4:%.*]] = call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> [[TMP3]])70; SSE2-NEXT: store <2 x i64> [[TMP4]], ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 2), align 471; SSE2-NEXT: ret void72;73; SSE42-LABEL: @ctpop_4i64(74; SSE42-NEXT: [[LD0:%.*]] = load i64, ptr @src64, align 475; SSE42-NEXT: [[LD1:%.*]] = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i64 0, i64 1), align 476; SSE42-NEXT: [[LD2:%.*]] = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i64 0, i64 2), align 477; SSE42-NEXT: [[LD3:%.*]] = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i64 0, i64 3), align 478; SSE42-NEXT: [[CTPOP0:%.*]] = call i64 @llvm.ctpop.i64(i64 [[LD0]])79; SSE42-NEXT: [[CTPOP1:%.*]] = call i64 @llvm.ctpop.i64(i64 [[LD1]])80; SSE42-NEXT: [[CTPOP2:%.*]] = call i64 @llvm.ctpop.i64(i64 [[LD2]])81; SSE42-NEXT: [[CTPOP3:%.*]] = call i64 @llvm.ctpop.i64(i64 [[LD3]])82; SSE42-NEXT: store i64 [[CTPOP0]], ptr @dst64, align 483; SSE42-NEXT: store i64 [[CTPOP1]], ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 1), align 484; SSE42-NEXT: store i64 [[CTPOP2]], ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 2), align 485; SSE42-NEXT: store i64 [[CTPOP3]], ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 3), align 486; SSE42-NEXT: ret void87;88; AVX1-LABEL: @ctpop_4i64(89; AVX1-NEXT: [[LD0:%.*]] = load i64, ptr @src64, align 490; AVX1-NEXT: [[LD1:%.*]] = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i64 0, i64 1), align 491; AVX1-NEXT: [[LD2:%.*]] = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i64 0, i64 2), align 492; AVX1-NEXT: [[LD3:%.*]] = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i64 0, i64 3), align 493; AVX1-NEXT: [[CTPOP0:%.*]] = call i64 @llvm.ctpop.i64(i64 [[LD0]])94; AVX1-NEXT: [[CTPOP1:%.*]] = call i64 @llvm.ctpop.i64(i64 [[LD1]])95; AVX1-NEXT: [[CTPOP2:%.*]] = call i64 @llvm.ctpop.i64(i64 [[LD2]])96; AVX1-NEXT: [[CTPOP3:%.*]] = call i64 @llvm.ctpop.i64(i64 [[LD3]])97; AVX1-NEXT: store i64 [[CTPOP0]], ptr @dst64, align 498; AVX1-NEXT: store i64 [[CTPOP1]], ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 1), align 499; AVX1-NEXT: store i64 [[CTPOP2]], ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 2), align 4100; AVX1-NEXT: store i64 [[CTPOP3]], ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 3), align 4101; AVX1-NEXT: ret void102;103; AVX2-LABEL: @ctpop_4i64(104; AVX2-NEXT: [[TMP1:%.*]] = load <4 x i64>, ptr @src64, align 4105; AVX2-NEXT: [[TMP2:%.*]] = call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> [[TMP1]])106; AVX2-NEXT: store <4 x i64> [[TMP2]], ptr @dst64, align 4107; AVX2-NEXT: ret void108;109 %ld0 = load i64, ptr @src64, align 4110 %ld1 = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i64 0, i64 1), align 4111 %ld2 = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i64 0, i64 2), align 4112 %ld3 = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i64 0, i64 3), align 4113 %ctpop0 = call i64 @llvm.ctpop.i64(i64 %ld0)114 %ctpop1 = call i64 @llvm.ctpop.i64(i64 %ld1)115 %ctpop2 = call i64 @llvm.ctpop.i64(i64 %ld2)116 %ctpop3 = call i64 @llvm.ctpop.i64(i64 %ld3)117 store i64 %ctpop0, ptr @dst64, align 4118 store i64 %ctpop1, ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 1), align 4119 store i64 %ctpop2, ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 2), align 4120 store i64 %ctpop3, ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 3), align 4121 ret void122}123 124define void @ctpop_4i32() #0 {125; SSE2-LABEL: @ctpop_4i32(126; SSE2-NEXT: [[TMP1:%.*]] = load <4 x i32>, ptr @src32, align 4127; SSE2-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> [[TMP1]])128; SSE2-NEXT: store <4 x i32> [[TMP2]], ptr @dst32, align 4129; SSE2-NEXT: ret void130;131; SSE42-LABEL: @ctpop_4i32(132; SSE42-NEXT: [[LD0:%.*]] = load i32, ptr @src32, align 4133; SSE42-NEXT: [[LD1:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 1), align 4134; SSE42-NEXT: [[LD2:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 2), align 4135; SSE42-NEXT: [[LD3:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 3), align 4136; SSE42-NEXT: [[CTPOP0:%.*]] = call i32 @llvm.ctpop.i32(i32 [[LD0]])137; SSE42-NEXT: [[CTPOP1:%.*]] = call i32 @llvm.ctpop.i32(i32 [[LD1]])138; SSE42-NEXT: [[CTPOP2:%.*]] = call i32 @llvm.ctpop.i32(i32 [[LD2]])139; SSE42-NEXT: [[CTPOP3:%.*]] = call i32 @llvm.ctpop.i32(i32 [[LD3]])140; SSE42-NEXT: store i32 [[CTPOP0]], ptr @dst32, align 4141; SSE42-NEXT: store i32 [[CTPOP1]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 1), align 4142; SSE42-NEXT: store i32 [[CTPOP2]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 2), align 4143; SSE42-NEXT: store i32 [[CTPOP3]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 3), align 4144; SSE42-NEXT: ret void145;146; AVX-LABEL: @ctpop_4i32(147; AVX-NEXT: [[TMP1:%.*]] = load <4 x i32>, ptr @src32, align 4148; AVX-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> [[TMP1]])149; AVX-NEXT: store <4 x i32> [[TMP2]], ptr @dst32, align 4150; AVX-NEXT: ret void151;152 %ld0 = load i32, ptr @src32, align 4153 %ld1 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 1), align 4154 %ld2 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 2), align 4155 %ld3 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 3), align 4156 %ctpop0 = call i32 @llvm.ctpop.i32(i32 %ld0)157 %ctpop1 = call i32 @llvm.ctpop.i32(i32 %ld1)158 %ctpop2 = call i32 @llvm.ctpop.i32(i32 %ld2)159 %ctpop3 = call i32 @llvm.ctpop.i32(i32 %ld3)160 store i32 %ctpop0, ptr @dst32, align 4161 store i32 %ctpop1, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 1), align 4162 store i32 %ctpop2, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 2), align 4163 store i32 %ctpop3, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 3), align 4164 ret void165}166 167define void @ctpop_8i32() #0 {168; SSE2-LABEL: @ctpop_8i32(169; SSE2-NEXT: [[TMP1:%.*]] = load <4 x i32>, ptr @src32, align 2170; SSE2-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> [[TMP1]])171; SSE2-NEXT: store <4 x i32> [[TMP2]], ptr @dst32, align 2172; SSE2-NEXT: [[TMP3:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 4), align 2173; SSE2-NEXT: [[TMP4:%.*]] = call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> [[TMP3]])174; SSE2-NEXT: store <4 x i32> [[TMP4]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 4), align 2175; SSE2-NEXT: ret void176;177; SSE42-LABEL: @ctpop_8i32(178; SSE42-NEXT: [[LD0:%.*]] = load i32, ptr @src32, align 2179; SSE42-NEXT: [[LD1:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 1), align 2180; SSE42-NEXT: [[LD2:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 2), align 2181; SSE42-NEXT: [[LD3:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 3), align 2182; SSE42-NEXT: [[LD4:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 4), align 2183; SSE42-NEXT: [[LD5:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 5), align 2184; SSE42-NEXT: [[LD6:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 6), align 2185; SSE42-NEXT: [[LD7:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 7), align 2186; SSE42-NEXT: [[CTPOP0:%.*]] = call i32 @llvm.ctpop.i32(i32 [[LD0]])187; SSE42-NEXT: [[CTPOP1:%.*]] = call i32 @llvm.ctpop.i32(i32 [[LD1]])188; SSE42-NEXT: [[CTPOP2:%.*]] = call i32 @llvm.ctpop.i32(i32 [[LD2]])189; SSE42-NEXT: [[CTPOP3:%.*]] = call i32 @llvm.ctpop.i32(i32 [[LD3]])190; SSE42-NEXT: [[CTPOP4:%.*]] = call i32 @llvm.ctpop.i32(i32 [[LD4]])191; SSE42-NEXT: [[CTPOP5:%.*]] = call i32 @llvm.ctpop.i32(i32 [[LD5]])192; SSE42-NEXT: [[CTPOP6:%.*]] = call i32 @llvm.ctpop.i32(i32 [[LD6]])193; SSE42-NEXT: [[CTPOP7:%.*]] = call i32 @llvm.ctpop.i32(i32 [[LD7]])194; SSE42-NEXT: store i32 [[CTPOP0]], ptr @dst32, align 2195; SSE42-NEXT: store i32 [[CTPOP1]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 1), align 2196; SSE42-NEXT: store i32 [[CTPOP2]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 2), align 2197; SSE42-NEXT: store i32 [[CTPOP3]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 3), align 2198; SSE42-NEXT: store i32 [[CTPOP4]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 4), align 2199; SSE42-NEXT: store i32 [[CTPOP5]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 5), align 2200; SSE42-NEXT: store i32 [[CTPOP6]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 6), align 2201; SSE42-NEXT: store i32 [[CTPOP7]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 7), align 2202; SSE42-NEXT: ret void203;204; AVX-LABEL: @ctpop_8i32(205; AVX-NEXT: [[TMP1:%.*]] = load <8 x i32>, ptr @src32, align 2206; AVX-NEXT: [[TMP2:%.*]] = call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> [[TMP1]])207; AVX-NEXT: store <8 x i32> [[TMP2]], ptr @dst32, align 2208; AVX-NEXT: ret void209;210 %ld0 = load i32, ptr @src32, align 2211 %ld1 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 1), align 2212 %ld2 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 2), align 2213 %ld3 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 3), align 2214 %ld4 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 4), align 2215 %ld5 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 5), align 2216 %ld6 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 6), align 2217 %ld7 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 7), align 2218 %ctpop0 = call i32 @llvm.ctpop.i32(i32 %ld0)219 %ctpop1 = call i32 @llvm.ctpop.i32(i32 %ld1)220 %ctpop2 = call i32 @llvm.ctpop.i32(i32 %ld2)221 %ctpop3 = call i32 @llvm.ctpop.i32(i32 %ld3)222 %ctpop4 = call i32 @llvm.ctpop.i32(i32 %ld4)223 %ctpop5 = call i32 @llvm.ctpop.i32(i32 %ld5)224 %ctpop6 = call i32 @llvm.ctpop.i32(i32 %ld6)225 %ctpop7 = call i32 @llvm.ctpop.i32(i32 %ld7)226 store i32 %ctpop0, ptr @dst32, align 2227 store i32 %ctpop1, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 1), align 2228 store i32 %ctpop2, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 2), align 2229 store i32 %ctpop3, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 3), align 2230 store i32 %ctpop4, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 4), align 2231 store i32 %ctpop5, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 5), align 2232 store i32 %ctpop6, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 6), align 2233 store i32 %ctpop7, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 7), align 2234 ret void235}236 237define void @ctpop_8i16() #0 {238; CHECK-LABEL: @ctpop_8i16(239; CHECK-NEXT: [[TMP1:%.*]] = load <8 x i16>, ptr @src16, align 2240; CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> [[TMP1]])241; CHECK-NEXT: store <8 x i16> [[TMP2]], ptr @dst16, align 2242; CHECK-NEXT: ret void243;244 %ld0 = load i16, ptr @src16, align 2245 %ld1 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 1), align 2246 %ld2 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 2), align 2247 %ld3 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 3), align 2248 %ld4 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 4), align 2249 %ld5 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 5), align 2250 %ld6 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 6), align 2251 %ld7 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 7), align 2252 %ctpop0 = call i16 @llvm.ctpop.i16(i16 %ld0)253 %ctpop1 = call i16 @llvm.ctpop.i16(i16 %ld1)254 %ctpop2 = call i16 @llvm.ctpop.i16(i16 %ld2)255 %ctpop3 = call i16 @llvm.ctpop.i16(i16 %ld3)256 %ctpop4 = call i16 @llvm.ctpop.i16(i16 %ld4)257 %ctpop5 = call i16 @llvm.ctpop.i16(i16 %ld5)258 %ctpop6 = call i16 @llvm.ctpop.i16(i16 %ld6)259 %ctpop7 = call i16 @llvm.ctpop.i16(i16 %ld7)260 store i16 %ctpop0, ptr @dst16, align 2261 store i16 %ctpop1, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 1), align 2262 store i16 %ctpop2, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 2), align 2263 store i16 %ctpop3, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 3), align 2264 store i16 %ctpop4, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 4), align 2265 store i16 %ctpop5, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 5), align 2266 store i16 %ctpop6, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 6), align 2267 store i16 %ctpop7, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 7), align 2268 ret void269}270 271define void @ctpop_16i16() #0 {272; SSE-LABEL: @ctpop_16i16(273; SSE-NEXT: [[TMP1:%.*]] = load <8 x i16>, ptr @src16, align 2274; SSE-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> [[TMP1]])275; SSE-NEXT: store <8 x i16> [[TMP2]], ptr @dst16, align 2276; SSE-NEXT: [[TMP3:%.*]] = load <8 x i16>, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 8), align 2277; SSE-NEXT: [[TMP4:%.*]] = call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> [[TMP3]])278; SSE-NEXT: store <8 x i16> [[TMP4]], ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 8), align 2279; SSE-NEXT: ret void280;281; AVX-LABEL: @ctpop_16i16(282; AVX-NEXT: [[TMP1:%.*]] = load <16 x i16>, ptr @src16, align 2283; AVX-NEXT: [[TMP2:%.*]] = call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> [[TMP1]])284; AVX-NEXT: store <16 x i16> [[TMP2]], ptr @dst16, align 2285; AVX-NEXT: ret void286;287 %ld0 = load i16, ptr @src16, align 2288 %ld1 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 1), align 2289 %ld2 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 2), align 2290 %ld3 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 3), align 2291 %ld4 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 4), align 2292 %ld5 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 5), align 2293 %ld6 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 6), align 2294 %ld7 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 7), align 2295 %ld8 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 8), align 2296 %ld9 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 9), align 2297 %ld10 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 10), align 2298 %ld11 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 11), align 2299 %ld12 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 12), align 2300 %ld13 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 13), align 2301 %ld14 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 14), align 2302 %ld15 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 15), align 2303 %ctpop0 = call i16 @llvm.ctpop.i16(i16 %ld0)304 %ctpop1 = call i16 @llvm.ctpop.i16(i16 %ld1)305 %ctpop2 = call i16 @llvm.ctpop.i16(i16 %ld2)306 %ctpop3 = call i16 @llvm.ctpop.i16(i16 %ld3)307 %ctpop4 = call i16 @llvm.ctpop.i16(i16 %ld4)308 %ctpop5 = call i16 @llvm.ctpop.i16(i16 %ld5)309 %ctpop6 = call i16 @llvm.ctpop.i16(i16 %ld6)310 %ctpop7 = call i16 @llvm.ctpop.i16(i16 %ld7)311 %ctpop8 = call i16 @llvm.ctpop.i16(i16 %ld8)312 %ctpop9 = call i16 @llvm.ctpop.i16(i16 %ld9)313 %ctpop10 = call i16 @llvm.ctpop.i16(i16 %ld10)314 %ctpop11 = call i16 @llvm.ctpop.i16(i16 %ld11)315 %ctpop12 = call i16 @llvm.ctpop.i16(i16 %ld12)316 %ctpop13 = call i16 @llvm.ctpop.i16(i16 %ld13)317 %ctpop14 = call i16 @llvm.ctpop.i16(i16 %ld14)318 %ctpop15 = call i16 @llvm.ctpop.i16(i16 %ld15)319 store i16 %ctpop0 , ptr @dst16, align 2320 store i16 %ctpop1 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 1), align 2321 store i16 %ctpop2 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 2), align 2322 store i16 %ctpop3 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 3), align 2323 store i16 %ctpop4 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 4), align 2324 store i16 %ctpop5 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 5), align 2325 store i16 %ctpop6 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 6), align 2326 store i16 %ctpop7 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 7), align 2327 store i16 %ctpop8 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 8), align 2328 store i16 %ctpop9 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 9), align 2329 store i16 %ctpop10, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 10), align 2330 store i16 %ctpop11, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 11), align 2331 store i16 %ctpop12, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 12), align 2332 store i16 %ctpop13, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 13), align 2333 store i16 %ctpop14, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 14), align 2334 store i16 %ctpop15, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 15), align 2335 ret void336}337 338define void @ctpop_16i8() #0 {339; CHECK-LABEL: @ctpop_16i8(340; CHECK-NEXT: [[TMP1:%.*]] = load <16 x i8>, ptr @src8, align 1341; CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> [[TMP1]])342; CHECK-NEXT: store <16 x i8> [[TMP2]], ptr @dst8, align 1343; CHECK-NEXT: ret void344;345 %ld0 = load i8, ptr @src8, align 1346 %ld1 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 1), align 1347 %ld2 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 2), align 1348 %ld3 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 3), align 1349 %ld4 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 4), align 1350 %ld5 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 5), align 1351 %ld6 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 6), align 1352 %ld7 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 7), align 1353 %ld8 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 8), align 1354 %ld9 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 9), align 1355 %ld10 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 10), align 1356 %ld11 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 11), align 1357 %ld12 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 12), align 1358 %ld13 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 13), align 1359 %ld14 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 14), align 1360 %ld15 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 15), align 1361 %ctpop0 = call i8 @llvm.ctpop.i8(i8 %ld0)362 %ctpop1 = call i8 @llvm.ctpop.i8(i8 %ld1)363 %ctpop2 = call i8 @llvm.ctpop.i8(i8 %ld2)364 %ctpop3 = call i8 @llvm.ctpop.i8(i8 %ld3)365 %ctpop4 = call i8 @llvm.ctpop.i8(i8 %ld4)366 %ctpop5 = call i8 @llvm.ctpop.i8(i8 %ld5)367 %ctpop6 = call i8 @llvm.ctpop.i8(i8 %ld6)368 %ctpop7 = call i8 @llvm.ctpop.i8(i8 %ld7)369 %ctpop8 = call i8 @llvm.ctpop.i8(i8 %ld8)370 %ctpop9 = call i8 @llvm.ctpop.i8(i8 %ld9)371 %ctpop10 = call i8 @llvm.ctpop.i8(i8 %ld10)372 %ctpop11 = call i8 @llvm.ctpop.i8(i8 %ld11)373 %ctpop12 = call i8 @llvm.ctpop.i8(i8 %ld12)374 %ctpop13 = call i8 @llvm.ctpop.i8(i8 %ld13)375 %ctpop14 = call i8 @llvm.ctpop.i8(i8 %ld14)376 %ctpop15 = call i8 @llvm.ctpop.i8(i8 %ld15)377 store i8 %ctpop0 , ptr @dst8, align 1378 store i8 %ctpop1 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 1), align 1379 store i8 %ctpop2 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 2), align 1380 store i8 %ctpop3 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 3), align 1381 store i8 %ctpop4 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 4), align 1382 store i8 %ctpop5 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 5), align 1383 store i8 %ctpop6 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 6), align 1384 store i8 %ctpop7 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 7), align 1385 store i8 %ctpop8 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 8), align 1386 store i8 %ctpop9 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 9), align 1387 store i8 %ctpop10, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 10), align 1388 store i8 %ctpop11, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 11), align 1389 store i8 %ctpop12, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 12), align 1390 store i8 %ctpop13, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 13), align 1391 store i8 %ctpop14, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 14), align 1392 store i8 %ctpop15, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 15), align 1393 ret void394}395 396define void @ctpop_32i8() #0 {397; SSE-LABEL: @ctpop_32i8(398; SSE-NEXT: [[TMP1:%.*]] = load <16 x i8>, ptr @src8, align 1399; SSE-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> [[TMP1]])400; SSE-NEXT: store <16 x i8> [[TMP2]], ptr @dst8, align 1401; SSE-NEXT: [[TMP3:%.*]] = load <16 x i8>, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 16), align 1402; SSE-NEXT: [[TMP4:%.*]] = call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> [[TMP3]])403; SSE-NEXT: store <16 x i8> [[TMP4]], ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 16), align 1404; SSE-NEXT: ret void405;406; AVX-LABEL: @ctpop_32i8(407; AVX-NEXT: [[TMP1:%.*]] = load <32 x i8>, ptr @src8, align 1408; AVX-NEXT: [[TMP2:%.*]] = call <32 x i8> @llvm.ctpop.v32i8(<32 x i8> [[TMP1]])409; AVX-NEXT: store <32 x i8> [[TMP2]], ptr @dst8, align 1410; AVX-NEXT: ret void411;412 %ld0 = load i8, ptr @src8, align 1413 %ld1 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 1), align 1414 %ld2 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 2), align 1415 %ld3 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 3), align 1416 %ld4 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 4), align 1417 %ld5 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 5), align 1418 %ld6 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 6), align 1419 %ld7 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 7), align 1420 %ld8 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 8), align 1421 %ld9 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 9), align 1422 %ld10 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 10), align 1423 %ld11 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 11), align 1424 %ld12 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 12), align 1425 %ld13 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 13), align 1426 %ld14 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 14), align 1427 %ld15 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 15), align 1428 %ld16 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 16), align 1429 %ld17 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 17), align 1430 %ld18 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 18), align 1431 %ld19 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 19), align 1432 %ld20 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 20), align 1433 %ld21 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 21), align 1434 %ld22 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 22), align 1435 %ld23 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 23), align 1436 %ld24 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 24), align 1437 %ld25 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 25), align 1438 %ld26 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 26), align 1439 %ld27 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 27), align 1440 %ld28 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 28), align 1441 %ld29 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 29), align 1442 %ld30 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 30), align 1443 %ld31 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 31), align 1444 %ctpop0 = call i8 @llvm.ctpop.i8(i8 %ld0)445 %ctpop1 = call i8 @llvm.ctpop.i8(i8 %ld1)446 %ctpop2 = call i8 @llvm.ctpop.i8(i8 %ld2)447 %ctpop3 = call i8 @llvm.ctpop.i8(i8 %ld3)448 %ctpop4 = call i8 @llvm.ctpop.i8(i8 %ld4)449 %ctpop5 = call i8 @llvm.ctpop.i8(i8 %ld5)450 %ctpop6 = call i8 @llvm.ctpop.i8(i8 %ld6)451 %ctpop7 = call i8 @llvm.ctpop.i8(i8 %ld7)452 %ctpop8 = call i8 @llvm.ctpop.i8(i8 %ld8)453 %ctpop9 = call i8 @llvm.ctpop.i8(i8 %ld9)454 %ctpop10 = call i8 @llvm.ctpop.i8(i8 %ld10)455 %ctpop11 = call i8 @llvm.ctpop.i8(i8 %ld11)456 %ctpop12 = call i8 @llvm.ctpop.i8(i8 %ld12)457 %ctpop13 = call i8 @llvm.ctpop.i8(i8 %ld13)458 %ctpop14 = call i8 @llvm.ctpop.i8(i8 %ld14)459 %ctpop15 = call i8 @llvm.ctpop.i8(i8 %ld15)460 %ctpop16 = call i8 @llvm.ctpop.i8(i8 %ld16)461 %ctpop17 = call i8 @llvm.ctpop.i8(i8 %ld17)462 %ctpop18 = call i8 @llvm.ctpop.i8(i8 %ld18)463 %ctpop19 = call i8 @llvm.ctpop.i8(i8 %ld19)464 %ctpop20 = call i8 @llvm.ctpop.i8(i8 %ld20)465 %ctpop21 = call i8 @llvm.ctpop.i8(i8 %ld21)466 %ctpop22 = call i8 @llvm.ctpop.i8(i8 %ld22)467 %ctpop23 = call i8 @llvm.ctpop.i8(i8 %ld23)468 %ctpop24 = call i8 @llvm.ctpop.i8(i8 %ld24)469 %ctpop25 = call i8 @llvm.ctpop.i8(i8 %ld25)470 %ctpop26 = call i8 @llvm.ctpop.i8(i8 %ld26)471 %ctpop27 = call i8 @llvm.ctpop.i8(i8 %ld27)472 %ctpop28 = call i8 @llvm.ctpop.i8(i8 %ld28)473 %ctpop29 = call i8 @llvm.ctpop.i8(i8 %ld29)474 %ctpop30 = call i8 @llvm.ctpop.i8(i8 %ld30)475 %ctpop31 = call i8 @llvm.ctpop.i8(i8 %ld31)476 store i8 %ctpop0 , ptr @dst8, align 1477 store i8 %ctpop1 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 1), align 1478 store i8 %ctpop2 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 2), align 1479 store i8 %ctpop3 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 3), align 1480 store i8 %ctpop4 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 4), align 1481 store i8 %ctpop5 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 5), align 1482 store i8 %ctpop6 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 6), align 1483 store i8 %ctpop7 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 7), align 1484 store i8 %ctpop8 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 8), align 1485 store i8 %ctpop9 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 9), align 1486 store i8 %ctpop10, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 10), align 1487 store i8 %ctpop11, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 11), align 1488 store i8 %ctpop12, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 12), align 1489 store i8 %ctpop13, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 13), align 1490 store i8 %ctpop14, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 14), align 1491 store i8 %ctpop15, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 15), align 1492 store i8 %ctpop16, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 16), align 1493 store i8 %ctpop17, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 17), align 1494 store i8 %ctpop18, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 18), align 1495 store i8 %ctpop19, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 19), align 1496 store i8 %ctpop20, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 20), align 1497 store i8 %ctpop21, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 21), align 1498 store i8 %ctpop22, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 22), align 1499 store i8 %ctpop23, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 23), align 1500 store i8 %ctpop24, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 24), align 1501 store i8 %ctpop25, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 25), align 1502 store i8 %ctpop26, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 26), align 1503 store i8 %ctpop27, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 27), align 1504 store i8 %ctpop28, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 28), align 1505 store i8 %ctpop29, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 29), align 1506 store i8 %ctpop30, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 30), align 1507 store i8 %ctpop31, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 31), align 1508 ret void509}510 511attributes #0 = { nounwind }512 513