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