1087 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -mtriple=x86_64-unknown -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=CHECK,SSE3; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=corei7 -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=CHECK,SSE4; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=corei7-avx -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=CHECK,AVX,AVX15; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=core-avx2 -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=CHECK,AVX,AVX26; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=icelake-server -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=CHECK,AVX,AVX5127 8target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"9 10@src64 = common global [4 x i64] zeroinitializer, align 3211@dst64 = common global [4 x i64] zeroinitializer, align 3212@src32 = common global [8 x i32] zeroinitializer, align 3213@dst32 = common global [8 x i32] zeroinitializer, align 3214@src16 = common global [16 x i16] zeroinitializer, align 3215@dst16 = common global [16 x i16] zeroinitializer, align 3216@src8 = common global [32 x i8] zeroinitializer, align 3217@dst8 = common global [32 x i8] zeroinitializer, align 3218 19declare i64 @llvm.cttz.i64(i64, i1)20declare i32 @llvm.cttz.i32(i32, i1)21declare i16 @llvm.cttz.i16(i16, i1)22declare i8 @llvm.cttz.i8(i8, i1)23 24;25; CTTZ26;27 28define void @cttz_2i64() #0 {29; SSE-LABEL: @cttz_2i64(30; SSE-NEXT: [[LD0:%.*]] = load i64, ptr @src64, align 831; SSE-NEXT: [[LD1:%.*]] = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i32 0, i64 1), align 832; SSE-NEXT: [[CTTZ0:%.*]] = call i64 @llvm.cttz.i64(i64 [[LD0]], i1 false)33; SSE-NEXT: [[CTTZ1:%.*]] = call i64 @llvm.cttz.i64(i64 [[LD1]], i1 false)34; SSE-NEXT: store i64 [[CTTZ0]], ptr @dst64, align 835; SSE-NEXT: store i64 [[CTTZ1]], ptr getelementptr inbounds ([4 x i64], ptr @dst64, i32 0, i64 1), align 836; SSE-NEXT: ret void37;38; AVX1-LABEL: @cttz_2i64(39; AVX1-NEXT: [[LD0:%.*]] = load i64, ptr @src64, align 840; AVX1-NEXT: [[LD1:%.*]] = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i32 0, i64 1), align 841; AVX1-NEXT: [[CTTZ0:%.*]] = call i64 @llvm.cttz.i64(i64 [[LD0]], i1 false)42; AVX1-NEXT: [[CTTZ1:%.*]] = call i64 @llvm.cttz.i64(i64 [[LD1]], i1 false)43; AVX1-NEXT: store i64 [[CTTZ0]], ptr @dst64, align 844; AVX1-NEXT: store i64 [[CTTZ1]], ptr getelementptr inbounds ([4 x i64], ptr @dst64, i32 0, i64 1), align 845; AVX1-NEXT: ret void46;47; AVX2-LABEL: @cttz_2i64(48; AVX2-NEXT: [[LD0:%.*]] = load i64, ptr @src64, align 849; AVX2-NEXT: [[LD1:%.*]] = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i32 0, i64 1), align 850; AVX2-NEXT: [[CTTZ0:%.*]] = call i64 @llvm.cttz.i64(i64 [[LD0]], i1 false)51; AVX2-NEXT: [[CTTZ1:%.*]] = call i64 @llvm.cttz.i64(i64 [[LD1]], i1 false)52; AVX2-NEXT: store i64 [[CTTZ0]], ptr @dst64, align 853; AVX2-NEXT: store i64 [[CTTZ1]], ptr getelementptr inbounds ([4 x i64], ptr @dst64, i32 0, i64 1), align 854; AVX2-NEXT: ret void55;56; AVX512-LABEL: @cttz_2i64(57; AVX512-NEXT: [[TMP1:%.*]] = load <2 x i64>, ptr @src64, align 858; AVX512-NEXT: [[TMP2:%.*]] = call <2 x i64> @llvm.cttz.v2i64(<2 x i64> [[TMP1]], i1 false)59; AVX512-NEXT: store <2 x i64> [[TMP2]], ptr @dst64, align 860; AVX512-NEXT: ret void61;62 %ld0 = load i64, ptr @src64, align 863 %ld1 = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i32 0, i64 1), align 864 %cttz0 = call i64 @llvm.cttz.i64(i64 %ld0, i1 0)65 %cttz1 = call i64 @llvm.cttz.i64(i64 %ld1, i1 0)66 store i64 %cttz0, ptr @dst64, align 867 store i64 %cttz1, ptr getelementptr inbounds ([4 x i64], ptr @dst64, i32 0, i64 1), align 868 ret void69}70 71define void @cttz_4i64() #0 {72; SSE-LABEL: @cttz_4i64(73; SSE-NEXT: [[LD0:%.*]] = load i64, ptr @src64, align 474; SSE-NEXT: [[LD1:%.*]] = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i64 0, i64 1), align 475; SSE-NEXT: [[LD2:%.*]] = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i64 0, i64 2), align 476; SSE-NEXT: [[LD3:%.*]] = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i64 0, i64 3), align 477; SSE-NEXT: [[CTTZ0:%.*]] = call i64 @llvm.cttz.i64(i64 [[LD0]], i1 false)78; SSE-NEXT: [[CTTZ1:%.*]] = call i64 @llvm.cttz.i64(i64 [[LD1]], i1 false)79; SSE-NEXT: [[CTTZ2:%.*]] = call i64 @llvm.cttz.i64(i64 [[LD2]], i1 false)80; SSE-NEXT: [[CTTZ3:%.*]] = call i64 @llvm.cttz.i64(i64 [[LD3]], i1 false)81; SSE-NEXT: store i64 [[CTTZ0]], ptr @dst64, align 482; SSE-NEXT: store i64 [[CTTZ1]], ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 1), align 483; SSE-NEXT: store i64 [[CTTZ2]], ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 2), align 484; SSE-NEXT: store i64 [[CTTZ3]], ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 3), align 485; SSE-NEXT: ret void86;87; AVX1-LABEL: @cttz_4i64(88; AVX1-NEXT: [[LD0:%.*]] = load i64, ptr @src64, align 489; AVX1-NEXT: [[LD1:%.*]] = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i64 0, i64 1), align 490; AVX1-NEXT: [[LD2:%.*]] = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i64 0, i64 2), align 491; AVX1-NEXT: [[LD3:%.*]] = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i64 0, i64 3), align 492; AVX1-NEXT: [[CTTZ0:%.*]] = call i64 @llvm.cttz.i64(i64 [[LD0]], i1 false)93; AVX1-NEXT: [[CTTZ1:%.*]] = call i64 @llvm.cttz.i64(i64 [[LD1]], i1 false)94; AVX1-NEXT: [[CTTZ2:%.*]] = call i64 @llvm.cttz.i64(i64 [[LD2]], i1 false)95; AVX1-NEXT: [[CTTZ3:%.*]] = call i64 @llvm.cttz.i64(i64 [[LD3]], i1 false)96; AVX1-NEXT: store i64 [[CTTZ0]], ptr @dst64, align 497; AVX1-NEXT: store i64 [[CTTZ1]], ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 1), align 498; AVX1-NEXT: store i64 [[CTTZ2]], ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 2), align 499; AVX1-NEXT: store i64 [[CTTZ3]], ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 3), align 4100; AVX1-NEXT: ret void101;102; AVX2-LABEL: @cttz_4i64(103; AVX2-NEXT: [[TMP1:%.*]] = load <4 x i64>, ptr @src64, align 4104; AVX2-NEXT: [[TMP2:%.*]] = call <4 x i64> @llvm.cttz.v4i64(<4 x i64> [[TMP1]], i1 false)105; AVX2-NEXT: store <4 x i64> [[TMP2]], ptr @dst64, align 4106; AVX2-NEXT: ret void107;108; AVX512-LABEL: @cttz_4i64(109; AVX512-NEXT: [[TMP1:%.*]] = load <4 x i64>, ptr @src64, align 4110; AVX512-NEXT: [[TMP2:%.*]] = call <4 x i64> @llvm.cttz.v4i64(<4 x i64> [[TMP1]], i1 false)111; AVX512-NEXT: store <4 x i64> [[TMP2]], ptr @dst64, align 4112; AVX512-NEXT: ret void113;114 %ld0 = load i64, ptr @src64, align 4115 %ld1 = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i64 0, i64 1), align 4116 %ld2 = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i64 0, i64 2), align 4117 %ld3 = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i64 0, i64 3), align 4118 %cttz0 = call i64 @llvm.cttz.i64(i64 %ld0, i1 0)119 %cttz1 = call i64 @llvm.cttz.i64(i64 %ld1, i1 0)120 %cttz2 = call i64 @llvm.cttz.i64(i64 %ld2, i1 0)121 %cttz3 = call i64 @llvm.cttz.i64(i64 %ld3, i1 0)122 store i64 %cttz0, ptr @dst64, align 4123 store i64 %cttz1, ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 1), align 4124 store i64 %cttz2, ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 2), align 4125 store i64 %cttz3, ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 3), align 4126 ret void127}128 129define void @cttz_4i32() #0 {130; SSE-LABEL: @cttz_4i32(131; SSE-NEXT: [[LD0:%.*]] = load i32, ptr @src32, align 4132; SSE-NEXT: [[LD1:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 1), align 4133; SSE-NEXT: [[LD2:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 2), align 4134; SSE-NEXT: [[LD3:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 3), align 4135; SSE-NEXT: [[CTTZ0:%.*]] = call i32 @llvm.cttz.i32(i32 [[LD0]], i1 false)136; SSE-NEXT: [[CTTZ1:%.*]] = call i32 @llvm.cttz.i32(i32 [[LD1]], i1 false)137; SSE-NEXT: [[CTTZ2:%.*]] = call i32 @llvm.cttz.i32(i32 [[LD2]], i1 false)138; SSE-NEXT: [[CTTZ3:%.*]] = call i32 @llvm.cttz.i32(i32 [[LD3]], i1 false)139; SSE-NEXT: store i32 [[CTTZ0]], ptr @dst32, align 4140; SSE-NEXT: store i32 [[CTTZ1]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 1), align 4141; SSE-NEXT: store i32 [[CTTZ2]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 2), align 4142; SSE-NEXT: store i32 [[CTTZ3]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 3), align 4143; SSE-NEXT: ret void144;145; AVX1-LABEL: @cttz_4i32(146; AVX1-NEXT: [[LD0:%.*]] = load i32, ptr @src32, align 4147; AVX1-NEXT: [[LD1:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 1), align 4148; AVX1-NEXT: [[LD2:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 2), align 4149; AVX1-NEXT: [[LD3:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 3), align 4150; AVX1-NEXT: [[CTTZ0:%.*]] = call i32 @llvm.cttz.i32(i32 [[LD0]], i1 false)151; AVX1-NEXT: [[CTTZ1:%.*]] = call i32 @llvm.cttz.i32(i32 [[LD1]], i1 false)152; AVX1-NEXT: [[CTTZ2:%.*]] = call i32 @llvm.cttz.i32(i32 [[LD2]], i1 false)153; AVX1-NEXT: [[CTTZ3:%.*]] = call i32 @llvm.cttz.i32(i32 [[LD3]], i1 false)154; AVX1-NEXT: store i32 [[CTTZ0]], ptr @dst32, align 4155; AVX1-NEXT: store i32 [[CTTZ1]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 1), align 4156; AVX1-NEXT: store i32 [[CTTZ2]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 2), align 4157; AVX1-NEXT: store i32 [[CTTZ3]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 3), align 4158; AVX1-NEXT: ret void159;160; AVX2-LABEL: @cttz_4i32(161; AVX2-NEXT: [[TMP1:%.*]] = load <4 x i32>, ptr @src32, align 4162; AVX2-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.cttz.v4i32(<4 x i32> [[TMP1]], i1 false)163; AVX2-NEXT: store <4 x i32> [[TMP2]], ptr @dst32, align 4164; AVX2-NEXT: ret void165;166; AVX512-LABEL: @cttz_4i32(167; AVX512-NEXT: [[TMP1:%.*]] = load <4 x i32>, ptr @src32, align 4168; AVX512-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.cttz.v4i32(<4 x i32> [[TMP1]], i1 false)169; AVX512-NEXT: store <4 x i32> [[TMP2]], ptr @dst32, align 4170; AVX512-NEXT: ret void171;172 %ld0 = load i32, ptr @src32, align 4173 %ld1 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 1), align 4174 %ld2 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 2), align 4175 %ld3 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 3), align 4176 %cttz0 = call i32 @llvm.cttz.i32(i32 %ld0, i1 0)177 %cttz1 = call i32 @llvm.cttz.i32(i32 %ld1, i1 0)178 %cttz2 = call i32 @llvm.cttz.i32(i32 %ld2, i1 0)179 %cttz3 = call i32 @llvm.cttz.i32(i32 %ld3, i1 0)180 store i32 %cttz0, ptr @dst32, align 4181 store i32 %cttz1, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 1), align 4182 store i32 %cttz2, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 2), align 4183 store i32 %cttz3, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 3), align 4184 ret void185}186 187define void @cttz_8i32() #0 {188; SSE-LABEL: @cttz_8i32(189; SSE-NEXT: [[LD0:%.*]] = load i32, ptr @src32, align 2190; SSE-NEXT: [[LD1:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 1), align 2191; SSE-NEXT: [[LD2:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 2), align 2192; SSE-NEXT: [[LD3:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 3), align 2193; SSE-NEXT: [[LD4:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 4), align 2194; SSE-NEXT: [[LD5:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 5), align 2195; SSE-NEXT: [[LD6:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 6), align 2196; SSE-NEXT: [[LD7:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 7), align 2197; SSE-NEXT: [[CTTZ0:%.*]] = call i32 @llvm.cttz.i32(i32 [[LD0]], i1 false)198; SSE-NEXT: [[CTTZ1:%.*]] = call i32 @llvm.cttz.i32(i32 [[LD1]], i1 false)199; SSE-NEXT: [[CTTZ2:%.*]] = call i32 @llvm.cttz.i32(i32 [[LD2]], i1 false)200; SSE-NEXT: [[CTTZ3:%.*]] = call i32 @llvm.cttz.i32(i32 [[LD3]], i1 false)201; SSE-NEXT: [[CTTZ4:%.*]] = call i32 @llvm.cttz.i32(i32 [[LD4]], i1 false)202; SSE-NEXT: [[CTTZ5:%.*]] = call i32 @llvm.cttz.i32(i32 [[LD5]], i1 false)203; SSE-NEXT: [[CTTZ6:%.*]] = call i32 @llvm.cttz.i32(i32 [[LD6]], i1 false)204; SSE-NEXT: [[CTTZ7:%.*]] = call i32 @llvm.cttz.i32(i32 [[LD7]], i1 false)205; SSE-NEXT: store i32 [[CTTZ0]], ptr @dst32, align 2206; SSE-NEXT: store i32 [[CTTZ1]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 1), align 2207; SSE-NEXT: store i32 [[CTTZ2]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 2), align 2208; SSE-NEXT: store i32 [[CTTZ3]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 3), align 2209; SSE-NEXT: store i32 [[CTTZ4]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 4), align 2210; SSE-NEXT: store i32 [[CTTZ5]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 5), align 2211; SSE-NEXT: store i32 [[CTTZ6]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 6), align 2212; SSE-NEXT: store i32 [[CTTZ7]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 7), align 2213; SSE-NEXT: ret void214;215; AVX1-LABEL: @cttz_8i32(216; AVX1-NEXT: [[LD0:%.*]] = load i32, ptr @src32, align 2217; AVX1-NEXT: [[LD1:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 1), align 2218; AVX1-NEXT: [[LD2:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 2), align 2219; AVX1-NEXT: [[LD3:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 3), align 2220; AVX1-NEXT: [[LD4:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 4), align 2221; AVX1-NEXT: [[LD5:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 5), align 2222; AVX1-NEXT: [[LD6:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 6), align 2223; AVX1-NEXT: [[LD7:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 7), align 2224; AVX1-NEXT: [[CTTZ0:%.*]] = call i32 @llvm.cttz.i32(i32 [[LD0]], i1 false)225; AVX1-NEXT: [[CTTZ1:%.*]] = call i32 @llvm.cttz.i32(i32 [[LD1]], i1 false)226; AVX1-NEXT: [[CTTZ2:%.*]] = call i32 @llvm.cttz.i32(i32 [[LD2]], i1 false)227; AVX1-NEXT: [[CTTZ3:%.*]] = call i32 @llvm.cttz.i32(i32 [[LD3]], i1 false)228; AVX1-NEXT: [[CTTZ4:%.*]] = call i32 @llvm.cttz.i32(i32 [[LD4]], i1 false)229; AVX1-NEXT: [[CTTZ5:%.*]] = call i32 @llvm.cttz.i32(i32 [[LD5]], i1 false)230; AVX1-NEXT: [[CTTZ6:%.*]] = call i32 @llvm.cttz.i32(i32 [[LD6]], i1 false)231; AVX1-NEXT: [[CTTZ7:%.*]] = call i32 @llvm.cttz.i32(i32 [[LD7]], i1 false)232; AVX1-NEXT: store i32 [[CTTZ0]], ptr @dst32, align 2233; AVX1-NEXT: store i32 [[CTTZ1]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 1), align 2234; AVX1-NEXT: store i32 [[CTTZ2]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 2), align 2235; AVX1-NEXT: store i32 [[CTTZ3]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 3), align 2236; AVX1-NEXT: store i32 [[CTTZ4]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 4), align 2237; AVX1-NEXT: store i32 [[CTTZ5]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 5), align 2238; AVX1-NEXT: store i32 [[CTTZ6]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 6), align 2239; AVX1-NEXT: store i32 [[CTTZ7]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 7), align 2240; AVX1-NEXT: ret void241;242; AVX2-LABEL: @cttz_8i32(243; AVX2-NEXT: [[TMP1:%.*]] = load <8 x i32>, ptr @src32, align 2244; AVX2-NEXT: [[TMP2:%.*]] = call <8 x i32> @llvm.cttz.v8i32(<8 x i32> [[TMP1]], i1 false)245; AVX2-NEXT: store <8 x i32> [[TMP2]], ptr @dst32, align 2246; AVX2-NEXT: ret void247;248; AVX512-LABEL: @cttz_8i32(249; AVX512-NEXT: [[TMP1:%.*]] = load <8 x i32>, ptr @src32, align 2250; AVX512-NEXT: [[TMP2:%.*]] = call <8 x i32> @llvm.cttz.v8i32(<8 x i32> [[TMP1]], i1 false)251; AVX512-NEXT: store <8 x i32> [[TMP2]], ptr @dst32, align 2252; AVX512-NEXT: ret void253;254 %ld0 = load i32, ptr @src32, align 2255 %ld1 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 1), align 2256 %ld2 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 2), align 2257 %ld3 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 3), align 2258 %ld4 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 4), align 2259 %ld5 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 5), align 2260 %ld6 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 6), align 2261 %ld7 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 7), align 2262 %cttz0 = call i32 @llvm.cttz.i32(i32 %ld0, i1 0)263 %cttz1 = call i32 @llvm.cttz.i32(i32 %ld1, i1 0)264 %cttz2 = call i32 @llvm.cttz.i32(i32 %ld2, i1 0)265 %cttz3 = call i32 @llvm.cttz.i32(i32 %ld3, i1 0)266 %cttz4 = call i32 @llvm.cttz.i32(i32 %ld4, i1 0)267 %cttz5 = call i32 @llvm.cttz.i32(i32 %ld5, i1 0)268 %cttz6 = call i32 @llvm.cttz.i32(i32 %ld6, i1 0)269 %cttz7 = call i32 @llvm.cttz.i32(i32 %ld7, i1 0)270 store i32 %cttz0, ptr @dst32, align 2271 store i32 %cttz1, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 1), align 2272 store i32 %cttz2, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 2), align 2273 store i32 %cttz3, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 3), align 2274 store i32 %cttz4, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 4), align 2275 store i32 %cttz5, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 5), align 2276 store i32 %cttz6, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 6), align 2277 store i32 %cttz7, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 7), align 2278 ret void279}280 281define void @cttz_8i16() #0 {282; CHECK-LABEL: @cttz_8i16(283; CHECK-NEXT: [[TMP1:%.*]] = load <8 x i16>, ptr @src16, align 2284; CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> [[TMP1]], i1 false)285; CHECK-NEXT: store <8 x i16> [[TMP2]], ptr @dst16, align 2286; CHECK-NEXT: ret void287;288 %ld0 = load i16, ptr @src16, align 2289 %ld1 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 1), align 2290 %ld2 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 2), align 2291 %ld3 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 3), align 2292 %ld4 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 4), align 2293 %ld5 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 5), align 2294 %ld6 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 6), align 2295 %ld7 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 7), align 2296 %cttz0 = call i16 @llvm.cttz.i16(i16 %ld0, i1 0)297 %cttz1 = call i16 @llvm.cttz.i16(i16 %ld1, i1 0)298 %cttz2 = call i16 @llvm.cttz.i16(i16 %ld2, i1 0)299 %cttz3 = call i16 @llvm.cttz.i16(i16 %ld3, i1 0)300 %cttz4 = call i16 @llvm.cttz.i16(i16 %ld4, i1 0)301 %cttz5 = call i16 @llvm.cttz.i16(i16 %ld5, i1 0)302 %cttz6 = call i16 @llvm.cttz.i16(i16 %ld6, i1 0)303 %cttz7 = call i16 @llvm.cttz.i16(i16 %ld7, i1 0)304 store i16 %cttz0, ptr @dst16, align 2305 store i16 %cttz1, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 1), align 2306 store i16 %cttz2, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 2), align 2307 store i16 %cttz3, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 3), align 2308 store i16 %cttz4, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 4), align 2309 store i16 %cttz5, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 5), align 2310 store i16 %cttz6, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 6), align 2311 store i16 %cttz7, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 7), align 2312 ret void313}314 315define void @cttz_16i16() #0 {316; SSE-LABEL: @cttz_16i16(317; SSE-NEXT: [[TMP1:%.*]] = load <8 x i16>, ptr @src16, align 2318; SSE-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> [[TMP1]], i1 false)319; SSE-NEXT: store <8 x i16> [[TMP2]], ptr @dst16, align 2320; SSE-NEXT: [[TMP3:%.*]] = load <8 x i16>, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 8), align 2321; SSE-NEXT: [[TMP4:%.*]] = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> [[TMP3]], i1 false)322; SSE-NEXT: store <8 x i16> [[TMP4]], ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 8), align 2323; SSE-NEXT: ret void324;325; AVX-LABEL: @cttz_16i16(326; AVX-NEXT: [[TMP1:%.*]] = load <16 x i16>, ptr @src16, align 2327; AVX-NEXT: [[TMP2:%.*]] = call <16 x i16> @llvm.cttz.v16i16(<16 x i16> [[TMP1]], i1 false)328; AVX-NEXT: store <16 x i16> [[TMP2]], ptr @dst16, align 2329; AVX-NEXT: ret void330;331 %ld0 = load i16, ptr @src16, align 2332 %ld1 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 1), align 2333 %ld2 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 2), align 2334 %ld3 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 3), align 2335 %ld4 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 4), align 2336 %ld5 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 5), align 2337 %ld6 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 6), align 2338 %ld7 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 7), align 2339 %ld8 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 8), align 2340 %ld9 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 9), align 2341 %ld10 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 10), align 2342 %ld11 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 11), align 2343 %ld12 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 12), align 2344 %ld13 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 13), align 2345 %ld14 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 14), align 2346 %ld15 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 15), align 2347 %cttz0 = call i16 @llvm.cttz.i16(i16 %ld0, i1 0)348 %cttz1 = call i16 @llvm.cttz.i16(i16 %ld1, i1 0)349 %cttz2 = call i16 @llvm.cttz.i16(i16 %ld2, i1 0)350 %cttz3 = call i16 @llvm.cttz.i16(i16 %ld3, i1 0)351 %cttz4 = call i16 @llvm.cttz.i16(i16 %ld4, i1 0)352 %cttz5 = call i16 @llvm.cttz.i16(i16 %ld5, i1 0)353 %cttz6 = call i16 @llvm.cttz.i16(i16 %ld6, i1 0)354 %cttz7 = call i16 @llvm.cttz.i16(i16 %ld7, i1 0)355 %cttz8 = call i16 @llvm.cttz.i16(i16 %ld8, i1 0)356 %cttz9 = call i16 @llvm.cttz.i16(i16 %ld9, i1 0)357 %cttz10 = call i16 @llvm.cttz.i16(i16 %ld10, i1 0)358 %cttz11 = call i16 @llvm.cttz.i16(i16 %ld11, i1 0)359 %cttz12 = call i16 @llvm.cttz.i16(i16 %ld12, i1 0)360 %cttz13 = call i16 @llvm.cttz.i16(i16 %ld13, i1 0)361 %cttz14 = call i16 @llvm.cttz.i16(i16 %ld14, i1 0)362 %cttz15 = call i16 @llvm.cttz.i16(i16 %ld15, i1 0)363 store i16 %cttz0 , ptr @dst16, align 2364 store i16 %cttz1 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 1), align 2365 store i16 %cttz2 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 2), align 2366 store i16 %cttz3 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 3), align 2367 store i16 %cttz4 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 4), align 2368 store i16 %cttz5 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 5), align 2369 store i16 %cttz6 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 6), align 2370 store i16 %cttz7 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 7), align 2371 store i16 %cttz8 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 8), align 2372 store i16 %cttz9 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 9), align 2373 store i16 %cttz10, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 10), align 2374 store i16 %cttz11, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 11), align 2375 store i16 %cttz12, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 12), align 2376 store i16 %cttz13, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 13), align 2377 store i16 %cttz14, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 14), align 2378 store i16 %cttz15, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 15), align 2379 ret void380}381 382define void @cttz_16i8() #0 {383; CHECK-LABEL: @cttz_16i8(384; CHECK-NEXT: [[TMP1:%.*]] = load <16 x i8>, ptr @src8, align 1385; CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.cttz.v16i8(<16 x i8> [[TMP1]], i1 false)386; CHECK-NEXT: store <16 x i8> [[TMP2]], ptr @dst8, align 1387; CHECK-NEXT: ret void388;389 %ld0 = load i8, ptr @src8, align 1390 %ld1 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 1), align 1391 %ld2 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 2), align 1392 %ld3 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 3), align 1393 %ld4 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 4), align 1394 %ld5 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 5), align 1395 %ld6 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 6), align 1396 %ld7 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 7), align 1397 %ld8 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 8), align 1398 %ld9 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 9), align 1399 %ld10 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 10), align 1400 %ld11 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 11), align 1401 %ld12 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 12), align 1402 %ld13 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 13), align 1403 %ld14 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 14), align 1404 %ld15 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 15), align 1405 %cttz0 = call i8 @llvm.cttz.i8(i8 %ld0, i1 0)406 %cttz1 = call i8 @llvm.cttz.i8(i8 %ld1, i1 0)407 %cttz2 = call i8 @llvm.cttz.i8(i8 %ld2, i1 0)408 %cttz3 = call i8 @llvm.cttz.i8(i8 %ld3, i1 0)409 %cttz4 = call i8 @llvm.cttz.i8(i8 %ld4, i1 0)410 %cttz5 = call i8 @llvm.cttz.i8(i8 %ld5, i1 0)411 %cttz6 = call i8 @llvm.cttz.i8(i8 %ld6, i1 0)412 %cttz7 = call i8 @llvm.cttz.i8(i8 %ld7, i1 0)413 %cttz8 = call i8 @llvm.cttz.i8(i8 %ld8, i1 0)414 %cttz9 = call i8 @llvm.cttz.i8(i8 %ld9, i1 0)415 %cttz10 = call i8 @llvm.cttz.i8(i8 %ld10, i1 0)416 %cttz11 = call i8 @llvm.cttz.i8(i8 %ld11, i1 0)417 %cttz12 = call i8 @llvm.cttz.i8(i8 %ld12, i1 0)418 %cttz13 = call i8 @llvm.cttz.i8(i8 %ld13, i1 0)419 %cttz14 = call i8 @llvm.cttz.i8(i8 %ld14, i1 0)420 %cttz15 = call i8 @llvm.cttz.i8(i8 %ld15, i1 0)421 store i8 %cttz0 , ptr @dst8, align 1422 store i8 %cttz1 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 1), align 1423 store i8 %cttz2 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 2), align 1424 store i8 %cttz3 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 3), align 1425 store i8 %cttz4 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 4), align 1426 store i8 %cttz5 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 5), align 1427 store i8 %cttz6 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 6), align 1428 store i8 %cttz7 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 7), align 1429 store i8 %cttz8 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 8), align 1430 store i8 %cttz9 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 9), align 1431 store i8 %cttz10, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 10), align 1432 store i8 %cttz11, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 11), align 1433 store i8 %cttz12, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 12), align 1434 store i8 %cttz13, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 13), align 1435 store i8 %cttz14, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 14), align 1436 store i8 %cttz15, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 15), align 1437 ret void438}439 440define void @cttz_32i8() #0 {441; SSE-LABEL: @cttz_32i8(442; SSE-NEXT: [[TMP1:%.*]] = load <16 x i8>, ptr @src8, align 1443; SSE-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.cttz.v16i8(<16 x i8> [[TMP1]], i1 false)444; SSE-NEXT: store <16 x i8> [[TMP2]], ptr @dst8, align 1445; SSE-NEXT: [[TMP3:%.*]] = load <16 x i8>, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 16), align 1446; SSE-NEXT: [[TMP4:%.*]] = call <16 x i8> @llvm.cttz.v16i8(<16 x i8> [[TMP3]], i1 false)447; SSE-NEXT: store <16 x i8> [[TMP4]], ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 16), align 1448; SSE-NEXT: ret void449;450; AVX-LABEL: @cttz_32i8(451; AVX-NEXT: [[TMP1:%.*]] = load <32 x i8>, ptr @src8, align 1452; AVX-NEXT: [[TMP2:%.*]] = call <32 x i8> @llvm.cttz.v32i8(<32 x i8> [[TMP1]], i1 false)453; AVX-NEXT: store <32 x i8> [[TMP2]], ptr @dst8, align 1454; AVX-NEXT: ret void455;456 %ld0 = load i8, ptr @src8, align 1457 %ld1 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 1), align 1458 %ld2 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 2), align 1459 %ld3 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 3), align 1460 %ld4 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 4), align 1461 %ld5 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 5), align 1462 %ld6 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 6), align 1463 %ld7 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 7), align 1464 %ld8 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 8), align 1465 %ld9 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 9), align 1466 %ld10 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 10), align 1467 %ld11 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 11), align 1468 %ld12 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 12), align 1469 %ld13 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 13), align 1470 %ld14 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 14), align 1471 %ld15 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 15), align 1472 %ld16 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 16), align 1473 %ld17 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 17), align 1474 %ld18 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 18), align 1475 %ld19 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 19), align 1476 %ld20 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 20), align 1477 %ld21 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 21), align 1478 %ld22 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 22), align 1479 %ld23 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 23), align 1480 %ld24 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 24), align 1481 %ld25 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 25), align 1482 %ld26 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 26), align 1483 %ld27 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 27), align 1484 %ld28 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 28), align 1485 %ld29 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 29), align 1486 %ld30 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 30), align 1487 %ld31 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 31), align 1488 %cttz0 = call i8 @llvm.cttz.i8(i8 %ld0, i1 0)489 %cttz1 = call i8 @llvm.cttz.i8(i8 %ld1, i1 0)490 %cttz2 = call i8 @llvm.cttz.i8(i8 %ld2, i1 0)491 %cttz3 = call i8 @llvm.cttz.i8(i8 %ld3, i1 0)492 %cttz4 = call i8 @llvm.cttz.i8(i8 %ld4, i1 0)493 %cttz5 = call i8 @llvm.cttz.i8(i8 %ld5, i1 0)494 %cttz6 = call i8 @llvm.cttz.i8(i8 %ld6, i1 0)495 %cttz7 = call i8 @llvm.cttz.i8(i8 %ld7, i1 0)496 %cttz8 = call i8 @llvm.cttz.i8(i8 %ld8, i1 0)497 %cttz9 = call i8 @llvm.cttz.i8(i8 %ld9, i1 0)498 %cttz10 = call i8 @llvm.cttz.i8(i8 %ld10, i1 0)499 %cttz11 = call i8 @llvm.cttz.i8(i8 %ld11, i1 0)500 %cttz12 = call i8 @llvm.cttz.i8(i8 %ld12, i1 0)501 %cttz13 = call i8 @llvm.cttz.i8(i8 %ld13, i1 0)502 %cttz14 = call i8 @llvm.cttz.i8(i8 %ld14, i1 0)503 %cttz15 = call i8 @llvm.cttz.i8(i8 %ld15, i1 0)504 %cttz16 = call i8 @llvm.cttz.i8(i8 %ld16, i1 0)505 %cttz17 = call i8 @llvm.cttz.i8(i8 %ld17, i1 0)506 %cttz18 = call i8 @llvm.cttz.i8(i8 %ld18, i1 0)507 %cttz19 = call i8 @llvm.cttz.i8(i8 %ld19, i1 0)508 %cttz20 = call i8 @llvm.cttz.i8(i8 %ld20, i1 0)509 %cttz21 = call i8 @llvm.cttz.i8(i8 %ld21, i1 0)510 %cttz22 = call i8 @llvm.cttz.i8(i8 %ld22, i1 0)511 %cttz23 = call i8 @llvm.cttz.i8(i8 %ld23, i1 0)512 %cttz24 = call i8 @llvm.cttz.i8(i8 %ld24, i1 0)513 %cttz25 = call i8 @llvm.cttz.i8(i8 %ld25, i1 0)514 %cttz26 = call i8 @llvm.cttz.i8(i8 %ld26, i1 0)515 %cttz27 = call i8 @llvm.cttz.i8(i8 %ld27, i1 0)516 %cttz28 = call i8 @llvm.cttz.i8(i8 %ld28, i1 0)517 %cttz29 = call i8 @llvm.cttz.i8(i8 %ld29, i1 0)518 %cttz30 = call i8 @llvm.cttz.i8(i8 %ld30, i1 0)519 %cttz31 = call i8 @llvm.cttz.i8(i8 %ld31, i1 0)520 store i8 %cttz0 , ptr @dst8, align 1521 store i8 %cttz1 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 1), align 1522 store i8 %cttz2 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 2), align 1523 store i8 %cttz3 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 3), align 1524 store i8 %cttz4 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 4), align 1525 store i8 %cttz5 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 5), align 1526 store i8 %cttz6 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 6), align 1527 store i8 %cttz7 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 7), align 1528 store i8 %cttz8 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 8), align 1529 store i8 %cttz9 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 9), align 1530 store i8 %cttz10, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 10), align 1531 store i8 %cttz11, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 11), align 1532 store i8 %cttz12, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 12), align 1533 store i8 %cttz13, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 13), align 1534 store i8 %cttz14, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 14), align 1535 store i8 %cttz15, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 15), align 1536 store i8 %cttz16, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 16), align 1537 store i8 %cttz17, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 17), align 1538 store i8 %cttz18, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 18), align 1539 store i8 %cttz19, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 19), align 1540 store i8 %cttz20, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 20), align 1541 store i8 %cttz21, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 21), align 1542 store i8 %cttz22, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 22), align 1543 store i8 %cttz23, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 23), align 1544 store i8 %cttz24, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 24), align 1545 store i8 %cttz25, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 25), align 1546 store i8 %cttz26, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 26), align 1547 store i8 %cttz27, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 27), align 1548 store i8 %cttz28, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 28), align 1549 store i8 %cttz29, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 29), align 1550 store i8 %cttz30, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 30), align 1551 store i8 %cttz31, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 31), align 1552 ret void553}554 555;556; CTTZ_ZERO_UNDEF557;558 559define void @cttz_undef_2i64() #0 {560; SSE-LABEL: @cttz_undef_2i64(561; SSE-NEXT: [[LD0:%.*]] = load i64, ptr @src64, align 8562; SSE-NEXT: [[LD1:%.*]] = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i32 0, i64 1), align 8563; SSE-NEXT: [[CTTZ0:%.*]] = call i64 @llvm.cttz.i64(i64 [[LD0]], i1 true)564; SSE-NEXT: [[CTTZ1:%.*]] = call i64 @llvm.cttz.i64(i64 [[LD1]], i1 true)565; SSE-NEXT: store i64 [[CTTZ0]], ptr @dst64, align 8566; SSE-NEXT: store i64 [[CTTZ1]], ptr getelementptr inbounds ([4 x i64], ptr @dst64, i32 0, i64 1), align 8567; SSE-NEXT: ret void568;569; AVX1-LABEL: @cttz_undef_2i64(570; AVX1-NEXT: [[LD0:%.*]] = load i64, ptr @src64, align 8571; AVX1-NEXT: [[LD1:%.*]] = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i32 0, i64 1), align 8572; AVX1-NEXT: [[CTTZ0:%.*]] = call i64 @llvm.cttz.i64(i64 [[LD0]], i1 true)573; AVX1-NEXT: [[CTTZ1:%.*]] = call i64 @llvm.cttz.i64(i64 [[LD1]], i1 true)574; AVX1-NEXT: store i64 [[CTTZ0]], ptr @dst64, align 8575; AVX1-NEXT: store i64 [[CTTZ1]], ptr getelementptr inbounds ([4 x i64], ptr @dst64, i32 0, i64 1), align 8576; AVX1-NEXT: ret void577;578; AVX2-LABEL: @cttz_undef_2i64(579; AVX2-NEXT: [[LD0:%.*]] = load i64, ptr @src64, align 8580; AVX2-NEXT: [[LD1:%.*]] = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i32 0, i64 1), align 8581; AVX2-NEXT: [[CTTZ0:%.*]] = call i64 @llvm.cttz.i64(i64 [[LD0]], i1 true)582; AVX2-NEXT: [[CTTZ1:%.*]] = call i64 @llvm.cttz.i64(i64 [[LD1]], i1 true)583; AVX2-NEXT: store i64 [[CTTZ0]], ptr @dst64, align 8584; AVX2-NEXT: store i64 [[CTTZ1]], ptr getelementptr inbounds ([4 x i64], ptr @dst64, i32 0, i64 1), align 8585; AVX2-NEXT: ret void586;587; AVX512-LABEL: @cttz_undef_2i64(588; AVX512-NEXT: [[TMP1:%.*]] = load <2 x i64>, ptr @src64, align 8589; AVX512-NEXT: [[TMP2:%.*]] = call <2 x i64> @llvm.cttz.v2i64(<2 x i64> [[TMP1]], i1 true)590; AVX512-NEXT: store <2 x i64> [[TMP2]], ptr @dst64, align 8591; AVX512-NEXT: ret void592;593 %ld0 = load i64, ptr @src64, align 8594 %ld1 = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i32 0, i64 1), align 8595 %cttz0 = call i64 @llvm.cttz.i64(i64 %ld0, i1 -1)596 %cttz1 = call i64 @llvm.cttz.i64(i64 %ld1, i1 -1)597 store i64 %cttz0, ptr @dst64, align 8598 store i64 %cttz1, ptr getelementptr inbounds ([4 x i64], ptr @dst64, i32 0, i64 1), align 8599 ret void600}601 602define void @cttz_undef_4i64() #0 {603; SSE-LABEL: @cttz_undef_4i64(604; SSE-NEXT: [[LD0:%.*]] = load i64, ptr @src64, align 4605; SSE-NEXT: [[LD1:%.*]] = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i64 0, i64 1), align 4606; SSE-NEXT: [[LD2:%.*]] = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i64 0, i64 2), align 4607; SSE-NEXT: [[LD3:%.*]] = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i64 0, i64 3), align 4608; SSE-NEXT: [[CTTZ0:%.*]] = call i64 @llvm.cttz.i64(i64 [[LD0]], i1 true)609; SSE-NEXT: [[CTTZ1:%.*]] = call i64 @llvm.cttz.i64(i64 [[LD1]], i1 true)610; SSE-NEXT: [[CTTZ2:%.*]] = call i64 @llvm.cttz.i64(i64 [[LD2]], i1 true)611; SSE-NEXT: [[CTTZ3:%.*]] = call i64 @llvm.cttz.i64(i64 [[LD3]], i1 true)612; SSE-NEXT: store i64 [[CTTZ0]], ptr @dst64, align 4613; SSE-NEXT: store i64 [[CTTZ1]], ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 1), align 4614; SSE-NEXT: store i64 [[CTTZ2]], ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 2), align 4615; SSE-NEXT: store i64 [[CTTZ3]], ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 3), align 4616; SSE-NEXT: ret void617;618; AVX1-LABEL: @cttz_undef_4i64(619; AVX1-NEXT: [[LD0:%.*]] = load i64, ptr @src64, align 4620; AVX1-NEXT: [[LD1:%.*]] = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i64 0, i64 1), align 4621; AVX1-NEXT: [[LD2:%.*]] = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i64 0, i64 2), align 4622; AVX1-NEXT: [[LD3:%.*]] = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i64 0, i64 3), align 4623; AVX1-NEXT: [[CTTZ0:%.*]] = call i64 @llvm.cttz.i64(i64 [[LD0]], i1 true)624; AVX1-NEXT: [[CTTZ1:%.*]] = call i64 @llvm.cttz.i64(i64 [[LD1]], i1 true)625; AVX1-NEXT: [[CTTZ2:%.*]] = call i64 @llvm.cttz.i64(i64 [[LD2]], i1 true)626; AVX1-NEXT: [[CTTZ3:%.*]] = call i64 @llvm.cttz.i64(i64 [[LD3]], i1 true)627; AVX1-NEXT: store i64 [[CTTZ0]], ptr @dst64, align 4628; AVX1-NEXT: store i64 [[CTTZ1]], ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 1), align 4629; AVX1-NEXT: store i64 [[CTTZ2]], ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 2), align 4630; AVX1-NEXT: store i64 [[CTTZ3]], ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 3), align 4631; AVX1-NEXT: ret void632;633; AVX2-LABEL: @cttz_undef_4i64(634; AVX2-NEXT: [[TMP1:%.*]] = load <4 x i64>, ptr @src64, align 4635; AVX2-NEXT: [[TMP2:%.*]] = call <4 x i64> @llvm.cttz.v4i64(<4 x i64> [[TMP1]], i1 true)636; AVX2-NEXT: store <4 x i64> [[TMP2]], ptr @dst64, align 4637; AVX2-NEXT: ret void638;639; AVX512-LABEL: @cttz_undef_4i64(640; AVX512-NEXT: [[TMP1:%.*]] = load <4 x i64>, ptr @src64, align 4641; AVX512-NEXT: [[TMP2:%.*]] = call <4 x i64> @llvm.cttz.v4i64(<4 x i64> [[TMP1]], i1 true)642; AVX512-NEXT: store <4 x i64> [[TMP2]], ptr @dst64, align 4643; AVX512-NEXT: ret void644;645 %ld0 = load i64, ptr @src64, align 4646 %ld1 = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i64 0, i64 1), align 4647 %ld2 = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i64 0, i64 2), align 4648 %ld3 = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i64 0, i64 3), align 4649 %cttz0 = call i64 @llvm.cttz.i64(i64 %ld0, i1 -1)650 %cttz1 = call i64 @llvm.cttz.i64(i64 %ld1, i1 -1)651 %cttz2 = call i64 @llvm.cttz.i64(i64 %ld2, i1 -1)652 %cttz3 = call i64 @llvm.cttz.i64(i64 %ld3, i1 -1)653 store i64 %cttz0, ptr @dst64, align 4654 store i64 %cttz1, ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 1), align 4655 store i64 %cttz2, ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 2), align 4656 store i64 %cttz3, ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 3), align 4657 ret void658}659 660define void @cttz_undef_4i32() #0 {661; SSE-LABEL: @cttz_undef_4i32(662; SSE-NEXT: [[LD0:%.*]] = load i32, ptr @src32, align 4663; SSE-NEXT: [[LD1:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 1), align 4664; SSE-NEXT: [[LD2:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 2), align 4665; SSE-NEXT: [[LD3:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 3), align 4666; SSE-NEXT: [[CTTZ0:%.*]] = call i32 @llvm.cttz.i32(i32 [[LD0]], i1 true)667; SSE-NEXT: [[CTTZ1:%.*]] = call i32 @llvm.cttz.i32(i32 [[LD1]], i1 true)668; SSE-NEXT: [[CTTZ2:%.*]] = call i32 @llvm.cttz.i32(i32 [[LD2]], i1 true)669; SSE-NEXT: [[CTTZ3:%.*]] = call i32 @llvm.cttz.i32(i32 [[LD3]], i1 true)670; SSE-NEXT: store i32 [[CTTZ0]], ptr @dst32, align 4671; SSE-NEXT: store i32 [[CTTZ1]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 1), align 4672; SSE-NEXT: store i32 [[CTTZ2]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 2), align 4673; SSE-NEXT: store i32 [[CTTZ3]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 3), align 4674; SSE-NEXT: ret void675;676; AVX1-LABEL: @cttz_undef_4i32(677; AVX1-NEXT: [[LD0:%.*]] = load i32, ptr @src32, align 4678; AVX1-NEXT: [[LD1:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 1), align 4679; AVX1-NEXT: [[LD2:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 2), align 4680; AVX1-NEXT: [[LD3:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 3), align 4681; AVX1-NEXT: [[CTTZ0:%.*]] = call i32 @llvm.cttz.i32(i32 [[LD0]], i1 true)682; AVX1-NEXT: [[CTTZ1:%.*]] = call i32 @llvm.cttz.i32(i32 [[LD1]], i1 true)683; AVX1-NEXT: [[CTTZ2:%.*]] = call i32 @llvm.cttz.i32(i32 [[LD2]], i1 true)684; AVX1-NEXT: [[CTTZ3:%.*]] = call i32 @llvm.cttz.i32(i32 [[LD3]], i1 true)685; AVX1-NEXT: store i32 [[CTTZ0]], ptr @dst32, align 4686; AVX1-NEXT: store i32 [[CTTZ1]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 1), align 4687; AVX1-NEXT: store i32 [[CTTZ2]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 2), align 4688; AVX1-NEXT: store i32 [[CTTZ3]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 3), align 4689; AVX1-NEXT: ret void690;691; AVX2-LABEL: @cttz_undef_4i32(692; AVX2-NEXT: [[TMP1:%.*]] = load <4 x i32>, ptr @src32, align 4693; AVX2-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.cttz.v4i32(<4 x i32> [[TMP1]], i1 true)694; AVX2-NEXT: store <4 x i32> [[TMP2]], ptr @dst32, align 4695; AVX2-NEXT: ret void696;697; AVX512-LABEL: @cttz_undef_4i32(698; AVX512-NEXT: [[TMP1:%.*]] = load <4 x i32>, ptr @src32, align 4699; AVX512-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.cttz.v4i32(<4 x i32> [[TMP1]], i1 true)700; AVX512-NEXT: store <4 x i32> [[TMP2]], ptr @dst32, align 4701; AVX512-NEXT: ret void702;703 %ld0 = load i32, ptr @src32, align 4704 %ld1 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 1), align 4705 %ld2 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 2), align 4706 %ld3 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 3), align 4707 %cttz0 = call i32 @llvm.cttz.i32(i32 %ld0, i1 -1)708 %cttz1 = call i32 @llvm.cttz.i32(i32 %ld1, i1 -1)709 %cttz2 = call i32 @llvm.cttz.i32(i32 %ld2, i1 -1)710 %cttz3 = call i32 @llvm.cttz.i32(i32 %ld3, i1 -1)711 store i32 %cttz0, ptr @dst32, align 4712 store i32 %cttz1, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 1), align 4713 store i32 %cttz2, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 2), align 4714 store i32 %cttz3, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 3), align 4715 ret void716}717 718define void @cttz_undef_8i32() #0 {719; SSE-LABEL: @cttz_undef_8i32(720; SSE-NEXT: [[LD0:%.*]] = load i32, ptr @src32, align 2721; SSE-NEXT: [[LD1:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 1), align 2722; SSE-NEXT: [[LD2:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 2), align 2723; SSE-NEXT: [[LD3:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 3), align 2724; SSE-NEXT: [[LD4:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 4), align 2725; SSE-NEXT: [[LD5:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 5), align 2726; SSE-NEXT: [[LD6:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 6), align 2727; SSE-NEXT: [[LD7:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 7), align 2728; SSE-NEXT: [[CTTZ0:%.*]] = call i32 @llvm.cttz.i32(i32 [[LD0]], i1 true)729; SSE-NEXT: [[CTTZ1:%.*]] = call i32 @llvm.cttz.i32(i32 [[LD1]], i1 true)730; SSE-NEXT: [[CTTZ2:%.*]] = call i32 @llvm.cttz.i32(i32 [[LD2]], i1 true)731; SSE-NEXT: [[CTTZ3:%.*]] = call i32 @llvm.cttz.i32(i32 [[LD3]], i1 true)732; SSE-NEXT: [[CTTZ4:%.*]] = call i32 @llvm.cttz.i32(i32 [[LD4]], i1 true)733; SSE-NEXT: [[CTTZ5:%.*]] = call i32 @llvm.cttz.i32(i32 [[LD5]], i1 true)734; SSE-NEXT: [[CTTZ6:%.*]] = call i32 @llvm.cttz.i32(i32 [[LD6]], i1 true)735; SSE-NEXT: [[CTTZ7:%.*]] = call i32 @llvm.cttz.i32(i32 [[LD7]], i1 true)736; SSE-NEXT: store i32 [[CTTZ0]], ptr @dst32, align 2737; SSE-NEXT: store i32 [[CTTZ1]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 1), align 2738; SSE-NEXT: store i32 [[CTTZ2]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 2), align 2739; SSE-NEXT: store i32 [[CTTZ3]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 3), align 2740; SSE-NEXT: store i32 [[CTTZ4]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 4), align 2741; SSE-NEXT: store i32 [[CTTZ5]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 5), align 2742; SSE-NEXT: store i32 [[CTTZ6]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 6), align 2743; SSE-NEXT: store i32 [[CTTZ7]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 7), align 2744; SSE-NEXT: ret void745;746; AVX1-LABEL: @cttz_undef_8i32(747; AVX1-NEXT: [[LD0:%.*]] = load i32, ptr @src32, align 2748; AVX1-NEXT: [[LD1:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 1), align 2749; AVX1-NEXT: [[LD2:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 2), align 2750; AVX1-NEXT: [[LD3:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 3), align 2751; AVX1-NEXT: [[LD4:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 4), align 2752; AVX1-NEXT: [[LD5:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 5), align 2753; AVX1-NEXT: [[LD6:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 6), align 2754; AVX1-NEXT: [[LD7:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 7), align 2755; AVX1-NEXT: [[CTTZ0:%.*]] = call i32 @llvm.cttz.i32(i32 [[LD0]], i1 true)756; AVX1-NEXT: [[CTTZ1:%.*]] = call i32 @llvm.cttz.i32(i32 [[LD1]], i1 true)757; AVX1-NEXT: [[CTTZ2:%.*]] = call i32 @llvm.cttz.i32(i32 [[LD2]], i1 true)758; AVX1-NEXT: [[CTTZ3:%.*]] = call i32 @llvm.cttz.i32(i32 [[LD3]], i1 true)759; AVX1-NEXT: [[CTTZ4:%.*]] = call i32 @llvm.cttz.i32(i32 [[LD4]], i1 true)760; AVX1-NEXT: [[CTTZ5:%.*]] = call i32 @llvm.cttz.i32(i32 [[LD5]], i1 true)761; AVX1-NEXT: [[CTTZ6:%.*]] = call i32 @llvm.cttz.i32(i32 [[LD6]], i1 true)762; AVX1-NEXT: [[CTTZ7:%.*]] = call i32 @llvm.cttz.i32(i32 [[LD7]], i1 true)763; AVX1-NEXT: store i32 [[CTTZ0]], ptr @dst32, align 2764; AVX1-NEXT: store i32 [[CTTZ1]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 1), align 2765; AVX1-NEXT: store i32 [[CTTZ2]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 2), align 2766; AVX1-NEXT: store i32 [[CTTZ3]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 3), align 2767; AVX1-NEXT: store i32 [[CTTZ4]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 4), align 2768; AVX1-NEXT: store i32 [[CTTZ5]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 5), align 2769; AVX1-NEXT: store i32 [[CTTZ6]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 6), align 2770; AVX1-NEXT: store i32 [[CTTZ7]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 7), align 2771; AVX1-NEXT: ret void772;773; AVX2-LABEL: @cttz_undef_8i32(774; AVX2-NEXT: [[TMP1:%.*]] = load <8 x i32>, ptr @src32, align 2775; AVX2-NEXT: [[TMP2:%.*]] = call <8 x i32> @llvm.cttz.v8i32(<8 x i32> [[TMP1]], i1 true)776; AVX2-NEXT: store <8 x i32> [[TMP2]], ptr @dst32, align 2777; AVX2-NEXT: ret void778;779; AVX512-LABEL: @cttz_undef_8i32(780; AVX512-NEXT: [[TMP1:%.*]] = load <8 x i32>, ptr @src32, align 2781; AVX512-NEXT: [[TMP2:%.*]] = call <8 x i32> @llvm.cttz.v8i32(<8 x i32> [[TMP1]], i1 true)782; AVX512-NEXT: store <8 x i32> [[TMP2]], ptr @dst32, align 2783; AVX512-NEXT: ret void784;785 %ld0 = load i32, ptr @src32, align 2786 %ld1 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 1), align 2787 %ld2 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 2), align 2788 %ld3 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 3), align 2789 %ld4 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 4), align 2790 %ld5 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 5), align 2791 %ld6 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 6), align 2792 %ld7 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 7), align 2793 %cttz0 = call i32 @llvm.cttz.i32(i32 %ld0, i1 -1)794 %cttz1 = call i32 @llvm.cttz.i32(i32 %ld1, i1 -1)795 %cttz2 = call i32 @llvm.cttz.i32(i32 %ld2, i1 -1)796 %cttz3 = call i32 @llvm.cttz.i32(i32 %ld3, i1 -1)797 %cttz4 = call i32 @llvm.cttz.i32(i32 %ld4, i1 -1)798 %cttz5 = call i32 @llvm.cttz.i32(i32 %ld5, i1 -1)799 %cttz6 = call i32 @llvm.cttz.i32(i32 %ld6, i1 -1)800 %cttz7 = call i32 @llvm.cttz.i32(i32 %ld7, i1 -1)801 store i32 %cttz0, ptr @dst32, align 2802 store i32 %cttz1, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 1), align 2803 store i32 %cttz2, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 2), align 2804 store i32 %cttz3, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 3), align 2805 store i32 %cttz4, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 4), align 2806 store i32 %cttz5, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 5), align 2807 store i32 %cttz6, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 6), align 2808 store i32 %cttz7, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 7), align 2809 ret void810}811 812define void @cttz_undef_8i16() #0 {813; CHECK-LABEL: @cttz_undef_8i16(814; CHECK-NEXT: [[TMP1:%.*]] = load <8 x i16>, ptr @src16, align 2815; CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> [[TMP1]], i1 true)816; CHECK-NEXT: store <8 x i16> [[TMP2]], ptr @dst16, align 2817; CHECK-NEXT: ret void818;819 %ld0 = load i16, ptr @src16, align 2820 %ld1 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 1), align 2821 %ld2 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 2), align 2822 %ld3 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 3), align 2823 %ld4 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 4), align 2824 %ld5 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 5), align 2825 %ld6 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 6), align 2826 %ld7 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 7), align 2827 %cttz0 = call i16 @llvm.cttz.i16(i16 %ld0, i1 -1)828 %cttz1 = call i16 @llvm.cttz.i16(i16 %ld1, i1 -1)829 %cttz2 = call i16 @llvm.cttz.i16(i16 %ld2, i1 -1)830 %cttz3 = call i16 @llvm.cttz.i16(i16 %ld3, i1 -1)831 %cttz4 = call i16 @llvm.cttz.i16(i16 %ld4, i1 -1)832 %cttz5 = call i16 @llvm.cttz.i16(i16 %ld5, i1 -1)833 %cttz6 = call i16 @llvm.cttz.i16(i16 %ld6, i1 -1)834 %cttz7 = call i16 @llvm.cttz.i16(i16 %ld7, i1 -1)835 store i16 %cttz0, ptr @dst16, align 2836 store i16 %cttz1, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 1), align 2837 store i16 %cttz2, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 2), align 2838 store i16 %cttz3, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 3), align 2839 store i16 %cttz4, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 4), align 2840 store i16 %cttz5, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 5), align 2841 store i16 %cttz6, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 6), align 2842 store i16 %cttz7, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 7), align 2843 ret void844}845 846define void @cttz_undef_16i16() #0 {847; SSE-LABEL: @cttz_undef_16i16(848; SSE-NEXT: [[TMP1:%.*]] = load <8 x i16>, ptr @src16, align 2849; SSE-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> [[TMP1]], i1 true)850; SSE-NEXT: store <8 x i16> [[TMP2]], ptr @dst16, align 2851; SSE-NEXT: [[TMP3:%.*]] = load <8 x i16>, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 8), align 2852; SSE-NEXT: [[TMP4:%.*]] = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> [[TMP3]], i1 true)853; SSE-NEXT: store <8 x i16> [[TMP4]], ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 8), align 2854; SSE-NEXT: ret void855;856; AVX-LABEL: @cttz_undef_16i16(857; AVX-NEXT: [[TMP1:%.*]] = load <16 x i16>, ptr @src16, align 2858; AVX-NEXT: [[TMP2:%.*]] = call <16 x i16> @llvm.cttz.v16i16(<16 x i16> [[TMP1]], i1 true)859; AVX-NEXT: store <16 x i16> [[TMP2]], ptr @dst16, align 2860; AVX-NEXT: ret void861;862 %ld0 = load i16, ptr @src16, align 2863 %ld1 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 1), align 2864 %ld2 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 2), align 2865 %ld3 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 3), align 2866 %ld4 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 4), align 2867 %ld5 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 5), align 2868 %ld6 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 6), align 2869 %ld7 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 7), align 2870 %ld8 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 8), align 2871 %ld9 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 9), align 2872 %ld10 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 10), align 2873 %ld11 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 11), align 2874 %ld12 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 12), align 2875 %ld13 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 13), align 2876 %ld14 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 14), align 2877 %ld15 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 15), align 2878 %cttz0 = call i16 @llvm.cttz.i16(i16 %ld0, i1 -1)879 %cttz1 = call i16 @llvm.cttz.i16(i16 %ld1, i1 -1)880 %cttz2 = call i16 @llvm.cttz.i16(i16 %ld2, i1 -1)881 %cttz3 = call i16 @llvm.cttz.i16(i16 %ld3, i1 -1)882 %cttz4 = call i16 @llvm.cttz.i16(i16 %ld4, i1 -1)883 %cttz5 = call i16 @llvm.cttz.i16(i16 %ld5, i1 -1)884 %cttz6 = call i16 @llvm.cttz.i16(i16 %ld6, i1 -1)885 %cttz7 = call i16 @llvm.cttz.i16(i16 %ld7, i1 -1)886 %cttz8 = call i16 @llvm.cttz.i16(i16 %ld8, i1 -1)887 %cttz9 = call i16 @llvm.cttz.i16(i16 %ld9, i1 -1)888 %cttz10 = call i16 @llvm.cttz.i16(i16 %ld10, i1 -1)889 %cttz11 = call i16 @llvm.cttz.i16(i16 %ld11, i1 -1)890 %cttz12 = call i16 @llvm.cttz.i16(i16 %ld12, i1 -1)891 %cttz13 = call i16 @llvm.cttz.i16(i16 %ld13, i1 -1)892 %cttz14 = call i16 @llvm.cttz.i16(i16 %ld14, i1 -1)893 %cttz15 = call i16 @llvm.cttz.i16(i16 %ld15, i1 -1)894 store i16 %cttz0 , ptr @dst16, align 2895 store i16 %cttz1 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 1), align 2896 store i16 %cttz2 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 2), align 2897 store i16 %cttz3 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 3), align 2898 store i16 %cttz4 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 4), align 2899 store i16 %cttz5 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 5), align 2900 store i16 %cttz6 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 6), align 2901 store i16 %cttz7 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 7), align 2902 store i16 %cttz8 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 8), align 2903 store i16 %cttz9 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 9), align 2904 store i16 %cttz10, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 10), align 2905 store i16 %cttz11, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 11), align 2906 store i16 %cttz12, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 12), align 2907 store i16 %cttz13, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 13), align 2908 store i16 %cttz14, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 14), align 2909 store i16 %cttz15, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 15), align 2910 ret void911}912 913define void @cttz_undef_16i8() #0 {914; CHECK-LABEL: @cttz_undef_16i8(915; CHECK-NEXT: [[TMP1:%.*]] = load <16 x i8>, ptr @src8, align 1916; CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.cttz.v16i8(<16 x i8> [[TMP1]], i1 true)917; CHECK-NEXT: store <16 x i8> [[TMP2]], ptr @dst8, align 1918; CHECK-NEXT: ret void919;920 %ld0 = load i8, ptr @src8, align 1921 %ld1 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 1), align 1922 %ld2 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 2), align 1923 %ld3 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 3), align 1924 %ld4 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 4), align 1925 %ld5 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 5), align 1926 %ld6 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 6), align 1927 %ld7 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 7), align 1928 %ld8 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 8), align 1929 %ld9 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 9), align 1930 %ld10 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 10), align 1931 %ld11 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 11), align 1932 %ld12 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 12), align 1933 %ld13 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 13), align 1934 %ld14 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 14), align 1935 %ld15 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 15), align 1936 %cttz0 = call i8 @llvm.cttz.i8(i8 %ld0, i1 -1)937 %cttz1 = call i8 @llvm.cttz.i8(i8 %ld1, i1 -1)938 %cttz2 = call i8 @llvm.cttz.i8(i8 %ld2, i1 -1)939 %cttz3 = call i8 @llvm.cttz.i8(i8 %ld3, i1 -1)940 %cttz4 = call i8 @llvm.cttz.i8(i8 %ld4, i1 -1)941 %cttz5 = call i8 @llvm.cttz.i8(i8 %ld5, i1 -1)942 %cttz6 = call i8 @llvm.cttz.i8(i8 %ld6, i1 -1)943 %cttz7 = call i8 @llvm.cttz.i8(i8 %ld7, i1 -1)944 %cttz8 = call i8 @llvm.cttz.i8(i8 %ld8, i1 -1)945 %cttz9 = call i8 @llvm.cttz.i8(i8 %ld9, i1 -1)946 %cttz10 = call i8 @llvm.cttz.i8(i8 %ld10, i1 -1)947 %cttz11 = call i8 @llvm.cttz.i8(i8 %ld11, i1 -1)948 %cttz12 = call i8 @llvm.cttz.i8(i8 %ld12, i1 -1)949 %cttz13 = call i8 @llvm.cttz.i8(i8 %ld13, i1 -1)950 %cttz14 = call i8 @llvm.cttz.i8(i8 %ld14, i1 -1)951 %cttz15 = call i8 @llvm.cttz.i8(i8 %ld15, i1 -1)952 store i8 %cttz0 , ptr @dst8, align 1953 store i8 %cttz1 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 1), align 1954 store i8 %cttz2 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 2), align 1955 store i8 %cttz3 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 3), align 1956 store i8 %cttz4 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 4), align 1957 store i8 %cttz5 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 5), align 1958 store i8 %cttz6 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 6), align 1959 store i8 %cttz7 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 7), align 1960 store i8 %cttz8 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 8), align 1961 store i8 %cttz9 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 9), align 1962 store i8 %cttz10, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 10), align 1963 store i8 %cttz11, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 11), align 1964 store i8 %cttz12, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 12), align 1965 store i8 %cttz13, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 13), align 1966 store i8 %cttz14, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 14), align 1967 store i8 %cttz15, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 15), align 1968 ret void969}970 971define void @cttz_undef_32i8() #0 {972; SSE-LABEL: @cttz_undef_32i8(973; SSE-NEXT: [[TMP1:%.*]] = load <16 x i8>, ptr @src8, align 1974; SSE-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.cttz.v16i8(<16 x i8> [[TMP1]], i1 true)975; SSE-NEXT: store <16 x i8> [[TMP2]], ptr @dst8, align 1976; SSE-NEXT: [[TMP3:%.*]] = load <16 x i8>, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 16), align 1977; SSE-NEXT: [[TMP4:%.*]] = call <16 x i8> @llvm.cttz.v16i8(<16 x i8> [[TMP3]], i1 true)978; SSE-NEXT: store <16 x i8> [[TMP4]], ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 16), align 1979; SSE-NEXT: ret void980;981; AVX-LABEL: @cttz_undef_32i8(982; AVX-NEXT: [[TMP1:%.*]] = load <32 x i8>, ptr @src8, align 1983; AVX-NEXT: [[TMP2:%.*]] = call <32 x i8> @llvm.cttz.v32i8(<32 x i8> [[TMP1]], i1 true)984; AVX-NEXT: store <32 x i8> [[TMP2]], ptr @dst8, align 1985; AVX-NEXT: ret void986;987 %ld0 = load i8, ptr @src8, align 1988 %ld1 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 1), align 1989 %ld2 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 2), align 1990 %ld3 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 3), align 1991 %ld4 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 4), align 1992 %ld5 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 5), align 1993 %ld6 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 6), align 1994 %ld7 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 7), align 1995 %ld8 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 8), align 1996 %ld9 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 9), align 1997 %ld10 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 10), align 1998 %ld11 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 11), align 1999 %ld12 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 12), align 11000 %ld13 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 13), align 11001 %ld14 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 14), align 11002 %ld15 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 15), align 11003 %ld16 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 16), align 11004 %ld17 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 17), align 11005 %ld18 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 18), align 11006 %ld19 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 19), align 11007 %ld20 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 20), align 11008 %ld21 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 21), align 11009 %ld22 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 22), align 11010 %ld23 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 23), align 11011 %ld24 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 24), align 11012 %ld25 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 25), align 11013 %ld26 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 26), align 11014 %ld27 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 27), align 11015 %ld28 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 28), align 11016 %ld29 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 29), align 11017 %ld30 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 30), align 11018 %ld31 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 31), align 11019 %cttz0 = call i8 @llvm.cttz.i8(i8 %ld0, i1 -1)1020 %cttz1 = call i8 @llvm.cttz.i8(i8 %ld1, i1 -1)1021 %cttz2 = call i8 @llvm.cttz.i8(i8 %ld2, i1 -1)1022 %cttz3 = call i8 @llvm.cttz.i8(i8 %ld3, i1 -1)1023 %cttz4 = call i8 @llvm.cttz.i8(i8 %ld4, i1 -1)1024 %cttz5 = call i8 @llvm.cttz.i8(i8 %ld5, i1 -1)1025 %cttz6 = call i8 @llvm.cttz.i8(i8 %ld6, i1 -1)1026 %cttz7 = call i8 @llvm.cttz.i8(i8 %ld7, i1 -1)1027 %cttz8 = call i8 @llvm.cttz.i8(i8 %ld8, i1 -1)1028 %cttz9 = call i8 @llvm.cttz.i8(i8 %ld9, i1 -1)1029 %cttz10 = call i8 @llvm.cttz.i8(i8 %ld10, i1 -1)1030 %cttz11 = call i8 @llvm.cttz.i8(i8 %ld11, i1 -1)1031 %cttz12 = call i8 @llvm.cttz.i8(i8 %ld12, i1 -1)1032 %cttz13 = call i8 @llvm.cttz.i8(i8 %ld13, i1 -1)1033 %cttz14 = call i8 @llvm.cttz.i8(i8 %ld14, i1 -1)1034 %cttz15 = call i8 @llvm.cttz.i8(i8 %ld15, i1 -1)1035 %cttz16 = call i8 @llvm.cttz.i8(i8 %ld16, i1 -1)1036 %cttz17 = call i8 @llvm.cttz.i8(i8 %ld17, i1 -1)1037 %cttz18 = call i8 @llvm.cttz.i8(i8 %ld18, i1 -1)1038 %cttz19 = call i8 @llvm.cttz.i8(i8 %ld19, i1 -1)1039 %cttz20 = call i8 @llvm.cttz.i8(i8 %ld20, i1 -1)1040 %cttz21 = call i8 @llvm.cttz.i8(i8 %ld21, i1 -1)1041 %cttz22 = call i8 @llvm.cttz.i8(i8 %ld22, i1 -1)1042 %cttz23 = call i8 @llvm.cttz.i8(i8 %ld23, i1 -1)1043 %cttz24 = call i8 @llvm.cttz.i8(i8 %ld24, i1 -1)1044 %cttz25 = call i8 @llvm.cttz.i8(i8 %ld25, i1 -1)1045 %cttz26 = call i8 @llvm.cttz.i8(i8 %ld26, i1 -1)1046 %cttz27 = call i8 @llvm.cttz.i8(i8 %ld27, i1 -1)1047 %cttz28 = call i8 @llvm.cttz.i8(i8 %ld28, i1 -1)1048 %cttz29 = call i8 @llvm.cttz.i8(i8 %ld29, i1 -1)1049 %cttz30 = call i8 @llvm.cttz.i8(i8 %ld30, i1 -1)1050 %cttz31 = call i8 @llvm.cttz.i8(i8 %ld31, i1 -1)1051 store i8 %cttz0 , ptr @dst8, align 11052 store i8 %cttz1 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 1), align 11053 store i8 %cttz2 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 2), align 11054 store i8 %cttz3 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 3), align 11055 store i8 %cttz4 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 4), align 11056 store i8 %cttz5 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 5), align 11057 store i8 %cttz6 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 6), align 11058 store i8 %cttz7 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 7), align 11059 store i8 %cttz8 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 8), align 11060 store i8 %cttz9 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 9), align 11061 store i8 %cttz10, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 10), align 11062 store i8 %cttz11, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 11), align 11063 store i8 %cttz12, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 12), align 11064 store i8 %cttz13, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 13), align 11065 store i8 %cttz14, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 14), align 11066 store i8 %cttz15, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 15), align 11067 store i8 %cttz16, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 16), align 11068 store i8 %cttz17, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 17), align 11069 store i8 %cttz18, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 18), align 11070 store i8 %cttz19, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 19), align 11071 store i8 %cttz20, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 20), align 11072 store i8 %cttz21, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 21), align 11073 store i8 %cttz22, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 22), align 11074 store i8 %cttz23, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 23), align 11075 store i8 %cttz24, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 24), align 11076 store i8 %cttz25, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 25), align 11077 store i8 %cttz26, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 26), align 11078 store i8 %cttz27, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 27), align 11079 store i8 %cttz28, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 28), align 11080 store i8 %cttz29, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 29), align 11081 store i8 %cttz30, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 30), align 11082 store i8 %cttz31, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 31), align 11083 ret void1084}1085 1086attributes #0 = { nounwind }1087