1634 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=-sse2 | FileCheck %s --check-prefixes=ALL,SCALAR3; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+sse2 | FileCheck %s --check-prefixes=ALL,SSE,SSE2,SSE2-ONLY4; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+sse3 | FileCheck %s --check-prefixes=ALL,SSE,SSE2,SSE35; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+ssse3 | FileCheck %s --check-prefixes=ALL,SSE,SSSE3,SSSE3-ONLY6; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+sse4.1 | FileCheck %s --check-prefixes=ALL,SSE,SSSE3,SSE417; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+sse4.2 | FileCheck %s --check-prefixes=ALL,SSE,SSSE3,SSE428; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+avx | FileCheck %s --check-prefixes=ALL,AVX,AVX19; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+avx2 | FileCheck %s --check-prefixes=ALL,AVX,AVX210; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+avx512vl | FileCheck %s --check-prefixes=ALL,AVX512,AVX512F11; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+avx512vl,+avx512bw | FileCheck %s --check-prefixes=ALL,AVX512,AVX512BW12 13define void @vec16_i8(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {14; ALL-LABEL: vec16_i8:15; ALL: # %bb.0:16; ALL-NEXT: movzbl (%rdi), %eax17; ALL-NEXT: notb %al18; ALL-NEXT: movb %al, (%rsi)19; ALL-NEXT: movb %al, 1(%rsi)20; ALL-NEXT: retq21 %in.elt.not = load i8, ptr %in.elt.ptr, align 6422 %in.elt = xor i8 %in.elt.not, -123 %out.elt0.ptr = getelementptr i8, ptr %out.vec.ptr, i64 024 store i8 %in.elt, ptr %out.elt0.ptr, align 6425 %out.elt1.ptr = getelementptr i8, ptr %out.vec.ptr, i64 126 store i8 %in.elt, ptr %out.elt1.ptr, align 127 ret void28}29 30define void @vec32_i8(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {31; ALL-LABEL: vec32_i8:32; ALL: # %bb.0:33; ALL-NEXT: movzbl (%rdi), %eax34; ALL-NEXT: notb %al35; ALL-NEXT: movb %al, (%rsi)36; ALL-NEXT: movb %al, 1(%rsi)37; ALL-NEXT: movb %al, 2(%rsi)38; ALL-NEXT: movb %al, 3(%rsi)39; ALL-NEXT: retq40 %in.elt.not = load i8, ptr %in.elt.ptr, align 6441 %in.elt = xor i8 %in.elt.not, -142 %out.elt0.ptr = getelementptr i8, ptr %out.vec.ptr, i64 043 store i8 %in.elt, ptr %out.elt0.ptr, align 6444 %out.elt1.ptr = getelementptr i8, ptr %out.vec.ptr, i64 145 store i8 %in.elt, ptr %out.elt1.ptr, align 146 %out.elt2.ptr = getelementptr i8, ptr %out.vec.ptr, i64 247 store i8 %in.elt, ptr %out.elt2.ptr, align 248 %out.elt3.ptr = getelementptr i8, ptr %out.vec.ptr, i64 349 store i8 %in.elt, ptr %out.elt3.ptr, align 150 ret void51}52 53define void @vec32_i16(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {54; ALL-LABEL: vec32_i16:55; ALL: # %bb.0:56; ALL-NEXT: movl (%rdi), %eax57; ALL-NEXT: notl %eax58; ALL-NEXT: movw %ax, (%rsi)59; ALL-NEXT: movw %ax, 2(%rsi)60; ALL-NEXT: retq61 %in.elt.not = load i16, ptr %in.elt.ptr, align 6462 %in.elt = xor i16 %in.elt.not, -163 %out.elt0.ptr = getelementptr i16, ptr %out.vec.ptr, i64 064 store i16 %in.elt, ptr %out.elt0.ptr, align 6465 %out.elt1.ptr = getelementptr i16, ptr %out.vec.ptr, i64 166 store i16 %in.elt, ptr %out.elt1.ptr, align 267 ret void68}69 70define void @vec64_i8(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {71; ALL-LABEL: vec64_i8:72; ALL: # %bb.0:73; ALL-NEXT: movzbl (%rdi), %eax74; ALL-NEXT: notb %al75; ALL-NEXT: movb %al, (%rsi)76; ALL-NEXT: movb %al, 1(%rsi)77; ALL-NEXT: movb %al, 2(%rsi)78; ALL-NEXT: movb %al, 3(%rsi)79; ALL-NEXT: movb %al, 4(%rsi)80; ALL-NEXT: movb %al, 5(%rsi)81; ALL-NEXT: movb %al, 6(%rsi)82; ALL-NEXT: movb %al, 7(%rsi)83; ALL-NEXT: retq84 %in.elt.not = load i8, ptr %in.elt.ptr, align 6485 %in.elt = xor i8 %in.elt.not, -186 %out.elt0.ptr = getelementptr i8, ptr %out.vec.ptr, i64 087 store i8 %in.elt, ptr %out.elt0.ptr, align 6488 %out.elt1.ptr = getelementptr i8, ptr %out.vec.ptr, i64 189 store i8 %in.elt, ptr %out.elt1.ptr, align 190 %out.elt2.ptr = getelementptr i8, ptr %out.vec.ptr, i64 291 store i8 %in.elt, ptr %out.elt2.ptr, align 292 %out.elt3.ptr = getelementptr i8, ptr %out.vec.ptr, i64 393 store i8 %in.elt, ptr %out.elt3.ptr, align 194 %out.elt4.ptr = getelementptr i8, ptr %out.vec.ptr, i64 495 store i8 %in.elt, ptr %out.elt4.ptr, align 496 %out.elt5.ptr = getelementptr i8, ptr %out.vec.ptr, i64 597 store i8 %in.elt, ptr %out.elt5.ptr, align 198 %out.elt6.ptr = getelementptr i8, ptr %out.vec.ptr, i64 699 store i8 %in.elt, ptr %out.elt6.ptr, align 2100 %out.elt7.ptr = getelementptr i8, ptr %out.vec.ptr, i64 7101 store i8 %in.elt, ptr %out.elt7.ptr, align 1102 ret void103}104 105define void @vec64_i16(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {106; ALL-LABEL: vec64_i16:107; ALL: # %bb.0:108; ALL-NEXT: movl (%rdi), %eax109; ALL-NEXT: notl %eax110; ALL-NEXT: movw %ax, (%rsi)111; ALL-NEXT: movw %ax, 2(%rsi)112; ALL-NEXT: movw %ax, 4(%rsi)113; ALL-NEXT: movw %ax, 6(%rsi)114; ALL-NEXT: retq115 %in.elt.not = load i16, ptr %in.elt.ptr, align 64116 %in.elt = xor i16 %in.elt.not, -1117 %out.elt0.ptr = getelementptr i16, ptr %out.vec.ptr, i64 0118 store i16 %in.elt, ptr %out.elt0.ptr, align 64119 %out.elt1.ptr = getelementptr i16, ptr %out.vec.ptr, i64 1120 store i16 %in.elt, ptr %out.elt1.ptr, align 2121 %out.elt2.ptr = getelementptr i16, ptr %out.vec.ptr, i64 2122 store i16 %in.elt, ptr %out.elt2.ptr, align 4123 %out.elt3.ptr = getelementptr i16, ptr %out.vec.ptr, i64 3124 store i16 %in.elt, ptr %out.elt3.ptr, align 2125 ret void126}127 128define void @vec64_i32(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {129; ALL-LABEL: vec64_i32:130; ALL: # %bb.0:131; ALL-NEXT: movl (%rdi), %eax132; ALL-NEXT: notl %eax133; ALL-NEXT: movl %eax, (%rsi)134; ALL-NEXT: movl %eax, 4(%rsi)135; ALL-NEXT: retq136 %in.elt.not = load i32, ptr %in.elt.ptr, align 64137 %in.elt = xor i32 %in.elt.not, -1138 %out.elt0.ptr = getelementptr i32, ptr %out.vec.ptr, i64 0139 store i32 %in.elt, ptr %out.elt0.ptr, align 64140 %out.elt1.ptr = getelementptr i32, ptr %out.vec.ptr, i64 1141 store i32 %in.elt, ptr %out.elt1.ptr, align 4142 ret void143}144 145define void @vec64_float(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {146; ALL-LABEL: vec64_float:147; ALL: # %bb.0:148; ALL-NEXT: movl (%rdi), %eax149; ALL-NEXT: notl %eax150; ALL-NEXT: movl %eax, (%rsi)151; ALL-NEXT: movl %eax, 4(%rsi)152; ALL-NEXT: retq153 %in.elt.not = load i32, ptr %in.elt.ptr, align 64154 %in.elt.int = xor i32 %in.elt.not, -1155 %in.elt = bitcast i32 %in.elt.int to float156 %out.elt0.ptr = getelementptr float, ptr %out.vec.ptr, i64 0157 store float %in.elt, ptr %out.elt0.ptr, align 64158 %out.elt1.ptr = getelementptr float, ptr %out.vec.ptr, i64 1159 store float %in.elt, ptr %out.elt1.ptr, align 4160 ret void161}162 163define void @vec128_i8(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {164; ALL-LABEL: vec128_i8:165; ALL: # %bb.0:166; ALL-NEXT: movzbl (%rdi), %eax167; ALL-NEXT: notb %al168; ALL-NEXT: movb %al, (%rsi)169; ALL-NEXT: movb %al, 1(%rsi)170; ALL-NEXT: movb %al, 2(%rsi)171; ALL-NEXT: movb %al, 3(%rsi)172; ALL-NEXT: movb %al, 4(%rsi)173; ALL-NEXT: movb %al, 5(%rsi)174; ALL-NEXT: movb %al, 6(%rsi)175; ALL-NEXT: movb %al, 7(%rsi)176; ALL-NEXT: movb %al, 8(%rsi)177; ALL-NEXT: movb %al, 9(%rsi)178; ALL-NEXT: movb %al, 10(%rsi)179; ALL-NEXT: movb %al, 11(%rsi)180; ALL-NEXT: movb %al, 12(%rsi)181; ALL-NEXT: movb %al, 13(%rsi)182; ALL-NEXT: movb %al, 14(%rsi)183; ALL-NEXT: movb %al, 15(%rsi)184; ALL-NEXT: retq185 %in.elt.not = load i8, ptr %in.elt.ptr, align 64186 %in.elt = xor i8 %in.elt.not, -1187 %out.elt0.ptr = getelementptr i8, ptr %out.vec.ptr, i64 0188 store i8 %in.elt, ptr %out.elt0.ptr, align 64189 %out.elt1.ptr = getelementptr i8, ptr %out.vec.ptr, i64 1190 store i8 %in.elt, ptr %out.elt1.ptr, align 1191 %out.elt2.ptr = getelementptr i8, ptr %out.vec.ptr, i64 2192 store i8 %in.elt, ptr %out.elt2.ptr, align 2193 %out.elt3.ptr = getelementptr i8, ptr %out.vec.ptr, i64 3194 store i8 %in.elt, ptr %out.elt3.ptr, align 1195 %out.elt4.ptr = getelementptr i8, ptr %out.vec.ptr, i64 4196 store i8 %in.elt, ptr %out.elt4.ptr, align 4197 %out.elt5.ptr = getelementptr i8, ptr %out.vec.ptr, i64 5198 store i8 %in.elt, ptr %out.elt5.ptr, align 1199 %out.elt6.ptr = getelementptr i8, ptr %out.vec.ptr, i64 6200 store i8 %in.elt, ptr %out.elt6.ptr, align 2201 %out.elt7.ptr = getelementptr i8, ptr %out.vec.ptr, i64 7202 store i8 %in.elt, ptr %out.elt7.ptr, align 1203 %out.elt8.ptr = getelementptr i8, ptr %out.vec.ptr, i64 8204 store i8 %in.elt, ptr %out.elt8.ptr, align 8205 %out.elt9.ptr = getelementptr i8, ptr %out.vec.ptr, i64 9206 store i8 %in.elt, ptr %out.elt9.ptr, align 1207 %out.elt10.ptr = getelementptr i8, ptr %out.vec.ptr, i64 10208 store i8 %in.elt, ptr %out.elt10.ptr, align 2209 %out.elt11.ptr = getelementptr i8, ptr %out.vec.ptr, i64 11210 store i8 %in.elt, ptr %out.elt11.ptr, align 1211 %out.elt12.ptr = getelementptr i8, ptr %out.vec.ptr, i64 12212 store i8 %in.elt, ptr %out.elt12.ptr, align 4213 %out.elt13.ptr = getelementptr i8, ptr %out.vec.ptr, i64 13214 store i8 %in.elt, ptr %out.elt13.ptr, align 1215 %out.elt14.ptr = getelementptr i8, ptr %out.vec.ptr, i64 14216 store i8 %in.elt, ptr %out.elt14.ptr, align 2217 %out.elt15.ptr = getelementptr i8, ptr %out.vec.ptr, i64 15218 store i8 %in.elt, ptr %out.elt15.ptr, align 1219 ret void220}221 222define void @vec128_i16(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {223; ALL-LABEL: vec128_i16:224; ALL: # %bb.0:225; ALL-NEXT: movl (%rdi), %eax226; ALL-NEXT: notl %eax227; ALL-NEXT: movw %ax, (%rsi)228; ALL-NEXT: movw %ax, 2(%rsi)229; ALL-NEXT: movw %ax, 4(%rsi)230; ALL-NEXT: movw %ax, 6(%rsi)231; ALL-NEXT: movw %ax, 8(%rsi)232; ALL-NEXT: movw %ax, 10(%rsi)233; ALL-NEXT: movw %ax, 12(%rsi)234; ALL-NEXT: movw %ax, 14(%rsi)235; ALL-NEXT: retq236 %in.elt.not = load i16, ptr %in.elt.ptr, align 64237 %in.elt = xor i16 %in.elt.not, -1238 %out.elt0.ptr = getelementptr i16, ptr %out.vec.ptr, i64 0239 store i16 %in.elt, ptr %out.elt0.ptr, align 64240 %out.elt1.ptr = getelementptr i16, ptr %out.vec.ptr, i64 1241 store i16 %in.elt, ptr %out.elt1.ptr, align 2242 %out.elt2.ptr = getelementptr i16, ptr %out.vec.ptr, i64 2243 store i16 %in.elt, ptr %out.elt2.ptr, align 4244 %out.elt3.ptr = getelementptr i16, ptr %out.vec.ptr, i64 3245 store i16 %in.elt, ptr %out.elt3.ptr, align 2246 %out.elt4.ptr = getelementptr i16, ptr %out.vec.ptr, i64 4247 store i16 %in.elt, ptr %out.elt4.ptr, align 8248 %out.elt5.ptr = getelementptr i16, ptr %out.vec.ptr, i64 5249 store i16 %in.elt, ptr %out.elt5.ptr, align 2250 %out.elt6.ptr = getelementptr i16, ptr %out.vec.ptr, i64 6251 store i16 %in.elt, ptr %out.elt6.ptr, align 4252 %out.elt7.ptr = getelementptr i16, ptr %out.vec.ptr, i64 7253 store i16 %in.elt, ptr %out.elt7.ptr, align 2254 ret void255}256 257define void @vec128_i32(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {258; ALL-LABEL: vec128_i32:259; ALL: # %bb.0:260; ALL-NEXT: movl (%rdi), %eax261; ALL-NEXT: notl %eax262; ALL-NEXT: movl %eax, (%rsi)263; ALL-NEXT: movl %eax, 4(%rsi)264; ALL-NEXT: movl %eax, 8(%rsi)265; ALL-NEXT: movl %eax, 12(%rsi)266; ALL-NEXT: retq267 %in.elt.not = load i32, ptr %in.elt.ptr, align 64268 %in.elt = xor i32 %in.elt.not, -1269 %out.elt0.ptr = getelementptr i32, ptr %out.vec.ptr, i64 0270 store i32 %in.elt, ptr %out.elt0.ptr, align 64271 %out.elt1.ptr = getelementptr i32, ptr %out.vec.ptr, i64 1272 store i32 %in.elt, ptr %out.elt1.ptr, align 4273 %out.elt2.ptr = getelementptr i32, ptr %out.vec.ptr, i64 2274 store i32 %in.elt, ptr %out.elt2.ptr, align 8275 %out.elt3.ptr = getelementptr i32, ptr %out.vec.ptr, i64 3276 store i32 %in.elt, ptr %out.elt3.ptr, align 4277 ret void278}279 280define void @vec128_float(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {281; ALL-LABEL: vec128_float:282; ALL: # %bb.0:283; ALL-NEXT: movl (%rdi), %eax284; ALL-NEXT: notl %eax285; ALL-NEXT: movl %eax, (%rsi)286; ALL-NEXT: movl %eax, 4(%rsi)287; ALL-NEXT: movl %eax, 8(%rsi)288; ALL-NEXT: movl %eax, 12(%rsi)289; ALL-NEXT: retq290 %in.elt.not = load i32, ptr %in.elt.ptr, align 64291 %in.elt.int = xor i32 %in.elt.not, -1292 %in.elt = bitcast i32 %in.elt.int to float293 %out.elt0.ptr = getelementptr float, ptr %out.vec.ptr, i64 0294 store float %in.elt, ptr %out.elt0.ptr, align 64295 %out.elt1.ptr = getelementptr float, ptr %out.vec.ptr, i64 1296 store float %in.elt, ptr %out.elt1.ptr, align 4297 %out.elt2.ptr = getelementptr float, ptr %out.vec.ptr, i64 2298 store float %in.elt, ptr %out.elt2.ptr, align 8299 %out.elt3.ptr = getelementptr float, ptr %out.vec.ptr, i64 3300 store float %in.elt, ptr %out.elt3.ptr, align 4301 ret void302}303 304define void @vec128_i64(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {305; ALL-LABEL: vec128_i64:306; ALL: # %bb.0:307; ALL-NEXT: movq (%rdi), %rax308; ALL-NEXT: notq %rax309; ALL-NEXT: movq %rax, (%rsi)310; ALL-NEXT: movq %rax, 8(%rsi)311; ALL-NEXT: retq312 %in.elt.not = load i64, ptr %in.elt.ptr, align 64313 %in.elt = xor i64 %in.elt.not, -1314 %out.elt0.ptr = getelementptr i64, ptr %out.vec.ptr, i64 0315 store i64 %in.elt, ptr %out.elt0.ptr, align 64316 %out.elt1.ptr = getelementptr i64, ptr %out.vec.ptr, i64 1317 store i64 %in.elt, ptr %out.elt1.ptr, align 8318 ret void319}320 321define void @vec128_double(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {322; ALL-LABEL: vec128_double:323; ALL: # %bb.0:324; ALL-NEXT: movq (%rdi), %rax325; ALL-NEXT: notq %rax326; ALL-NEXT: movq %rax, (%rsi)327; ALL-NEXT: movq %rax, 8(%rsi)328; ALL-NEXT: retq329 %in.elt.not = load i64, ptr %in.elt.ptr, align 64330 %in.elt.int = xor i64 %in.elt.not, -1331 %in.elt = bitcast i64 %in.elt.int to double332 %out.elt0.ptr = getelementptr double, ptr %out.vec.ptr, i64 0333 store double %in.elt, ptr %out.elt0.ptr, align 64334 %out.elt1.ptr = getelementptr double, ptr %out.vec.ptr, i64 1335 store double %in.elt, ptr %out.elt1.ptr, align 8336 ret void337}338 339define void @vec256_i8(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {340; ALL-LABEL: vec256_i8:341; ALL: # %bb.0:342; ALL-NEXT: movzbl (%rdi), %eax343; ALL-NEXT: notb %al344; ALL-NEXT: movb %al, (%rsi)345; ALL-NEXT: movb %al, 1(%rsi)346; ALL-NEXT: movb %al, 2(%rsi)347; ALL-NEXT: movb %al, 3(%rsi)348; ALL-NEXT: movb %al, 4(%rsi)349; ALL-NEXT: movb %al, 5(%rsi)350; ALL-NEXT: movb %al, 6(%rsi)351; ALL-NEXT: movb %al, 7(%rsi)352; ALL-NEXT: movb %al, 8(%rsi)353; ALL-NEXT: movb %al, 9(%rsi)354; ALL-NEXT: movb %al, 10(%rsi)355; ALL-NEXT: movb %al, 11(%rsi)356; ALL-NEXT: movb %al, 12(%rsi)357; ALL-NEXT: movb %al, 13(%rsi)358; ALL-NEXT: movb %al, 14(%rsi)359; ALL-NEXT: movb %al, 15(%rsi)360; ALL-NEXT: movb %al, 16(%rsi)361; ALL-NEXT: movb %al, 17(%rsi)362; ALL-NEXT: movb %al, 18(%rsi)363; ALL-NEXT: movb %al, 19(%rsi)364; ALL-NEXT: movb %al, 20(%rsi)365; ALL-NEXT: movb %al, 21(%rsi)366; ALL-NEXT: movb %al, 22(%rsi)367; ALL-NEXT: movb %al, 23(%rsi)368; ALL-NEXT: movb %al, 24(%rsi)369; ALL-NEXT: movb %al, 25(%rsi)370; ALL-NEXT: movb %al, 26(%rsi)371; ALL-NEXT: movb %al, 27(%rsi)372; ALL-NEXT: movb %al, 28(%rsi)373; ALL-NEXT: movb %al, 29(%rsi)374; ALL-NEXT: movb %al, 30(%rsi)375; ALL-NEXT: movb %al, 31(%rsi)376; ALL-NEXT: retq377 %in.elt.not = load i8, ptr %in.elt.ptr, align 64378 %in.elt = xor i8 %in.elt.not, -1379 %out.elt0.ptr = getelementptr i8, ptr %out.vec.ptr, i64 0380 store i8 %in.elt, ptr %out.elt0.ptr, align 64381 %out.elt1.ptr = getelementptr i8, ptr %out.vec.ptr, i64 1382 store i8 %in.elt, ptr %out.elt1.ptr, align 1383 %out.elt2.ptr = getelementptr i8, ptr %out.vec.ptr, i64 2384 store i8 %in.elt, ptr %out.elt2.ptr, align 2385 %out.elt3.ptr = getelementptr i8, ptr %out.vec.ptr, i64 3386 store i8 %in.elt, ptr %out.elt3.ptr, align 1387 %out.elt4.ptr = getelementptr i8, ptr %out.vec.ptr, i64 4388 store i8 %in.elt, ptr %out.elt4.ptr, align 4389 %out.elt5.ptr = getelementptr i8, ptr %out.vec.ptr, i64 5390 store i8 %in.elt, ptr %out.elt5.ptr, align 1391 %out.elt6.ptr = getelementptr i8, ptr %out.vec.ptr, i64 6392 store i8 %in.elt, ptr %out.elt6.ptr, align 2393 %out.elt7.ptr = getelementptr i8, ptr %out.vec.ptr, i64 7394 store i8 %in.elt, ptr %out.elt7.ptr, align 1395 %out.elt8.ptr = getelementptr i8, ptr %out.vec.ptr, i64 8396 store i8 %in.elt, ptr %out.elt8.ptr, align 8397 %out.elt9.ptr = getelementptr i8, ptr %out.vec.ptr, i64 9398 store i8 %in.elt, ptr %out.elt9.ptr, align 1399 %out.elt10.ptr = getelementptr i8, ptr %out.vec.ptr, i64 10400 store i8 %in.elt, ptr %out.elt10.ptr, align 2401 %out.elt11.ptr = getelementptr i8, ptr %out.vec.ptr, i64 11402 store i8 %in.elt, ptr %out.elt11.ptr, align 1403 %out.elt12.ptr = getelementptr i8, ptr %out.vec.ptr, i64 12404 store i8 %in.elt, ptr %out.elt12.ptr, align 4405 %out.elt13.ptr = getelementptr i8, ptr %out.vec.ptr, i64 13406 store i8 %in.elt, ptr %out.elt13.ptr, align 1407 %out.elt14.ptr = getelementptr i8, ptr %out.vec.ptr, i64 14408 store i8 %in.elt, ptr %out.elt14.ptr, align 2409 %out.elt15.ptr = getelementptr i8, ptr %out.vec.ptr, i64 15410 store i8 %in.elt, ptr %out.elt15.ptr, align 1411 %out.elt16.ptr = getelementptr i8, ptr %out.vec.ptr, i64 16412 store i8 %in.elt, ptr %out.elt16.ptr, align 16413 %out.elt17.ptr = getelementptr i8, ptr %out.vec.ptr, i64 17414 store i8 %in.elt, ptr %out.elt17.ptr, align 1415 %out.elt18.ptr = getelementptr i8, ptr %out.vec.ptr, i64 18416 store i8 %in.elt, ptr %out.elt18.ptr, align 2417 %out.elt19.ptr = getelementptr i8, ptr %out.vec.ptr, i64 19418 store i8 %in.elt, ptr %out.elt19.ptr, align 1419 %out.elt20.ptr = getelementptr i8, ptr %out.vec.ptr, i64 20420 store i8 %in.elt, ptr %out.elt20.ptr, align 4421 %out.elt21.ptr = getelementptr i8, ptr %out.vec.ptr, i64 21422 store i8 %in.elt, ptr %out.elt21.ptr, align 1423 %out.elt22.ptr = getelementptr i8, ptr %out.vec.ptr, i64 22424 store i8 %in.elt, ptr %out.elt22.ptr, align 2425 %out.elt23.ptr = getelementptr i8, ptr %out.vec.ptr, i64 23426 store i8 %in.elt, ptr %out.elt23.ptr, align 1427 %out.elt24.ptr = getelementptr i8, ptr %out.vec.ptr, i64 24428 store i8 %in.elt, ptr %out.elt24.ptr, align 8429 %out.elt25.ptr = getelementptr i8, ptr %out.vec.ptr, i64 25430 store i8 %in.elt, ptr %out.elt25.ptr, align 1431 %out.elt26.ptr = getelementptr i8, ptr %out.vec.ptr, i64 26432 store i8 %in.elt, ptr %out.elt26.ptr, align 2433 %out.elt27.ptr = getelementptr i8, ptr %out.vec.ptr, i64 27434 store i8 %in.elt, ptr %out.elt27.ptr, align 1435 %out.elt28.ptr = getelementptr i8, ptr %out.vec.ptr, i64 28436 store i8 %in.elt, ptr %out.elt28.ptr, align 4437 %out.elt29.ptr = getelementptr i8, ptr %out.vec.ptr, i64 29438 store i8 %in.elt, ptr %out.elt29.ptr, align 1439 %out.elt30.ptr = getelementptr i8, ptr %out.vec.ptr, i64 30440 store i8 %in.elt, ptr %out.elt30.ptr, align 2441 %out.elt31.ptr = getelementptr i8, ptr %out.vec.ptr, i64 31442 store i8 %in.elt, ptr %out.elt31.ptr, align 1443 ret void444}445 446define void @vec256_i16(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {447; ALL-LABEL: vec256_i16:448; ALL: # %bb.0:449; ALL-NEXT: movl (%rdi), %eax450; ALL-NEXT: notl %eax451; ALL-NEXT: movw %ax, (%rsi)452; ALL-NEXT: movw %ax, 2(%rsi)453; ALL-NEXT: movw %ax, 4(%rsi)454; ALL-NEXT: movw %ax, 6(%rsi)455; ALL-NEXT: movw %ax, 8(%rsi)456; ALL-NEXT: movw %ax, 10(%rsi)457; ALL-NEXT: movw %ax, 12(%rsi)458; ALL-NEXT: movw %ax, 14(%rsi)459; ALL-NEXT: movw %ax, 16(%rsi)460; ALL-NEXT: movw %ax, 18(%rsi)461; ALL-NEXT: movw %ax, 20(%rsi)462; ALL-NEXT: movw %ax, 22(%rsi)463; ALL-NEXT: movw %ax, 24(%rsi)464; ALL-NEXT: movw %ax, 26(%rsi)465; ALL-NEXT: movw %ax, 28(%rsi)466; ALL-NEXT: movw %ax, 30(%rsi)467; ALL-NEXT: retq468 %in.elt.not = load i16, ptr %in.elt.ptr, align 64469 %in.elt = xor i16 %in.elt.not, -1470 %out.elt0.ptr = getelementptr i16, ptr %out.vec.ptr, i64 0471 store i16 %in.elt, ptr %out.elt0.ptr, align 64472 %out.elt1.ptr = getelementptr i16, ptr %out.vec.ptr, i64 1473 store i16 %in.elt, ptr %out.elt1.ptr, align 2474 %out.elt2.ptr = getelementptr i16, ptr %out.vec.ptr, i64 2475 store i16 %in.elt, ptr %out.elt2.ptr, align 4476 %out.elt3.ptr = getelementptr i16, ptr %out.vec.ptr, i64 3477 store i16 %in.elt, ptr %out.elt3.ptr, align 2478 %out.elt4.ptr = getelementptr i16, ptr %out.vec.ptr, i64 4479 store i16 %in.elt, ptr %out.elt4.ptr, align 8480 %out.elt5.ptr = getelementptr i16, ptr %out.vec.ptr, i64 5481 store i16 %in.elt, ptr %out.elt5.ptr, align 2482 %out.elt6.ptr = getelementptr i16, ptr %out.vec.ptr, i64 6483 store i16 %in.elt, ptr %out.elt6.ptr, align 4484 %out.elt7.ptr = getelementptr i16, ptr %out.vec.ptr, i64 7485 store i16 %in.elt, ptr %out.elt7.ptr, align 2486 %out.elt8.ptr = getelementptr i16, ptr %out.vec.ptr, i64 8487 store i16 %in.elt, ptr %out.elt8.ptr, align 16488 %out.elt9.ptr = getelementptr i16, ptr %out.vec.ptr, i64 9489 store i16 %in.elt, ptr %out.elt9.ptr, align 2490 %out.elt10.ptr = getelementptr i16, ptr %out.vec.ptr, i64 10491 store i16 %in.elt, ptr %out.elt10.ptr, align 4492 %out.elt11.ptr = getelementptr i16, ptr %out.vec.ptr, i64 11493 store i16 %in.elt, ptr %out.elt11.ptr, align 2494 %out.elt12.ptr = getelementptr i16, ptr %out.vec.ptr, i64 12495 store i16 %in.elt, ptr %out.elt12.ptr, align 8496 %out.elt13.ptr = getelementptr i16, ptr %out.vec.ptr, i64 13497 store i16 %in.elt, ptr %out.elt13.ptr, align 2498 %out.elt14.ptr = getelementptr i16, ptr %out.vec.ptr, i64 14499 store i16 %in.elt, ptr %out.elt14.ptr, align 4500 %out.elt15.ptr = getelementptr i16, ptr %out.vec.ptr, i64 15501 store i16 %in.elt, ptr %out.elt15.ptr, align 2502 ret void503}504 505define void @vec256_i32(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {506; ALL-LABEL: vec256_i32:507; ALL: # %bb.0:508; ALL-NEXT: movl (%rdi), %eax509; ALL-NEXT: notl %eax510; ALL-NEXT: movl %eax, (%rsi)511; ALL-NEXT: movl %eax, 4(%rsi)512; ALL-NEXT: movl %eax, 8(%rsi)513; ALL-NEXT: movl %eax, 12(%rsi)514; ALL-NEXT: movl %eax, 16(%rsi)515; ALL-NEXT: movl %eax, 20(%rsi)516; ALL-NEXT: movl %eax, 24(%rsi)517; ALL-NEXT: movl %eax, 28(%rsi)518; ALL-NEXT: retq519 %in.elt.not = load i32, ptr %in.elt.ptr, align 64520 %in.elt = xor i32 %in.elt.not, -1521 %out.elt0.ptr = getelementptr i32, ptr %out.vec.ptr, i64 0522 store i32 %in.elt, ptr %out.elt0.ptr, align 64523 %out.elt1.ptr = getelementptr i32, ptr %out.vec.ptr, i64 1524 store i32 %in.elt, ptr %out.elt1.ptr, align 4525 %out.elt2.ptr = getelementptr i32, ptr %out.vec.ptr, i64 2526 store i32 %in.elt, ptr %out.elt2.ptr, align 8527 %out.elt3.ptr = getelementptr i32, ptr %out.vec.ptr, i64 3528 store i32 %in.elt, ptr %out.elt3.ptr, align 4529 %out.elt4.ptr = getelementptr i32, ptr %out.vec.ptr, i64 4530 store i32 %in.elt, ptr %out.elt4.ptr, align 16531 %out.elt5.ptr = getelementptr i32, ptr %out.vec.ptr, i64 5532 store i32 %in.elt, ptr %out.elt5.ptr, align 4533 %out.elt6.ptr = getelementptr i32, ptr %out.vec.ptr, i64 6534 store i32 %in.elt, ptr %out.elt6.ptr, align 8535 %out.elt7.ptr = getelementptr i32, ptr %out.vec.ptr, i64 7536 store i32 %in.elt, ptr %out.elt7.ptr, align 4537 ret void538}539 540define void @vec256_float(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {541; ALL-LABEL: vec256_float:542; ALL: # %bb.0:543; ALL-NEXT: movl (%rdi), %eax544; ALL-NEXT: notl %eax545; ALL-NEXT: movl %eax, (%rsi)546; ALL-NEXT: movl %eax, 4(%rsi)547; ALL-NEXT: movl %eax, 8(%rsi)548; ALL-NEXT: movl %eax, 12(%rsi)549; ALL-NEXT: movl %eax, 16(%rsi)550; ALL-NEXT: movl %eax, 20(%rsi)551; ALL-NEXT: movl %eax, 24(%rsi)552; ALL-NEXT: movl %eax, 28(%rsi)553; ALL-NEXT: retq554 %in.elt.not = load i32, ptr %in.elt.ptr, align 64555 %in.elt.int = xor i32 %in.elt.not, -1556 %in.elt = bitcast i32 %in.elt.int to float557 %out.elt0.ptr = getelementptr float, ptr %out.vec.ptr, i64 0558 store float %in.elt, ptr %out.elt0.ptr, align 64559 %out.elt1.ptr = getelementptr float, ptr %out.vec.ptr, i64 1560 store float %in.elt, ptr %out.elt1.ptr, align 4561 %out.elt2.ptr = getelementptr float, ptr %out.vec.ptr, i64 2562 store float %in.elt, ptr %out.elt2.ptr, align 8563 %out.elt3.ptr = getelementptr float, ptr %out.vec.ptr, i64 3564 store float %in.elt, ptr %out.elt3.ptr, align 4565 %out.elt4.ptr = getelementptr float, ptr %out.vec.ptr, i64 4566 store float %in.elt, ptr %out.elt4.ptr, align 16567 %out.elt5.ptr = getelementptr float, ptr %out.vec.ptr, i64 5568 store float %in.elt, ptr %out.elt5.ptr, align 4569 %out.elt6.ptr = getelementptr float, ptr %out.vec.ptr, i64 6570 store float %in.elt, ptr %out.elt6.ptr, align 8571 %out.elt7.ptr = getelementptr float, ptr %out.vec.ptr, i64 7572 store float %in.elt, ptr %out.elt7.ptr, align 4573 ret void574}575 576define void @vec256_i64(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {577; ALL-LABEL: vec256_i64:578; ALL: # %bb.0:579; ALL-NEXT: movq (%rdi), %rax580; ALL-NEXT: notq %rax581; ALL-NEXT: movq %rax, (%rsi)582; ALL-NEXT: movq %rax, 8(%rsi)583; ALL-NEXT: movq %rax, 16(%rsi)584; ALL-NEXT: movq %rax, 24(%rsi)585; ALL-NEXT: retq586 %in.elt.not = load i64, ptr %in.elt.ptr, align 64587 %in.elt = xor i64 %in.elt.not, -1588 %out.elt0.ptr = getelementptr i64, ptr %out.vec.ptr, i64 0589 store i64 %in.elt, ptr %out.elt0.ptr, align 64590 %out.elt1.ptr = getelementptr i64, ptr %out.vec.ptr, i64 1591 store i64 %in.elt, ptr %out.elt1.ptr, align 8592 %out.elt2.ptr = getelementptr i64, ptr %out.vec.ptr, i64 2593 store i64 %in.elt, ptr %out.elt2.ptr, align 16594 %out.elt3.ptr = getelementptr i64, ptr %out.vec.ptr, i64 3595 store i64 %in.elt, ptr %out.elt3.ptr, align 8596 ret void597}598 599define void @vec256_double(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {600; ALL-LABEL: vec256_double:601; ALL: # %bb.0:602; ALL-NEXT: movq (%rdi), %rax603; ALL-NEXT: notq %rax604; ALL-NEXT: movq %rax, (%rsi)605; ALL-NEXT: movq %rax, 8(%rsi)606; ALL-NEXT: movq %rax, 16(%rsi)607; ALL-NEXT: movq %rax, 24(%rsi)608; ALL-NEXT: retq609 %in.elt.not = load i64, ptr %in.elt.ptr, align 64610 %in.elt.int = xor i64 %in.elt.not, -1611 %in.elt = bitcast i64 %in.elt.int to double612 %out.elt0.ptr = getelementptr double, ptr %out.vec.ptr, i64 0613 store double %in.elt, ptr %out.elt0.ptr, align 64614 %out.elt1.ptr = getelementptr double, ptr %out.vec.ptr, i64 1615 store double %in.elt, ptr %out.elt1.ptr, align 8616 %out.elt2.ptr = getelementptr double, ptr %out.vec.ptr, i64 2617 store double %in.elt, ptr %out.elt2.ptr, align 16618 %out.elt3.ptr = getelementptr double, ptr %out.vec.ptr, i64 3619 store double %in.elt, ptr %out.elt3.ptr, align 8620 ret void621}622 623define void @vec256_i128(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {624; ALL-LABEL: vec256_i128:625; ALL: # %bb.0:626; ALL-NEXT: movq (%rdi), %rax627; ALL-NEXT: movq 8(%rdi), %rcx628; ALL-NEXT: notq %rcx629; ALL-NEXT: notq %rax630; ALL-NEXT: movq %rax, (%rsi)631; ALL-NEXT: movq %rcx, 8(%rsi)632; ALL-NEXT: movq %rcx, 24(%rsi)633; ALL-NEXT: movq %rax, 16(%rsi)634; ALL-NEXT: retq635 %in.elt.not = load i128, ptr %in.elt.ptr, align 64636 %in.elt = xor i128 %in.elt.not, -1637 %out.elt0.ptr = getelementptr i128, ptr %out.vec.ptr, i64 0638 store i128 %in.elt, ptr %out.elt0.ptr, align 64639 %out.elt1.ptr = getelementptr i128, ptr %out.vec.ptr, i64 1640 store i128 %in.elt, ptr %out.elt1.ptr, align 16641 ret void642}643 644define void @vec384_i8(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {645; ALL-LABEL: vec384_i8:646; ALL: # %bb.0:647; ALL-NEXT: movzbl (%rdi), %eax648; ALL-NEXT: notb %al649; ALL-NEXT: movb %al, (%rsi)650; ALL-NEXT: movb %al, 1(%rsi)651; ALL-NEXT: movb %al, 2(%rsi)652; ALL-NEXT: movb %al, 3(%rsi)653; ALL-NEXT: movb %al, 4(%rsi)654; ALL-NEXT: movb %al, 5(%rsi)655; ALL-NEXT: movb %al, 6(%rsi)656; ALL-NEXT: movb %al, 7(%rsi)657; ALL-NEXT: movb %al, 8(%rsi)658; ALL-NEXT: movb %al, 9(%rsi)659; ALL-NEXT: movb %al, 10(%rsi)660; ALL-NEXT: movb %al, 11(%rsi)661; ALL-NEXT: movb %al, 12(%rsi)662; ALL-NEXT: movb %al, 13(%rsi)663; ALL-NEXT: movb %al, 14(%rsi)664; ALL-NEXT: movb %al, 15(%rsi)665; ALL-NEXT: movb %al, 16(%rsi)666; ALL-NEXT: movb %al, 17(%rsi)667; ALL-NEXT: movb %al, 18(%rsi)668; ALL-NEXT: movb %al, 19(%rsi)669; ALL-NEXT: movb %al, 20(%rsi)670; ALL-NEXT: movb %al, 21(%rsi)671; ALL-NEXT: movb %al, 22(%rsi)672; ALL-NEXT: movb %al, 23(%rsi)673; ALL-NEXT: movb %al, 24(%rsi)674; ALL-NEXT: movb %al, 25(%rsi)675; ALL-NEXT: movb %al, 26(%rsi)676; ALL-NEXT: movb %al, 27(%rsi)677; ALL-NEXT: movb %al, 28(%rsi)678; ALL-NEXT: movb %al, 29(%rsi)679; ALL-NEXT: movb %al, 30(%rsi)680; ALL-NEXT: movb %al, 31(%rsi)681; ALL-NEXT: movb %al, 32(%rsi)682; ALL-NEXT: movb %al, 33(%rsi)683; ALL-NEXT: movb %al, 34(%rsi)684; ALL-NEXT: movb %al, 35(%rsi)685; ALL-NEXT: movb %al, 36(%rsi)686; ALL-NEXT: movb %al, 37(%rsi)687; ALL-NEXT: movb %al, 38(%rsi)688; ALL-NEXT: movb %al, 39(%rsi)689; ALL-NEXT: movb %al, 40(%rsi)690; ALL-NEXT: movb %al, 41(%rsi)691; ALL-NEXT: movb %al, 42(%rsi)692; ALL-NEXT: movb %al, 43(%rsi)693; ALL-NEXT: movb %al, 44(%rsi)694; ALL-NEXT: movb %al, 45(%rsi)695; ALL-NEXT: movb %al, 46(%rsi)696; ALL-NEXT: movb %al, 47(%rsi)697; ALL-NEXT: retq698 %in.elt.not = load i8, ptr %in.elt.ptr, align 64699 %in.elt = xor i8 %in.elt.not, -1700 %out.elt0.ptr = getelementptr i8, ptr %out.vec.ptr, i64 0701 store i8 %in.elt, ptr %out.elt0.ptr, align 64702 %out.elt1.ptr = getelementptr i8, ptr %out.vec.ptr, i64 1703 store i8 %in.elt, ptr %out.elt1.ptr, align 1704 %out.elt2.ptr = getelementptr i8, ptr %out.vec.ptr, i64 2705 store i8 %in.elt, ptr %out.elt2.ptr, align 2706 %out.elt3.ptr = getelementptr i8, ptr %out.vec.ptr, i64 3707 store i8 %in.elt, ptr %out.elt3.ptr, align 1708 %out.elt4.ptr = getelementptr i8, ptr %out.vec.ptr, i64 4709 store i8 %in.elt, ptr %out.elt4.ptr, align 4710 %out.elt5.ptr = getelementptr i8, ptr %out.vec.ptr, i64 5711 store i8 %in.elt, ptr %out.elt5.ptr, align 1712 %out.elt6.ptr = getelementptr i8, ptr %out.vec.ptr, i64 6713 store i8 %in.elt, ptr %out.elt6.ptr, align 2714 %out.elt7.ptr = getelementptr i8, ptr %out.vec.ptr, i64 7715 store i8 %in.elt, ptr %out.elt7.ptr, align 1716 %out.elt8.ptr = getelementptr i8, ptr %out.vec.ptr, i64 8717 store i8 %in.elt, ptr %out.elt8.ptr, align 8718 %out.elt9.ptr = getelementptr i8, ptr %out.vec.ptr, i64 9719 store i8 %in.elt, ptr %out.elt9.ptr, align 1720 %out.elt10.ptr = getelementptr i8, ptr %out.vec.ptr, i64 10721 store i8 %in.elt, ptr %out.elt10.ptr, align 2722 %out.elt11.ptr = getelementptr i8, ptr %out.vec.ptr, i64 11723 store i8 %in.elt, ptr %out.elt11.ptr, align 1724 %out.elt12.ptr = getelementptr i8, ptr %out.vec.ptr, i64 12725 store i8 %in.elt, ptr %out.elt12.ptr, align 4726 %out.elt13.ptr = getelementptr i8, ptr %out.vec.ptr, i64 13727 store i8 %in.elt, ptr %out.elt13.ptr, align 1728 %out.elt14.ptr = getelementptr i8, ptr %out.vec.ptr, i64 14729 store i8 %in.elt, ptr %out.elt14.ptr, align 2730 %out.elt15.ptr = getelementptr i8, ptr %out.vec.ptr, i64 15731 store i8 %in.elt, ptr %out.elt15.ptr, align 1732 %out.elt16.ptr = getelementptr i8, ptr %out.vec.ptr, i64 16733 store i8 %in.elt, ptr %out.elt16.ptr, align 16734 %out.elt17.ptr = getelementptr i8, ptr %out.vec.ptr, i64 17735 store i8 %in.elt, ptr %out.elt17.ptr, align 1736 %out.elt18.ptr = getelementptr i8, ptr %out.vec.ptr, i64 18737 store i8 %in.elt, ptr %out.elt18.ptr, align 2738 %out.elt19.ptr = getelementptr i8, ptr %out.vec.ptr, i64 19739 store i8 %in.elt, ptr %out.elt19.ptr, align 1740 %out.elt20.ptr = getelementptr i8, ptr %out.vec.ptr, i64 20741 store i8 %in.elt, ptr %out.elt20.ptr, align 4742 %out.elt21.ptr = getelementptr i8, ptr %out.vec.ptr, i64 21743 store i8 %in.elt, ptr %out.elt21.ptr, align 1744 %out.elt22.ptr = getelementptr i8, ptr %out.vec.ptr, i64 22745 store i8 %in.elt, ptr %out.elt22.ptr, align 2746 %out.elt23.ptr = getelementptr i8, ptr %out.vec.ptr, i64 23747 store i8 %in.elt, ptr %out.elt23.ptr, align 1748 %out.elt24.ptr = getelementptr i8, ptr %out.vec.ptr, i64 24749 store i8 %in.elt, ptr %out.elt24.ptr, align 8750 %out.elt25.ptr = getelementptr i8, ptr %out.vec.ptr, i64 25751 store i8 %in.elt, ptr %out.elt25.ptr, align 1752 %out.elt26.ptr = getelementptr i8, ptr %out.vec.ptr, i64 26753 store i8 %in.elt, ptr %out.elt26.ptr, align 2754 %out.elt27.ptr = getelementptr i8, ptr %out.vec.ptr, i64 27755 store i8 %in.elt, ptr %out.elt27.ptr, align 1756 %out.elt28.ptr = getelementptr i8, ptr %out.vec.ptr, i64 28757 store i8 %in.elt, ptr %out.elt28.ptr, align 4758 %out.elt29.ptr = getelementptr i8, ptr %out.vec.ptr, i64 29759 store i8 %in.elt, ptr %out.elt29.ptr, align 1760 %out.elt30.ptr = getelementptr i8, ptr %out.vec.ptr, i64 30761 store i8 %in.elt, ptr %out.elt30.ptr, align 2762 %out.elt31.ptr = getelementptr i8, ptr %out.vec.ptr, i64 31763 store i8 %in.elt, ptr %out.elt31.ptr, align 1764 %out.elt32.ptr = getelementptr i8, ptr %out.vec.ptr, i64 32765 store i8 %in.elt, ptr %out.elt32.ptr, align 32766 %out.elt33.ptr = getelementptr i8, ptr %out.vec.ptr, i64 33767 store i8 %in.elt, ptr %out.elt33.ptr, align 1768 %out.elt34.ptr = getelementptr i8, ptr %out.vec.ptr, i64 34769 store i8 %in.elt, ptr %out.elt34.ptr, align 2770 %out.elt35.ptr = getelementptr i8, ptr %out.vec.ptr, i64 35771 store i8 %in.elt, ptr %out.elt35.ptr, align 1772 %out.elt36.ptr = getelementptr i8, ptr %out.vec.ptr, i64 36773 store i8 %in.elt, ptr %out.elt36.ptr, align 4774 %out.elt37.ptr = getelementptr i8, ptr %out.vec.ptr, i64 37775 store i8 %in.elt, ptr %out.elt37.ptr, align 1776 %out.elt38.ptr = getelementptr i8, ptr %out.vec.ptr, i64 38777 store i8 %in.elt, ptr %out.elt38.ptr, align 2778 %out.elt39.ptr = getelementptr i8, ptr %out.vec.ptr, i64 39779 store i8 %in.elt, ptr %out.elt39.ptr, align 1780 %out.elt40.ptr = getelementptr i8, ptr %out.vec.ptr, i64 40781 store i8 %in.elt, ptr %out.elt40.ptr, align 8782 %out.elt41.ptr = getelementptr i8, ptr %out.vec.ptr, i64 41783 store i8 %in.elt, ptr %out.elt41.ptr, align 1784 %out.elt42.ptr = getelementptr i8, ptr %out.vec.ptr, i64 42785 store i8 %in.elt, ptr %out.elt42.ptr, align 2786 %out.elt43.ptr = getelementptr i8, ptr %out.vec.ptr, i64 43787 store i8 %in.elt, ptr %out.elt43.ptr, align 1788 %out.elt44.ptr = getelementptr i8, ptr %out.vec.ptr, i64 44789 store i8 %in.elt, ptr %out.elt44.ptr, align 4790 %out.elt45.ptr = getelementptr i8, ptr %out.vec.ptr, i64 45791 store i8 %in.elt, ptr %out.elt45.ptr, align 1792 %out.elt46.ptr = getelementptr i8, ptr %out.vec.ptr, i64 46793 store i8 %in.elt, ptr %out.elt46.ptr, align 2794 %out.elt47.ptr = getelementptr i8, ptr %out.vec.ptr, i64 47795 store i8 %in.elt, ptr %out.elt47.ptr, align 1796 ret void797}798 799define void @vec384_i16(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {800; ALL-LABEL: vec384_i16:801; ALL: # %bb.0:802; ALL-NEXT: movl (%rdi), %eax803; ALL-NEXT: notl %eax804; ALL-NEXT: movw %ax, (%rsi)805; ALL-NEXT: movw %ax, 2(%rsi)806; ALL-NEXT: movw %ax, 4(%rsi)807; ALL-NEXT: movw %ax, 6(%rsi)808; ALL-NEXT: movw %ax, 8(%rsi)809; ALL-NEXT: movw %ax, 10(%rsi)810; ALL-NEXT: movw %ax, 12(%rsi)811; ALL-NEXT: movw %ax, 14(%rsi)812; ALL-NEXT: movw %ax, 16(%rsi)813; ALL-NEXT: movw %ax, 18(%rsi)814; ALL-NEXT: movw %ax, 20(%rsi)815; ALL-NEXT: movw %ax, 22(%rsi)816; ALL-NEXT: movw %ax, 24(%rsi)817; ALL-NEXT: movw %ax, 26(%rsi)818; ALL-NEXT: movw %ax, 28(%rsi)819; ALL-NEXT: movw %ax, 30(%rsi)820; ALL-NEXT: movw %ax, 32(%rsi)821; ALL-NEXT: movw %ax, 34(%rsi)822; ALL-NEXT: movw %ax, 36(%rsi)823; ALL-NEXT: movw %ax, 38(%rsi)824; ALL-NEXT: movw %ax, 40(%rsi)825; ALL-NEXT: movw %ax, 42(%rsi)826; ALL-NEXT: movw %ax, 44(%rsi)827; ALL-NEXT: movw %ax, 46(%rsi)828; ALL-NEXT: retq829 %in.elt.not = load i16, ptr %in.elt.ptr, align 64830 %in.elt = xor i16 %in.elt.not, -1831 %out.elt0.ptr = getelementptr i16, ptr %out.vec.ptr, i64 0832 store i16 %in.elt, ptr %out.elt0.ptr, align 64833 %out.elt1.ptr = getelementptr i16, ptr %out.vec.ptr, i64 1834 store i16 %in.elt, ptr %out.elt1.ptr, align 2835 %out.elt2.ptr = getelementptr i16, ptr %out.vec.ptr, i64 2836 store i16 %in.elt, ptr %out.elt2.ptr, align 4837 %out.elt3.ptr = getelementptr i16, ptr %out.vec.ptr, i64 3838 store i16 %in.elt, ptr %out.elt3.ptr, align 2839 %out.elt4.ptr = getelementptr i16, ptr %out.vec.ptr, i64 4840 store i16 %in.elt, ptr %out.elt4.ptr, align 8841 %out.elt5.ptr = getelementptr i16, ptr %out.vec.ptr, i64 5842 store i16 %in.elt, ptr %out.elt5.ptr, align 2843 %out.elt6.ptr = getelementptr i16, ptr %out.vec.ptr, i64 6844 store i16 %in.elt, ptr %out.elt6.ptr, align 4845 %out.elt7.ptr = getelementptr i16, ptr %out.vec.ptr, i64 7846 store i16 %in.elt, ptr %out.elt7.ptr, align 2847 %out.elt8.ptr = getelementptr i16, ptr %out.vec.ptr, i64 8848 store i16 %in.elt, ptr %out.elt8.ptr, align 16849 %out.elt9.ptr = getelementptr i16, ptr %out.vec.ptr, i64 9850 store i16 %in.elt, ptr %out.elt9.ptr, align 2851 %out.elt10.ptr = getelementptr i16, ptr %out.vec.ptr, i64 10852 store i16 %in.elt, ptr %out.elt10.ptr, align 4853 %out.elt11.ptr = getelementptr i16, ptr %out.vec.ptr, i64 11854 store i16 %in.elt, ptr %out.elt11.ptr, align 2855 %out.elt12.ptr = getelementptr i16, ptr %out.vec.ptr, i64 12856 store i16 %in.elt, ptr %out.elt12.ptr, align 8857 %out.elt13.ptr = getelementptr i16, ptr %out.vec.ptr, i64 13858 store i16 %in.elt, ptr %out.elt13.ptr, align 2859 %out.elt14.ptr = getelementptr i16, ptr %out.vec.ptr, i64 14860 store i16 %in.elt, ptr %out.elt14.ptr, align 4861 %out.elt15.ptr = getelementptr i16, ptr %out.vec.ptr, i64 15862 store i16 %in.elt, ptr %out.elt15.ptr, align 2863 %out.elt16.ptr = getelementptr i16, ptr %out.vec.ptr, i64 16864 store i16 %in.elt, ptr %out.elt16.ptr, align 32865 %out.elt17.ptr = getelementptr i16, ptr %out.vec.ptr, i64 17866 store i16 %in.elt, ptr %out.elt17.ptr, align 2867 %out.elt18.ptr = getelementptr i16, ptr %out.vec.ptr, i64 18868 store i16 %in.elt, ptr %out.elt18.ptr, align 4869 %out.elt19.ptr = getelementptr i16, ptr %out.vec.ptr, i64 19870 store i16 %in.elt, ptr %out.elt19.ptr, align 2871 %out.elt20.ptr = getelementptr i16, ptr %out.vec.ptr, i64 20872 store i16 %in.elt, ptr %out.elt20.ptr, align 8873 %out.elt21.ptr = getelementptr i16, ptr %out.vec.ptr, i64 21874 store i16 %in.elt, ptr %out.elt21.ptr, align 2875 %out.elt22.ptr = getelementptr i16, ptr %out.vec.ptr, i64 22876 store i16 %in.elt, ptr %out.elt22.ptr, align 4877 %out.elt23.ptr = getelementptr i16, ptr %out.vec.ptr, i64 23878 store i16 %in.elt, ptr %out.elt23.ptr, align 2879 ret void880}881 882define void @vec384_i32(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {883; ALL-LABEL: vec384_i32:884; ALL: # %bb.0:885; ALL-NEXT: movl (%rdi), %eax886; ALL-NEXT: notl %eax887; ALL-NEXT: movl %eax, (%rsi)888; ALL-NEXT: movl %eax, 4(%rsi)889; ALL-NEXT: movl %eax, 8(%rsi)890; ALL-NEXT: movl %eax, 12(%rsi)891; ALL-NEXT: movl %eax, 16(%rsi)892; ALL-NEXT: movl %eax, 20(%rsi)893; ALL-NEXT: movl %eax, 24(%rsi)894; ALL-NEXT: movl %eax, 28(%rsi)895; ALL-NEXT: movl %eax, 32(%rsi)896; ALL-NEXT: movl %eax, 36(%rsi)897; ALL-NEXT: movl %eax, 40(%rsi)898; ALL-NEXT: movl %eax, 44(%rsi)899; ALL-NEXT: retq900 %in.elt.not = load i32, ptr %in.elt.ptr, align 64901 %in.elt = xor i32 %in.elt.not, -1902 %out.elt0.ptr = getelementptr i32, ptr %out.vec.ptr, i64 0903 store i32 %in.elt, ptr %out.elt0.ptr, align 64904 %out.elt1.ptr = getelementptr i32, ptr %out.vec.ptr, i64 1905 store i32 %in.elt, ptr %out.elt1.ptr, align 4906 %out.elt2.ptr = getelementptr i32, ptr %out.vec.ptr, i64 2907 store i32 %in.elt, ptr %out.elt2.ptr, align 8908 %out.elt3.ptr = getelementptr i32, ptr %out.vec.ptr, i64 3909 store i32 %in.elt, ptr %out.elt3.ptr, align 4910 %out.elt4.ptr = getelementptr i32, ptr %out.vec.ptr, i64 4911 store i32 %in.elt, ptr %out.elt4.ptr, align 16912 %out.elt5.ptr = getelementptr i32, ptr %out.vec.ptr, i64 5913 store i32 %in.elt, ptr %out.elt5.ptr, align 4914 %out.elt6.ptr = getelementptr i32, ptr %out.vec.ptr, i64 6915 store i32 %in.elt, ptr %out.elt6.ptr, align 8916 %out.elt7.ptr = getelementptr i32, ptr %out.vec.ptr, i64 7917 store i32 %in.elt, ptr %out.elt7.ptr, align 4918 %out.elt8.ptr = getelementptr i32, ptr %out.vec.ptr, i64 8919 store i32 %in.elt, ptr %out.elt8.ptr, align 32920 %out.elt9.ptr = getelementptr i32, ptr %out.vec.ptr, i64 9921 store i32 %in.elt, ptr %out.elt9.ptr, align 4922 %out.elt10.ptr = getelementptr i32, ptr %out.vec.ptr, i64 10923 store i32 %in.elt, ptr %out.elt10.ptr, align 8924 %out.elt11.ptr = getelementptr i32, ptr %out.vec.ptr, i64 11925 store i32 %in.elt, ptr %out.elt11.ptr, align 4926 ret void927}928 929define void @vec384_float(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {930; ALL-LABEL: vec384_float:931; ALL: # %bb.0:932; ALL-NEXT: movl (%rdi), %eax933; ALL-NEXT: notl %eax934; ALL-NEXT: movl %eax, (%rsi)935; ALL-NEXT: movl %eax, 4(%rsi)936; ALL-NEXT: movl %eax, 8(%rsi)937; ALL-NEXT: movl %eax, 12(%rsi)938; ALL-NEXT: movl %eax, 16(%rsi)939; ALL-NEXT: movl %eax, 20(%rsi)940; ALL-NEXT: movl %eax, 24(%rsi)941; ALL-NEXT: movl %eax, 28(%rsi)942; ALL-NEXT: movl %eax, 32(%rsi)943; ALL-NEXT: movl %eax, 36(%rsi)944; ALL-NEXT: movl %eax, 40(%rsi)945; ALL-NEXT: movl %eax, 44(%rsi)946; ALL-NEXT: retq947 %in.elt.not = load i32, ptr %in.elt.ptr, align 64948 %in.elt.int = xor i32 %in.elt.not, -1949 %in.elt = bitcast i32 %in.elt.int to float950 %out.elt0.ptr = getelementptr float, ptr %out.vec.ptr, i64 0951 store float %in.elt, ptr %out.elt0.ptr, align 64952 %out.elt1.ptr = getelementptr float, ptr %out.vec.ptr, i64 1953 store float %in.elt, ptr %out.elt1.ptr, align 4954 %out.elt2.ptr = getelementptr float, ptr %out.vec.ptr, i64 2955 store float %in.elt, ptr %out.elt2.ptr, align 8956 %out.elt3.ptr = getelementptr float, ptr %out.vec.ptr, i64 3957 store float %in.elt, ptr %out.elt3.ptr, align 4958 %out.elt4.ptr = getelementptr float, ptr %out.vec.ptr, i64 4959 store float %in.elt, ptr %out.elt4.ptr, align 16960 %out.elt5.ptr = getelementptr float, ptr %out.vec.ptr, i64 5961 store float %in.elt, ptr %out.elt5.ptr, align 4962 %out.elt6.ptr = getelementptr float, ptr %out.vec.ptr, i64 6963 store float %in.elt, ptr %out.elt6.ptr, align 8964 %out.elt7.ptr = getelementptr float, ptr %out.vec.ptr, i64 7965 store float %in.elt, ptr %out.elt7.ptr, align 4966 %out.elt8.ptr = getelementptr float, ptr %out.vec.ptr, i64 8967 store float %in.elt, ptr %out.elt8.ptr, align 32968 %out.elt9.ptr = getelementptr float, ptr %out.vec.ptr, i64 9969 store float %in.elt, ptr %out.elt9.ptr, align 4970 %out.elt10.ptr = getelementptr float, ptr %out.vec.ptr, i64 10971 store float %in.elt, ptr %out.elt10.ptr, align 8972 %out.elt11.ptr = getelementptr float, ptr %out.vec.ptr, i64 11973 store float %in.elt, ptr %out.elt11.ptr, align 4974 ret void975}976 977define void @vec384_i64(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {978; ALL-LABEL: vec384_i64:979; ALL: # %bb.0:980; ALL-NEXT: movq (%rdi), %rax981; ALL-NEXT: notq %rax982; ALL-NEXT: movq %rax, (%rsi)983; ALL-NEXT: movq %rax, 8(%rsi)984; ALL-NEXT: movq %rax, 16(%rsi)985; ALL-NEXT: movq %rax, 24(%rsi)986; ALL-NEXT: movq %rax, 32(%rsi)987; ALL-NEXT: movq %rax, 40(%rsi)988; ALL-NEXT: retq989 %in.elt.not = load i64, ptr %in.elt.ptr, align 64990 %in.elt = xor i64 %in.elt.not, -1991 %out.elt0.ptr = getelementptr i64, ptr %out.vec.ptr, i64 0992 store i64 %in.elt, ptr %out.elt0.ptr, align 64993 %out.elt1.ptr = getelementptr i64, ptr %out.vec.ptr, i64 1994 store i64 %in.elt, ptr %out.elt1.ptr, align 8995 %out.elt2.ptr = getelementptr i64, ptr %out.vec.ptr, i64 2996 store i64 %in.elt, ptr %out.elt2.ptr, align 16997 %out.elt3.ptr = getelementptr i64, ptr %out.vec.ptr, i64 3998 store i64 %in.elt, ptr %out.elt3.ptr, align 8999 %out.elt4.ptr = getelementptr i64, ptr %out.vec.ptr, i64 41000 store i64 %in.elt, ptr %out.elt4.ptr, align 321001 %out.elt5.ptr = getelementptr i64, ptr %out.vec.ptr, i64 51002 store i64 %in.elt, ptr %out.elt5.ptr, align 81003 ret void1004}1005 1006define void @vec384_double(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {1007; ALL-LABEL: vec384_double:1008; ALL: # %bb.0:1009; ALL-NEXT: movq (%rdi), %rax1010; ALL-NEXT: notq %rax1011; ALL-NEXT: movq %rax, (%rsi)1012; ALL-NEXT: movq %rax, 8(%rsi)1013; ALL-NEXT: movq %rax, 16(%rsi)1014; ALL-NEXT: movq %rax, 24(%rsi)1015; ALL-NEXT: movq %rax, 32(%rsi)1016; ALL-NEXT: movq %rax, 40(%rsi)1017; ALL-NEXT: retq1018 %in.elt.not = load i64, ptr %in.elt.ptr, align 641019 %in.elt.int = xor i64 %in.elt.not, -11020 %in.elt = bitcast i64 %in.elt.int to double1021 %out.elt0.ptr = getelementptr double, ptr %out.vec.ptr, i64 01022 store double %in.elt, ptr %out.elt0.ptr, align 641023 %out.elt1.ptr = getelementptr double, ptr %out.vec.ptr, i64 11024 store double %in.elt, ptr %out.elt1.ptr, align 81025 %out.elt2.ptr = getelementptr double, ptr %out.vec.ptr, i64 21026 store double %in.elt, ptr %out.elt2.ptr, align 161027 %out.elt3.ptr = getelementptr double, ptr %out.vec.ptr, i64 31028 store double %in.elt, ptr %out.elt3.ptr, align 81029 %out.elt4.ptr = getelementptr double, ptr %out.vec.ptr, i64 41030 store double %in.elt, ptr %out.elt4.ptr, align 321031 %out.elt5.ptr = getelementptr double, ptr %out.vec.ptr, i64 51032 store double %in.elt, ptr %out.elt5.ptr, align 81033 ret void1034}1035 1036define void @vec384_i128(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {1037; ALL-LABEL: vec384_i128:1038; ALL: # %bb.0:1039; ALL-NEXT: movq (%rdi), %rax1040; ALL-NEXT: movq 8(%rdi), %rcx1041; ALL-NEXT: notq %rcx1042; ALL-NEXT: notq %rax1043; ALL-NEXT: movq %rax, (%rsi)1044; ALL-NEXT: movq %rcx, 8(%rsi)1045; ALL-NEXT: movq %rcx, 24(%rsi)1046; ALL-NEXT: movq %rax, 16(%rsi)1047; ALL-NEXT: movq %rcx, 40(%rsi)1048; ALL-NEXT: movq %rax, 32(%rsi)1049; ALL-NEXT: retq1050 %in.elt.not = load i128, ptr %in.elt.ptr, align 641051 %in.elt = xor i128 %in.elt.not, -11052 %out.elt0.ptr = getelementptr i128, ptr %out.vec.ptr, i64 01053 store i128 %in.elt, ptr %out.elt0.ptr, align 641054 %out.elt1.ptr = getelementptr i128, ptr %out.vec.ptr, i64 11055 store i128 %in.elt, ptr %out.elt1.ptr, align 161056 %out.elt2.ptr = getelementptr i128, ptr %out.vec.ptr, i64 21057 store i128 %in.elt, ptr %out.elt2.ptr, align 321058 ret void1059}1060 1061define void @vec512_i8(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {1062; ALL-LABEL: vec512_i8:1063; ALL: # %bb.0:1064; ALL-NEXT: movzbl (%rdi), %eax1065; ALL-NEXT: notb %al1066; ALL-NEXT: movb %al, (%rsi)1067; ALL-NEXT: movb %al, 1(%rsi)1068; ALL-NEXT: movb %al, 2(%rsi)1069; ALL-NEXT: movb %al, 3(%rsi)1070; ALL-NEXT: movb %al, 4(%rsi)1071; ALL-NEXT: movb %al, 5(%rsi)1072; ALL-NEXT: movb %al, 6(%rsi)1073; ALL-NEXT: movb %al, 7(%rsi)1074; ALL-NEXT: movb %al, 8(%rsi)1075; ALL-NEXT: movb %al, 9(%rsi)1076; ALL-NEXT: movb %al, 10(%rsi)1077; ALL-NEXT: movb %al, 11(%rsi)1078; ALL-NEXT: movb %al, 12(%rsi)1079; ALL-NEXT: movb %al, 13(%rsi)1080; ALL-NEXT: movb %al, 14(%rsi)1081; ALL-NEXT: movb %al, 15(%rsi)1082; ALL-NEXT: movb %al, 16(%rsi)1083; ALL-NEXT: movb %al, 17(%rsi)1084; ALL-NEXT: movb %al, 18(%rsi)1085; ALL-NEXT: movb %al, 19(%rsi)1086; ALL-NEXT: movb %al, 20(%rsi)1087; ALL-NEXT: movb %al, 21(%rsi)1088; ALL-NEXT: movb %al, 22(%rsi)1089; ALL-NEXT: movb %al, 23(%rsi)1090; ALL-NEXT: movb %al, 24(%rsi)1091; ALL-NEXT: movb %al, 25(%rsi)1092; ALL-NEXT: movb %al, 26(%rsi)1093; ALL-NEXT: movb %al, 27(%rsi)1094; ALL-NEXT: movb %al, 28(%rsi)1095; ALL-NEXT: movb %al, 29(%rsi)1096; ALL-NEXT: movb %al, 30(%rsi)1097; ALL-NEXT: movb %al, 31(%rsi)1098; ALL-NEXT: movb %al, 32(%rsi)1099; ALL-NEXT: movb %al, 33(%rsi)1100; ALL-NEXT: movb %al, 34(%rsi)1101; ALL-NEXT: movb %al, 35(%rsi)1102; ALL-NEXT: movb %al, 36(%rsi)1103; ALL-NEXT: movb %al, 37(%rsi)1104; ALL-NEXT: movb %al, 38(%rsi)1105; ALL-NEXT: movb %al, 39(%rsi)1106; ALL-NEXT: movb %al, 40(%rsi)1107; ALL-NEXT: movb %al, 41(%rsi)1108; ALL-NEXT: movb %al, 42(%rsi)1109; ALL-NEXT: movb %al, 43(%rsi)1110; ALL-NEXT: movb %al, 44(%rsi)1111; ALL-NEXT: movb %al, 45(%rsi)1112; ALL-NEXT: movb %al, 46(%rsi)1113; ALL-NEXT: movb %al, 47(%rsi)1114; ALL-NEXT: movb %al, 48(%rsi)1115; ALL-NEXT: movb %al, 49(%rsi)1116; ALL-NEXT: movb %al, 50(%rsi)1117; ALL-NEXT: movb %al, 51(%rsi)1118; ALL-NEXT: movb %al, 52(%rsi)1119; ALL-NEXT: movb %al, 53(%rsi)1120; ALL-NEXT: movb %al, 54(%rsi)1121; ALL-NEXT: movb %al, 55(%rsi)1122; ALL-NEXT: movb %al, 56(%rsi)1123; ALL-NEXT: movb %al, 57(%rsi)1124; ALL-NEXT: movb %al, 58(%rsi)1125; ALL-NEXT: movb %al, 59(%rsi)1126; ALL-NEXT: movb %al, 60(%rsi)1127; ALL-NEXT: movb %al, 61(%rsi)1128; ALL-NEXT: movb %al, 62(%rsi)1129; ALL-NEXT: movb %al, 63(%rsi)1130; ALL-NEXT: retq1131 %in.elt.not = load i8, ptr %in.elt.ptr, align 641132 %in.elt = xor i8 %in.elt.not, -11133 %out.elt0.ptr = getelementptr i8, ptr %out.vec.ptr, i64 01134 store i8 %in.elt, ptr %out.elt0.ptr, align 641135 %out.elt1.ptr = getelementptr i8, ptr %out.vec.ptr, i64 11136 store i8 %in.elt, ptr %out.elt1.ptr, align 11137 %out.elt2.ptr = getelementptr i8, ptr %out.vec.ptr, i64 21138 store i8 %in.elt, ptr %out.elt2.ptr, align 21139 %out.elt3.ptr = getelementptr i8, ptr %out.vec.ptr, i64 31140 store i8 %in.elt, ptr %out.elt3.ptr, align 11141 %out.elt4.ptr = getelementptr i8, ptr %out.vec.ptr, i64 41142 store i8 %in.elt, ptr %out.elt4.ptr, align 41143 %out.elt5.ptr = getelementptr i8, ptr %out.vec.ptr, i64 51144 store i8 %in.elt, ptr %out.elt5.ptr, align 11145 %out.elt6.ptr = getelementptr i8, ptr %out.vec.ptr, i64 61146 store i8 %in.elt, ptr %out.elt6.ptr, align 21147 %out.elt7.ptr = getelementptr i8, ptr %out.vec.ptr, i64 71148 store i8 %in.elt, ptr %out.elt7.ptr, align 11149 %out.elt8.ptr = getelementptr i8, ptr %out.vec.ptr, i64 81150 store i8 %in.elt, ptr %out.elt8.ptr, align 81151 %out.elt9.ptr = getelementptr i8, ptr %out.vec.ptr, i64 91152 store i8 %in.elt, ptr %out.elt9.ptr, align 11153 %out.elt10.ptr = getelementptr i8, ptr %out.vec.ptr, i64 101154 store i8 %in.elt, ptr %out.elt10.ptr, align 21155 %out.elt11.ptr = getelementptr i8, ptr %out.vec.ptr, i64 111156 store i8 %in.elt, ptr %out.elt11.ptr, align 11157 %out.elt12.ptr = getelementptr i8, ptr %out.vec.ptr, i64 121158 store i8 %in.elt, ptr %out.elt12.ptr, align 41159 %out.elt13.ptr = getelementptr i8, ptr %out.vec.ptr, i64 131160 store i8 %in.elt, ptr %out.elt13.ptr, align 11161 %out.elt14.ptr = getelementptr i8, ptr %out.vec.ptr, i64 141162 store i8 %in.elt, ptr %out.elt14.ptr, align 21163 %out.elt15.ptr = getelementptr i8, ptr %out.vec.ptr, i64 151164 store i8 %in.elt, ptr %out.elt15.ptr, align 11165 %out.elt16.ptr = getelementptr i8, ptr %out.vec.ptr, i64 161166 store i8 %in.elt, ptr %out.elt16.ptr, align 161167 %out.elt17.ptr = getelementptr i8, ptr %out.vec.ptr, i64 171168 store i8 %in.elt, ptr %out.elt17.ptr, align 11169 %out.elt18.ptr = getelementptr i8, ptr %out.vec.ptr, i64 181170 store i8 %in.elt, ptr %out.elt18.ptr, align 21171 %out.elt19.ptr = getelementptr i8, ptr %out.vec.ptr, i64 191172 store i8 %in.elt, ptr %out.elt19.ptr, align 11173 %out.elt20.ptr = getelementptr i8, ptr %out.vec.ptr, i64 201174 store i8 %in.elt, ptr %out.elt20.ptr, align 41175 %out.elt21.ptr = getelementptr i8, ptr %out.vec.ptr, i64 211176 store i8 %in.elt, ptr %out.elt21.ptr, align 11177 %out.elt22.ptr = getelementptr i8, ptr %out.vec.ptr, i64 221178 store i8 %in.elt, ptr %out.elt22.ptr, align 21179 %out.elt23.ptr = getelementptr i8, ptr %out.vec.ptr, i64 231180 store i8 %in.elt, ptr %out.elt23.ptr, align 11181 %out.elt24.ptr = getelementptr i8, ptr %out.vec.ptr, i64 241182 store i8 %in.elt, ptr %out.elt24.ptr, align 81183 %out.elt25.ptr = getelementptr i8, ptr %out.vec.ptr, i64 251184 store i8 %in.elt, ptr %out.elt25.ptr, align 11185 %out.elt26.ptr = getelementptr i8, ptr %out.vec.ptr, i64 261186 store i8 %in.elt, ptr %out.elt26.ptr, align 21187 %out.elt27.ptr = getelementptr i8, ptr %out.vec.ptr, i64 271188 store i8 %in.elt, ptr %out.elt27.ptr, align 11189 %out.elt28.ptr = getelementptr i8, ptr %out.vec.ptr, i64 281190 store i8 %in.elt, ptr %out.elt28.ptr, align 41191 %out.elt29.ptr = getelementptr i8, ptr %out.vec.ptr, i64 291192 store i8 %in.elt, ptr %out.elt29.ptr, align 11193 %out.elt30.ptr = getelementptr i8, ptr %out.vec.ptr, i64 301194 store i8 %in.elt, ptr %out.elt30.ptr, align 21195 %out.elt31.ptr = getelementptr i8, ptr %out.vec.ptr, i64 311196 store i8 %in.elt, ptr %out.elt31.ptr, align 11197 %out.elt32.ptr = getelementptr i8, ptr %out.vec.ptr, i64 321198 store i8 %in.elt, ptr %out.elt32.ptr, align 321199 %out.elt33.ptr = getelementptr i8, ptr %out.vec.ptr, i64 331200 store i8 %in.elt, ptr %out.elt33.ptr, align 11201 %out.elt34.ptr = getelementptr i8, ptr %out.vec.ptr, i64 341202 store i8 %in.elt, ptr %out.elt34.ptr, align 21203 %out.elt35.ptr = getelementptr i8, ptr %out.vec.ptr, i64 351204 store i8 %in.elt, ptr %out.elt35.ptr, align 11205 %out.elt36.ptr = getelementptr i8, ptr %out.vec.ptr, i64 361206 store i8 %in.elt, ptr %out.elt36.ptr, align 41207 %out.elt37.ptr = getelementptr i8, ptr %out.vec.ptr, i64 371208 store i8 %in.elt, ptr %out.elt37.ptr, align 11209 %out.elt38.ptr = getelementptr i8, ptr %out.vec.ptr, i64 381210 store i8 %in.elt, ptr %out.elt38.ptr, align 21211 %out.elt39.ptr = getelementptr i8, ptr %out.vec.ptr, i64 391212 store i8 %in.elt, ptr %out.elt39.ptr, align 11213 %out.elt40.ptr = getelementptr i8, ptr %out.vec.ptr, i64 401214 store i8 %in.elt, ptr %out.elt40.ptr, align 81215 %out.elt41.ptr = getelementptr i8, ptr %out.vec.ptr, i64 411216 store i8 %in.elt, ptr %out.elt41.ptr, align 11217 %out.elt42.ptr = getelementptr i8, ptr %out.vec.ptr, i64 421218 store i8 %in.elt, ptr %out.elt42.ptr, align 21219 %out.elt43.ptr = getelementptr i8, ptr %out.vec.ptr, i64 431220 store i8 %in.elt, ptr %out.elt43.ptr, align 11221 %out.elt44.ptr = getelementptr i8, ptr %out.vec.ptr, i64 441222 store i8 %in.elt, ptr %out.elt44.ptr, align 41223 %out.elt45.ptr = getelementptr i8, ptr %out.vec.ptr, i64 451224 store i8 %in.elt, ptr %out.elt45.ptr, align 11225 %out.elt46.ptr = getelementptr i8, ptr %out.vec.ptr, i64 461226 store i8 %in.elt, ptr %out.elt46.ptr, align 21227 %out.elt47.ptr = getelementptr i8, ptr %out.vec.ptr, i64 471228 store i8 %in.elt, ptr %out.elt47.ptr, align 11229 %out.elt48.ptr = getelementptr i8, ptr %out.vec.ptr, i64 481230 store i8 %in.elt, ptr %out.elt48.ptr, align 161231 %out.elt49.ptr = getelementptr i8, ptr %out.vec.ptr, i64 491232 store i8 %in.elt, ptr %out.elt49.ptr, align 11233 %out.elt50.ptr = getelementptr i8, ptr %out.vec.ptr, i64 501234 store i8 %in.elt, ptr %out.elt50.ptr, align 21235 %out.elt51.ptr = getelementptr i8, ptr %out.vec.ptr, i64 511236 store i8 %in.elt, ptr %out.elt51.ptr, align 11237 %out.elt52.ptr = getelementptr i8, ptr %out.vec.ptr, i64 521238 store i8 %in.elt, ptr %out.elt52.ptr, align 41239 %out.elt53.ptr = getelementptr i8, ptr %out.vec.ptr, i64 531240 store i8 %in.elt, ptr %out.elt53.ptr, align 11241 %out.elt54.ptr = getelementptr i8, ptr %out.vec.ptr, i64 541242 store i8 %in.elt, ptr %out.elt54.ptr, align 21243 %out.elt55.ptr = getelementptr i8, ptr %out.vec.ptr, i64 551244 store i8 %in.elt, ptr %out.elt55.ptr, align 11245 %out.elt56.ptr = getelementptr i8, ptr %out.vec.ptr, i64 561246 store i8 %in.elt, ptr %out.elt56.ptr, align 81247 %out.elt57.ptr = getelementptr i8, ptr %out.vec.ptr, i64 571248 store i8 %in.elt, ptr %out.elt57.ptr, align 11249 %out.elt58.ptr = getelementptr i8, ptr %out.vec.ptr, i64 581250 store i8 %in.elt, ptr %out.elt58.ptr, align 21251 %out.elt59.ptr = getelementptr i8, ptr %out.vec.ptr, i64 591252 store i8 %in.elt, ptr %out.elt59.ptr, align 11253 %out.elt60.ptr = getelementptr i8, ptr %out.vec.ptr, i64 601254 store i8 %in.elt, ptr %out.elt60.ptr, align 41255 %out.elt61.ptr = getelementptr i8, ptr %out.vec.ptr, i64 611256 store i8 %in.elt, ptr %out.elt61.ptr, align 11257 %out.elt62.ptr = getelementptr i8, ptr %out.vec.ptr, i64 621258 store i8 %in.elt, ptr %out.elt62.ptr, align 21259 %out.elt63.ptr = getelementptr i8, ptr %out.vec.ptr, i64 631260 store i8 %in.elt, ptr %out.elt63.ptr, align 11261 ret void1262}1263 1264define void @vec512_i16(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {1265; ALL-LABEL: vec512_i16:1266; ALL: # %bb.0:1267; ALL-NEXT: movl (%rdi), %eax1268; ALL-NEXT: notl %eax1269; ALL-NEXT: movw %ax, (%rsi)1270; ALL-NEXT: movw %ax, 2(%rsi)1271; ALL-NEXT: movw %ax, 4(%rsi)1272; ALL-NEXT: movw %ax, 6(%rsi)1273; ALL-NEXT: movw %ax, 8(%rsi)1274; ALL-NEXT: movw %ax, 10(%rsi)1275; ALL-NEXT: movw %ax, 12(%rsi)1276; ALL-NEXT: movw %ax, 14(%rsi)1277; ALL-NEXT: movw %ax, 16(%rsi)1278; ALL-NEXT: movw %ax, 18(%rsi)1279; ALL-NEXT: movw %ax, 20(%rsi)1280; ALL-NEXT: movw %ax, 22(%rsi)1281; ALL-NEXT: movw %ax, 24(%rsi)1282; ALL-NEXT: movw %ax, 26(%rsi)1283; ALL-NEXT: movw %ax, 28(%rsi)1284; ALL-NEXT: movw %ax, 30(%rsi)1285; ALL-NEXT: movw %ax, 32(%rsi)1286; ALL-NEXT: movw %ax, 34(%rsi)1287; ALL-NEXT: movw %ax, 36(%rsi)1288; ALL-NEXT: movw %ax, 38(%rsi)1289; ALL-NEXT: movw %ax, 40(%rsi)1290; ALL-NEXT: movw %ax, 42(%rsi)1291; ALL-NEXT: movw %ax, 44(%rsi)1292; ALL-NEXT: movw %ax, 46(%rsi)1293; ALL-NEXT: movw %ax, 48(%rsi)1294; ALL-NEXT: movw %ax, 50(%rsi)1295; ALL-NEXT: movw %ax, 52(%rsi)1296; ALL-NEXT: movw %ax, 54(%rsi)1297; ALL-NEXT: movw %ax, 56(%rsi)1298; ALL-NEXT: movw %ax, 58(%rsi)1299; ALL-NEXT: movw %ax, 60(%rsi)1300; ALL-NEXT: movw %ax, 62(%rsi)1301; ALL-NEXT: retq1302 %in.elt.not = load i16, ptr %in.elt.ptr, align 641303 %in.elt = xor i16 %in.elt.not, -11304 %out.elt0.ptr = getelementptr i16, ptr %out.vec.ptr, i64 01305 store i16 %in.elt, ptr %out.elt0.ptr, align 641306 %out.elt1.ptr = getelementptr i16, ptr %out.vec.ptr, i64 11307 store i16 %in.elt, ptr %out.elt1.ptr, align 21308 %out.elt2.ptr = getelementptr i16, ptr %out.vec.ptr, i64 21309 store i16 %in.elt, ptr %out.elt2.ptr, align 41310 %out.elt3.ptr = getelementptr i16, ptr %out.vec.ptr, i64 31311 store i16 %in.elt, ptr %out.elt3.ptr, align 21312 %out.elt4.ptr = getelementptr i16, ptr %out.vec.ptr, i64 41313 store i16 %in.elt, ptr %out.elt4.ptr, align 81314 %out.elt5.ptr = getelementptr i16, ptr %out.vec.ptr, i64 51315 store i16 %in.elt, ptr %out.elt5.ptr, align 21316 %out.elt6.ptr = getelementptr i16, ptr %out.vec.ptr, i64 61317 store i16 %in.elt, ptr %out.elt6.ptr, align 41318 %out.elt7.ptr = getelementptr i16, ptr %out.vec.ptr, i64 71319 store i16 %in.elt, ptr %out.elt7.ptr, align 21320 %out.elt8.ptr = getelementptr i16, ptr %out.vec.ptr, i64 81321 store i16 %in.elt, ptr %out.elt8.ptr, align 161322 %out.elt9.ptr = getelementptr i16, ptr %out.vec.ptr, i64 91323 store i16 %in.elt, ptr %out.elt9.ptr, align 21324 %out.elt10.ptr = getelementptr i16, ptr %out.vec.ptr, i64 101325 store i16 %in.elt, ptr %out.elt10.ptr, align 41326 %out.elt11.ptr = getelementptr i16, ptr %out.vec.ptr, i64 111327 store i16 %in.elt, ptr %out.elt11.ptr, align 21328 %out.elt12.ptr = getelementptr i16, ptr %out.vec.ptr, i64 121329 store i16 %in.elt, ptr %out.elt12.ptr, align 81330 %out.elt13.ptr = getelementptr i16, ptr %out.vec.ptr, i64 131331 store i16 %in.elt, ptr %out.elt13.ptr, align 21332 %out.elt14.ptr = getelementptr i16, ptr %out.vec.ptr, i64 141333 store i16 %in.elt, ptr %out.elt14.ptr, align 41334 %out.elt15.ptr = getelementptr i16, ptr %out.vec.ptr, i64 151335 store i16 %in.elt, ptr %out.elt15.ptr, align 21336 %out.elt16.ptr = getelementptr i16, ptr %out.vec.ptr, i64 161337 store i16 %in.elt, ptr %out.elt16.ptr, align 321338 %out.elt17.ptr = getelementptr i16, ptr %out.vec.ptr, i64 171339 store i16 %in.elt, ptr %out.elt17.ptr, align 21340 %out.elt18.ptr = getelementptr i16, ptr %out.vec.ptr, i64 181341 store i16 %in.elt, ptr %out.elt18.ptr, align 41342 %out.elt19.ptr = getelementptr i16, ptr %out.vec.ptr, i64 191343 store i16 %in.elt, ptr %out.elt19.ptr, align 21344 %out.elt20.ptr = getelementptr i16, ptr %out.vec.ptr, i64 201345 store i16 %in.elt, ptr %out.elt20.ptr, align 81346 %out.elt21.ptr = getelementptr i16, ptr %out.vec.ptr, i64 211347 store i16 %in.elt, ptr %out.elt21.ptr, align 21348 %out.elt22.ptr = getelementptr i16, ptr %out.vec.ptr, i64 221349 store i16 %in.elt, ptr %out.elt22.ptr, align 41350 %out.elt23.ptr = getelementptr i16, ptr %out.vec.ptr, i64 231351 store i16 %in.elt, ptr %out.elt23.ptr, align 21352 %out.elt24.ptr = getelementptr i16, ptr %out.vec.ptr, i64 241353 store i16 %in.elt, ptr %out.elt24.ptr, align 161354 %out.elt25.ptr = getelementptr i16, ptr %out.vec.ptr, i64 251355 store i16 %in.elt, ptr %out.elt25.ptr, align 21356 %out.elt26.ptr = getelementptr i16, ptr %out.vec.ptr, i64 261357 store i16 %in.elt, ptr %out.elt26.ptr, align 41358 %out.elt27.ptr = getelementptr i16, ptr %out.vec.ptr, i64 271359 store i16 %in.elt, ptr %out.elt27.ptr, align 21360 %out.elt28.ptr = getelementptr i16, ptr %out.vec.ptr, i64 281361 store i16 %in.elt, ptr %out.elt28.ptr, align 81362 %out.elt29.ptr = getelementptr i16, ptr %out.vec.ptr, i64 291363 store i16 %in.elt, ptr %out.elt29.ptr, align 21364 %out.elt30.ptr = getelementptr i16, ptr %out.vec.ptr, i64 301365 store i16 %in.elt, ptr %out.elt30.ptr, align 41366 %out.elt31.ptr = getelementptr i16, ptr %out.vec.ptr, i64 311367 store i16 %in.elt, ptr %out.elt31.ptr, align 21368 ret void1369}1370 1371define void @vec512_i32(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {1372; ALL-LABEL: vec512_i32:1373; ALL: # %bb.0:1374; ALL-NEXT: movl (%rdi), %eax1375; ALL-NEXT: notl %eax1376; ALL-NEXT: movl %eax, (%rsi)1377; ALL-NEXT: movl %eax, 4(%rsi)1378; ALL-NEXT: movl %eax, 8(%rsi)1379; ALL-NEXT: movl %eax, 12(%rsi)1380; ALL-NEXT: movl %eax, 16(%rsi)1381; ALL-NEXT: movl %eax, 20(%rsi)1382; ALL-NEXT: movl %eax, 24(%rsi)1383; ALL-NEXT: movl %eax, 28(%rsi)1384; ALL-NEXT: movl %eax, 32(%rsi)1385; ALL-NEXT: movl %eax, 36(%rsi)1386; ALL-NEXT: movl %eax, 40(%rsi)1387; ALL-NEXT: movl %eax, 44(%rsi)1388; ALL-NEXT: movl %eax, 48(%rsi)1389; ALL-NEXT: movl %eax, 52(%rsi)1390; ALL-NEXT: movl %eax, 56(%rsi)1391; ALL-NEXT: movl %eax, 60(%rsi)1392; ALL-NEXT: retq1393 %in.elt.not = load i32, ptr %in.elt.ptr, align 641394 %in.elt = xor i32 %in.elt.not, -11395 %out.elt0.ptr = getelementptr i32, ptr %out.vec.ptr, i64 01396 store i32 %in.elt, ptr %out.elt0.ptr, align 641397 %out.elt1.ptr = getelementptr i32, ptr %out.vec.ptr, i64 11398 store i32 %in.elt, ptr %out.elt1.ptr, align 41399 %out.elt2.ptr = getelementptr i32, ptr %out.vec.ptr, i64 21400 store i32 %in.elt, ptr %out.elt2.ptr, align 81401 %out.elt3.ptr = getelementptr i32, ptr %out.vec.ptr, i64 31402 store i32 %in.elt, ptr %out.elt3.ptr, align 41403 %out.elt4.ptr = getelementptr i32, ptr %out.vec.ptr, i64 41404 store i32 %in.elt, ptr %out.elt4.ptr, align 161405 %out.elt5.ptr = getelementptr i32, ptr %out.vec.ptr, i64 51406 store i32 %in.elt, ptr %out.elt5.ptr, align 41407 %out.elt6.ptr = getelementptr i32, ptr %out.vec.ptr, i64 61408 store i32 %in.elt, ptr %out.elt6.ptr, align 81409 %out.elt7.ptr = getelementptr i32, ptr %out.vec.ptr, i64 71410 store i32 %in.elt, ptr %out.elt7.ptr, align 41411 %out.elt8.ptr = getelementptr i32, ptr %out.vec.ptr, i64 81412 store i32 %in.elt, ptr %out.elt8.ptr, align 321413 %out.elt9.ptr = getelementptr i32, ptr %out.vec.ptr, i64 91414 store i32 %in.elt, ptr %out.elt9.ptr, align 41415 %out.elt10.ptr = getelementptr i32, ptr %out.vec.ptr, i64 101416 store i32 %in.elt, ptr %out.elt10.ptr, align 81417 %out.elt11.ptr = getelementptr i32, ptr %out.vec.ptr, i64 111418 store i32 %in.elt, ptr %out.elt11.ptr, align 41419 %out.elt12.ptr = getelementptr i32, ptr %out.vec.ptr, i64 121420 store i32 %in.elt, ptr %out.elt12.ptr, align 161421 %out.elt13.ptr = getelementptr i32, ptr %out.vec.ptr, i64 131422 store i32 %in.elt, ptr %out.elt13.ptr, align 41423 %out.elt14.ptr = getelementptr i32, ptr %out.vec.ptr, i64 141424 store i32 %in.elt, ptr %out.elt14.ptr, align 81425 %out.elt15.ptr = getelementptr i32, ptr %out.vec.ptr, i64 151426 store i32 %in.elt, ptr %out.elt15.ptr, align 41427 ret void1428}1429 1430define void @vec512_float(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {1431; ALL-LABEL: vec512_float:1432; ALL: # %bb.0:1433; ALL-NEXT: movl (%rdi), %eax1434; ALL-NEXT: notl %eax1435; ALL-NEXT: movl %eax, (%rsi)1436; ALL-NEXT: movl %eax, 4(%rsi)1437; ALL-NEXT: movl %eax, 8(%rsi)1438; ALL-NEXT: movl %eax, 12(%rsi)1439; ALL-NEXT: movl %eax, 16(%rsi)1440; ALL-NEXT: movl %eax, 20(%rsi)1441; ALL-NEXT: movl %eax, 24(%rsi)1442; ALL-NEXT: movl %eax, 28(%rsi)1443; ALL-NEXT: movl %eax, 32(%rsi)1444; ALL-NEXT: movl %eax, 36(%rsi)1445; ALL-NEXT: movl %eax, 40(%rsi)1446; ALL-NEXT: movl %eax, 44(%rsi)1447; ALL-NEXT: movl %eax, 48(%rsi)1448; ALL-NEXT: movl %eax, 52(%rsi)1449; ALL-NEXT: movl %eax, 56(%rsi)1450; ALL-NEXT: movl %eax, 60(%rsi)1451; ALL-NEXT: retq1452 %in.elt.not = load i32, ptr %in.elt.ptr, align 641453 %in.elt.int = xor i32 %in.elt.not, -11454 %in.elt = bitcast i32 %in.elt.int to float1455 %out.elt0.ptr = getelementptr float, ptr %out.vec.ptr, i64 01456 store float %in.elt, ptr %out.elt0.ptr, align 641457 %out.elt1.ptr = getelementptr float, ptr %out.vec.ptr, i64 11458 store float %in.elt, ptr %out.elt1.ptr, align 41459 %out.elt2.ptr = getelementptr float, ptr %out.vec.ptr, i64 21460 store float %in.elt, ptr %out.elt2.ptr, align 81461 %out.elt3.ptr = getelementptr float, ptr %out.vec.ptr, i64 31462 store float %in.elt, ptr %out.elt3.ptr, align 41463 %out.elt4.ptr = getelementptr float, ptr %out.vec.ptr, i64 41464 store float %in.elt, ptr %out.elt4.ptr, align 161465 %out.elt5.ptr = getelementptr float, ptr %out.vec.ptr, i64 51466 store float %in.elt, ptr %out.elt5.ptr, align 41467 %out.elt6.ptr = getelementptr float, ptr %out.vec.ptr, i64 61468 store float %in.elt, ptr %out.elt6.ptr, align 81469 %out.elt7.ptr = getelementptr float, ptr %out.vec.ptr, i64 71470 store float %in.elt, ptr %out.elt7.ptr, align 41471 %out.elt8.ptr = getelementptr float, ptr %out.vec.ptr, i64 81472 store float %in.elt, ptr %out.elt8.ptr, align 321473 %out.elt9.ptr = getelementptr float, ptr %out.vec.ptr, i64 91474 store float %in.elt, ptr %out.elt9.ptr, align 41475 %out.elt10.ptr = getelementptr float, ptr %out.vec.ptr, i64 101476 store float %in.elt, ptr %out.elt10.ptr, align 81477 %out.elt11.ptr = getelementptr float, ptr %out.vec.ptr, i64 111478 store float %in.elt, ptr %out.elt11.ptr, align 41479 %out.elt12.ptr = getelementptr float, ptr %out.vec.ptr, i64 121480 store float %in.elt, ptr %out.elt12.ptr, align 161481 %out.elt13.ptr = getelementptr float, ptr %out.vec.ptr, i64 131482 store float %in.elt, ptr %out.elt13.ptr, align 41483 %out.elt14.ptr = getelementptr float, ptr %out.vec.ptr, i64 141484 store float %in.elt, ptr %out.elt14.ptr, align 81485 %out.elt15.ptr = getelementptr float, ptr %out.vec.ptr, i64 151486 store float %in.elt, ptr %out.elt15.ptr, align 41487 ret void1488}1489 1490define void @vec512_i64(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {1491; ALL-LABEL: vec512_i64:1492; ALL: # %bb.0:1493; ALL-NEXT: movq (%rdi), %rax1494; ALL-NEXT: notq %rax1495; ALL-NEXT: movq %rax, (%rsi)1496; ALL-NEXT: movq %rax, 8(%rsi)1497; ALL-NEXT: movq %rax, 16(%rsi)1498; ALL-NEXT: movq %rax, 24(%rsi)1499; ALL-NEXT: movq %rax, 32(%rsi)1500; ALL-NEXT: movq %rax, 40(%rsi)1501; ALL-NEXT: movq %rax, 48(%rsi)1502; ALL-NEXT: movq %rax, 56(%rsi)1503; ALL-NEXT: retq1504 %in.elt.not = load i64, ptr %in.elt.ptr, align 641505 %in.elt = xor i64 %in.elt.not, -11506 %out.elt0.ptr = getelementptr i64, ptr %out.vec.ptr, i64 01507 store i64 %in.elt, ptr %out.elt0.ptr, align 641508 %out.elt1.ptr = getelementptr i64, ptr %out.vec.ptr, i64 11509 store i64 %in.elt, ptr %out.elt1.ptr, align 81510 %out.elt2.ptr = getelementptr i64, ptr %out.vec.ptr, i64 21511 store i64 %in.elt, ptr %out.elt2.ptr, align 161512 %out.elt3.ptr = getelementptr i64, ptr %out.vec.ptr, i64 31513 store i64 %in.elt, ptr %out.elt3.ptr, align 81514 %out.elt4.ptr = getelementptr i64, ptr %out.vec.ptr, i64 41515 store i64 %in.elt, ptr %out.elt4.ptr, align 321516 %out.elt5.ptr = getelementptr i64, ptr %out.vec.ptr, i64 51517 store i64 %in.elt, ptr %out.elt5.ptr, align 81518 %out.elt6.ptr = getelementptr i64, ptr %out.vec.ptr, i64 61519 store i64 %in.elt, ptr %out.elt6.ptr, align 161520 %out.elt7.ptr = getelementptr i64, ptr %out.vec.ptr, i64 71521 store i64 %in.elt, ptr %out.elt7.ptr, align 81522 ret void1523}1524 1525define void @vec512_double(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {1526; ALL-LABEL: vec512_double:1527; ALL: # %bb.0:1528; ALL-NEXT: movq (%rdi), %rax1529; ALL-NEXT: notq %rax1530; ALL-NEXT: movq %rax, (%rsi)1531; ALL-NEXT: movq %rax, 8(%rsi)1532; ALL-NEXT: movq %rax, 16(%rsi)1533; ALL-NEXT: movq %rax, 24(%rsi)1534; ALL-NEXT: movq %rax, 32(%rsi)1535; ALL-NEXT: movq %rax, 40(%rsi)1536; ALL-NEXT: movq %rax, 48(%rsi)1537; ALL-NEXT: movq %rax, 56(%rsi)1538; ALL-NEXT: retq1539 %in.elt.not = load i64, ptr %in.elt.ptr, align 641540 %in.elt.int = xor i64 %in.elt.not, -11541 %in.elt = bitcast i64 %in.elt.int to double1542 %out.elt0.ptr = getelementptr double, ptr %out.vec.ptr, i64 01543 store double %in.elt, ptr %out.elt0.ptr, align 641544 %out.elt1.ptr = getelementptr double, ptr %out.vec.ptr, i64 11545 store double %in.elt, ptr %out.elt1.ptr, align 81546 %out.elt2.ptr = getelementptr double, ptr %out.vec.ptr, i64 21547 store double %in.elt, ptr %out.elt2.ptr, align 161548 %out.elt3.ptr = getelementptr double, ptr %out.vec.ptr, i64 31549 store double %in.elt, ptr %out.elt3.ptr, align 81550 %out.elt4.ptr = getelementptr double, ptr %out.vec.ptr, i64 41551 store double %in.elt, ptr %out.elt4.ptr, align 321552 %out.elt5.ptr = getelementptr double, ptr %out.vec.ptr, i64 51553 store double %in.elt, ptr %out.elt5.ptr, align 81554 %out.elt6.ptr = getelementptr double, ptr %out.vec.ptr, i64 61555 store double %in.elt, ptr %out.elt6.ptr, align 161556 %out.elt7.ptr = getelementptr double, ptr %out.vec.ptr, i64 71557 store double %in.elt, ptr %out.elt7.ptr, align 81558 ret void1559}1560 1561define void @vec512_i128(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {1562; ALL-LABEL: vec512_i128:1563; ALL: # %bb.0:1564; ALL-NEXT: movq (%rdi), %rax1565; ALL-NEXT: movq 8(%rdi), %rcx1566; ALL-NEXT: notq %rcx1567; ALL-NEXT: notq %rax1568; ALL-NEXT: movq %rax, (%rsi)1569; ALL-NEXT: movq %rcx, 8(%rsi)1570; ALL-NEXT: movq %rcx, 24(%rsi)1571; ALL-NEXT: movq %rax, 16(%rsi)1572; ALL-NEXT: movq %rcx, 40(%rsi)1573; ALL-NEXT: movq %rax, 32(%rsi)1574; ALL-NEXT: movq %rcx, 56(%rsi)1575; ALL-NEXT: movq %rax, 48(%rsi)1576; ALL-NEXT: retq1577 %in.elt.not = load i128, ptr %in.elt.ptr, align 641578 %in.elt = xor i128 %in.elt.not, -11579 %out.elt0.ptr = getelementptr i128, ptr %out.vec.ptr, i64 01580 store i128 %in.elt, ptr %out.elt0.ptr, align 641581 %out.elt1.ptr = getelementptr i128, ptr %out.vec.ptr, i64 11582 store i128 %in.elt, ptr %out.elt1.ptr, align 161583 %out.elt2.ptr = getelementptr i128, ptr %out.vec.ptr, i64 21584 store i128 %in.elt, ptr %out.elt2.ptr, align 321585 %out.elt3.ptr = getelementptr i128, ptr %out.vec.ptr, i64 31586 store i128 %in.elt, ptr %out.elt3.ptr, align 161587 ret void1588}1589 1590define void @vec512_i256(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {1591; ALL-LABEL: vec512_i256:1592; ALL: # %bb.0:1593; ALL-NEXT: movq 16(%rdi), %rax1594; ALL-NEXT: movq 24(%rdi), %rcx1595; ALL-NEXT: movq (%rdi), %rdx1596; ALL-NEXT: movq 8(%rdi), %rdi1597; ALL-NEXT: notq %rdi1598; ALL-NEXT: notq %rdx1599; ALL-NEXT: notq %rcx1600; ALL-NEXT: notq %rax1601; ALL-NEXT: movq %rax, 16(%rsi)1602; ALL-NEXT: movq %rcx, 24(%rsi)1603; ALL-NEXT: movq %rdx, (%rsi)1604; ALL-NEXT: movq %rdi, 8(%rsi)1605; ALL-NEXT: movq %rax, 48(%rsi)1606; ALL-NEXT: movq %rcx, 56(%rsi)1607; ALL-NEXT: movq %rdx, 32(%rsi)1608; ALL-NEXT: movq %rdi, 40(%rsi)1609; ALL-NEXT: retq1610 %in.elt.not = load i256, ptr %in.elt.ptr, align 641611 %in.elt = xor i256 %in.elt.not, -11612 %out.elt0.ptr = getelementptr i256, ptr %out.vec.ptr, i64 01613 store i256 %in.elt, ptr %out.elt0.ptr, align 641614 %out.elt1.ptr = getelementptr i256, ptr %out.vec.ptr, i64 11615 store i256 %in.elt, ptr %out.elt1.ptr, align 321616 ret void1617}1618;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:1619; AVX: {{.*}}1620; AVX1: {{.*}}1621; AVX2: {{.*}}1622; AVX512: {{.*}}1623; AVX512BW: {{.*}}1624; AVX512F: {{.*}}1625; SCALAR: {{.*}}1626; SSE: {{.*}}1627; SSE2: {{.*}}1628; SSE2-ONLY: {{.*}}1629; SSE3: {{.*}}1630; SSE41: {{.*}}1631; SSE42: {{.*}}1632; SSSE3: {{.*}}1633; SSSE3-ONLY: {{.*}}1634