brintos

brintos / llvm-project-archived public Read only

0
0
Text · 74.0 KiB · 9bf2ade Raw
1108 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.ctlz.i64(i64, i1)20declare i32 @llvm.ctlz.i32(i32, i1)21declare i16 @llvm.ctlz.i16(i16, i1)22declare  i8 @llvm.ctlz.i8(i8, i1)23 24;25; CTLZ26;27 28define void @ctlz_2i64() #0 {29; SSE-LABEL: @ctlz_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:    [[CTLZ0:%.*]] = call i64 @llvm.ctlz.i64(i64 [[LD0]], i1 false)33; SSE-NEXT:    [[CTLZ1:%.*]] = call i64 @llvm.ctlz.i64(i64 [[LD1]], i1 false)34; SSE-NEXT:    store i64 [[CTLZ0]], ptr @dst64, align 835; SSE-NEXT:    store i64 [[CTLZ1]], ptr getelementptr inbounds ([4 x i64], ptr @dst64, i32 0, i64 1), align 836; SSE-NEXT:    ret void37;38; AVX1-LABEL: @ctlz_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:    [[CTLZ0:%.*]] = call i64 @llvm.ctlz.i64(i64 [[LD0]], i1 false)42; AVX1-NEXT:    [[CTLZ1:%.*]] = call i64 @llvm.ctlz.i64(i64 [[LD1]], i1 false)43; AVX1-NEXT:    store i64 [[CTLZ0]], ptr @dst64, align 844; AVX1-NEXT:    store i64 [[CTLZ1]], ptr getelementptr inbounds ([4 x i64], ptr @dst64, i32 0, i64 1), align 845; AVX1-NEXT:    ret void46;47; AVX2-LABEL: @ctlz_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:    [[CTLZ0:%.*]] = call i64 @llvm.ctlz.i64(i64 [[LD0]], i1 false)51; AVX2-NEXT:    [[CTLZ1:%.*]] = call i64 @llvm.ctlz.i64(i64 [[LD1]], i1 false)52; AVX2-NEXT:    store i64 [[CTLZ0]], ptr @dst64, align 853; AVX2-NEXT:    store i64 [[CTLZ1]], ptr getelementptr inbounds ([4 x i64], ptr @dst64, i32 0, i64 1), align 854; AVX2-NEXT:    ret void55;56; AVX512-LABEL: @ctlz_2i64(57; AVX512-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr @src64, align 858; AVX512-NEXT:    [[TMP2:%.*]] = call <2 x i64> @llvm.ctlz.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  %ctlz0 = call i64 @llvm.ctlz.i64(i64 %ld0, i1 0)65  %ctlz1 = call i64 @llvm.ctlz.i64(i64 %ld1, i1 0)66  store i64 %ctlz0, ptr @dst64, align 867  store i64 %ctlz1, ptr getelementptr inbounds ([4 x i64], ptr @dst64, i32 0, i64 1), align 868  ret void69}70 71define void @ctlz_4i64() #0 {72; SSE-LABEL: @ctlz_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:    [[CTLZ0:%.*]] = call i64 @llvm.ctlz.i64(i64 [[LD0]], i1 false)78; SSE-NEXT:    [[CTLZ1:%.*]] = call i64 @llvm.ctlz.i64(i64 [[LD1]], i1 false)79; SSE-NEXT:    [[CTLZ2:%.*]] = call i64 @llvm.ctlz.i64(i64 [[LD2]], i1 false)80; SSE-NEXT:    [[CTLZ3:%.*]] = call i64 @llvm.ctlz.i64(i64 [[LD3]], i1 false)81; SSE-NEXT:    store i64 [[CTLZ0]], ptr @dst64, align 482; SSE-NEXT:    store i64 [[CTLZ1]], ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 1), align 483; SSE-NEXT:    store i64 [[CTLZ2]], ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 2), align 484; SSE-NEXT:    store i64 [[CTLZ3]], ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 3), align 485; SSE-NEXT:    ret void86;87; AVX1-LABEL: @ctlz_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:    [[CTLZ0:%.*]] = call i64 @llvm.ctlz.i64(i64 [[LD0]], i1 false)93; AVX1-NEXT:    [[CTLZ1:%.*]] = call i64 @llvm.ctlz.i64(i64 [[LD1]], i1 false)94; AVX1-NEXT:    [[CTLZ2:%.*]] = call i64 @llvm.ctlz.i64(i64 [[LD2]], i1 false)95; AVX1-NEXT:    [[CTLZ3:%.*]] = call i64 @llvm.ctlz.i64(i64 [[LD3]], i1 false)96; AVX1-NEXT:    store i64 [[CTLZ0]], ptr @dst64, align 497; AVX1-NEXT:    store i64 [[CTLZ1]], ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 1), align 498; AVX1-NEXT:    store i64 [[CTLZ2]], ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 2), align 499; AVX1-NEXT:    store i64 [[CTLZ3]], ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 3), align 4100; AVX1-NEXT:    ret void101;102; AVX2-LABEL: @ctlz_4i64(103; AVX2-NEXT:    [[LD0:%.*]] = load i64, ptr @src64, align 4104; AVX2-NEXT:    [[LD1:%.*]] = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i64 0, i64 1), align 4105; AVX2-NEXT:    [[LD2:%.*]] = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i64 0, i64 2), align 4106; AVX2-NEXT:    [[LD3:%.*]] = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i64 0, i64 3), align 4107; AVX2-NEXT:    [[CTLZ0:%.*]] = call i64 @llvm.ctlz.i64(i64 [[LD0]], i1 false)108; AVX2-NEXT:    [[CTLZ1:%.*]] = call i64 @llvm.ctlz.i64(i64 [[LD1]], i1 false)109; AVX2-NEXT:    [[CTLZ2:%.*]] = call i64 @llvm.ctlz.i64(i64 [[LD2]], i1 false)110; AVX2-NEXT:    [[CTLZ3:%.*]] = call i64 @llvm.ctlz.i64(i64 [[LD3]], i1 false)111; AVX2-NEXT:    store i64 [[CTLZ0]], ptr @dst64, align 4112; AVX2-NEXT:    store i64 [[CTLZ1]], ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 1), align 4113; AVX2-NEXT:    store i64 [[CTLZ2]], ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 2), align 4114; AVX2-NEXT:    store i64 [[CTLZ3]], ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 3), align 4115; AVX2-NEXT:    ret void116;117; AVX512-LABEL: @ctlz_4i64(118; AVX512-NEXT:    [[TMP1:%.*]] = load <4 x i64>, ptr @src64, align 4119; AVX512-NEXT:    [[TMP2:%.*]] = call <4 x i64> @llvm.ctlz.v4i64(<4 x i64> [[TMP1]], i1 false)120; AVX512-NEXT:    store <4 x i64> [[TMP2]], ptr @dst64, align 4121; AVX512-NEXT:    ret void122;123  %ld0 = load i64, ptr @src64, align 4124  %ld1 = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i64 0, i64 1), align 4125  %ld2 = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i64 0, i64 2), align 4126  %ld3 = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i64 0, i64 3), align 4127  %ctlz0 = call i64 @llvm.ctlz.i64(i64 %ld0, i1 0)128  %ctlz1 = call i64 @llvm.ctlz.i64(i64 %ld1, i1 0)129  %ctlz2 = call i64 @llvm.ctlz.i64(i64 %ld2, i1 0)130  %ctlz3 = call i64 @llvm.ctlz.i64(i64 %ld3, i1 0)131  store i64 %ctlz0, ptr @dst64, align 4132  store i64 %ctlz1, ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 1), align 4133  store i64 %ctlz2, ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 2), align 4134  store i64 %ctlz3, ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 3), align 4135  ret void136}137 138define void @ctlz_4i32() #0 {139; SSE-LABEL: @ctlz_4i32(140; SSE-NEXT:    [[LD0:%.*]] = load i32, ptr @src32, align 4141; SSE-NEXT:    [[LD1:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 1), align 4142; SSE-NEXT:    [[LD2:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 2), align 4143; SSE-NEXT:    [[LD3:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 3), align 4144; SSE-NEXT:    [[CTLZ0:%.*]] = call i32 @llvm.ctlz.i32(i32 [[LD0]], i1 false)145; SSE-NEXT:    [[CTLZ1:%.*]] = call i32 @llvm.ctlz.i32(i32 [[LD1]], i1 false)146; SSE-NEXT:    [[CTLZ2:%.*]] = call i32 @llvm.ctlz.i32(i32 [[LD2]], i1 false)147; SSE-NEXT:    [[CTLZ3:%.*]] = call i32 @llvm.ctlz.i32(i32 [[LD3]], i1 false)148; SSE-NEXT:    store i32 [[CTLZ0]], ptr @dst32, align 4149; SSE-NEXT:    store i32 [[CTLZ1]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 1), align 4150; SSE-NEXT:    store i32 [[CTLZ2]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 2), align 4151; SSE-NEXT:    store i32 [[CTLZ3]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 3), align 4152; SSE-NEXT:    ret void153;154; AVX1-LABEL: @ctlz_4i32(155; AVX1-NEXT:    [[LD0:%.*]] = load i32, ptr @src32, align 4156; AVX1-NEXT:    [[LD1:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 1), align 4157; AVX1-NEXT:    [[LD2:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 2), align 4158; AVX1-NEXT:    [[LD3:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 3), align 4159; AVX1-NEXT:    [[CTLZ0:%.*]] = call i32 @llvm.ctlz.i32(i32 [[LD0]], i1 false)160; AVX1-NEXT:    [[CTLZ1:%.*]] = call i32 @llvm.ctlz.i32(i32 [[LD1]], i1 false)161; AVX1-NEXT:    [[CTLZ2:%.*]] = call i32 @llvm.ctlz.i32(i32 [[LD2]], i1 false)162; AVX1-NEXT:    [[CTLZ3:%.*]] = call i32 @llvm.ctlz.i32(i32 [[LD3]], i1 false)163; AVX1-NEXT:    store i32 [[CTLZ0]], ptr @dst32, align 4164; AVX1-NEXT:    store i32 [[CTLZ1]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 1), align 4165; AVX1-NEXT:    store i32 [[CTLZ2]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 2), align 4166; AVX1-NEXT:    store i32 [[CTLZ3]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 3), align 4167; AVX1-NEXT:    ret void168;169; AVX2-LABEL: @ctlz_4i32(170; AVX2-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr @src32, align 4171; AVX2-NEXT:    [[TMP2:%.*]] = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> [[TMP1]], i1 false)172; AVX2-NEXT:    store <4 x i32> [[TMP2]], ptr @dst32, align 4173; AVX2-NEXT:    ret void174;175; AVX512-LABEL: @ctlz_4i32(176; AVX512-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr @src32, align 4177; AVX512-NEXT:    [[TMP2:%.*]] = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> [[TMP1]], i1 false)178; AVX512-NEXT:    store <4 x i32> [[TMP2]], ptr @dst32, align 4179; AVX512-NEXT:    ret void180;181  %ld0 = load i32, ptr @src32, align 4182  %ld1 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 1), align 4183  %ld2 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 2), align 4184  %ld3 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 3), align 4185  %ctlz0 = call i32 @llvm.ctlz.i32(i32 %ld0, i1 0)186  %ctlz1 = call i32 @llvm.ctlz.i32(i32 %ld1, i1 0)187  %ctlz2 = call i32 @llvm.ctlz.i32(i32 %ld2, i1 0)188  %ctlz3 = call i32 @llvm.ctlz.i32(i32 %ld3, i1 0)189  store i32 %ctlz0, ptr @dst32, align 4190  store i32 %ctlz1, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 1), align 4191  store i32 %ctlz2, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 2), align 4192  store i32 %ctlz3, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 3), align 4193  ret void194}195 196define void @ctlz_8i32() #0 {197; SSE-LABEL: @ctlz_8i32(198; SSE-NEXT:    [[LD0:%.*]] = load i32, ptr @src32, align 2199; SSE-NEXT:    [[LD1:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 1), align 2200; SSE-NEXT:    [[LD2:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 2), align 2201; SSE-NEXT:    [[LD3:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 3), align 2202; SSE-NEXT:    [[LD4:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 4), align 2203; SSE-NEXT:    [[LD5:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 5), align 2204; SSE-NEXT:    [[LD6:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 6), align 2205; SSE-NEXT:    [[LD7:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 7), align 2206; SSE-NEXT:    [[CTLZ0:%.*]] = call i32 @llvm.ctlz.i32(i32 [[LD0]], i1 false)207; SSE-NEXT:    [[CTLZ1:%.*]] = call i32 @llvm.ctlz.i32(i32 [[LD1]], i1 false)208; SSE-NEXT:    [[CTLZ2:%.*]] = call i32 @llvm.ctlz.i32(i32 [[LD2]], i1 false)209; SSE-NEXT:    [[CTLZ3:%.*]] = call i32 @llvm.ctlz.i32(i32 [[LD3]], i1 false)210; SSE-NEXT:    [[CTLZ4:%.*]] = call i32 @llvm.ctlz.i32(i32 [[LD4]], i1 false)211; SSE-NEXT:    [[CTLZ5:%.*]] = call i32 @llvm.ctlz.i32(i32 [[LD5]], i1 false)212; SSE-NEXT:    [[CTLZ6:%.*]] = call i32 @llvm.ctlz.i32(i32 [[LD6]], i1 false)213; SSE-NEXT:    [[CTLZ7:%.*]] = call i32 @llvm.ctlz.i32(i32 [[LD7]], i1 false)214; SSE-NEXT:    store i32 [[CTLZ0]], ptr @dst32, align 2215; SSE-NEXT:    store i32 [[CTLZ1]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 1), align 2216; SSE-NEXT:    store i32 [[CTLZ2]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 2), align 2217; SSE-NEXT:    store i32 [[CTLZ3]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 3), align 2218; SSE-NEXT:    store i32 [[CTLZ4]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 4), align 2219; SSE-NEXT:    store i32 [[CTLZ5]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 5), align 2220; SSE-NEXT:    store i32 [[CTLZ6]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 6), align 2221; SSE-NEXT:    store i32 [[CTLZ7]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 7), align 2222; SSE-NEXT:    ret void223;224; AVX1-LABEL: @ctlz_8i32(225; AVX1-NEXT:    [[LD0:%.*]] = load i32, ptr @src32, align 2226; AVX1-NEXT:    [[LD1:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 1), align 2227; AVX1-NEXT:    [[LD2:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 2), align 2228; AVX1-NEXT:    [[LD3:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 3), align 2229; AVX1-NEXT:    [[LD4:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 4), align 2230; AVX1-NEXT:    [[LD5:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 5), align 2231; AVX1-NEXT:    [[LD6:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 6), align 2232; AVX1-NEXT:    [[LD7:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 7), align 2233; AVX1-NEXT:    [[CTLZ0:%.*]] = call i32 @llvm.ctlz.i32(i32 [[LD0]], i1 false)234; AVX1-NEXT:    [[CTLZ1:%.*]] = call i32 @llvm.ctlz.i32(i32 [[LD1]], i1 false)235; AVX1-NEXT:    [[CTLZ2:%.*]] = call i32 @llvm.ctlz.i32(i32 [[LD2]], i1 false)236; AVX1-NEXT:    [[CTLZ3:%.*]] = call i32 @llvm.ctlz.i32(i32 [[LD3]], i1 false)237; AVX1-NEXT:    [[CTLZ4:%.*]] = call i32 @llvm.ctlz.i32(i32 [[LD4]], i1 false)238; AVX1-NEXT:    [[CTLZ5:%.*]] = call i32 @llvm.ctlz.i32(i32 [[LD5]], i1 false)239; AVX1-NEXT:    [[CTLZ6:%.*]] = call i32 @llvm.ctlz.i32(i32 [[LD6]], i1 false)240; AVX1-NEXT:    [[CTLZ7:%.*]] = call i32 @llvm.ctlz.i32(i32 [[LD7]], i1 false)241; AVX1-NEXT:    store i32 [[CTLZ0]], ptr @dst32, align 2242; AVX1-NEXT:    store i32 [[CTLZ1]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 1), align 2243; AVX1-NEXT:    store i32 [[CTLZ2]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 2), align 2244; AVX1-NEXT:    store i32 [[CTLZ3]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 3), align 2245; AVX1-NEXT:    store i32 [[CTLZ4]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 4), align 2246; AVX1-NEXT:    store i32 [[CTLZ5]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 5), align 2247; AVX1-NEXT:    store i32 [[CTLZ6]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 6), align 2248; AVX1-NEXT:    store i32 [[CTLZ7]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 7), align 2249; AVX1-NEXT:    ret void250;251; AVX2-LABEL: @ctlz_8i32(252; AVX2-NEXT:    [[TMP1:%.*]] = load <8 x i32>, ptr @src32, align 2253; AVX2-NEXT:    [[TMP2:%.*]] = call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> [[TMP1]], i1 false)254; AVX2-NEXT:    store <8 x i32> [[TMP2]], ptr @dst32, align 2255; AVX2-NEXT:    ret void256;257; AVX512-LABEL: @ctlz_8i32(258; AVX512-NEXT:    [[TMP1:%.*]] = load <8 x i32>, ptr @src32, align 2259; AVX512-NEXT:    [[TMP2:%.*]] = call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> [[TMP1]], i1 false)260; AVX512-NEXT:    store <8 x i32> [[TMP2]], ptr @dst32, align 2261; AVX512-NEXT:    ret void262;263  %ld0 = load i32, ptr @src32, align 2264  %ld1 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 1), align 2265  %ld2 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 2), align 2266  %ld3 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 3), align 2267  %ld4 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 4), align 2268  %ld5 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 5), align 2269  %ld6 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 6), align 2270  %ld7 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 7), align 2271  %ctlz0 = call i32 @llvm.ctlz.i32(i32 %ld0, i1 0)272  %ctlz1 = call i32 @llvm.ctlz.i32(i32 %ld1, i1 0)273  %ctlz2 = call i32 @llvm.ctlz.i32(i32 %ld2, i1 0)274  %ctlz3 = call i32 @llvm.ctlz.i32(i32 %ld3, i1 0)275  %ctlz4 = call i32 @llvm.ctlz.i32(i32 %ld4, i1 0)276  %ctlz5 = call i32 @llvm.ctlz.i32(i32 %ld5, i1 0)277  %ctlz6 = call i32 @llvm.ctlz.i32(i32 %ld6, i1 0)278  %ctlz7 = call i32 @llvm.ctlz.i32(i32 %ld7, i1 0)279  store i32 %ctlz0, ptr @dst32, align 2280  store i32 %ctlz1, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 1), align 2281  store i32 %ctlz2, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 2), align 2282  store i32 %ctlz3, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 3), align 2283  store i32 %ctlz4, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 4), align 2284  store i32 %ctlz5, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 5), align 2285  store i32 %ctlz6, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 6), align 2286  store i32 %ctlz7, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 7), align 2287  ret void288}289 290define void @ctlz_8i16() #0 {291; CHECK-LABEL: @ctlz_8i16(292; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i16>, ptr @src16, align 2293; CHECK-NEXT:    [[TMP2:%.*]] = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> [[TMP1]], i1 false)294; CHECK-NEXT:    store <8 x i16> [[TMP2]], ptr @dst16, align 2295; CHECK-NEXT:    ret void296;297  %ld0 = load i16, ptr @src16, align 2298  %ld1 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 1), align 2299  %ld2 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 2), align 2300  %ld3 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 3), align 2301  %ld4 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 4), align 2302  %ld5 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 5), align 2303  %ld6 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 6), align 2304  %ld7 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 7), align 2305  %ctlz0 = call i16 @llvm.ctlz.i16(i16 %ld0, i1 0)306  %ctlz1 = call i16 @llvm.ctlz.i16(i16 %ld1, i1 0)307  %ctlz2 = call i16 @llvm.ctlz.i16(i16 %ld2, i1 0)308  %ctlz3 = call i16 @llvm.ctlz.i16(i16 %ld3, i1 0)309  %ctlz4 = call i16 @llvm.ctlz.i16(i16 %ld4, i1 0)310  %ctlz5 = call i16 @llvm.ctlz.i16(i16 %ld5, i1 0)311  %ctlz6 = call i16 @llvm.ctlz.i16(i16 %ld6, i1 0)312  %ctlz7 = call i16 @llvm.ctlz.i16(i16 %ld7, i1 0)313  store i16 %ctlz0, ptr @dst16, align 2314  store i16 %ctlz1, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 1), align 2315  store i16 %ctlz2, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 2), align 2316  store i16 %ctlz3, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 3), align 2317  store i16 %ctlz4, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 4), align 2318  store i16 %ctlz5, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 5), align 2319  store i16 %ctlz6, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 6), align 2320  store i16 %ctlz7, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 7), align 2321  ret void322}323 324define void @ctlz_16i16() #0 {325; SSE-LABEL: @ctlz_16i16(326; SSE-NEXT:    [[TMP1:%.*]] = load <8 x i16>, ptr @src16, align 2327; SSE-NEXT:    [[TMP2:%.*]] = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> [[TMP1]], i1 false)328; SSE-NEXT:    store <8 x i16> [[TMP2]], ptr @dst16, align 2329; SSE-NEXT:    [[TMP3:%.*]] = load <8 x i16>, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 8), align 2330; SSE-NEXT:    [[TMP4:%.*]] = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> [[TMP3]], i1 false)331; SSE-NEXT:    store <8 x i16> [[TMP4]], ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 8), align 2332; SSE-NEXT:    ret void333;334; AVX-LABEL: @ctlz_16i16(335; AVX-NEXT:    [[TMP1:%.*]] = load <16 x i16>, ptr @src16, align 2336; AVX-NEXT:    [[TMP2:%.*]] = call <16 x i16> @llvm.ctlz.v16i16(<16 x i16> [[TMP1]], i1 false)337; AVX-NEXT:    store <16 x i16> [[TMP2]], ptr @dst16, align 2338; AVX-NEXT:    ret void339;340  %ld0  = load i16, ptr @src16, align 2341  %ld1  = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64  1), align 2342  %ld2  = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64  2), align 2343  %ld3  = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64  3), align 2344  %ld4  = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64  4), align 2345  %ld5  = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64  5), align 2346  %ld6  = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64  6), align 2347  %ld7  = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64  7), align 2348  %ld8  = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64  8), align 2349  %ld9  = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64  9), align 2350  %ld10 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 10), align 2351  %ld11 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 11), align 2352  %ld12 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 12), align 2353  %ld13 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 13), align 2354  %ld14 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 14), align 2355  %ld15 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 15), align 2356  %ctlz0  = call i16 @llvm.ctlz.i16(i16 %ld0, i1 0)357  %ctlz1  = call i16 @llvm.ctlz.i16(i16 %ld1, i1 0)358  %ctlz2  = call i16 @llvm.ctlz.i16(i16 %ld2, i1 0)359  %ctlz3  = call i16 @llvm.ctlz.i16(i16 %ld3, i1 0)360  %ctlz4  = call i16 @llvm.ctlz.i16(i16 %ld4, i1 0)361  %ctlz5  = call i16 @llvm.ctlz.i16(i16 %ld5, i1 0)362  %ctlz6  = call i16 @llvm.ctlz.i16(i16 %ld6, i1 0)363  %ctlz7  = call i16 @llvm.ctlz.i16(i16 %ld7, i1 0)364  %ctlz8  = call i16 @llvm.ctlz.i16(i16 %ld8, i1 0)365  %ctlz9  = call i16 @llvm.ctlz.i16(i16 %ld9, i1 0)366  %ctlz10 = call i16 @llvm.ctlz.i16(i16 %ld10, i1 0)367  %ctlz11 = call i16 @llvm.ctlz.i16(i16 %ld11, i1 0)368  %ctlz12 = call i16 @llvm.ctlz.i16(i16 %ld12, i1 0)369  %ctlz13 = call i16 @llvm.ctlz.i16(i16 %ld13, i1 0)370  %ctlz14 = call i16 @llvm.ctlz.i16(i16 %ld14, i1 0)371  %ctlz15 = call i16 @llvm.ctlz.i16(i16 %ld15, i1 0)372  store i16 %ctlz0 , ptr @dst16, align 2373  store i16 %ctlz1 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64  1), align 2374  store i16 %ctlz2 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64  2), align 2375  store i16 %ctlz3 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64  3), align 2376  store i16 %ctlz4 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64  4), align 2377  store i16 %ctlz5 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64  5), align 2378  store i16 %ctlz6 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64  6), align 2379  store i16 %ctlz7 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64  7), align 2380  store i16 %ctlz8 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64  8), align 2381  store i16 %ctlz9 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64  9), align 2382  store i16 %ctlz10, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 10), align 2383  store i16 %ctlz11, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 11), align 2384  store i16 %ctlz12, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 12), align 2385  store i16 %ctlz13, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 13), align 2386  store i16 %ctlz14, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 14), align 2387  store i16 %ctlz15, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 15), align 2388  ret void389}390 391define void @ctlz_16i8() #0 {392; CHECK-LABEL: @ctlz_16i8(393; CHECK-NEXT:    [[TMP1:%.*]] = load <16 x i8>, ptr @src8, align 1394; CHECK-NEXT:    [[TMP2:%.*]] = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> [[TMP1]], i1 false)395; CHECK-NEXT:    store <16 x i8> [[TMP2]], ptr @dst8, align 1396; CHECK-NEXT:    ret void397;398  %ld0  = load i8, ptr @src8, align 1399  %ld1  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  1), align 1400  %ld2  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  2), align 1401  %ld3  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  3), align 1402  %ld4  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  4), align 1403  %ld5  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  5), align 1404  %ld6  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  6), align 1405  %ld7  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  7), align 1406  %ld8  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  8), align 1407  %ld9  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  9), align 1408  %ld10 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 10), align 1409  %ld11 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 11), align 1410  %ld12 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 12), align 1411  %ld13 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 13), align 1412  %ld14 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 14), align 1413  %ld15 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 15), align 1414  %ctlz0  = call i8 @llvm.ctlz.i8(i8 %ld0, i1 0)415  %ctlz1  = call i8 @llvm.ctlz.i8(i8 %ld1, i1 0)416  %ctlz2  = call i8 @llvm.ctlz.i8(i8 %ld2, i1 0)417  %ctlz3  = call i8 @llvm.ctlz.i8(i8 %ld3, i1 0)418  %ctlz4  = call i8 @llvm.ctlz.i8(i8 %ld4, i1 0)419  %ctlz5  = call i8 @llvm.ctlz.i8(i8 %ld5, i1 0)420  %ctlz6  = call i8 @llvm.ctlz.i8(i8 %ld6, i1 0)421  %ctlz7  = call i8 @llvm.ctlz.i8(i8 %ld7, i1 0)422  %ctlz8  = call i8 @llvm.ctlz.i8(i8 %ld8, i1 0)423  %ctlz9  = call i8 @llvm.ctlz.i8(i8 %ld9, i1 0)424  %ctlz10 = call i8 @llvm.ctlz.i8(i8 %ld10, i1 0)425  %ctlz11 = call i8 @llvm.ctlz.i8(i8 %ld11, i1 0)426  %ctlz12 = call i8 @llvm.ctlz.i8(i8 %ld12, i1 0)427  %ctlz13 = call i8 @llvm.ctlz.i8(i8 %ld13, i1 0)428  %ctlz14 = call i8 @llvm.ctlz.i8(i8 %ld14, i1 0)429  %ctlz15 = call i8 @llvm.ctlz.i8(i8 %ld15, i1 0)430  store i8 %ctlz0 , ptr @dst8, align 1431  store i8 %ctlz1 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  1), align 1432  store i8 %ctlz2 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  2), align 1433  store i8 %ctlz3 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  3), align 1434  store i8 %ctlz4 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  4), align 1435  store i8 %ctlz5 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  5), align 1436  store i8 %ctlz6 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  6), align 1437  store i8 %ctlz7 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  7), align 1438  store i8 %ctlz8 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  8), align 1439  store i8 %ctlz9 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  9), align 1440  store i8 %ctlz10, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 10), align 1441  store i8 %ctlz11, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 11), align 1442  store i8 %ctlz12, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 12), align 1443  store i8 %ctlz13, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 13), align 1444  store i8 %ctlz14, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 14), align 1445  store i8 %ctlz15, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 15), align 1446  ret void447}448 449define void @ctlz_32i8() #0 {450; SSE-LABEL: @ctlz_32i8(451; SSE-NEXT:    [[TMP1:%.*]] = load <16 x i8>, ptr @src8, align 1452; SSE-NEXT:    [[TMP2:%.*]] = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> [[TMP1]], i1 false)453; SSE-NEXT:    store <16 x i8> [[TMP2]], ptr @dst8, align 1454; SSE-NEXT:    [[TMP3:%.*]] = load <16 x i8>, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 16), align 1455; SSE-NEXT:    [[TMP4:%.*]] = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> [[TMP3]], i1 false)456; SSE-NEXT:    store <16 x i8> [[TMP4]], ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 16), align 1457; SSE-NEXT:    ret void458;459; AVX-LABEL: @ctlz_32i8(460; AVX-NEXT:    [[TMP1:%.*]] = load <32 x i8>, ptr @src8, align 1461; AVX-NEXT:    [[TMP2:%.*]] = call <32 x i8> @llvm.ctlz.v32i8(<32 x i8> [[TMP1]], i1 false)462; AVX-NEXT:    store <32 x i8> [[TMP2]], ptr @dst8, align 1463; AVX-NEXT:    ret void464;465  %ld0  = load i8, ptr @src8, align 1466  %ld1  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  1), align 1467  %ld2  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  2), align 1468  %ld3  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  3), align 1469  %ld4  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  4), align 1470  %ld5  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  5), align 1471  %ld6  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  6), align 1472  %ld7  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  7), align 1473  %ld8  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  8), align 1474  %ld9  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  9), align 1475  %ld10 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 10), align 1476  %ld11 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 11), align 1477  %ld12 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 12), align 1478  %ld13 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 13), align 1479  %ld14 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 14), align 1480  %ld15 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 15), align 1481  %ld16 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 16), align 1482  %ld17 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 17), align 1483  %ld18 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 18), align 1484  %ld19 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 19), align 1485  %ld20 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 20), align 1486  %ld21 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 21), align 1487  %ld22 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 22), align 1488  %ld23 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 23), align 1489  %ld24 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 24), align 1490  %ld25 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 25), align 1491  %ld26 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 26), align 1492  %ld27 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 27), align 1493  %ld28 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 28), align 1494  %ld29 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 29), align 1495  %ld30 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 30), align 1496  %ld31 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 31), align 1497  %ctlz0  = call i8 @llvm.ctlz.i8(i8 %ld0, i1 0)498  %ctlz1  = call i8 @llvm.ctlz.i8(i8 %ld1, i1 0)499  %ctlz2  = call i8 @llvm.ctlz.i8(i8 %ld2, i1 0)500  %ctlz3  = call i8 @llvm.ctlz.i8(i8 %ld3, i1 0)501  %ctlz4  = call i8 @llvm.ctlz.i8(i8 %ld4, i1 0)502  %ctlz5  = call i8 @llvm.ctlz.i8(i8 %ld5, i1 0)503  %ctlz6  = call i8 @llvm.ctlz.i8(i8 %ld6, i1 0)504  %ctlz7  = call i8 @llvm.ctlz.i8(i8 %ld7, i1 0)505  %ctlz8  = call i8 @llvm.ctlz.i8(i8 %ld8, i1 0)506  %ctlz9  = call i8 @llvm.ctlz.i8(i8 %ld9, i1 0)507  %ctlz10 = call i8 @llvm.ctlz.i8(i8 %ld10, i1 0)508  %ctlz11 = call i8 @llvm.ctlz.i8(i8 %ld11, i1 0)509  %ctlz12 = call i8 @llvm.ctlz.i8(i8 %ld12, i1 0)510  %ctlz13 = call i8 @llvm.ctlz.i8(i8 %ld13, i1 0)511  %ctlz14 = call i8 @llvm.ctlz.i8(i8 %ld14, i1 0)512  %ctlz15 = call i8 @llvm.ctlz.i8(i8 %ld15, i1 0)513  %ctlz16 = call i8 @llvm.ctlz.i8(i8 %ld16, i1 0)514  %ctlz17 = call i8 @llvm.ctlz.i8(i8 %ld17, i1 0)515  %ctlz18 = call i8 @llvm.ctlz.i8(i8 %ld18, i1 0)516  %ctlz19 = call i8 @llvm.ctlz.i8(i8 %ld19, i1 0)517  %ctlz20 = call i8 @llvm.ctlz.i8(i8 %ld20, i1 0)518  %ctlz21 = call i8 @llvm.ctlz.i8(i8 %ld21, i1 0)519  %ctlz22 = call i8 @llvm.ctlz.i8(i8 %ld22, i1 0)520  %ctlz23 = call i8 @llvm.ctlz.i8(i8 %ld23, i1 0)521  %ctlz24 = call i8 @llvm.ctlz.i8(i8 %ld24, i1 0)522  %ctlz25 = call i8 @llvm.ctlz.i8(i8 %ld25, i1 0)523  %ctlz26 = call i8 @llvm.ctlz.i8(i8 %ld26, i1 0)524  %ctlz27 = call i8 @llvm.ctlz.i8(i8 %ld27, i1 0)525  %ctlz28 = call i8 @llvm.ctlz.i8(i8 %ld28, i1 0)526  %ctlz29 = call i8 @llvm.ctlz.i8(i8 %ld29, i1 0)527  %ctlz30 = call i8 @llvm.ctlz.i8(i8 %ld30, i1 0)528  %ctlz31 = call i8 @llvm.ctlz.i8(i8 %ld31, i1 0)529  store i8 %ctlz0 , ptr @dst8, align 1530  store i8 %ctlz1 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  1), align 1531  store i8 %ctlz2 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  2), align 1532  store i8 %ctlz3 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  3), align 1533  store i8 %ctlz4 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  4), align 1534  store i8 %ctlz5 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  5), align 1535  store i8 %ctlz6 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  6), align 1536  store i8 %ctlz7 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  7), align 1537  store i8 %ctlz8 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  8), align 1538  store i8 %ctlz9 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  9), align 1539  store i8 %ctlz10, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 10), align 1540  store i8 %ctlz11, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 11), align 1541  store i8 %ctlz12, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 12), align 1542  store i8 %ctlz13, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 13), align 1543  store i8 %ctlz14, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 14), align 1544  store i8 %ctlz15, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 15), align 1545  store i8 %ctlz16, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 16), align 1546  store i8 %ctlz17, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 17), align 1547  store i8 %ctlz18, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 18), align 1548  store i8 %ctlz19, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 19), align 1549  store i8 %ctlz20, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 20), align 1550  store i8 %ctlz21, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 21), align 1551  store i8 %ctlz22, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 22), align 1552  store i8 %ctlz23, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 23), align 1553  store i8 %ctlz24, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 24), align 1554  store i8 %ctlz25, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 25), align 1555  store i8 %ctlz26, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 26), align 1556  store i8 %ctlz27, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 27), align 1557  store i8 %ctlz28, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 28), align 1558  store i8 %ctlz29, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 29), align 1559  store i8 %ctlz30, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 30), align 1560  store i8 %ctlz31, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 31), align 1561  ret void562}563 564;565; CTLZ_ZERO_UNDEF566;567 568define void @ctlz_undef_2i64() #0 {569; SSE-LABEL: @ctlz_undef_2i64(570; SSE-NEXT:    [[LD0:%.*]] = load i64, ptr @src64, align 8571; SSE-NEXT:    [[LD1:%.*]] = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i32 0, i64 1), align 8572; SSE-NEXT:    [[CTLZ0:%.*]] = call i64 @llvm.ctlz.i64(i64 [[LD0]], i1 true)573; SSE-NEXT:    [[CTLZ1:%.*]] = call i64 @llvm.ctlz.i64(i64 [[LD1]], i1 true)574; SSE-NEXT:    store i64 [[CTLZ0]], ptr @dst64, align 8575; SSE-NEXT:    store i64 [[CTLZ1]], ptr getelementptr inbounds ([4 x i64], ptr @dst64, i32 0, i64 1), align 8576; SSE-NEXT:    ret void577;578; AVX1-LABEL: @ctlz_undef_2i64(579; AVX1-NEXT:    [[LD0:%.*]] = load i64, ptr @src64, align 8580; AVX1-NEXT:    [[LD1:%.*]] = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i32 0, i64 1), align 8581; AVX1-NEXT:    [[CTLZ0:%.*]] = call i64 @llvm.ctlz.i64(i64 [[LD0]], i1 true)582; AVX1-NEXT:    [[CTLZ1:%.*]] = call i64 @llvm.ctlz.i64(i64 [[LD1]], i1 true)583; AVX1-NEXT:    store i64 [[CTLZ0]], ptr @dst64, align 8584; AVX1-NEXT:    store i64 [[CTLZ1]], ptr getelementptr inbounds ([4 x i64], ptr @dst64, i32 0, i64 1), align 8585; AVX1-NEXT:    ret void586;587; AVX2-LABEL: @ctlz_undef_2i64(588; AVX2-NEXT:    [[LD0:%.*]] = load i64, ptr @src64, align 8589; AVX2-NEXT:    [[LD1:%.*]] = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i32 0, i64 1), align 8590; AVX2-NEXT:    [[CTLZ0:%.*]] = call i64 @llvm.ctlz.i64(i64 [[LD0]], i1 true)591; AVX2-NEXT:    [[CTLZ1:%.*]] = call i64 @llvm.ctlz.i64(i64 [[LD1]], i1 true)592; AVX2-NEXT:    store i64 [[CTLZ0]], ptr @dst64, align 8593; AVX2-NEXT:    store i64 [[CTLZ1]], ptr getelementptr inbounds ([4 x i64], ptr @dst64, i32 0, i64 1), align 8594; AVX2-NEXT:    ret void595;596; AVX512-LABEL: @ctlz_undef_2i64(597; AVX512-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr @src64, align 8598; AVX512-NEXT:    [[TMP2:%.*]] = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> [[TMP1]], i1 true)599; AVX512-NEXT:    store <2 x i64> [[TMP2]], ptr @dst64, align 8600; AVX512-NEXT:    ret void601;602  %ld0 = load i64, ptr @src64, align 8603  %ld1 = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i32 0, i64 1), align 8604  %ctlz0 = call i64 @llvm.ctlz.i64(i64 %ld0, i1 -1)605  %ctlz1 = call i64 @llvm.ctlz.i64(i64 %ld1, i1 -1)606  store i64 %ctlz0, ptr @dst64, align 8607  store i64 %ctlz1, ptr getelementptr inbounds ([4 x i64], ptr @dst64, i32 0, i64 1), align 8608  ret void609}610 611define void @ctlz_undef_4i64() #0 {612; SSE-LABEL: @ctlz_undef_4i64(613; SSE-NEXT:    [[LD0:%.*]] = load i64, ptr @src64, align 4614; SSE-NEXT:    [[LD1:%.*]] = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i64 0, i64 1), align 4615; SSE-NEXT:    [[LD2:%.*]] = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i64 0, i64 2), align 4616; SSE-NEXT:    [[LD3:%.*]] = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i64 0, i64 3), align 4617; SSE-NEXT:    [[CTLZ0:%.*]] = call i64 @llvm.ctlz.i64(i64 [[LD0]], i1 true)618; SSE-NEXT:    [[CTLZ1:%.*]] = call i64 @llvm.ctlz.i64(i64 [[LD1]], i1 true)619; SSE-NEXT:    [[CTLZ2:%.*]] = call i64 @llvm.ctlz.i64(i64 [[LD2]], i1 true)620; SSE-NEXT:    [[CTLZ3:%.*]] = call i64 @llvm.ctlz.i64(i64 [[LD3]], i1 true)621; SSE-NEXT:    store i64 [[CTLZ0]], ptr @dst64, align 4622; SSE-NEXT:    store i64 [[CTLZ1]], ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 1), align 4623; SSE-NEXT:    store i64 [[CTLZ2]], ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 2), align 4624; SSE-NEXT:    store i64 [[CTLZ3]], ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 3), align 4625; SSE-NEXT:    ret void626;627; AVX1-LABEL: @ctlz_undef_4i64(628; AVX1-NEXT:    [[LD0:%.*]] = load i64, ptr @src64, align 4629; AVX1-NEXT:    [[LD1:%.*]] = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i64 0, i64 1), align 4630; AVX1-NEXT:    [[LD2:%.*]] = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i64 0, i64 2), align 4631; AVX1-NEXT:    [[LD3:%.*]] = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i64 0, i64 3), align 4632; AVX1-NEXT:    [[CTLZ0:%.*]] = call i64 @llvm.ctlz.i64(i64 [[LD0]], i1 true)633; AVX1-NEXT:    [[CTLZ1:%.*]] = call i64 @llvm.ctlz.i64(i64 [[LD1]], i1 true)634; AVX1-NEXT:    [[CTLZ2:%.*]] = call i64 @llvm.ctlz.i64(i64 [[LD2]], i1 true)635; AVX1-NEXT:    [[CTLZ3:%.*]] = call i64 @llvm.ctlz.i64(i64 [[LD3]], i1 true)636; AVX1-NEXT:    store i64 [[CTLZ0]], ptr @dst64, align 4637; AVX1-NEXT:    store i64 [[CTLZ1]], ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 1), align 4638; AVX1-NEXT:    store i64 [[CTLZ2]], ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 2), align 4639; AVX1-NEXT:    store i64 [[CTLZ3]], ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 3), align 4640; AVX1-NEXT:    ret void641;642; AVX2-LABEL: @ctlz_undef_4i64(643; AVX2-NEXT:    [[LD0:%.*]] = load i64, ptr @src64, align 4644; AVX2-NEXT:    [[LD1:%.*]] = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i64 0, i64 1), align 4645; AVX2-NEXT:    [[LD2:%.*]] = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i64 0, i64 2), align 4646; AVX2-NEXT:    [[LD3:%.*]] = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i64 0, i64 3), align 4647; AVX2-NEXT:    [[CTLZ0:%.*]] = call i64 @llvm.ctlz.i64(i64 [[LD0]], i1 true)648; AVX2-NEXT:    [[CTLZ1:%.*]] = call i64 @llvm.ctlz.i64(i64 [[LD1]], i1 true)649; AVX2-NEXT:    [[CTLZ2:%.*]] = call i64 @llvm.ctlz.i64(i64 [[LD2]], i1 true)650; AVX2-NEXT:    [[CTLZ3:%.*]] = call i64 @llvm.ctlz.i64(i64 [[LD3]], i1 true)651; AVX2-NEXT:    store i64 [[CTLZ0]], ptr @dst64, align 4652; AVX2-NEXT:    store i64 [[CTLZ1]], ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 1), align 4653; AVX2-NEXT:    store i64 [[CTLZ2]], ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 2), align 4654; AVX2-NEXT:    store i64 [[CTLZ3]], ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 3), align 4655; AVX2-NEXT:    ret void656;657; AVX512-LABEL: @ctlz_undef_4i64(658; AVX512-NEXT:    [[TMP1:%.*]] = load <4 x i64>, ptr @src64, align 4659; AVX512-NEXT:    [[TMP2:%.*]] = call <4 x i64> @llvm.ctlz.v4i64(<4 x i64> [[TMP1]], i1 true)660; AVX512-NEXT:    store <4 x i64> [[TMP2]], ptr @dst64, align 4661; AVX512-NEXT:    ret void662;663  %ld0 = load i64, ptr @src64, align 4664  %ld1 = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i64 0, i64 1), align 4665  %ld2 = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i64 0, i64 2), align 4666  %ld3 = load i64, ptr getelementptr inbounds ([4 x i64], ptr @src64, i64 0, i64 3), align 4667  %ctlz0 = call i64 @llvm.ctlz.i64(i64 %ld0, i1 -1)668  %ctlz1 = call i64 @llvm.ctlz.i64(i64 %ld1, i1 -1)669  %ctlz2 = call i64 @llvm.ctlz.i64(i64 %ld2, i1 -1)670  %ctlz3 = call i64 @llvm.ctlz.i64(i64 %ld3, i1 -1)671  store i64 %ctlz0, ptr @dst64, align 4672  store i64 %ctlz1, ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 1), align 4673  store i64 %ctlz2, ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 2), align 4674  store i64 %ctlz3, ptr getelementptr inbounds ([4 x i64], ptr @dst64, i64 0, i64 3), align 4675  ret void676}677 678define void @ctlz_undef_4i32() #0 {679; SSE-LABEL: @ctlz_undef_4i32(680; SSE-NEXT:    [[LD0:%.*]] = load i32, ptr @src32, align 4681; SSE-NEXT:    [[LD1:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 1), align 4682; SSE-NEXT:    [[LD2:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 2), align 4683; SSE-NEXT:    [[LD3:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 3), align 4684; SSE-NEXT:    [[CTLZ0:%.*]] = call i32 @llvm.ctlz.i32(i32 [[LD0]], i1 true)685; SSE-NEXT:    [[CTLZ1:%.*]] = call i32 @llvm.ctlz.i32(i32 [[LD1]], i1 true)686; SSE-NEXT:    [[CTLZ2:%.*]] = call i32 @llvm.ctlz.i32(i32 [[LD2]], i1 true)687; SSE-NEXT:    [[CTLZ3:%.*]] = call i32 @llvm.ctlz.i32(i32 [[LD3]], i1 true)688; SSE-NEXT:    store i32 [[CTLZ0]], ptr @dst32, align 4689; SSE-NEXT:    store i32 [[CTLZ1]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 1), align 4690; SSE-NEXT:    store i32 [[CTLZ2]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 2), align 4691; SSE-NEXT:    store i32 [[CTLZ3]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 3), align 4692; SSE-NEXT:    ret void693;694; AVX1-LABEL: @ctlz_undef_4i32(695; AVX1-NEXT:    [[LD0:%.*]] = load i32, ptr @src32, align 4696; AVX1-NEXT:    [[LD1:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 1), align 4697; AVX1-NEXT:    [[LD2:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 2), align 4698; AVX1-NEXT:    [[LD3:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 3), align 4699; AVX1-NEXT:    [[CTLZ0:%.*]] = call i32 @llvm.ctlz.i32(i32 [[LD0]], i1 true)700; AVX1-NEXT:    [[CTLZ1:%.*]] = call i32 @llvm.ctlz.i32(i32 [[LD1]], i1 true)701; AVX1-NEXT:    [[CTLZ2:%.*]] = call i32 @llvm.ctlz.i32(i32 [[LD2]], i1 true)702; AVX1-NEXT:    [[CTLZ3:%.*]] = call i32 @llvm.ctlz.i32(i32 [[LD3]], i1 true)703; AVX1-NEXT:    store i32 [[CTLZ0]], ptr @dst32, align 4704; AVX1-NEXT:    store i32 [[CTLZ1]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 1), align 4705; AVX1-NEXT:    store i32 [[CTLZ2]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 2), align 4706; AVX1-NEXT:    store i32 [[CTLZ3]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 3), align 4707; AVX1-NEXT:    ret void708;709; AVX2-LABEL: @ctlz_undef_4i32(710; AVX2-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr @src32, align 4711; AVX2-NEXT:    [[TMP2:%.*]] = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> [[TMP1]], i1 true)712; AVX2-NEXT:    store <4 x i32> [[TMP2]], ptr @dst32, align 4713; AVX2-NEXT:    ret void714;715; AVX512-LABEL: @ctlz_undef_4i32(716; AVX512-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr @src32, align 4717; AVX512-NEXT:    [[TMP2:%.*]] = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> [[TMP1]], i1 true)718; AVX512-NEXT:    store <4 x i32> [[TMP2]], ptr @dst32, align 4719; AVX512-NEXT:    ret void720;721  %ld0 = load i32, ptr @src32, align 4722  %ld1 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 1), align 4723  %ld2 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 2), align 4724  %ld3 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 3), align 4725  %ctlz0 = call i32 @llvm.ctlz.i32(i32 %ld0, i1 -1)726  %ctlz1 = call i32 @llvm.ctlz.i32(i32 %ld1, i1 -1)727  %ctlz2 = call i32 @llvm.ctlz.i32(i32 %ld2, i1 -1)728  %ctlz3 = call i32 @llvm.ctlz.i32(i32 %ld3, i1 -1)729  store i32 %ctlz0, ptr @dst32, align 4730  store i32 %ctlz1, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 1), align 4731  store i32 %ctlz2, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 2), align 4732  store i32 %ctlz3, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 3), align 4733  ret void734}735 736define void @ctlz_undef_8i32() #0 {737; SSE-LABEL: @ctlz_undef_8i32(738; SSE-NEXT:    [[LD0:%.*]] = load i32, ptr @src32, align 2739; SSE-NEXT:    [[LD1:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 1), align 2740; SSE-NEXT:    [[LD2:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 2), align 2741; SSE-NEXT:    [[LD3:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 3), align 2742; SSE-NEXT:    [[LD4:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 4), align 2743; SSE-NEXT:    [[LD5:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 5), align 2744; SSE-NEXT:    [[LD6:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 6), align 2745; SSE-NEXT:    [[LD7:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 7), align 2746; SSE-NEXT:    [[CTLZ0:%.*]] = call i32 @llvm.ctlz.i32(i32 [[LD0]], i1 true)747; SSE-NEXT:    [[CTLZ1:%.*]] = call i32 @llvm.ctlz.i32(i32 [[LD1]], i1 true)748; SSE-NEXT:    [[CTLZ2:%.*]] = call i32 @llvm.ctlz.i32(i32 [[LD2]], i1 true)749; SSE-NEXT:    [[CTLZ3:%.*]] = call i32 @llvm.ctlz.i32(i32 [[LD3]], i1 true)750; SSE-NEXT:    [[CTLZ4:%.*]] = call i32 @llvm.ctlz.i32(i32 [[LD4]], i1 true)751; SSE-NEXT:    [[CTLZ5:%.*]] = call i32 @llvm.ctlz.i32(i32 [[LD5]], i1 true)752; SSE-NEXT:    [[CTLZ6:%.*]] = call i32 @llvm.ctlz.i32(i32 [[LD6]], i1 true)753; SSE-NEXT:    [[CTLZ7:%.*]] = call i32 @llvm.ctlz.i32(i32 [[LD7]], i1 true)754; SSE-NEXT:    store i32 [[CTLZ0]], ptr @dst32, align 2755; SSE-NEXT:    store i32 [[CTLZ1]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 1), align 2756; SSE-NEXT:    store i32 [[CTLZ2]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 2), align 2757; SSE-NEXT:    store i32 [[CTLZ3]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 3), align 2758; SSE-NEXT:    store i32 [[CTLZ4]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 4), align 2759; SSE-NEXT:    store i32 [[CTLZ5]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 5), align 2760; SSE-NEXT:    store i32 [[CTLZ6]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 6), align 2761; SSE-NEXT:    store i32 [[CTLZ7]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 7), align 2762; SSE-NEXT:    ret void763;764; AVX1-LABEL: @ctlz_undef_8i32(765; AVX1-NEXT:    [[LD0:%.*]] = load i32, ptr @src32, align 2766; AVX1-NEXT:    [[LD1:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 1), align 2767; AVX1-NEXT:    [[LD2:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 2), align 2768; AVX1-NEXT:    [[LD3:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 3), align 2769; AVX1-NEXT:    [[LD4:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 4), align 2770; AVX1-NEXT:    [[LD5:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 5), align 2771; AVX1-NEXT:    [[LD6:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 6), align 2772; AVX1-NEXT:    [[LD7:%.*]] = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 7), align 2773; AVX1-NEXT:    [[CTLZ0:%.*]] = call i32 @llvm.ctlz.i32(i32 [[LD0]], i1 true)774; AVX1-NEXT:    [[CTLZ1:%.*]] = call i32 @llvm.ctlz.i32(i32 [[LD1]], i1 true)775; AVX1-NEXT:    [[CTLZ2:%.*]] = call i32 @llvm.ctlz.i32(i32 [[LD2]], i1 true)776; AVX1-NEXT:    [[CTLZ3:%.*]] = call i32 @llvm.ctlz.i32(i32 [[LD3]], i1 true)777; AVX1-NEXT:    [[CTLZ4:%.*]] = call i32 @llvm.ctlz.i32(i32 [[LD4]], i1 true)778; AVX1-NEXT:    [[CTLZ5:%.*]] = call i32 @llvm.ctlz.i32(i32 [[LD5]], i1 true)779; AVX1-NEXT:    [[CTLZ6:%.*]] = call i32 @llvm.ctlz.i32(i32 [[LD6]], i1 true)780; AVX1-NEXT:    [[CTLZ7:%.*]] = call i32 @llvm.ctlz.i32(i32 [[LD7]], i1 true)781; AVX1-NEXT:    store i32 [[CTLZ0]], ptr @dst32, align 2782; AVX1-NEXT:    store i32 [[CTLZ1]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 1), align 2783; AVX1-NEXT:    store i32 [[CTLZ2]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 2), align 2784; AVX1-NEXT:    store i32 [[CTLZ3]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 3), align 2785; AVX1-NEXT:    store i32 [[CTLZ4]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 4), align 2786; AVX1-NEXT:    store i32 [[CTLZ5]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 5), align 2787; AVX1-NEXT:    store i32 [[CTLZ6]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 6), align 2788; AVX1-NEXT:    store i32 [[CTLZ7]], ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 7), align 2789; AVX1-NEXT:    ret void790;791; AVX2-LABEL: @ctlz_undef_8i32(792; AVX2-NEXT:    [[TMP1:%.*]] = load <8 x i32>, ptr @src32, align 2793; AVX2-NEXT:    [[TMP2:%.*]] = call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> [[TMP1]], i1 true)794; AVX2-NEXT:    store <8 x i32> [[TMP2]], ptr @dst32, align 2795; AVX2-NEXT:    ret void796;797; AVX512-LABEL: @ctlz_undef_8i32(798; AVX512-NEXT:    [[TMP1:%.*]] = load <8 x i32>, ptr @src32, align 2799; AVX512-NEXT:    [[TMP2:%.*]] = call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> [[TMP1]], i1 true)800; AVX512-NEXT:    store <8 x i32> [[TMP2]], ptr @dst32, align 2801; AVX512-NEXT:    ret void802;803  %ld0 = load i32, ptr @src32, align 2804  %ld1 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 1), align 2805  %ld2 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 2), align 2806  %ld3 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 3), align 2807  %ld4 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 4), align 2808  %ld5 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 5), align 2809  %ld6 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 6), align 2810  %ld7 = load i32, ptr getelementptr inbounds ([8 x i32], ptr @src32, i32 0, i64 7), align 2811  %ctlz0 = call i32 @llvm.ctlz.i32(i32 %ld0, i1 -1)812  %ctlz1 = call i32 @llvm.ctlz.i32(i32 %ld1, i1 -1)813  %ctlz2 = call i32 @llvm.ctlz.i32(i32 %ld2, i1 -1)814  %ctlz3 = call i32 @llvm.ctlz.i32(i32 %ld3, i1 -1)815  %ctlz4 = call i32 @llvm.ctlz.i32(i32 %ld4, i1 -1)816  %ctlz5 = call i32 @llvm.ctlz.i32(i32 %ld5, i1 -1)817  %ctlz6 = call i32 @llvm.ctlz.i32(i32 %ld6, i1 -1)818  %ctlz7 = call i32 @llvm.ctlz.i32(i32 %ld7, i1 -1)819  store i32 %ctlz0, ptr @dst32, align 2820  store i32 %ctlz1, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 1), align 2821  store i32 %ctlz2, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 2), align 2822  store i32 %ctlz3, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 3), align 2823  store i32 %ctlz4, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 4), align 2824  store i32 %ctlz5, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 5), align 2825  store i32 %ctlz6, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 6), align 2826  store i32 %ctlz7, ptr getelementptr inbounds ([8 x i32], ptr @dst32, i32 0, i64 7), align 2827  ret void828}829 830define void @ctlz_undef_8i16() #0 {831; CHECK-LABEL: @ctlz_undef_8i16(832; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i16>, ptr @src16, align 2833; CHECK-NEXT:    [[TMP2:%.*]] = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> [[TMP1]], i1 true)834; CHECK-NEXT:    store <8 x i16> [[TMP2]], ptr @dst16, align 2835; CHECK-NEXT:    ret void836;837  %ld0 = load i16, ptr @src16, align 2838  %ld1 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 1), align 2839  %ld2 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 2), align 2840  %ld3 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 3), align 2841  %ld4 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 4), align 2842  %ld5 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 5), align 2843  %ld6 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 6), align 2844  %ld7 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 7), align 2845  %ctlz0 = call i16 @llvm.ctlz.i16(i16 %ld0, i1 -1)846  %ctlz1 = call i16 @llvm.ctlz.i16(i16 %ld1, i1 -1)847  %ctlz2 = call i16 @llvm.ctlz.i16(i16 %ld2, i1 -1)848  %ctlz3 = call i16 @llvm.ctlz.i16(i16 %ld3, i1 -1)849  %ctlz4 = call i16 @llvm.ctlz.i16(i16 %ld4, i1 -1)850  %ctlz5 = call i16 @llvm.ctlz.i16(i16 %ld5, i1 -1)851  %ctlz6 = call i16 @llvm.ctlz.i16(i16 %ld6, i1 -1)852  %ctlz7 = call i16 @llvm.ctlz.i16(i16 %ld7, i1 -1)853  store i16 %ctlz0, ptr @dst16, align 2854  store i16 %ctlz1, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 1), align 2855  store i16 %ctlz2, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 2), align 2856  store i16 %ctlz3, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 3), align 2857  store i16 %ctlz4, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 4), align 2858  store i16 %ctlz5, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 5), align 2859  store i16 %ctlz6, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 6), align 2860  store i16 %ctlz7, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 7), align 2861  ret void862}863 864define void @ctlz_undef_16i16() #0 {865; SSE-LABEL: @ctlz_undef_16i16(866; SSE-NEXT:    [[TMP1:%.*]] = load <8 x i16>, ptr @src16, align 2867; SSE-NEXT:    [[TMP2:%.*]] = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> [[TMP1]], i1 true)868; SSE-NEXT:    store <8 x i16> [[TMP2]], ptr @dst16, align 2869; SSE-NEXT:    [[TMP3:%.*]] = load <8 x i16>, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 8), align 2870; SSE-NEXT:    [[TMP4:%.*]] = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> [[TMP3]], i1 true)871; SSE-NEXT:    store <8 x i16> [[TMP4]], ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 8), align 2872; SSE-NEXT:    ret void873;874; AVX-LABEL: @ctlz_undef_16i16(875; AVX-NEXT:    [[TMP1:%.*]] = load <16 x i16>, ptr @src16, align 2876; AVX-NEXT:    [[TMP2:%.*]] = call <16 x i16> @llvm.ctlz.v16i16(<16 x i16> [[TMP1]], i1 true)877; AVX-NEXT:    store <16 x i16> [[TMP2]], ptr @dst16, align 2878; AVX-NEXT:    ret void879;880  %ld0  = load i16, ptr @src16, align 2881  %ld1  = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64  1), align 2882  %ld2  = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64  2), align 2883  %ld3  = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64  3), align 2884  %ld4  = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64  4), align 2885  %ld5  = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64  5), align 2886  %ld6  = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64  6), align 2887  %ld7  = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64  7), align 2888  %ld8  = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64  8), align 2889  %ld9  = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64  9), align 2890  %ld10 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 10), align 2891  %ld11 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 11), align 2892  %ld12 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 12), align 2893  %ld13 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 13), align 2894  %ld14 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 14), align 2895  %ld15 = load i16, ptr getelementptr inbounds ([16 x i16], ptr @src16, i16 0, i64 15), align 2896  %ctlz0  = call i16 @llvm.ctlz.i16(i16 %ld0, i1 -1)897  %ctlz1  = call i16 @llvm.ctlz.i16(i16 %ld1, i1 -1)898  %ctlz2  = call i16 @llvm.ctlz.i16(i16 %ld2, i1 -1)899  %ctlz3  = call i16 @llvm.ctlz.i16(i16 %ld3, i1 -1)900  %ctlz4  = call i16 @llvm.ctlz.i16(i16 %ld4, i1 -1)901  %ctlz5  = call i16 @llvm.ctlz.i16(i16 %ld5, i1 -1)902  %ctlz6  = call i16 @llvm.ctlz.i16(i16 %ld6, i1 -1)903  %ctlz7  = call i16 @llvm.ctlz.i16(i16 %ld7, i1 -1)904  %ctlz8  = call i16 @llvm.ctlz.i16(i16 %ld8, i1 -1)905  %ctlz9  = call i16 @llvm.ctlz.i16(i16 %ld9, i1 -1)906  %ctlz10 = call i16 @llvm.ctlz.i16(i16 %ld10, i1 -1)907  %ctlz11 = call i16 @llvm.ctlz.i16(i16 %ld11, i1 -1)908  %ctlz12 = call i16 @llvm.ctlz.i16(i16 %ld12, i1 -1)909  %ctlz13 = call i16 @llvm.ctlz.i16(i16 %ld13, i1 -1)910  %ctlz14 = call i16 @llvm.ctlz.i16(i16 %ld14, i1 -1)911  %ctlz15 = call i16 @llvm.ctlz.i16(i16 %ld15, i1 -1)912  store i16 %ctlz0 , ptr @dst16, align 2913  store i16 %ctlz1 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64  1), align 2914  store i16 %ctlz2 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64  2), align 2915  store i16 %ctlz3 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64  3), align 2916  store i16 %ctlz4 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64  4), align 2917  store i16 %ctlz5 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64  5), align 2918  store i16 %ctlz6 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64  6), align 2919  store i16 %ctlz7 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64  7), align 2920  store i16 %ctlz8 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64  8), align 2921  store i16 %ctlz9 , ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64  9), align 2922  store i16 %ctlz10, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 10), align 2923  store i16 %ctlz11, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 11), align 2924  store i16 %ctlz12, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 12), align 2925  store i16 %ctlz13, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 13), align 2926  store i16 %ctlz14, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 14), align 2927  store i16 %ctlz15, ptr getelementptr inbounds ([16 x i16], ptr @dst16, i16 0, i64 15), align 2928  ret void929}930 931define void @ctlz_undef_16i8() #0 {932; CHECK-LABEL: @ctlz_undef_16i8(933; CHECK-NEXT:    [[TMP1:%.*]] = load <16 x i8>, ptr @src8, align 1934; CHECK-NEXT:    [[TMP2:%.*]] = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> [[TMP1]], i1 true)935; CHECK-NEXT:    store <16 x i8> [[TMP2]], ptr @dst8, align 1936; CHECK-NEXT:    ret void937;938  %ld0  = load i8, ptr @src8, align 1939  %ld1  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  1), align 1940  %ld2  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  2), align 1941  %ld3  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  3), align 1942  %ld4  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  4), align 1943  %ld5  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  5), align 1944  %ld6  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  6), align 1945  %ld7  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  7), align 1946  %ld8  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  8), align 1947  %ld9  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  9), align 1948  %ld10 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 10), align 1949  %ld11 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 11), align 1950  %ld12 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 12), align 1951  %ld13 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 13), align 1952  %ld14 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 14), align 1953  %ld15 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 15), align 1954  %ctlz0  = call i8 @llvm.ctlz.i8(i8 %ld0, i1 -1)955  %ctlz1  = call i8 @llvm.ctlz.i8(i8 %ld1, i1 -1)956  %ctlz2  = call i8 @llvm.ctlz.i8(i8 %ld2, i1 -1)957  %ctlz3  = call i8 @llvm.ctlz.i8(i8 %ld3, i1 -1)958  %ctlz4  = call i8 @llvm.ctlz.i8(i8 %ld4, i1 -1)959  %ctlz5  = call i8 @llvm.ctlz.i8(i8 %ld5, i1 -1)960  %ctlz6  = call i8 @llvm.ctlz.i8(i8 %ld6, i1 -1)961  %ctlz7  = call i8 @llvm.ctlz.i8(i8 %ld7, i1 -1)962  %ctlz8  = call i8 @llvm.ctlz.i8(i8 %ld8, i1 -1)963  %ctlz9  = call i8 @llvm.ctlz.i8(i8 %ld9, i1 -1)964  %ctlz10 = call i8 @llvm.ctlz.i8(i8 %ld10, i1 -1)965  %ctlz11 = call i8 @llvm.ctlz.i8(i8 %ld11, i1 -1)966  %ctlz12 = call i8 @llvm.ctlz.i8(i8 %ld12, i1 -1)967  %ctlz13 = call i8 @llvm.ctlz.i8(i8 %ld13, i1 -1)968  %ctlz14 = call i8 @llvm.ctlz.i8(i8 %ld14, i1 -1)969  %ctlz15 = call i8 @llvm.ctlz.i8(i8 %ld15, i1 -1)970  store i8 %ctlz0 , ptr @dst8, align 1971  store i8 %ctlz1 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  1), align 1972  store i8 %ctlz2 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  2), align 1973  store i8 %ctlz3 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  3), align 1974  store i8 %ctlz4 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  4), align 1975  store i8 %ctlz5 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  5), align 1976  store i8 %ctlz6 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  6), align 1977  store i8 %ctlz7 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  7), align 1978  store i8 %ctlz8 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  8), align 1979  store i8 %ctlz9 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  9), align 1980  store i8 %ctlz10, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 10), align 1981  store i8 %ctlz11, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 11), align 1982  store i8 %ctlz12, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 12), align 1983  store i8 %ctlz13, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 13), align 1984  store i8 %ctlz14, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 14), align 1985  store i8 %ctlz15, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 15), align 1986  ret void987}988 989define void @ctlz_undef_32i8() #0 {990; SSE-LABEL: @ctlz_undef_32i8(991; SSE-NEXT:    [[TMP1:%.*]] = load <16 x i8>, ptr @src8, align 1992; SSE-NEXT:    [[TMP2:%.*]] = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> [[TMP1]], i1 true)993; SSE-NEXT:    store <16 x i8> [[TMP2]], ptr @dst8, align 1994; SSE-NEXT:    [[TMP3:%.*]] = load <16 x i8>, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 16), align 1995; SSE-NEXT:    [[TMP4:%.*]] = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> [[TMP3]], i1 true)996; SSE-NEXT:    store <16 x i8> [[TMP4]], ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 16), align 1997; SSE-NEXT:    ret void998;999; AVX-LABEL: @ctlz_undef_32i8(1000; AVX-NEXT:    [[TMP1:%.*]] = load <32 x i8>, ptr @src8, align 11001; AVX-NEXT:    [[TMP2:%.*]] = call <32 x i8> @llvm.ctlz.v32i8(<32 x i8> [[TMP1]], i1 true)1002; AVX-NEXT:    store <32 x i8> [[TMP2]], ptr @dst8, align 11003; AVX-NEXT:    ret void1004;1005  %ld0  = load i8, ptr @src8, align 11006  %ld1  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  1), align 11007  %ld2  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  2), align 11008  %ld3  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  3), align 11009  %ld4  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  4), align 11010  %ld5  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  5), align 11011  %ld6  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  6), align 11012  %ld7  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  7), align 11013  %ld8  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  8), align 11014  %ld9  = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64  9), align 11015  %ld10 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 10), align 11016  %ld11 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 11), align 11017  %ld12 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 12), align 11018  %ld13 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 13), align 11019  %ld14 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 14), align 11020  %ld15 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 15), align 11021  %ld16 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 16), align 11022  %ld17 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 17), align 11023  %ld18 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 18), align 11024  %ld19 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 19), align 11025  %ld20 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 20), align 11026  %ld21 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 21), align 11027  %ld22 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 22), align 11028  %ld23 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 23), align 11029  %ld24 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 24), align 11030  %ld25 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 25), align 11031  %ld26 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 26), align 11032  %ld27 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 27), align 11033  %ld28 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 28), align 11034  %ld29 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 29), align 11035  %ld30 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 30), align 11036  %ld31 = load i8, ptr getelementptr inbounds ([32 x i8], ptr @src8, i8 0, i64 31), align 11037  %ctlz0  = call i8 @llvm.ctlz.i8(i8 %ld0, i1 -1)1038  %ctlz1  = call i8 @llvm.ctlz.i8(i8 %ld1, i1 -1)1039  %ctlz2  = call i8 @llvm.ctlz.i8(i8 %ld2, i1 -1)1040  %ctlz3  = call i8 @llvm.ctlz.i8(i8 %ld3, i1 -1)1041  %ctlz4  = call i8 @llvm.ctlz.i8(i8 %ld4, i1 -1)1042  %ctlz5  = call i8 @llvm.ctlz.i8(i8 %ld5, i1 -1)1043  %ctlz6  = call i8 @llvm.ctlz.i8(i8 %ld6, i1 -1)1044  %ctlz7  = call i8 @llvm.ctlz.i8(i8 %ld7, i1 -1)1045  %ctlz8  = call i8 @llvm.ctlz.i8(i8 %ld8, i1 -1)1046  %ctlz9  = call i8 @llvm.ctlz.i8(i8 %ld9, i1 -1)1047  %ctlz10 = call i8 @llvm.ctlz.i8(i8 %ld10, i1 -1)1048  %ctlz11 = call i8 @llvm.ctlz.i8(i8 %ld11, i1 -1)1049  %ctlz12 = call i8 @llvm.ctlz.i8(i8 %ld12, i1 -1)1050  %ctlz13 = call i8 @llvm.ctlz.i8(i8 %ld13, i1 -1)1051  %ctlz14 = call i8 @llvm.ctlz.i8(i8 %ld14, i1 -1)1052  %ctlz15 = call i8 @llvm.ctlz.i8(i8 %ld15, i1 -1)1053  %ctlz16 = call i8 @llvm.ctlz.i8(i8 %ld16, i1 -1)1054  %ctlz17 = call i8 @llvm.ctlz.i8(i8 %ld17, i1 -1)1055  %ctlz18 = call i8 @llvm.ctlz.i8(i8 %ld18, i1 -1)1056  %ctlz19 = call i8 @llvm.ctlz.i8(i8 %ld19, i1 -1)1057  %ctlz20 = call i8 @llvm.ctlz.i8(i8 %ld20, i1 -1)1058  %ctlz21 = call i8 @llvm.ctlz.i8(i8 %ld21, i1 -1)1059  %ctlz22 = call i8 @llvm.ctlz.i8(i8 %ld22, i1 -1)1060  %ctlz23 = call i8 @llvm.ctlz.i8(i8 %ld23, i1 -1)1061  %ctlz24 = call i8 @llvm.ctlz.i8(i8 %ld24, i1 -1)1062  %ctlz25 = call i8 @llvm.ctlz.i8(i8 %ld25, i1 -1)1063  %ctlz26 = call i8 @llvm.ctlz.i8(i8 %ld26, i1 -1)1064  %ctlz27 = call i8 @llvm.ctlz.i8(i8 %ld27, i1 -1)1065  %ctlz28 = call i8 @llvm.ctlz.i8(i8 %ld28, i1 -1)1066  %ctlz29 = call i8 @llvm.ctlz.i8(i8 %ld29, i1 -1)1067  %ctlz30 = call i8 @llvm.ctlz.i8(i8 %ld30, i1 -1)1068  %ctlz31 = call i8 @llvm.ctlz.i8(i8 %ld31, i1 -1)1069  store i8 %ctlz0 , ptr @dst8, align 11070  store i8 %ctlz1 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  1), align 11071  store i8 %ctlz2 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  2), align 11072  store i8 %ctlz3 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  3), align 11073  store i8 %ctlz4 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  4), align 11074  store i8 %ctlz5 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  5), align 11075  store i8 %ctlz6 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  6), align 11076  store i8 %ctlz7 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  7), align 11077  store i8 %ctlz8 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  8), align 11078  store i8 %ctlz9 , ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64  9), align 11079  store i8 %ctlz10, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 10), align 11080  store i8 %ctlz11, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 11), align 11081  store i8 %ctlz12, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 12), align 11082  store i8 %ctlz13, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 13), align 11083  store i8 %ctlz14, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 14), align 11084  store i8 %ctlz15, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 15), align 11085  store i8 %ctlz16, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 16), align 11086  store i8 %ctlz17, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 17), align 11087  store i8 %ctlz18, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 18), align 11088  store i8 %ctlz19, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 19), align 11089  store i8 %ctlz20, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 20), align 11090  store i8 %ctlz21, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 21), align 11091  store i8 %ctlz22, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 22), align 11092  store i8 %ctlz23, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 23), align 11093  store i8 %ctlz24, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 24), align 11094  store i8 %ctlz25, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 25), align 11095  store i8 %ctlz26, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 26), align 11096  store i8 %ctlz27, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 27), align 11097  store i8 %ctlz28, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 28), align 11098  store i8 %ctlz29, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 29), align 11099  store i8 %ctlz30, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 30), align 11100  store i8 %ctlz31, ptr getelementptr inbounds ([32 x i8], ptr @dst8, i8 0, i64 31), align 11101  ret void1102}1103 1104attributes #0 = { nounwind }1105;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:1106; SSE2: {{.*}}1107; SSE4: {{.*}}1108