brintos

brintos / llvm-project-archived public Read only

0
0
Text · 72.2 KiB · 896be6f Raw
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