brintos

brintos / llvm-project-archived public Read only

0
0
Text · 22.2 KiB · 5ae1b06 Raw
424 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -fast-isel -mtriple=x86_64-unknown-unknown -mattr=+kl,+widekl | FileCheck %s3 4; NOTE: This should use IR equivalent to what is generated by clang/test/CodeGen/X86/keylocker-builtins.c5 6define void @test_loadiwkey(i32 %ctl, <2 x i64> %intkey, <2 x i64> %enkey_lo, <2 x i64> %enkey_hi) {7; CHECK-LABEL: test_loadiwkey:8; CHECK:       # %bb.0: # %entry9; CHECK-NEXT:    movl %edi, %eax10; CHECK-NEXT:    loadiwkey %xmm2, %xmm111; CHECK-NEXT:    retq12entry:13  tail call void @llvm.x86.loadiwkey(<2 x i64> %intkey, <2 x i64> %enkey_lo, <2 x i64> %enkey_hi, i32 %ctl)14  ret void15}16 17define i32 @test_encodekey128_u32(i32 %htype, <2 x i64> %key, ptr nocapture %h) {18; CHECK-LABEL: test_encodekey128_u32:19; CHECK:       # %bb.0: # %entry20; CHECK-NEXT:    encodekey128 %edi, %eax21; CHECK-NEXT:    movups %xmm0, (%rsi)22; CHECK-NEXT:    movups %xmm1, 16(%rsi)23; CHECK-NEXT:    movups %xmm2, 32(%rsi)24; CHECK-NEXT:    movups %xmm4, 48(%rsi)25; CHECK-NEXT:    movups %xmm5, 64(%rsi)26; CHECK-NEXT:    movups %xmm6, 80(%rsi)27; CHECK-NEXT:    retq28entry:29  %0 = tail call { i32, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.x86.encodekey128(i32 %htype, <2 x i64> %key)30  %1 = extractvalue { i32, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %0, 131  store <2 x i64> %1, ptr %h, align 132  %2 = extractvalue { i32, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %0, 233  %3 = getelementptr i8, ptr %h, i64 1634  store <2 x i64> %2, ptr %3, align 135  %4 = extractvalue { i32, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %0, 336  %5 = getelementptr i8, ptr %h, i64 3237  store <2 x i64> %4, ptr %5, align 138  %6 = extractvalue { i32, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %0, 439  %7 = getelementptr i8, ptr %h, i64 4840  store <2 x i64> %6, ptr %7, align 141  %8 = extractvalue { i32, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %0, 542  %9 = getelementptr i8, ptr %h, i64 6443  store <2 x i64> %8, ptr %9, align 144  %10 = extractvalue { i32, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %0, 645  %11 = getelementptr i8, ptr %h, i64 8046  store <2 x i64> %10, ptr %11, align 147  %12 = extractvalue { i32, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %0, 048  ret i32 %1249}50 51define i32 @test_encodekey256_u32(i32 %htype, <2 x i64> %key_lo, <2 x i64> %key_hi, ptr nocapture %h) {52; CHECK-LABEL: test_encodekey256_u32:53; CHECK:       # %bb.0: # %entry54; CHECK-NEXT:    encodekey256 %edi, %eax55; CHECK-NEXT:    movups %xmm0, (%rsi)56; CHECK-NEXT:    movups %xmm1, 16(%rsi)57; CHECK-NEXT:    movups %xmm2, 32(%rsi)58; CHECK-NEXT:    movups %xmm3, 48(%rsi)59; CHECK-NEXT:    movups %xmm4, 64(%rsi)60; CHECK-NEXT:    movups %xmm5, 80(%rsi)61; CHECK-NEXT:    movups %xmm6, 96(%rsi)62; CHECK-NEXT:    retq63entry:64  %0 = tail call { i32, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.x86.encodekey256(i32 %htype, <2 x i64> %key_lo, <2 x i64> %key_hi)65  %1 = extractvalue { i32, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %0, 166  store <2 x i64> %1, ptr %h, align 167  %2 = extractvalue { i32, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %0, 268  %3 = getelementptr i8, ptr %h, i64 1669  store <2 x i64> %2, ptr %3, align 170  %4 = extractvalue { i32, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %0, 371  %5 = getelementptr i8, ptr %h, i64 3272  store <2 x i64> %4, ptr %5, align 173  %6 = extractvalue { i32, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %0, 474  %7 = getelementptr i8, ptr %h, i64 4875  store <2 x i64> %6, ptr %7, align 176  %8 = extractvalue { i32, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %0, 577  %9 = getelementptr i8, ptr %h, i64 6478  store <2 x i64> %8, ptr %9, align 179  %10 = extractvalue { i32, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %0, 680  %11 = getelementptr i8, ptr %h, i64 8081  store <2 x i64> %10, ptr %11, align 182  %12 = extractvalue { i32, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %0, 783  %13 = getelementptr i8, ptr %h, i64 9684  store <2 x i64> %12, ptr %13, align 185  %14 = extractvalue { i32, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %0, 086  ret i32 %1487}88 89define zeroext i8 @test_mm_aesenc256kl_u8(ptr %odata, <2 x i64> %idata, ptr %h) {90; CHECK-LABEL: test_mm_aesenc256kl_u8:91; CHECK:       # %bb.0: # %entry92; CHECK-NEXT:    aesenc256kl (%rsi), %xmm093; CHECK-NEXT:    sete %al94; CHECK-NEXT:    movaps %xmm0, (%rdi)95; CHECK-NEXT:    retq96entry:97  %0 = tail call { i8, <2 x i64> } @llvm.x86.aesenc256kl(<2 x i64> %idata, ptr %h) #198  %1 = extractvalue { i8, <2 x i64> } %0, 199  store <2 x i64> %1, ptr %odata, align 16100  %2 = extractvalue { i8, <2 x i64> } %0, 0101  ret i8 %2102}103 104define zeroext i8 @test_mm_aesdec256kl_u8(ptr %odata, <2 x i64> %idata, ptr %h) {105; CHECK-LABEL: test_mm_aesdec256kl_u8:106; CHECK:       # %bb.0: # %entry107; CHECK-NEXT:    aesdec256kl (%rsi), %xmm0108; CHECK-NEXT:    sete %al109; CHECK-NEXT:    movaps %xmm0, (%rdi)110; CHECK-NEXT:    retq111entry:112  %0 = tail call { i8, <2 x i64> } @llvm.x86.aesdec256kl(<2 x i64> %idata, ptr %h) #1113  %1 = extractvalue { i8, <2 x i64> } %0, 1114  store <2 x i64> %1, ptr %odata, align 16115  %2 = extractvalue { i8, <2 x i64> } %0, 0116  ret i8 %2117}118 119define zeroext i8 @test_mm_aesenc128kl_u8(ptr %odata, <2 x i64> %idata, ptr %h) {120; CHECK-LABEL: test_mm_aesenc128kl_u8:121; CHECK:       # %bb.0: # %entry122; CHECK-NEXT:    aesenc128kl (%rsi), %xmm0123; CHECK-NEXT:    sete %al124; CHECK-NEXT:    movaps %xmm0, (%rdi)125; CHECK-NEXT:    retq126entry:127  %0 = tail call { i8, <2 x i64> } @llvm.x86.aesenc128kl(<2 x i64> %idata, ptr %h) #1128  %1 = extractvalue { i8, <2 x i64> } %0, 1129  store <2 x i64> %1, ptr %odata, align 16130  %2 = extractvalue { i8, <2 x i64> } %0, 0131  ret i8 %2132}133 134define zeroext i8 @test_mm_aesdec128kl_u8(ptr %odata, <2 x i64> %idata, ptr %h) {135; CHECK-LABEL: test_mm_aesdec128kl_u8:136; CHECK:       # %bb.0: # %entry137; CHECK-NEXT:    aesdec128kl (%rsi), %xmm0138; CHECK-NEXT:    sete %al139; CHECK-NEXT:    movaps %xmm0, (%rdi)140; CHECK-NEXT:    retq141entry:142  %0 = tail call { i8, <2 x i64> } @llvm.x86.aesdec128kl(<2 x i64> %idata, ptr %h) #1143  %1 = extractvalue { i8, <2 x i64> } %0, 1144  store <2 x i64> %1, ptr %odata, align 16145  %2 = extractvalue { i8, <2 x i64> } %0, 0146  ret i8 %2147}148 149define zeroext i8 @test__mm_aesencwide128kl_u8(ptr %odata, ptr %idata, ptr %h) {150; CHECK-LABEL: test__mm_aesencwide128kl_u8:151; CHECK:       # %bb.0: # %entry152; CHECK-NEXT:    movaps (%rsi), %xmm0153; CHECK-NEXT:    movaps 16(%rsi), %xmm1154; CHECK-NEXT:    movaps 32(%rsi), %xmm2155; CHECK-NEXT:    movaps 48(%rsi), %xmm3156; CHECK-NEXT:    movaps 64(%rsi), %xmm4157; CHECK-NEXT:    movaps 80(%rsi), %xmm5158; CHECK-NEXT:    movaps 96(%rsi), %xmm6159; CHECK-NEXT:    movaps 112(%rsi), %xmm7160; CHECK-NEXT:    aesencwide128kl (%rdx)161; CHECK-NEXT:    sete %al162; CHECK-NEXT:    movaps %xmm0, (%rdi)163; CHECK-NEXT:    movaps %xmm1, 16(%rdi)164; CHECK-NEXT:    movaps %xmm2, 32(%rdi)165; CHECK-NEXT:    movaps %xmm3, 48(%rdi)166; CHECK-NEXT:    movaps %xmm4, 64(%rdi)167; CHECK-NEXT:    movaps %xmm5, 80(%rdi)168; CHECK-NEXT:    movaps %xmm6, 96(%rdi)169; CHECK-NEXT:    movaps %xmm7, 112(%rdi)170; CHECK-NEXT:    retq171entry:172  %0 = load <2 x i64>, ptr %idata, align 16173  %1 = getelementptr <2 x i64>, ptr %idata, i64 1174  %2 = load <2 x i64>, ptr %1, align 16175  %3 = getelementptr <2 x i64>, ptr %idata, i64 2176  %4 = load <2 x i64>, ptr %3, align 16177  %5 = getelementptr <2 x i64>, ptr %idata, i64 3178  %6 = load <2 x i64>, ptr %5, align 16179  %7 = getelementptr <2 x i64>, ptr %idata, i64 4180  %8 = load <2 x i64>, ptr %7, align 16181  %9 = getelementptr <2 x i64>, ptr %idata, i64 5182  %10 = load <2 x i64>, ptr %9, align 16183  %11 = getelementptr <2 x i64>, ptr %idata, i64 6184  %12 = load <2 x i64>, ptr %11, align 16185  %13 = getelementptr <2 x i64>, ptr %idata, i64 7186  %14 = load <2 x i64>, ptr %13, align 16187  %15 = tail call { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.x86.aesencwide128kl(ptr %h, <2 x i64> %0, <2 x i64> %2, <2 x i64> %4, <2 x i64> %6, <2 x i64> %8, <2 x i64> %10, <2 x i64> %12, <2 x i64> %14) #1188  %16 = extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %15, 1189  store <2 x i64> %16, ptr %odata, align 16190  %17 = extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %15, 2191  %18 = getelementptr <2 x i64>, ptr %odata, i64 1192  store <2 x i64> %17, ptr %18, align 16193  %19 = extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %15, 3194  %20 = getelementptr <2 x i64>, ptr %odata, i64 2195  store <2 x i64> %19, ptr %20, align 16196  %21 = extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %15, 4197  %22 = getelementptr <2 x i64>, ptr %odata, i64 3198  store <2 x i64> %21, ptr %22, align 16199  %23 = extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %15, 5200  %24 = getelementptr <2 x i64>, ptr %odata, i64 4201  store <2 x i64> %23, ptr %24, align 16202  %25 = extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %15, 6203  %26 = getelementptr <2 x i64>, ptr %odata, i64 5204  store <2 x i64> %25, ptr %26, align 16205  %27 = extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %15, 7206  %28 = getelementptr <2 x i64>, ptr %odata, i64 6207  store <2 x i64> %27, ptr %28, align 16208  %29 = extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %15, 8209  %30 = getelementptr <2 x i64>, ptr %odata, i64 7210  store <2 x i64> %29, ptr %30, align 16211  %31 = extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %15, 0212  ret i8 %31213}214 215define zeroext i8 @test__mm_aesdecwide128kl_u8(ptr %odata, ptr %idata, ptr %h) {216; CHECK-LABEL: test__mm_aesdecwide128kl_u8:217; CHECK:       # %bb.0: # %entry218; CHECK-NEXT:    movaps (%rsi), %xmm0219; CHECK-NEXT:    movaps 16(%rsi), %xmm1220; CHECK-NEXT:    movaps 32(%rsi), %xmm2221; CHECK-NEXT:    movaps 48(%rsi), %xmm3222; CHECK-NEXT:    movaps 64(%rsi), %xmm4223; CHECK-NEXT:    movaps 80(%rsi), %xmm5224; CHECK-NEXT:    movaps 96(%rsi), %xmm6225; CHECK-NEXT:    movaps 112(%rsi), %xmm7226; CHECK-NEXT:    aesdecwide128kl (%rdx)227; CHECK-NEXT:    sete %al228; CHECK-NEXT:    movaps %xmm0, (%rdi)229; CHECK-NEXT:    movaps %xmm1, 16(%rdi)230; CHECK-NEXT:    movaps %xmm2, 32(%rdi)231; CHECK-NEXT:    movaps %xmm3, 48(%rdi)232; CHECK-NEXT:    movaps %xmm4, 64(%rdi)233; CHECK-NEXT:    movaps %xmm5, 80(%rdi)234; CHECK-NEXT:    movaps %xmm6, 96(%rdi)235; CHECK-NEXT:    movaps %xmm7, 112(%rdi)236; CHECK-NEXT:    retq237entry:238  %0 = load <2 x i64>, ptr %idata, align 16239  %1 = getelementptr <2 x i64>, ptr %idata, i64 1240  %2 = load <2 x i64>, ptr %1, align 16241  %3 = getelementptr <2 x i64>, ptr %idata, i64 2242  %4 = load <2 x i64>, ptr %3, align 16243  %5 = getelementptr <2 x i64>, ptr %idata, i64 3244  %6 = load <2 x i64>, ptr %5, align 16245  %7 = getelementptr <2 x i64>, ptr %idata, i64 4246  %8 = load <2 x i64>, ptr %7, align 16247  %9 = getelementptr <2 x i64>, ptr %idata, i64 5248  %10 = load <2 x i64>, ptr %9, align 16249  %11 = getelementptr <2 x i64>, ptr %idata, i64 6250  %12 = load <2 x i64>, ptr %11, align 16251  %13 = getelementptr <2 x i64>, ptr %idata, i64 7252  %14 = load <2 x i64>, ptr %13, align 16253  %15 = tail call { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.x86.aesdecwide128kl(ptr %h, <2 x i64> %0, <2 x i64> %2, <2 x i64> %4, <2 x i64> %6, <2 x i64> %8, <2 x i64> %10, <2 x i64> %12, <2 x i64> %14) #1254  %16 = extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %15, 1255  store <2 x i64> %16, ptr %odata, align 16256  %17 = extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %15, 2257  %18 = getelementptr <2 x i64>, ptr %odata, i64 1258  store <2 x i64> %17, ptr %18, align 16259  %19 = extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %15, 3260  %20 = getelementptr <2 x i64>, ptr %odata, i64 2261  store <2 x i64> %19, ptr %20, align 16262  %21 = extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %15, 4263  %22 = getelementptr <2 x i64>, ptr %odata, i64 3264  store <2 x i64> %21, ptr %22, align 16265  %23 = extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %15, 5266  %24 = getelementptr <2 x i64>, ptr %odata, i64 4267  store <2 x i64> %23, ptr %24, align 16268  %25 = extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %15, 6269  %26 = getelementptr <2 x i64>, ptr %odata, i64 5270  store <2 x i64> %25, ptr %26, align 16271  %27 = extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %15, 7272  %28 = getelementptr <2 x i64>, ptr %odata, i64 6273  store <2 x i64> %27, ptr %28, align 16274  %29 = extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %15, 8275  %30 = getelementptr <2 x i64>, ptr %odata, i64 7276  store <2 x i64> %29, ptr %30, align 16277  %31 = extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %15, 0278  ret i8 %31279}280 281define zeroext i8 @test__mm_aesencwide256kl_u8(ptr %odata, ptr %idata, ptr %h) {282; CHECK-LABEL: test__mm_aesencwide256kl_u8:283; CHECK:       # %bb.0: # %entry284; CHECK-NEXT:    movaps (%rsi), %xmm0285; CHECK-NEXT:    movaps 16(%rsi), %xmm1286; CHECK-NEXT:    movaps 32(%rsi), %xmm2287; CHECK-NEXT:    movaps 48(%rsi), %xmm3288; CHECK-NEXT:    movaps 64(%rsi), %xmm4289; CHECK-NEXT:    movaps 80(%rsi), %xmm5290; CHECK-NEXT:    movaps 96(%rsi), %xmm6291; CHECK-NEXT:    movaps 112(%rsi), %xmm7292; CHECK-NEXT:    aesencwide256kl (%rdx)293; CHECK-NEXT:    sete %al294; CHECK-NEXT:    movaps %xmm0, (%rdi)295; CHECK-NEXT:    movaps %xmm1, 16(%rdi)296; CHECK-NEXT:    movaps %xmm2, 32(%rdi)297; CHECK-NEXT:    movaps %xmm3, 48(%rdi)298; CHECK-NEXT:    movaps %xmm4, 64(%rdi)299; CHECK-NEXT:    movaps %xmm5, 80(%rdi)300; CHECK-NEXT:    movaps %xmm6, 96(%rdi)301; CHECK-NEXT:    movaps %xmm7, 112(%rdi)302; CHECK-NEXT:    retq303entry:304  %0 = load <2 x i64>, ptr %idata, align 16305  %1 = getelementptr <2 x i64>, ptr %idata, i64 1306  %2 = load <2 x i64>, ptr %1, align 16307  %3 = getelementptr <2 x i64>, ptr %idata, i64 2308  %4 = load <2 x i64>, ptr %3, align 16309  %5 = getelementptr <2 x i64>, ptr %idata, i64 3310  %6 = load <2 x i64>, ptr %5, align 16311  %7 = getelementptr <2 x i64>, ptr %idata, i64 4312  %8 = load <2 x i64>, ptr %7, align 16313  %9 = getelementptr <2 x i64>, ptr %idata, i64 5314  %10 = load <2 x i64>, ptr %9, align 16315  %11 = getelementptr <2 x i64>, ptr %idata, i64 6316  %12 = load <2 x i64>, ptr %11, align 16317  %13 = getelementptr <2 x i64>, ptr %idata, i64 7318  %14 = load <2 x i64>, ptr %13, align 16319  %15 = tail call { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.x86.aesencwide256kl(ptr %h, <2 x i64> %0, <2 x i64> %2, <2 x i64> %4, <2 x i64> %6, <2 x i64> %8, <2 x i64> %10, <2 x i64> %12, <2 x i64> %14) #1320  %16 = extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %15, 1321  store <2 x i64> %16, ptr %odata, align 16322  %17 = extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %15, 2323  %18 = getelementptr <2 x i64>, ptr %odata, i64 1324  store <2 x i64> %17, ptr %18, align 16325  %19 = extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %15, 3326  %20 = getelementptr <2 x i64>, ptr %odata, i64 2327  store <2 x i64> %19, ptr %20, align 16328  %21 = extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %15, 4329  %22 = getelementptr <2 x i64>, ptr %odata, i64 3330  store <2 x i64> %21, ptr %22, align 16331  %23 = extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %15, 5332  %24 = getelementptr <2 x i64>, ptr %odata, i64 4333  store <2 x i64> %23, ptr %24, align 16334  %25 = extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %15, 6335  %26 = getelementptr <2 x i64>, ptr %odata, i64 5336  store <2 x i64> %25, ptr %26, align 16337  %27 = extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %15, 7338  %28 = getelementptr <2 x i64>, ptr %odata, i64 6339  store <2 x i64> %27, ptr %28, align 16340  %29 = extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %15, 8341  %30 = getelementptr <2 x i64>, ptr %odata, i64 7342  store <2 x i64> %29, ptr %30, align 16343  %31 = extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %15, 0344  ret i8 %31345}346 347define zeroext i8 @test__mm_aesdecwide256kl_u8(ptr %odata, ptr %idata, ptr %h) {348; CHECK-LABEL: test__mm_aesdecwide256kl_u8:349; CHECK:       # %bb.0: # %entry350; CHECK-NEXT:    movaps (%rsi), %xmm0351; CHECK-NEXT:    movaps 16(%rsi), %xmm1352; CHECK-NEXT:    movaps 32(%rsi), %xmm2353; CHECK-NEXT:    movaps 48(%rsi), %xmm3354; CHECK-NEXT:    movaps 64(%rsi), %xmm4355; CHECK-NEXT:    movaps 80(%rsi), %xmm5356; CHECK-NEXT:    movaps 96(%rsi), %xmm6357; CHECK-NEXT:    movaps 112(%rsi), %xmm7358; CHECK-NEXT:    aesdecwide256kl (%rdx)359; CHECK-NEXT:    sete %al360; CHECK-NEXT:    movaps %xmm0, (%rdi)361; CHECK-NEXT:    movaps %xmm1, 16(%rdi)362; CHECK-NEXT:    movaps %xmm2, 32(%rdi)363; CHECK-NEXT:    movaps %xmm3, 48(%rdi)364; CHECK-NEXT:    movaps %xmm4, 64(%rdi)365; CHECK-NEXT:    movaps %xmm5, 80(%rdi)366; CHECK-NEXT:    movaps %xmm6, 96(%rdi)367; CHECK-NEXT:    movaps %xmm7, 112(%rdi)368; CHECK-NEXT:    retq369entry:370  %0 = load <2 x i64>, ptr %idata, align 16371  %1 = getelementptr <2 x i64>, ptr %idata, i64 1372  %2 = load <2 x i64>, ptr %1, align 16373  %3 = getelementptr <2 x i64>, ptr %idata, i64 2374  %4 = load <2 x i64>, ptr %3, align 16375  %5 = getelementptr <2 x i64>, ptr %idata, i64 3376  %6 = load <2 x i64>, ptr %5, align 16377  %7 = getelementptr <2 x i64>, ptr %idata, i64 4378  %8 = load <2 x i64>, ptr %7, align 16379  %9 = getelementptr <2 x i64>, ptr %idata, i64 5380  %10 = load <2 x i64>, ptr %9, align 16381  %11 = getelementptr <2 x i64>, ptr %idata, i64 6382  %12 = load <2 x i64>, ptr %11, align 16383  %13 = getelementptr <2 x i64>, ptr %idata, i64 7384  %14 = load <2 x i64>, ptr %13, align 16385  %15 = tail call { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.x86.aesdecwide256kl(ptr %h, <2 x i64> %0, <2 x i64> %2, <2 x i64> %4, <2 x i64> %6, <2 x i64> %8, <2 x i64> %10, <2 x i64> %12, <2 x i64> %14) #1386  %16 = extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %15, 1387  store <2 x i64> %16, ptr %odata, align 16388  %17 = extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %15, 2389  %18 = getelementptr <2 x i64>, ptr %odata, i64 1390  store <2 x i64> %17, ptr %18, align 16391  %19 = extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %15, 3392  %20 = getelementptr <2 x i64>, ptr %odata, i64 2393  store <2 x i64> %19, ptr %20, align 16394  %21 = extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %15, 4395  %22 = getelementptr <2 x i64>, ptr %odata, i64 3396  store <2 x i64> %21, ptr %22, align 16397  %23 = extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %15, 5398  %24 = getelementptr <2 x i64>, ptr %odata, i64 4399  store <2 x i64> %23, ptr %24, align 16400  %25 = extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %15, 6401  %26 = getelementptr <2 x i64>, ptr %odata, i64 5402  store <2 x i64> %25, ptr %26, align 16403  %27 = extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %15, 7404  %28 = getelementptr <2 x i64>, ptr %odata, i64 6405  store <2 x i64> %27, ptr %28, align 16406  %29 = extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %15, 8407  %30 = getelementptr <2 x i64>, ptr %odata, i64 7408  store <2 x i64> %29, ptr %30, align 16409  %31 = extractvalue { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %15, 0410  ret i8 %31411}412 413declare void @llvm.x86.loadiwkey(<2 x i64>, <2 x i64>, <2 x i64>, i32)414declare { i32, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.x86.encodekey128(i32, <2 x i64>)415declare { i32, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.x86.encodekey256(i32, <2 x i64>, <2 x i64>)416declare { i8, <2 x i64> } @llvm.x86.aesenc256kl(<2 x i64>, ptr)417declare { i8, <2 x i64> } @llvm.x86.aesdec256kl(<2 x i64>, ptr)418declare { i8, <2 x i64> } @llvm.x86.aesenc128kl(<2 x i64>, ptr)419declare { i8, <2 x i64> } @llvm.x86.aesdec128kl(<2 x i64>, ptr)420declare { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.x86.aesencwide128kl(ptr, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>)421declare { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.x86.aesdecwide128kl(ptr, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>)422declare { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.x86.aesencwide256kl(ptr, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>)423declare { i8, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.x86.aesdecwide256kl(ptr, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>)424