4399 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple armv8---eabi -mattr=+aes,+fix-cortex-a57-aes-1742098 -verify-machineinstrs -o - %s | FileCheck %s --check-prefixes=CHECK-FIX,CHECK-FIX-NOSCHED3 4; These CPUs should have the fix enabled by default. They use different5; FileCheck prefixes because some instructions are scheduled differently.6;7; RUN: llc -mtriple armv8---eabi -mcpu=cortex-a57 -verify-machineinstrs -o - %s | FileCheck %s --check-prefixes=CHECK-FIX,CHECK-CORTEX-FIX8; RUN: llc -mtriple armv8---eabi -mcpu=cortex-a72 -verify-machineinstrs -o - %s | FileCheck %s --check-prefixes=CHECK-FIX,CHECK-CORTEX-FIX9 10; This checks that adding `+fix-cortex-a57-aes-1742098` causes `vorr` to be11; inserted wherever the compiler cannot prove that either input to the first aes12; instruction in a fused aes pair was set by 64-bit Neon register writes or13; 128-bit Neon register writes. All other register writes are unsafe, and14; require a `vorr` to protect the AES input.15 16declare <16 x i8> @llvm.arm.neon.aese(<16 x i8>, <16 x i8>)17declare <16 x i8> @llvm.arm.neon.aesmc(<16 x i8>)18declare <16 x i8> @llvm.arm.neon.aesd(<16 x i8>, <16 x i8>)19declare <16 x i8> @llvm.arm.neon.aesimc(<16 x i8>)20 21declare arm_aapcs_vfpcc <16 x i8> @get_input() local_unnamed_addr22declare arm_aapcs_vfpcc <16 x i8> @get_inputf16(half) local_unnamed_addr23declare arm_aapcs_vfpcc <16 x i8> @get_inputf32(float) local_unnamed_addr24 25 26 27define arm_aapcs_vfpcc void @aese_zero(ptr %0) nounwind {28; CHECK-FIX-LABEL: aese_zero:29; CHECK-FIX: @ %bb.0:30; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r0]31; CHECK-FIX-NEXT: vmov.i32 q9, #0x032; CHECK-FIX-NEXT: aese.8 q9, q833; CHECK-FIX-NEXT: aesmc.8 q8, q934; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r0]35; CHECK-FIX-NEXT: bx lr36 %2 = load <16 x i8>, ptr %0, align 837 %3 = call <16 x i8> @llvm.arm.neon.aese(<16 x i8> zeroinitializer, <16 x i8> %2)38 %4 = call <16 x i8> @llvm.arm.neon.aesmc(<16 x i8> %3)39 store <16 x i8> %4, ptr %0, align 840 ret void41}42 43define arm_aapcs_vfpcc void @aese_via_call1(ptr %0) nounwind {44; CHECK-FIX-LABEL: aese_via_call1:45; CHECK-FIX: @ %bb.0:46; CHECK-FIX-NEXT: .save {r4, lr}47; CHECK-FIX-NEXT: push {r4, lr}48; CHECK-FIX-NEXT: mov r4, r049; CHECK-FIX-NEXT: bl get_input50; CHECK-FIX-NEXT: vorr q0, q0, q051; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r4]52; CHECK-FIX-NEXT: aese.8 q8, q053; CHECK-FIX-NEXT: aesmc.8 q8, q854; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r4]55; CHECK-FIX-NEXT: pop {r4, pc}56 %2 = call arm_aapcs_vfpcc <16 x i8> @get_input()57 %3 = load <16 x i8>, ptr %0, align 858 %4 = call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %2, <16 x i8> %3)59 %5 = call <16 x i8> @llvm.arm.neon.aesmc(<16 x i8> %4)60 store <16 x i8> %5, ptr %0, align 861 ret void62}63 64define arm_aapcs_vfpcc void @aese_via_call2(half %0, ptr %1) nounwind {65; CHECK-FIX-LABEL: aese_via_call2:66; CHECK-FIX: @ %bb.0:67; CHECK-FIX-NEXT: .save {r4, lr}68; CHECK-FIX-NEXT: push {r4, lr}69; CHECK-FIX-NEXT: mov r4, r070; CHECK-FIX-NEXT: bl get_inputf1671; CHECK-FIX-NEXT: vorr q0, q0, q072; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r4]73; CHECK-FIX-NEXT: aese.8 q8, q074; CHECK-FIX-NEXT: aesmc.8 q8, q875; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r4]76; CHECK-FIX-NEXT: pop {r4, pc}77 %3 = call arm_aapcs_vfpcc <16 x i8> @get_inputf16(half %0)78 %4 = load <16 x i8>, ptr %1, align 879 %5 = call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %3, <16 x i8> %4)80 %6 = call <16 x i8> @llvm.arm.neon.aesmc(<16 x i8> %5)81 store <16 x i8> %6, ptr %1, align 882 ret void83}84 85define arm_aapcs_vfpcc void @aese_via_call3(float %0, ptr %1) nounwind {86; CHECK-FIX-LABEL: aese_via_call3:87; CHECK-FIX: @ %bb.0:88; CHECK-FIX-NEXT: .save {r4, lr}89; CHECK-FIX-NEXT: push {r4, lr}90; CHECK-FIX-NEXT: mov r4, r091; CHECK-FIX-NEXT: bl get_inputf3292; CHECK-FIX-NEXT: vorr q0, q0, q093; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r4]94; CHECK-FIX-NEXT: aese.8 q8, q095; CHECK-FIX-NEXT: aesmc.8 q8, q896; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r4]97; CHECK-FIX-NEXT: pop {r4, pc}98 %3 = call arm_aapcs_vfpcc <16 x i8> @get_inputf32(float %0)99 %4 = load <16 x i8>, ptr %1, align 8100 %5 = call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %3, <16 x i8> %4)101 %6 = call <16 x i8> @llvm.arm.neon.aesmc(<16 x i8> %5)102 store <16 x i8> %6, ptr %1, align 8103 ret void104}105 106define arm_aapcs_vfpcc void @aese_once_via_ptr(ptr %0, ptr %1) nounwind {107; CHECK-FIX-LABEL: aese_once_via_ptr:108; CHECK-FIX: @ %bb.0:109; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r0]110; CHECK-FIX-NEXT: vld1.64 {d18, d19}, [r1]111; CHECK-FIX-NEXT: aese.8 q9, q8112; CHECK-FIX-NEXT: aesmc.8 q8, q9113; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r1]114; CHECK-FIX-NEXT: bx lr115 %3 = load <16 x i8>, ptr %1, align 8116 %4 = load <16 x i8>, ptr %0, align 8117 %5 = call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %3, <16 x i8> %4)118 %6 = call <16 x i8> @llvm.arm.neon.aesmc(<16 x i8> %5)119 store <16 x i8> %6, ptr %1, align 8120 ret void121}122 123define arm_aapcs_vfpcc <16 x i8> @aese_once_via_val(<16 x i8> %0, <16 x i8> %1) nounwind {124; CHECK-FIX-LABEL: aese_once_via_val:125; CHECK-FIX: @ %bb.0:126; CHECK-FIX-NEXT: vorr q0, q0, q0127; CHECK-FIX-NEXT: vorr q1, q1, q1128; CHECK-FIX-NEXT: aese.8 q0, q1129; CHECK-FIX-NEXT: aesmc.8 q0, q0130; CHECK-FIX-NEXT: bx lr131 %3 = call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %1, <16 x i8> %0)132 %4 = call <16 x i8> @llvm.arm.neon.aesmc(<16 x i8> %3)133 ret <16 x i8> %4134}135 136define arm_aapcs_vfpcc void @aese_twice_via_ptr(ptr %0, ptr %1) nounwind {137; CHECK-FIX-LABEL: aese_twice_via_ptr:138; CHECK-FIX: @ %bb.0:139; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r0]140; CHECK-FIX-NEXT: vld1.64 {d18, d19}, [r1]141; CHECK-FIX-NEXT: aese.8 q9, q8142; CHECK-FIX-NEXT: aesmc.8 q8, q9143; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r1]144; CHECK-FIX-NEXT: vld1.64 {d18, d19}, [r0]145; CHECK-FIX-NEXT: aese.8 q9, q8146; CHECK-FIX-NEXT: aesmc.8 q8, q9147; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r1]148; CHECK-FIX-NEXT: bx lr149 %3 = load <16 x i8>, ptr %1, align 8150 %4 = load <16 x i8>, ptr %0, align 8151 %5 = call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %3, <16 x i8> %4)152 %6 = call <16 x i8> @llvm.arm.neon.aesmc(<16 x i8> %5)153 store <16 x i8> %6, ptr %1, align 8154 %7 = load <16 x i8>, ptr %0, align 8155 %8 = call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %6, <16 x i8> %7)156 %9 = call <16 x i8> @llvm.arm.neon.aesmc(<16 x i8> %8)157 store <16 x i8> %9, ptr %1, align 8158 ret void159}160 161define arm_aapcs_vfpcc <16 x i8> @aese_twice_via_val(<16 x i8> %0, <16 x i8> %1) nounwind {162; CHECK-FIX-LABEL: aese_twice_via_val:163; CHECK-FIX: @ %bb.0:164; CHECK-FIX-NEXT: vorr q1, q1, q1165; CHECK-FIX-NEXT: vorr q0, q0, q0166; CHECK-FIX-NEXT: vorr q0, q0, q0167; CHECK-FIX-NEXT: aese.8 q1, q0168; CHECK-FIX-NEXT: aesmc.8 q8, q1169; CHECK-FIX-NEXT: aese.8 q8, q0170; CHECK-FIX-NEXT: aesmc.8 q0, q8171; CHECK-FIX-NEXT: bx lr172 %3 = call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %1, <16 x i8> %0)173 %4 = call <16 x i8> @llvm.arm.neon.aesmc(<16 x i8> %3)174 %5 = call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %4, <16 x i8> %0)175 %6 = call <16 x i8> @llvm.arm.neon.aesmc(<16 x i8> %5)176 ret <16 x i8> %6177}178 179define arm_aapcs_vfpcc void @aese_loop_via_ptr(i32 %0, ptr %1, ptr %2) nounwind {180; CHECK-FIX-NOSCHED-LABEL: aese_loop_via_ptr:181; CHECK-FIX-NOSCHED: @ %bb.0:182; CHECK-FIX-NOSCHED-NEXT: cmp r0, #0183; CHECK-FIX-NOSCHED-NEXT: bxeq lr184; CHECK-FIX-NOSCHED-NEXT: .LBB8_1: @ =>This Inner Loop Header: Depth=1185; CHECK-FIX-NOSCHED-NEXT: vld1.64 {d16, d17}, [r1]186; CHECK-FIX-NOSCHED-NEXT: subs r0, r0, #1187; CHECK-FIX-NOSCHED-NEXT: vld1.64 {d18, d19}, [r2]188; CHECK-FIX-NOSCHED-NEXT: aese.8 q9, q8189; CHECK-FIX-NOSCHED-NEXT: aesmc.8 q8, q9190; CHECK-FIX-NOSCHED-NEXT: vst1.64 {d16, d17}, [r2]191; CHECK-FIX-NOSCHED-NEXT: bne .LBB8_1192; CHECK-FIX-NOSCHED-NEXT: @ %bb.2:193; CHECK-FIX-NOSCHED-NEXT: bx lr194;195; CHECK-CORTEX-FIX-LABEL: aese_loop_via_ptr:196; CHECK-CORTEX-FIX: @ %bb.0:197; CHECK-CORTEX-FIX-NEXT: cmp r0, #0198; CHECK-CORTEX-FIX-NEXT: bxeq lr199; CHECK-CORTEX-FIX-NEXT: .LBB8_1: @ =>This Inner Loop Header: Depth=1200; CHECK-CORTEX-FIX-NEXT: vld1.64 {d16, d17}, [r1]201; CHECK-CORTEX-FIX-NEXT: vld1.64 {d18, d19}, [r2]202; CHECK-CORTEX-FIX-NEXT: subs r0, r0, #1203; CHECK-CORTEX-FIX-NEXT: aese.8 q9, q8204; CHECK-CORTEX-FIX-NEXT: aesmc.8 q8, q9205; CHECK-CORTEX-FIX-NEXT: vst1.64 {d16, d17}, [r2]206; CHECK-CORTEX-FIX-NEXT: bne .LBB8_1207; CHECK-CORTEX-FIX-NEXT: @ %bb.2:208; CHECK-CORTEX-FIX-NEXT: bx lr209 %4 = icmp eq i32 %0, 0210 br i1 %4, label %5, label %6211 2125:213 ret void214 2156:216 %7 = phi i32 [ %12, %6 ], [ 0, %3 ]217 %8 = load <16 x i8>, ptr %2, align 8218 %9 = load <16 x i8>, ptr %1, align 8219 %10 = call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %8, <16 x i8> %9)220 %11 = call <16 x i8> @llvm.arm.neon.aesmc(<16 x i8> %10)221 store <16 x i8> %11, ptr %2, align 8222 %12 = add nuw i32 %7, 1223 %13 = icmp eq i32 %12, %0224 br i1 %13, label %5, label %6225}226 227define arm_aapcs_vfpcc <16 x i8> @aese_loop_via_val(i32 %0, <16 x i8> %1, <16 x i8> %2) nounwind {228; CHECK-FIX-LABEL: aese_loop_via_val:229; CHECK-FIX: @ %bb.0:230; CHECK-FIX-NEXT: vorr q1, q1, q1231; CHECK-FIX-NEXT: vorr q0, q0, q0232; CHECK-FIX-NEXT: cmp r0, #0233; CHECK-FIX-NEXT: beq .LBB9_2234; CHECK-FIX-NEXT: .LBB9_1: @ =>This Inner Loop Header: Depth=1235; CHECK-FIX-NEXT: aese.8 q1, q0236; CHECK-FIX-NEXT: subs r0, r0, #1237; CHECK-FIX-NEXT: aesmc.8 q1, q1238; CHECK-FIX-NEXT: bne .LBB9_1239; CHECK-FIX-NEXT: .LBB9_2:240; CHECK-FIX-NEXT: vorr q0, q1, q1241; CHECK-FIX-NEXT: bx lr242 %4 = icmp eq i32 %0, 0243 br i1 %4, label %5, label %7244 2455:246 %6 = phi <16 x i8> [ %2, %3 ], [ %11, %7 ]247 ret <16 x i8> %6248 2497:250 %8 = phi i32 [ %12, %7 ], [ 0, %3 ]251 %9 = phi <16 x i8> [ %11, %7 ], [ %2, %3 ]252 %10 = call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %9, <16 x i8> %1)253 %11 = call <16 x i8> @llvm.arm.neon.aesmc(<16 x i8> %10)254 %12 = add nuw i32 %8, 1255 %13 = icmp eq i32 %12, %0256 br i1 %13, label %5, label %7257}258 259define arm_aapcs_vfpcc void @aese_set8_via_ptr(ptr %0, <16 x i8> %1, ptr %2) nounwind {260; CHECK-FIX-NOSCHED-LABEL: aese_set8_via_ptr:261; CHECK-FIX-NOSCHED: @ %bb.0:262; CHECK-FIX-NOSCHED-NEXT: vorr q0, q0, q0263; CHECK-FIX-NOSCHED-NEXT: ldrb r0, [r0]264; CHECK-FIX-NOSCHED-NEXT: vld1.64 {d16, d17}, [r1]265; CHECK-FIX-NOSCHED-NEXT: vmov.8 d0[0], r0266; CHECK-FIX-NOSCHED-NEXT: vmov.8 d16[0], r0267; CHECK-FIX-NOSCHED-NEXT: aese.8 q8, q0268; CHECK-FIX-NOSCHED-NEXT: aesmc.8 q8, q8269; CHECK-FIX-NOSCHED-NEXT: vst1.64 {d16, d17}, [r1]270; CHECK-FIX-NOSCHED-NEXT: bx lr271;272; CHECK-CORTEX-FIX-LABEL: aese_set8_via_ptr:273; CHECK-CORTEX-FIX: @ %bb.0:274; CHECK-CORTEX-FIX-NEXT: vorr q0, q0, q0275; CHECK-CORTEX-FIX-NEXT: vld1.64 {d16, d17}, [r1]276; CHECK-CORTEX-FIX-NEXT: ldrb r0, [r0]277; CHECK-CORTEX-FIX-NEXT: vmov.8 d0[0], r0278; CHECK-CORTEX-FIX-NEXT: vmov.8 d16[0], r0279; CHECK-CORTEX-FIX-NEXT: aese.8 q8, q0280; CHECK-CORTEX-FIX-NEXT: aesmc.8 q8, q8281; CHECK-CORTEX-FIX-NEXT: vst1.64 {d16, d17}, [r1]282; CHECK-CORTEX-FIX-NEXT: bx lr283 %4 = load i8, ptr %0, align 1284 %5 = load <16 x i8>, ptr %2, align 8285 %6 = insertelement <16 x i8> %5, i8 %4, i64 0286 %7 = insertelement <16 x i8> %1, i8 %4, i64 0287 %8 = call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %6, <16 x i8> %7)288 %9 = call <16 x i8> @llvm.arm.neon.aesmc(<16 x i8> %8)289 store <16 x i8> %9, ptr %2, align 8290 ret void291}292 293define arm_aapcs_vfpcc void @aese_set8_via_val(i8 zeroext %0, <16 x i8> %1, ptr %2) nounwind {294; CHECK-FIX-LABEL: aese_set8_via_val:295; CHECK-FIX: @ %bb.0:296; CHECK-FIX-NEXT: vorr q0, q0, q0297; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r1]298; CHECK-FIX-NEXT: vmov.8 d0[0], r0299; CHECK-FIX-NEXT: vmov.8 d16[0], r0300; CHECK-FIX-NEXT: aese.8 q8, q0301; CHECK-FIX-NEXT: aesmc.8 q8, q8302; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r1]303; CHECK-FIX-NEXT: bx lr304 %4 = load <16 x i8>, ptr %2, align 8305 %5 = insertelement <16 x i8> %4, i8 %0, i64 0306 %6 = insertelement <16 x i8> %1, i8 %0, i64 0307 %7 = call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %5, <16 x i8> %6)308 %8 = call <16 x i8> @llvm.arm.neon.aesmc(<16 x i8> %7)309 store <16 x i8> %8, ptr %2, align 8310 ret void311}312 313define arm_aapcs_vfpcc void @aese_set8_cond_via_ptr(i1 zeroext %0, ptr %1, <16 x i8> %2, ptr %3) nounwind {314; CHECK-FIX-LABEL: aese_set8_cond_via_ptr:315; CHECK-FIX: @ %bb.0:316; CHECK-FIX-NEXT: vorr q0, q0, q0317; CHECK-FIX-NEXT: cmp r0, #0318; CHECK-FIX-NEXT: beq .LBB12_2319; CHECK-FIX-NEXT: @ %bb.1:320; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r2]321; CHECK-FIX-NEXT: vld1.8 {d16[0]}, [r1]322; CHECK-FIX-NEXT: cmp r0, #0323; CHECK-FIX-NEXT: bne .LBB12_3324; CHECK-FIX-NEXT: b .LBB12_4325; CHECK-FIX-NEXT: .LBB12_2:326; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r2]327; CHECK-FIX-NEXT: cmp r0, #0328; CHECK-FIX-NEXT: beq .LBB12_4329; CHECK-FIX-NEXT: .LBB12_3:330; CHECK-FIX-NEXT: vld1.8 {d0[0]}, [r1]331; CHECK-FIX-NEXT: .LBB12_4:332; CHECK-FIX-NEXT: aese.8 q8, q0333; CHECK-FIX-NEXT: aesmc.8 q8, q8334; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r2]335; CHECK-FIX-NEXT: bx lr336 br i1 %0, label %5, label %9337 3385:339 %6 = load i8, ptr %1, align 1340 %7 = load <16 x i8>, ptr %3, align 8341 %8 = insertelement <16 x i8> %7, i8 %6, i64 0342 br label %11343 3449:345 %10 = load <16 x i8>, ptr %3, align 8346 br label %11347 34811:349 %12 = phi <16 x i8> [ %8, %5 ], [ %10, %9 ]350 br i1 %0, label %13, label %16351 35213:353 %14 = load i8, ptr %1, align 1354 %15 = insertelement <16 x i8> %2, i8 %14, i64 0355 br label %16356 35716:358 %17 = phi <16 x i8> [ %15, %13 ], [ %2, %11 ]359 %18 = call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %12, <16 x i8> %17)360 %19 = call <16 x i8> @llvm.arm.neon.aesmc(<16 x i8> %18)361 store <16 x i8> %19, ptr %3, align 8362 ret void363}364 365define arm_aapcs_vfpcc void @aese_set8_cond_via_val(i1 zeroext %0, i8 zeroext %1, <16 x i8> %2, ptr %3) nounwind {366; CHECK-FIX-LABEL: aese_set8_cond_via_val:367; CHECK-FIX: @ %bb.0:368; CHECK-FIX-NEXT: vorr q0, q0, q0369; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r2]370; CHECK-FIX-NEXT: cmp r0, #0371; CHECK-FIX-NEXT: beq .LBB13_2372; CHECK-FIX-NEXT: @ %bb.1:373; CHECK-FIX-NEXT: vmov.8 d16[0], r1374; CHECK-FIX-NEXT: .LBB13_2: @ %select.end375; CHECK-FIX-NEXT: cmp r0, #0376; CHECK-FIX-NEXT: beq .LBB13_4377; CHECK-FIX-NEXT: @ %bb.3:378; CHECK-FIX-NEXT: vmov.8 d0[0], r1379; CHECK-FIX-NEXT: .LBB13_4: @ %select.end2380; CHECK-FIX-NEXT: aese.8 q8, q0381; CHECK-FIX-NEXT: aesmc.8 q8, q8382; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r2]383; CHECK-FIX-NEXT: bx lr384 %5 = load <16 x i8>, ptr %3, align 8385 %6 = insertelement <16 x i8> %5, i8 %1, i64 0386 %7 = select i1 %0, <16 x i8> %6, <16 x i8> %5387 %8 = insertelement <16 x i8> %2, i8 %1, i64 0388 %9 = select i1 %0, <16 x i8> %8, <16 x i8> %2389 %10 = call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %7, <16 x i8> %9)390 %11 = call <16 x i8> @llvm.arm.neon.aesmc(<16 x i8> %10)391 store <16 x i8> %11, ptr %3, align 8392 ret void393}394 395define arm_aapcs_vfpcc void @aese_set8_loop_via_ptr(i32 %0, ptr %1, <16 x i8> %2, ptr %3) nounwind {396; CHECK-FIX-LABEL: aese_set8_loop_via_ptr:397; CHECK-FIX: @ %bb.0:398; CHECK-FIX-NEXT: vorr q0, q0, q0399; CHECK-FIX-NEXT: ldrb r1, [r1]400; CHECK-FIX-NEXT: cmp r0, #0401; CHECK-FIX-NEXT: strb r1, [r2]402; CHECK-FIX-NEXT: bxeq lr403; CHECK-FIX-NEXT: .LBB14_1:404; CHECK-FIX-NEXT: vmov.8 d0[0], r1405; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r2]406; CHECK-FIX-NEXT: .LBB14_2: @ =>This Inner Loop Header: Depth=1407; CHECK-FIX-NEXT: aese.8 q8, q0408; CHECK-FIX-NEXT: subs r0, r0, #1409; CHECK-FIX-NEXT: aesmc.8 q8, q8410; CHECK-FIX-NEXT: bne .LBB14_2411; CHECK-FIX-NEXT: @ %bb.3:412; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r2]413; CHECK-FIX-NEXT: bx lr414 %5 = load i8, ptr %1, align 1415 %6 = insertelement <16 x i8> %2, i8 %5, i64 0416 %7 = getelementptr inbounds <16 x i8>, ptr %3, i32 0, i32 0417 store i8 %5, ptr %7, align 8418 %8 = icmp eq i32 %0, 0419 br i1 %8, label %12, label %9420 4219:422 %10 = load <16 x i8>, ptr %3, align 8423 br label %13424 42511:426 store <16 x i8> %17, ptr %3, align 8427 br label %12428 42912:430 ret void431 43213:433 %14 = phi <16 x i8> [ %10, %9 ], [ %17, %13 ]434 %15 = phi i32 [ 0, %9 ], [ %18, %13 ]435 %16 = call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %14, <16 x i8> %6)436 %17 = call <16 x i8> @llvm.arm.neon.aesmc(<16 x i8> %16)437 %18 = add nuw i32 %15, 1438 %19 = icmp eq i32 %18, %0439 br i1 %19, label %11, label %13440}441 442define arm_aapcs_vfpcc void @aese_set8_loop_via_val(i32 %0, i8 zeroext %1, <16 x i8> %2, ptr %3) nounwind {443; CHECK-FIX-LABEL: aese_set8_loop_via_val:444; CHECK-FIX: @ %bb.0:445; CHECK-FIX-NEXT: vorr q0, q0, q0446; CHECK-FIX-NEXT: cmp r0, #0447; CHECK-FIX-NEXT: bxeq lr448; CHECK-FIX-NEXT: .LBB15_1:449; CHECK-FIX-NEXT: vmov.8 d0[0], r1450; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r2]451; CHECK-FIX-NEXT: .LBB15_2: @ =>This Inner Loop Header: Depth=1452; CHECK-FIX-NEXT: vmov.8 d16[0], r1453; CHECK-FIX-NEXT: subs r0, r0, #1454; CHECK-FIX-NEXT: aese.8 q8, q0455; CHECK-FIX-NEXT: aesmc.8 q8, q8456; CHECK-FIX-NEXT: bne .LBB15_2457; CHECK-FIX-NEXT: @ %bb.3:458; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r2]459; CHECK-FIX-NEXT: bx lr460 %5 = icmp eq i32 %0, 0461 br i1 %5, label %10, label %6462 4636:464 %7 = insertelement <16 x i8> %2, i8 %1, i64 0465 %8 = load <16 x i8>, ptr %3, align 8466 br label %11467 4689:469 store <16 x i8> %16, ptr %3, align 8470 br label %10471 47210:473 ret void474 47511:476 %12 = phi <16 x i8> [ %8, %6 ], [ %16, %11 ]477 %13 = phi i32 [ 0, %6 ], [ %17, %11 ]478 %14 = insertelement <16 x i8> %12, i8 %1, i64 0479 %15 = call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %14, <16 x i8> %7)480 %16 = call <16 x i8> @llvm.arm.neon.aesmc(<16 x i8> %15)481 %17 = add nuw i32 %13, 1482 %18 = icmp eq i32 %17, %0483 br i1 %18, label %9, label %11484}485 486define arm_aapcs_vfpcc void @aese_set16_via_ptr(ptr %0, <16 x i8> %1, ptr %2) nounwind {487; CHECK-FIX-NOSCHED-LABEL: aese_set16_via_ptr:488; CHECK-FIX-NOSCHED: @ %bb.0:489; CHECK-FIX-NOSCHED-NEXT: vorr q0, q0, q0490; CHECK-FIX-NOSCHED-NEXT: ldrh r0, [r0]491; CHECK-FIX-NOSCHED-NEXT: vld1.64 {d16, d17}, [r1]492; CHECK-FIX-NOSCHED-NEXT: vmov.16 d0[0], r0493; CHECK-FIX-NOSCHED-NEXT: vmov.16 d16[0], r0494; CHECK-FIX-NOSCHED-NEXT: aese.8 q8, q0495; CHECK-FIX-NOSCHED-NEXT: aesmc.8 q8, q8496; CHECK-FIX-NOSCHED-NEXT: vst1.64 {d16, d17}, [r1]497; CHECK-FIX-NOSCHED-NEXT: bx lr498;499; CHECK-CORTEX-FIX-LABEL: aese_set16_via_ptr:500; CHECK-CORTEX-FIX: @ %bb.0:501; CHECK-CORTEX-FIX-NEXT: vorr q0, q0, q0502; CHECK-CORTEX-FIX-NEXT: vld1.64 {d16, d17}, [r1]503; CHECK-CORTEX-FIX-NEXT: ldrh r0, [r0]504; CHECK-CORTEX-FIX-NEXT: vmov.16 d0[0], r0505; CHECK-CORTEX-FIX-NEXT: vmov.16 d16[0], r0506; CHECK-CORTEX-FIX-NEXT: aese.8 q8, q0507; CHECK-CORTEX-FIX-NEXT: aesmc.8 q8, q8508; CHECK-CORTEX-FIX-NEXT: vst1.64 {d16, d17}, [r1]509; CHECK-CORTEX-FIX-NEXT: bx lr510 %4 = load i16, ptr %0, align 2511 %5 = bitcast ptr %2 to ptr512 %6 = load <8 x i16>, ptr %5, align 8513 %7 = insertelement <8 x i16> %6, i16 %4, i64 0514 %8 = bitcast <8 x i16> %7 to <16 x i8>515 %9 = bitcast <16 x i8> %1 to <8 x i16>516 %10 = insertelement <8 x i16> %9, i16 %4, i64 0517 %11 = bitcast <8 x i16> %10 to <16 x i8>518 %12 = call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %8, <16 x i8> %11)519 %13 = call <16 x i8> @llvm.arm.neon.aesmc(<16 x i8> %12)520 store <16 x i8> %13, ptr %2, align 8521 ret void522}523 524define arm_aapcs_vfpcc void @aese_set16_via_val(i16 zeroext %0, <16 x i8> %1, ptr %2) nounwind {525; CHECK-FIX-LABEL: aese_set16_via_val:526; CHECK-FIX: @ %bb.0:527; CHECK-FIX-NEXT: vorr q0, q0, q0528; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r1]529; CHECK-FIX-NEXT: vmov.16 d0[0], r0530; CHECK-FIX-NEXT: vmov.16 d16[0], r0531; CHECK-FIX-NEXT: aese.8 q8, q0532; CHECK-FIX-NEXT: aesmc.8 q8, q8533; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r1]534; CHECK-FIX-NEXT: bx lr535 %4 = bitcast ptr %2 to ptr536 %5 = load <8 x i16>, ptr %4, align 8537 %6 = insertelement <8 x i16> %5, i16 %0, i64 0538 %7 = bitcast <8 x i16> %6 to <16 x i8>539 %8 = bitcast <16 x i8> %1 to <8 x i16>540 %9 = insertelement <8 x i16> %8, i16 %0, i64 0541 %10 = bitcast <8 x i16> %9 to <16 x i8>542 %11 = call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %7, <16 x i8> %10)543 %12 = call <16 x i8> @llvm.arm.neon.aesmc(<16 x i8> %11)544 store <16 x i8> %12, ptr %2, align 8545 ret void546}547 548define arm_aapcs_vfpcc void @aese_set16_cond_via_ptr(i1 zeroext %0, ptr %1, <16 x i8> %2, ptr %3) nounwind {549; CHECK-FIX-LABEL: aese_set16_cond_via_ptr:550; CHECK-FIX: @ %bb.0:551; CHECK-FIX-NEXT: vorr q0, q0, q0552; CHECK-FIX-NEXT: cmp r0, #0553; CHECK-FIX-NEXT: beq .LBB18_2554; CHECK-FIX-NEXT: @ %bb.1:555; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r2]556; CHECK-FIX-NEXT: vld1.16 {d16[0]}, [r1:16]557; CHECK-FIX-NEXT: cmp r0, #0558; CHECK-FIX-NEXT: bne .LBB18_3559; CHECK-FIX-NEXT: b .LBB18_4560; CHECK-FIX-NEXT: .LBB18_2:561; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r2]562; CHECK-FIX-NEXT: cmp r0, #0563; CHECK-FIX-NEXT: beq .LBB18_4564; CHECK-FIX-NEXT: .LBB18_3:565; CHECK-FIX-NEXT: vld1.16 {d0[0]}, [r1:16]566; CHECK-FIX-NEXT: .LBB18_4:567; CHECK-FIX-NEXT: aese.8 q8, q0568; CHECK-FIX-NEXT: aesmc.8 q8, q8569; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r2]570; CHECK-FIX-NEXT: bx lr571 br i1 %0, label %5, label %10572 5735:574 %6 = load i16, ptr %1, align 2575 %7 = bitcast ptr %3 to ptr576 %8 = load <8 x i16>, ptr %7, align 8577 %9 = insertelement <8 x i16> %8, i16 %6, i64 0578 br label %13579 58010:581 %11 = bitcast ptr %3 to ptr582 %12 = load <8 x i16>, ptr %11, align 8583 br label %13584 58513:586 %14 = phi <8 x i16> [ %9, %5 ], [ %12, %10 ]587 br i1 %0, label %15, label %19588 58915:590 %16 = load i16, ptr %1, align 2591 %17 = bitcast <16 x i8> %2 to <8 x i16>592 %18 = insertelement <8 x i16> %17, i16 %16, i64 0593 br label %21594 59519:596 %20 = bitcast <16 x i8> %2 to <8 x i16>597 br label %21598 59921:600 %22 = phi <8 x i16> [ %18, %15 ], [ %20, %19 ]601 %23 = bitcast <8 x i16> %14 to <16 x i8>602 %24 = bitcast <8 x i16> %22 to <16 x i8>603 %25 = call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %23, <16 x i8> %24)604 %26 = call <16 x i8> @llvm.arm.neon.aesmc(<16 x i8> %25)605 store <16 x i8> %26, ptr %3, align 8606 ret void607}608 609define arm_aapcs_vfpcc void @aese_set16_cond_via_val(i1 zeroext %0, i16 zeroext %1, <16 x i8> %2, ptr %3) nounwind {610; CHECK-FIX-LABEL: aese_set16_cond_via_val:611; CHECK-FIX: @ %bb.0:612; CHECK-FIX-NEXT: vorr q0, q0, q0613; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r2]614; CHECK-FIX-NEXT: cmp r0, #0615; CHECK-FIX-NEXT: beq .LBB19_2616; CHECK-FIX-NEXT: @ %bb.1:617; CHECK-FIX-NEXT: vmov.16 d16[0], r1618; CHECK-FIX-NEXT: .LBB19_2: @ %select.end619; CHECK-FIX-NEXT: cmp r0, #0620; CHECK-FIX-NEXT: beq .LBB19_4621; CHECK-FIX-NEXT: @ %bb.3:622; CHECK-FIX-NEXT: vmov.16 d0[0], r1623; CHECK-FIX-NEXT: .LBB19_4: @ %select.end2624; CHECK-FIX-NEXT: aese.8 q8, q0625; CHECK-FIX-NEXT: aesmc.8 q8, q8626; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r2]627; CHECK-FIX-NEXT: bx lr628 %5 = bitcast ptr %3 to ptr629 %6 = load <8 x i16>, ptr %5, align 8630 %7 = insertelement <8 x i16> %6, i16 %1, i64 0631 %8 = select i1 %0, <8 x i16> %7, <8 x i16> %6632 %9 = bitcast <16 x i8> %2 to <8 x i16>633 %10 = insertelement <8 x i16> %9, i16 %1, i64 0634 %11 = select i1 %0, <8 x i16> %10, <8 x i16> %9635 %12 = bitcast <8 x i16> %8 to <16 x i8>636 %13 = bitcast <8 x i16> %11 to <16 x i8>637 %14 = call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %12, <16 x i8> %13)638 %15 = call <16 x i8> @llvm.arm.neon.aesmc(<16 x i8> %14)639 store <16 x i8> %15, ptr %3, align 8640 ret void641}642 643define arm_aapcs_vfpcc void @aese_set16_loop_via_ptr(i32 %0, ptr %1, <16 x i8> %2, ptr %3) nounwind {644; CHECK-FIX-LABEL: aese_set16_loop_via_ptr:645; CHECK-FIX: @ %bb.0:646; CHECK-FIX-NEXT: vorr q0, q0, q0647; CHECK-FIX-NEXT: ldrh r1, [r1]648; CHECK-FIX-NEXT: cmp r0, #0649; CHECK-FIX-NEXT: strh r1, [r2]650; CHECK-FIX-NEXT: bxeq lr651; CHECK-FIX-NEXT: .LBB20_1:652; CHECK-FIX-NEXT: vmov.16 d0[0], r1653; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r2]654; CHECK-FIX-NEXT: .LBB20_2: @ =>This Inner Loop Header: Depth=1655; CHECK-FIX-NEXT: aese.8 q8, q0656; CHECK-FIX-NEXT: subs r0, r0, #1657; CHECK-FIX-NEXT: aesmc.8 q8, q8658; CHECK-FIX-NEXT: bne .LBB20_2659; CHECK-FIX-NEXT: @ %bb.3:660; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r2]661; CHECK-FIX-NEXT: bx lr662 %5 = load i16, ptr %1, align 2663 %6 = bitcast <16 x i8> %2 to <8 x i16>664 %7 = insertelement <8 x i16> %6, i16 %5, i64 0665 %8 = bitcast <8 x i16> %7 to <16 x i8>666 %9 = bitcast ptr %3 to ptr667 store i16 %5, ptr %9, align 8668 %10 = icmp eq i32 %0, 0669 br i1 %10, label %14, label %11670 67111:672 %12 = load <16 x i8>, ptr %3, align 8673 br label %15674 67513:676 store <16 x i8> %19, ptr %3, align 8677 br label %14678 67914:680 ret void681 68215:683 %16 = phi <16 x i8> [ %12, %11 ], [ %19, %15 ]684 %17 = phi i32 [ 0, %11 ], [ %20, %15 ]685 %18 = call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %16, <16 x i8> %8)686 %19 = call <16 x i8> @llvm.arm.neon.aesmc(<16 x i8> %18)687 %20 = add nuw i32 %17, 1688 %21 = icmp eq i32 %20, %0689 br i1 %21, label %13, label %15690}691 692define arm_aapcs_vfpcc void @aese_set16_loop_via_val(i32 %0, i16 zeroext %1, <16 x i8> %2, ptr %3) nounwind {693; CHECK-FIX-LABEL: aese_set16_loop_via_val:694; CHECK-FIX: @ %bb.0:695; CHECK-FIX-NEXT: vorr q0, q0, q0696; CHECK-FIX-NEXT: cmp r0, #0697; CHECK-FIX-NEXT: bxeq lr698; CHECK-FIX-NEXT: .LBB21_1:699; CHECK-FIX-NEXT: vmov.16 d0[0], r1700; CHECK-FIX-NEXT: .LBB21_2: @ =>This Inner Loop Header: Depth=1701; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r2]702; CHECK-FIX-NEXT: subs r0, r0, #1703; CHECK-FIX-NEXT: vmov.16 d16[0], r1704; CHECK-FIX-NEXT: aese.8 q8, q0705; CHECK-FIX-NEXT: aesmc.8 q8, q8706; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r2]707; CHECK-FIX-NEXT: bne .LBB21_2708; CHECK-FIX-NEXT: @ %bb.3:709; CHECK-FIX-NEXT: bx lr710 %5 = icmp eq i32 %0, 0711 br i1 %5, label %12, label %6712 7136:714 %7 = bitcast <16 x i8> %2 to <8 x i16>715 %8 = insertelement <8 x i16> %7, i16 %1, i64 0716 %9 = bitcast <8 x i16> %8 to <16 x i8>717 %10 = bitcast ptr %3 to ptr718 %11 = bitcast ptr %3 to ptr719 br label %13720 72112:722 ret void723 72413:725 %14 = phi i32 [ 0, %6 ], [ %20, %13 ]726 %15 = load <8 x i16>, ptr %10, align 8727 %16 = insertelement <8 x i16> %15, i16 %1, i64 0728 %17 = bitcast <8 x i16> %16 to <16 x i8>729 store i16 %1, ptr %11, align 8730 %18 = call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %17, <16 x i8> %9)731 %19 = call <16 x i8> @llvm.arm.neon.aesmc(<16 x i8> %18)732 store <16 x i8> %19, ptr %3, align 8733 %20 = add nuw i32 %14, 1734 %21 = icmp eq i32 %20, %0735 br i1 %21, label %12, label %13736}737 738define arm_aapcs_vfpcc void @aese_set32_via_ptr(ptr %0, <16 x i8> %1, ptr %2) nounwind {739; CHECK-FIX-NOSCHED-LABEL: aese_set32_via_ptr:740; CHECK-FIX-NOSCHED: @ %bb.0:741; CHECK-FIX-NOSCHED-NEXT: vorr q0, q0, q0742; CHECK-FIX-NOSCHED-NEXT: ldr r0, [r0]743; CHECK-FIX-NOSCHED-NEXT: vld1.64 {d16, d17}, [r1]744; CHECK-FIX-NOSCHED-NEXT: vmov.32 d0[0], r0745; CHECK-FIX-NOSCHED-NEXT: vmov.32 d16[0], r0746; CHECK-FIX-NOSCHED-NEXT: aese.8 q8, q0747; CHECK-FIX-NOSCHED-NEXT: aesmc.8 q8, q8748; CHECK-FIX-NOSCHED-NEXT: vst1.64 {d16, d17}, [r1]749; CHECK-FIX-NOSCHED-NEXT: bx lr750;751; CHECK-CORTEX-FIX-LABEL: aese_set32_via_ptr:752; CHECK-CORTEX-FIX: @ %bb.0:753; CHECK-CORTEX-FIX-NEXT: vorr q0, q0, q0754; CHECK-CORTEX-FIX-NEXT: vld1.64 {d16, d17}, [r1]755; CHECK-CORTEX-FIX-NEXT: ldr r0, [r0]756; CHECK-CORTEX-FIX-NEXT: vmov.32 d0[0], r0757; CHECK-CORTEX-FIX-NEXT: vmov.32 d16[0], r0758; CHECK-CORTEX-FIX-NEXT: aese.8 q8, q0759; CHECK-CORTEX-FIX-NEXT: aesmc.8 q8, q8760; CHECK-CORTEX-FIX-NEXT: vst1.64 {d16, d17}, [r1]761; CHECK-CORTEX-FIX-NEXT: bx lr762 %4 = load i32, ptr %0, align 4763 %5 = bitcast ptr %2 to ptr764 %6 = load <4 x i32>, ptr %5, align 8765 %7 = insertelement <4 x i32> %6, i32 %4, i64 0766 %8 = bitcast <4 x i32> %7 to <16 x i8>767 %9 = bitcast <16 x i8> %1 to <4 x i32>768 %10 = insertelement <4 x i32> %9, i32 %4, i64 0769 %11 = bitcast <4 x i32> %10 to <16 x i8>770 %12 = call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %8, <16 x i8> %11)771 %13 = call <16 x i8> @llvm.arm.neon.aesmc(<16 x i8> %12)772 store <16 x i8> %13, ptr %2, align 8773 ret void774}775 776define arm_aapcs_vfpcc void @aese_set32_via_val(i32 %0, <16 x i8> %1, ptr %2) nounwind {777; CHECK-FIX-LABEL: aese_set32_via_val:778; CHECK-FIX: @ %bb.0:779; CHECK-FIX-NEXT: vorr q0, q0, q0780; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r1]781; CHECK-FIX-NEXT: vmov.32 d0[0], r0782; CHECK-FIX-NEXT: vmov.32 d16[0], r0783; CHECK-FIX-NEXT: aese.8 q8, q0784; CHECK-FIX-NEXT: aesmc.8 q8, q8785; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r1]786; CHECK-FIX-NEXT: bx lr787 %4 = bitcast ptr %2 to ptr788 %5 = load <4 x i32>, ptr %4, align 8789 %6 = insertelement <4 x i32> %5, i32 %0, i64 0790 %7 = bitcast <4 x i32> %6 to <16 x i8>791 %8 = bitcast <16 x i8> %1 to <4 x i32>792 %9 = insertelement <4 x i32> %8, i32 %0, i64 0793 %10 = bitcast <4 x i32> %9 to <16 x i8>794 %11 = call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %7, <16 x i8> %10)795 %12 = call <16 x i8> @llvm.arm.neon.aesmc(<16 x i8> %11)796 store <16 x i8> %12, ptr %2, align 8797 ret void798}799 800define arm_aapcs_vfpcc void @aese_set32_cond_via_ptr(i1 zeroext %0, ptr %1, <16 x i8> %2, ptr %3) nounwind {801; CHECK-FIX-LABEL: aese_set32_cond_via_ptr:802; CHECK-FIX: @ %bb.0:803; CHECK-FIX-NEXT: vorr q0, q0, q0804; CHECK-FIX-NEXT: cmp r0, #0805; CHECK-FIX-NEXT: beq .LBB24_2806; CHECK-FIX-NEXT: @ %bb.1:807; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r2]808; CHECK-FIX-NEXT: vld1.32 {d16[0]}, [r1:32]809; CHECK-FIX-NEXT: cmp r0, #0810; CHECK-FIX-NEXT: bne .LBB24_3811; CHECK-FIX-NEXT: b .LBB24_4812; CHECK-FIX-NEXT: .LBB24_2:813; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r2]814; CHECK-FIX-NEXT: cmp r0, #0815; CHECK-FIX-NEXT: beq .LBB24_4816; CHECK-FIX-NEXT: .LBB24_3:817; CHECK-FIX-NEXT: vld1.32 {d0[0]}, [r1:32]818; CHECK-FIX-NEXT: .LBB24_4:819; CHECK-FIX-NEXT: aese.8 q8, q0820; CHECK-FIX-NEXT: aesmc.8 q8, q8821; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r2]822; CHECK-FIX-NEXT: bx lr823 br i1 %0, label %5, label %10824 8255:826 %6 = load i32, ptr %1, align 4827 %7 = bitcast ptr %3 to ptr828 %8 = load <4 x i32>, ptr %7, align 8829 %9 = insertelement <4 x i32> %8, i32 %6, i64 0830 br label %13831 83210:833 %11 = bitcast ptr %3 to ptr834 %12 = load <4 x i32>, ptr %11, align 8835 br label %13836 83713:838 %14 = phi <4 x i32> [ %9, %5 ], [ %12, %10 ]839 br i1 %0, label %15, label %19840 84115:842 %16 = load i32, ptr %1, align 4843 %17 = bitcast <16 x i8> %2 to <4 x i32>844 %18 = insertelement <4 x i32> %17, i32 %16, i64 0845 br label %21846 84719:848 %20 = bitcast <16 x i8> %2 to <4 x i32>849 br label %21850 85121:852 %22 = phi <4 x i32> [ %18, %15 ], [ %20, %19 ]853 %23 = bitcast <4 x i32> %14 to <16 x i8>854 %24 = bitcast <4 x i32> %22 to <16 x i8>855 %25 = call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %23, <16 x i8> %24)856 %26 = call <16 x i8> @llvm.arm.neon.aesmc(<16 x i8> %25)857 store <16 x i8> %26, ptr %3, align 8858 ret void859}860 861define arm_aapcs_vfpcc void @aese_set32_cond_via_val(i1 zeroext %0, i32 %1, <16 x i8> %2, ptr %3) nounwind {862; CHECK-FIX-LABEL: aese_set32_cond_via_val:863; CHECK-FIX: @ %bb.0:864; CHECK-FIX-NEXT: vorr q0, q0, q0865; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r2]866; CHECK-FIX-NEXT: cmp r0, #0867; CHECK-FIX-NEXT: beq .LBB25_2868; CHECK-FIX-NEXT: @ %bb.1:869; CHECK-FIX-NEXT: vmov.32 d16[0], r1870; CHECK-FIX-NEXT: .LBB25_2: @ %select.end871; CHECK-FIX-NEXT: cmp r0, #0872; CHECK-FIX-NEXT: beq .LBB25_4873; CHECK-FIX-NEXT: @ %bb.3:874; CHECK-FIX-NEXT: vmov.32 d0[0], r1875; CHECK-FIX-NEXT: .LBB25_4: @ %select.end2876; CHECK-FIX-NEXT: aese.8 q8, q0877; CHECK-FIX-NEXT: aesmc.8 q8, q8878; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r2]879; CHECK-FIX-NEXT: bx lr880 %5 = bitcast ptr %3 to ptr881 %6 = load <4 x i32>, ptr %5, align 8882 %7 = insertelement <4 x i32> %6, i32 %1, i64 0883 %8 = select i1 %0, <4 x i32> %7, <4 x i32> %6884 %9 = bitcast <16 x i8> %2 to <4 x i32>885 %10 = insertelement <4 x i32> %9, i32 %1, i64 0886 %11 = select i1 %0, <4 x i32> %10, <4 x i32> %9887 %12 = bitcast <4 x i32> %8 to <16 x i8>888 %13 = bitcast <4 x i32> %11 to <16 x i8>889 %14 = call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %12, <16 x i8> %13)890 %15 = call <16 x i8> @llvm.arm.neon.aesmc(<16 x i8> %14)891 store <16 x i8> %15, ptr %3, align 8892 ret void893}894 895define arm_aapcs_vfpcc void @aese_set32_loop_via_ptr(i32 %0, ptr %1, <16 x i8> %2, ptr %3) nounwind {896; CHECK-FIX-LABEL: aese_set32_loop_via_ptr:897; CHECK-FIX: @ %bb.0:898; CHECK-FIX-NEXT: vorr q0, q0, q0899; CHECK-FIX-NEXT: ldr r1, [r1]900; CHECK-FIX-NEXT: cmp r0, #0901; CHECK-FIX-NEXT: str r1, [r2]902; CHECK-FIX-NEXT: bxeq lr903; CHECK-FIX-NEXT: .LBB26_1:904; CHECK-FIX-NEXT: vmov.32 d0[0], r1905; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r2]906; CHECK-FIX-NEXT: .LBB26_2: @ =>This Inner Loop Header: Depth=1907; CHECK-FIX-NEXT: aese.8 q8, q0908; CHECK-FIX-NEXT: subs r0, r0, #1909; CHECK-FIX-NEXT: aesmc.8 q8, q8910; CHECK-FIX-NEXT: bne .LBB26_2911; CHECK-FIX-NEXT: @ %bb.3:912; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r2]913; CHECK-FIX-NEXT: bx lr914 %5 = load i32, ptr %1, align 4915 %6 = bitcast <16 x i8> %2 to <4 x i32>916 %7 = insertelement <4 x i32> %6, i32 %5, i64 0917 %8 = bitcast <4 x i32> %7 to <16 x i8>918 %9 = bitcast ptr %3 to ptr919 store i32 %5, ptr %9, align 8920 %10 = icmp eq i32 %0, 0921 br i1 %10, label %14, label %11922 92311:924 %12 = load <16 x i8>, ptr %3, align 8925 br label %15926 92713:928 store <16 x i8> %19, ptr %3, align 8929 br label %14930 93114:932 ret void933 93415:935 %16 = phi <16 x i8> [ %12, %11 ], [ %19, %15 ]936 %17 = phi i32 [ 0, %11 ], [ %20, %15 ]937 %18 = call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %16, <16 x i8> %8)938 %19 = call <16 x i8> @llvm.arm.neon.aesmc(<16 x i8> %18)939 %20 = add nuw i32 %17, 1940 %21 = icmp eq i32 %20, %0941 br i1 %21, label %13, label %15942}943 944define arm_aapcs_vfpcc void @aese_set32_loop_via_val(i32 %0, i32 %1, <16 x i8> %2, ptr %3) nounwind {945; CHECK-FIX-LABEL: aese_set32_loop_via_val:946; CHECK-FIX: @ %bb.0:947; CHECK-FIX-NEXT: vorr q0, q0, q0948; CHECK-FIX-NEXT: cmp r0, #0949; CHECK-FIX-NEXT: bxeq lr950; CHECK-FIX-NEXT: .LBB27_1:951; CHECK-FIX-NEXT: vmov.32 d0[0], r1952; CHECK-FIX-NEXT: .LBB27_2: @ =>This Inner Loop Header: Depth=1953; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r2]954; CHECK-FIX-NEXT: subs r0, r0, #1955; CHECK-FIX-NEXT: vmov.32 d16[0], r1956; CHECK-FIX-NEXT: aese.8 q8, q0957; CHECK-FIX-NEXT: aesmc.8 q8, q8958; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r2]959; CHECK-FIX-NEXT: bne .LBB27_2960; CHECK-FIX-NEXT: @ %bb.3:961; CHECK-FIX-NEXT: bx lr962 %5 = icmp eq i32 %0, 0963 br i1 %5, label %12, label %6964 9656:966 %7 = bitcast <16 x i8> %2 to <4 x i32>967 %8 = insertelement <4 x i32> %7, i32 %1, i64 0968 %9 = bitcast <4 x i32> %8 to <16 x i8>969 %10 = bitcast ptr %3 to ptr970 %11 = bitcast ptr %3 to ptr971 br label %13972 97312:974 ret void975 97613:977 %14 = phi i32 [ 0, %6 ], [ %20, %13 ]978 %15 = load <4 x i32>, ptr %10, align 8979 %16 = insertelement <4 x i32> %15, i32 %1, i64 0980 %17 = bitcast <4 x i32> %16 to <16 x i8>981 store i32 %1, ptr %11, align 8982 %18 = call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %17, <16 x i8> %9)983 %19 = call <16 x i8> @llvm.arm.neon.aesmc(<16 x i8> %18)984 store <16 x i8> %19, ptr %3, align 8985 %20 = add nuw i32 %14, 1986 %21 = icmp eq i32 %20, %0987 br i1 %21, label %12, label %13988}989 990define arm_aapcs_vfpcc void @aese_set64_via_ptr(ptr %0, <16 x i8> %1, ptr %2) nounwind {991; CHECK-FIX-NOSCHED-LABEL: aese_set64_via_ptr:992; CHECK-FIX-NOSCHED: @ %bb.0:993; CHECK-FIX-NOSCHED-NEXT: vorr q0, q0, q0994; CHECK-FIX-NOSCHED-NEXT: vld1.64 {d16, d17}, [r1]995; CHECK-FIX-NOSCHED-NEXT: vldr d0, [r0]996; CHECK-FIX-NOSCHED-NEXT: vorr d16, d0, d0997; CHECK-FIX-NOSCHED-NEXT: aese.8 q8, q0998; CHECK-FIX-NOSCHED-NEXT: aesmc.8 q8, q8999; CHECK-FIX-NOSCHED-NEXT: vst1.64 {d16, d17}, [r1]1000; CHECK-FIX-NOSCHED-NEXT: bx lr1001;1002; CHECK-CORTEX-FIX-LABEL: aese_set64_via_ptr:1003; CHECK-CORTEX-FIX: @ %bb.0:1004; CHECK-CORTEX-FIX-NEXT: vorr q0, q0, q01005; CHECK-CORTEX-FIX-NEXT: vldr d0, [r0]1006; CHECK-CORTEX-FIX-NEXT: vld1.64 {d16, d17}, [r1]1007; CHECK-CORTEX-FIX-NEXT: vorr d16, d0, d01008; CHECK-CORTEX-FIX-NEXT: aese.8 q8, q01009; CHECK-CORTEX-FIX-NEXT: aesmc.8 q8, q81010; CHECK-CORTEX-FIX-NEXT: vst1.64 {d16, d17}, [r1]1011; CHECK-CORTEX-FIX-NEXT: bx lr1012 %4 = load i64, ptr %0, align 81013 %5 = bitcast ptr %2 to ptr1014 %6 = load <2 x i64>, ptr %5, align 81015 %7 = insertelement <2 x i64> %6, i64 %4, i64 01016 %8 = bitcast <2 x i64> %7 to <16 x i8>1017 %9 = bitcast <16 x i8> %1 to <2 x i64>1018 %10 = insertelement <2 x i64> %9, i64 %4, i64 01019 %11 = bitcast <2 x i64> %10 to <16 x i8>1020 %12 = call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %8, <16 x i8> %11)1021 %13 = call <16 x i8> @llvm.arm.neon.aesmc(<16 x i8> %12)1022 store <16 x i8> %13, ptr %2, align 81023 ret void1024}1025 1026define arm_aapcs_vfpcc void @aese_set64_via_val(i64 %0, <16 x i8> %1, ptr %2) nounwind {1027; CHECK-FIX-LABEL: aese_set64_via_val:1028; CHECK-FIX: @ %bb.0:1029; CHECK-FIX-NEXT: vorr q0, q0, q01030; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r2]1031; CHECK-FIX-NEXT: vmov.32 d0[0], r01032; CHECK-FIX-NEXT: vmov.32 d16[0], r01033; CHECK-FIX-NEXT: vmov.32 d0[1], r11034; CHECK-FIX-NEXT: vmov.32 d16[1], r11035; CHECK-FIX-NEXT: aese.8 q8, q01036; CHECK-FIX-NEXT: aesmc.8 q8, q81037; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r2]1038; CHECK-FIX-NEXT: bx lr1039 %4 = bitcast ptr %2 to ptr1040 %5 = load <2 x i64>, ptr %4, align 81041 %6 = insertelement <2 x i64> %5, i64 %0, i64 01042 %7 = bitcast <2 x i64> %6 to <16 x i8>1043 %8 = bitcast <16 x i8> %1 to <2 x i64>1044 %9 = insertelement <2 x i64> %8, i64 %0, i64 01045 %10 = bitcast <2 x i64> %9 to <16 x i8>1046 %11 = call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %7, <16 x i8> %10)1047 %12 = call <16 x i8> @llvm.arm.neon.aesmc(<16 x i8> %11)1048 store <16 x i8> %12, ptr %2, align 81049 ret void1050}1051 1052define arm_aapcs_vfpcc void @aese_set64_cond_via_ptr(i1 zeroext %0, ptr %1, <16 x i8> %2, ptr %3) nounwind {1053; CHECK-FIX-NOSCHED-LABEL: aese_set64_cond_via_ptr:1054; CHECK-FIX-NOSCHED: @ %bb.0:1055; CHECK-FIX-NOSCHED-NEXT: cmp r0, #01056; CHECK-FIX-NOSCHED-NEXT: beq .LBB30_21057; CHECK-FIX-NOSCHED-NEXT: @ %bb.1:1058; CHECK-FIX-NOSCHED-NEXT: vld1.64 {d16, d17}, [r2]1059; CHECK-FIX-NOSCHED-NEXT: vldr d16, [r1]1060; CHECK-FIX-NOSCHED-NEXT: b .LBB30_31061; CHECK-FIX-NOSCHED-NEXT: .LBB30_2:1062; CHECK-FIX-NOSCHED-NEXT: vld1.64 {d16, d17}, [r2]1063; CHECK-FIX-NOSCHED-NEXT: .LBB30_3:1064; CHECK-FIX-NOSCHED-NEXT: cmp r0, #01065; CHECK-FIX-NOSCHED-NEXT: vldrne d0, [r1]1066; CHECK-FIX-NOSCHED-NEXT: vorr q0, q0, q01067; CHECK-FIX-NOSCHED-NEXT: aese.8 q8, q01068; CHECK-FIX-NOSCHED-NEXT: aesmc.8 q8, q81069; CHECK-FIX-NOSCHED-NEXT: vst1.64 {d16, d17}, [r2]1070; CHECK-FIX-NOSCHED-NEXT: bx lr1071;1072; CHECK-CORTEX-FIX-LABEL: aese_set64_cond_via_ptr:1073; CHECK-CORTEX-FIX: @ %bb.0:1074; CHECK-CORTEX-FIX-NEXT: cmp r0, #01075; CHECK-CORTEX-FIX-NEXT: beq .LBB30_21076; CHECK-CORTEX-FIX-NEXT: @ %bb.1:1077; CHECK-CORTEX-FIX-NEXT: vldr d18, [r1]1078; CHECK-CORTEX-FIX-NEXT: vld1.64 {d16, d17}, [r2]1079; CHECK-CORTEX-FIX-NEXT: vorr d16, d18, d181080; CHECK-CORTEX-FIX-NEXT: b .LBB30_31081; CHECK-CORTEX-FIX-NEXT: .LBB30_2:1082; CHECK-CORTEX-FIX-NEXT: vld1.64 {d16, d17}, [r2]1083; CHECK-CORTEX-FIX-NEXT: .LBB30_3:1084; CHECK-CORTEX-FIX-NEXT: cmp r0, #01085; CHECK-CORTEX-FIX-NEXT: vldrne d0, [r1]1086; CHECK-CORTEX-FIX-NEXT: vorr q0, q0, q01087; CHECK-CORTEX-FIX-NEXT: aese.8 q8, q01088; CHECK-CORTEX-FIX-NEXT: aesmc.8 q8, q81089; CHECK-CORTEX-FIX-NEXT: vst1.64 {d16, d17}, [r2]1090; CHECK-CORTEX-FIX-NEXT: bx lr1091 br i1 %0, label %5, label %101092 10935:1094 %6 = load i64, ptr %1, align 81095 %7 = bitcast ptr %3 to ptr1096 %8 = load <2 x i64>, ptr %7, align 81097 %9 = insertelement <2 x i64> %8, i64 %6, i64 01098 br label %131099 110010:1101 %11 = bitcast ptr %3 to ptr1102 %12 = load <2 x i64>, ptr %11, align 81103 br label %131104 110513:1106 %14 = phi <2 x i64> [ %9, %5 ], [ %12, %10 ]1107 br i1 %0, label %15, label %191108 110915:1110 %16 = load i64, ptr %1, align 81111 %17 = bitcast <16 x i8> %2 to <2 x i64>1112 %18 = insertelement <2 x i64> %17, i64 %16, i64 01113 br label %211114 111519:1116 %20 = bitcast <16 x i8> %2 to <2 x i64>1117 br label %211118 111921:1120 %22 = phi <2 x i64> [ %18, %15 ], [ %20, %19 ]1121 %23 = bitcast <2 x i64> %14 to <16 x i8>1122 %24 = bitcast <2 x i64> %22 to <16 x i8>1123 %25 = call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %23, <16 x i8> %24)1124 %26 = call <16 x i8> @llvm.arm.neon.aesmc(<16 x i8> %25)1125 store <16 x i8> %26, ptr %3, align 81126 ret void1127}1128 1129define arm_aapcs_vfpcc void @aese_set64_cond_via_val(i1 zeroext %0, i64 %1, <16 x i8> %2, ptr %3) nounwind {1130; CHECK-FIX-LABEL: aese_set64_cond_via_val:1131; CHECK-FIX: @ %bb.0:1132; CHECK-FIX-NEXT: vorr q0, q0, q01133; CHECK-FIX-NEXT: ldr r1, [sp]1134; CHECK-FIX-NEXT: cmp r0, #01135; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r1]1136; CHECK-FIX-NEXT: beq .LBB31_21137; CHECK-FIX-NEXT: @ %bb.1:1138; CHECK-FIX-NEXT: vmov.32 d16[0], r21139; CHECK-FIX-NEXT: vmov.32 d16[1], r31140; CHECK-FIX-NEXT: .LBB31_2: @ %select.end1141; CHECK-FIX-NEXT: cmp r0, #01142; CHECK-FIX-NEXT: beq .LBB31_41143; CHECK-FIX-NEXT: @ %bb.3:1144; CHECK-FIX-NEXT: vmov.32 d0[0], r21145; CHECK-FIX-NEXT: vmov.32 d0[1], r31146; CHECK-FIX-NEXT: .LBB31_4: @ %select.end21147; CHECK-FIX-NEXT: aese.8 q8, q01148; CHECK-FIX-NEXT: aesmc.8 q8, q81149; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r1]1150; CHECK-FIX-NEXT: bx lr1151 %5 = bitcast ptr %3 to ptr1152 %6 = load <2 x i64>, ptr %5, align 81153 %7 = insertelement <2 x i64> %6, i64 %1, i64 01154 %8 = select i1 %0, <2 x i64> %7, <2 x i64> %61155 %9 = bitcast <16 x i8> %2 to <2 x i64>1156 %10 = insertelement <2 x i64> %9, i64 %1, i64 01157 %11 = select i1 %0, <2 x i64> %10, <2 x i64> %91158 %12 = bitcast <2 x i64> %8 to <16 x i8>1159 %13 = bitcast <2 x i64> %11 to <16 x i8>1160 %14 = call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %12, <16 x i8> %13)1161 %15 = call <16 x i8> @llvm.arm.neon.aesmc(<16 x i8> %14)1162 store <16 x i8> %15, ptr %3, align 81163 ret void1164}1165 1166define arm_aapcs_vfpcc void @aese_set64_loop_via_ptr(i32 %0, ptr %1, <16 x i8> %2, ptr %3) nounwind {1167; CHECK-FIX-NOSCHED-LABEL: aese_set64_loop_via_ptr:1168; CHECK-FIX-NOSCHED: @ %bb.0:1169; CHECK-FIX-NOSCHED-NEXT: vorr q0, q0, q01170; CHECK-FIX-NOSCHED-NEXT: .save {r4, r5, r11, lr}1171; CHECK-FIX-NOSCHED-NEXT: push {r4, r5, r11, lr}1172; CHECK-FIX-NOSCHED-NEXT: ldrd r4, r5, [r1]1173; CHECK-FIX-NOSCHED-NEXT: cmp r0, #01174; CHECK-FIX-NOSCHED-NEXT: strd r4, r5, [r2]1175; CHECK-FIX-NOSCHED-NEXT: beq .LBB32_41176; CHECK-FIX-NOSCHED-NEXT: @ %bb.1:1177; CHECK-FIX-NOSCHED-NEXT: vmov d0, r4, r51178; CHECK-FIX-NOSCHED-NEXT: vld1.64 {d16, d17}, [r2]1179; CHECK-FIX-NOSCHED-NEXT: .LBB32_2: @ =>This Inner Loop Header: Depth=11180; CHECK-FIX-NOSCHED-NEXT: aese.8 q8, q01181; CHECK-FIX-NOSCHED-NEXT: subs r0, r0, #11182; CHECK-FIX-NOSCHED-NEXT: aesmc.8 q8, q81183; CHECK-FIX-NOSCHED-NEXT: bne .LBB32_21184; CHECK-FIX-NOSCHED-NEXT: @ %bb.3:1185; CHECK-FIX-NOSCHED-NEXT: vst1.64 {d16, d17}, [r2]1186; CHECK-FIX-NOSCHED-NEXT: .LBB32_4:1187; CHECK-FIX-NOSCHED-NEXT: pop {r4, r5, r11, pc}1188;1189; CHECK-CORTEX-FIX-LABEL: aese_set64_loop_via_ptr:1190; CHECK-CORTEX-FIX: @ %bb.0:1191; CHECK-CORTEX-FIX-NEXT: vorr q0, q0, q01192; CHECK-CORTEX-FIX-NEXT: .save {r4, r5, r11, lr}1193; CHECK-CORTEX-FIX-NEXT: push {r4, r5, r11, lr}1194; CHECK-CORTEX-FIX-NEXT: ldrd r4, r5, [r1]1195; CHECK-CORTEX-FIX-NEXT: cmp r0, #01196; CHECK-CORTEX-FIX-NEXT: strd r4, r5, [r2]1197; CHECK-CORTEX-FIX-NEXT: popeq {r4, r5, r11, pc}1198; CHECK-CORTEX-FIX-NEXT: .LBB32_1:1199; CHECK-CORTEX-FIX-NEXT: vmov d0, r4, r51200; CHECK-CORTEX-FIX-NEXT: vld1.64 {d16, d17}, [r2]1201; CHECK-CORTEX-FIX-NEXT: .LBB32_2: @ =>This Inner Loop Header: Depth=11202; CHECK-CORTEX-FIX-NEXT: aese.8 q8, q01203; CHECK-CORTEX-FIX-NEXT: subs r0, r0, #11204; CHECK-CORTEX-FIX-NEXT: aesmc.8 q8, q81205; CHECK-CORTEX-FIX-NEXT: bne .LBB32_21206; CHECK-CORTEX-FIX-NEXT: @ %bb.3:1207; CHECK-CORTEX-FIX-NEXT: vst1.64 {d16, d17}, [r2]1208; CHECK-CORTEX-FIX-NEXT: pop {r4, r5, r11, pc}1209 %5 = load i64, ptr %1, align 81210 %6 = bitcast <16 x i8> %2 to <2 x i64>1211 %7 = insertelement <2 x i64> %6, i64 %5, i64 01212 %8 = bitcast <2 x i64> %7 to <16 x i8>1213 %9 = bitcast ptr %3 to ptr1214 store i64 %5, ptr %9, align 81215 %10 = icmp eq i32 %0, 01216 br i1 %10, label %14, label %111217 121811:1219 %12 = load <16 x i8>, ptr %3, align 81220 br label %151221 122213:1223 store <16 x i8> %19, ptr %3, align 81224 br label %141225 122614:1227 ret void1228 122915:1230 %16 = phi <16 x i8> [ %12, %11 ], [ %19, %15 ]1231 %17 = phi i32 [ 0, %11 ], [ %20, %15 ]1232 %18 = call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %16, <16 x i8> %8)1233 %19 = call <16 x i8> @llvm.arm.neon.aesmc(<16 x i8> %18)1234 %20 = add nuw i32 %17, 11235 %21 = icmp eq i32 %20, %01236 br i1 %21, label %13, label %151237}1238 1239define arm_aapcs_vfpcc void @aese_set64_loop_via_val(i32 %0, i64 %1, <16 x i8> %2, ptr %3) nounwind {1240; CHECK-FIX-LABEL: aese_set64_loop_via_val:1241; CHECK-FIX: @ %bb.0:1242; CHECK-FIX-NEXT: vorr q0, q0, q01243; CHECK-FIX-NEXT: cmp r0, #01244; CHECK-FIX-NEXT: bxeq lr1245; CHECK-FIX-NEXT: .LBB33_1:1246; CHECK-FIX-NEXT: vmov.32 d0[0], r21247; CHECK-FIX-NEXT: ldr r1, [sp]1248; CHECK-FIX-NEXT: vmov.32 d0[1], r31249; CHECK-FIX-NEXT: .LBB33_2: @ =>This Inner Loop Header: Depth=11250; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r1]1251; CHECK-FIX-NEXT: subs r0, r0, #11252; CHECK-FIX-NEXT: vmov.32 d16[0], r21253; CHECK-FIX-NEXT: vmov.32 d16[1], r31254; CHECK-FIX-NEXT: aese.8 q8, q01255; CHECK-FIX-NEXT: aesmc.8 q8, q81256; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r1]1257; CHECK-FIX-NEXT: bne .LBB33_21258; CHECK-FIX-NEXT: @ %bb.3:1259; CHECK-FIX-NEXT: bx lr1260 %5 = icmp eq i32 %0, 01261 br i1 %5, label %12, label %61262 12636:1264 %7 = bitcast <16 x i8> %2 to <2 x i64>1265 %8 = insertelement <2 x i64> %7, i64 %1, i64 01266 %9 = bitcast <2 x i64> %8 to <16 x i8>1267 %10 = bitcast ptr %3 to ptr1268 %11 = bitcast ptr %3 to ptr1269 br label %131270 127112:1272 ret void1273 127413:1275 %14 = phi i32 [ 0, %6 ], [ %20, %13 ]1276 %15 = load <2 x i64>, ptr %10, align 81277 %16 = insertelement <2 x i64> %15, i64 %1, i64 01278 %17 = bitcast <2 x i64> %16 to <16 x i8>1279 store i64 %1, ptr %11, align 81280 %18 = call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %17, <16 x i8> %9)1281 %19 = call <16 x i8> @llvm.arm.neon.aesmc(<16 x i8> %18)1282 store <16 x i8> %19, ptr %3, align 81283 %20 = add nuw i32 %14, 11284 %21 = icmp eq i32 %20, %01285 br i1 %21, label %12, label %131286}1287 1288define arm_aapcs_vfpcc void @aese_setf16_via_ptr(ptr %0, <16 x i8> %1, ptr %2) nounwind {1289; CHECK-FIX-NOSCHED-LABEL: aese_setf16_via_ptr:1290; CHECK-FIX-NOSCHED: @ %bb.0:1291; CHECK-FIX-NOSCHED-NEXT: vorr q0, q0, q01292; CHECK-FIX-NOSCHED-NEXT: ldrh r0, [r0]1293; CHECK-FIX-NOSCHED-NEXT: vld1.64 {d16, d17}, [r1]1294; CHECK-FIX-NOSCHED-NEXT: vmov.16 d0[0], r01295; CHECK-FIX-NOSCHED-NEXT: vmov.16 d16[0], r01296; CHECK-FIX-NOSCHED-NEXT: aese.8 q8, q01297; CHECK-FIX-NOSCHED-NEXT: aesmc.8 q8, q81298; CHECK-FIX-NOSCHED-NEXT: vst1.64 {d16, d17}, [r1]1299; CHECK-FIX-NOSCHED-NEXT: bx lr1300;1301; CHECK-CORTEX-FIX-LABEL: aese_setf16_via_ptr:1302; CHECK-CORTEX-FIX: @ %bb.0:1303; CHECK-CORTEX-FIX-NEXT: vorr q0, q0, q01304; CHECK-CORTEX-FIX-NEXT: vld1.64 {d16, d17}, [r1]1305; CHECK-CORTEX-FIX-NEXT: ldrh r0, [r0]1306; CHECK-CORTEX-FIX-NEXT: vmov.16 d0[0], r01307; CHECK-CORTEX-FIX-NEXT: vmov.16 d16[0], r01308; CHECK-CORTEX-FIX-NEXT: aese.8 q8, q01309; CHECK-CORTEX-FIX-NEXT: aesmc.8 q8, q81310; CHECK-CORTEX-FIX-NEXT: vst1.64 {d16, d17}, [r1]1311; CHECK-CORTEX-FIX-NEXT: bx lr1312 %4 = bitcast ptr %0 to ptr1313 %5 = load i16, ptr %4, align 21314 %6 = bitcast ptr %2 to ptr1315 %7 = load <8 x i16>, ptr %6, align 81316 %8 = insertelement <8 x i16> %7, i16 %5, i64 01317 %9 = bitcast <8 x i16> %8 to <16 x i8>1318 %10 = bitcast <16 x i8> %1 to <8 x i16>1319 %11 = insertelement <8 x i16> %10, i16 %5, i64 01320 %12 = bitcast <8 x i16> %11 to <16 x i8>1321 %13 = call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %9, <16 x i8> %12)1322 %14 = call <16 x i8> @llvm.arm.neon.aesmc(<16 x i8> %13)1323 store <16 x i8> %14, ptr %2, align 81324 ret void1325}1326 1327define arm_aapcs_vfpcc void @aese_setf16_via_val(half %0, <16 x i8> %1, ptr %2) nounwind {1328; CHECK-FIX-LABEL: aese_setf16_via_val:1329; CHECK-FIX: @ %bb.0:1330; CHECK-FIX-NEXT: vorr q1, q1, q11331; CHECK-FIX-NEXT: vmov r1, s01332; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r0]1333; CHECK-FIX-NEXT: vmov.16 d2[0], r11334; CHECK-FIX-NEXT: vmov.16 d16[0], r11335; CHECK-FIX-NEXT: aese.8 q8, q11336; CHECK-FIX-NEXT: aesmc.8 q8, q81337; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r0]1338; CHECK-FIX-NEXT: bx lr1339 %4 = bitcast ptr %2 to ptr1340 %5 = load <8 x i16>, ptr %4, align 81341 %6 = bitcast half %0 to i161342 %7 = insertelement <8 x i16> %5, i16 %6, i64 01343 %8 = bitcast <8 x i16> %7 to <16 x i8>1344 %9 = bitcast <16 x i8> %1 to <8 x i16>1345 %10 = insertelement <8 x i16> %9, i16 %6, i64 01346 %11 = bitcast <8 x i16> %10 to <16 x i8>1347 %12 = call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %8, <16 x i8> %11)1348 %13 = call <16 x i8> @llvm.arm.neon.aesmc(<16 x i8> %12)1349 store <16 x i8> %13, ptr %2, align 81350 ret void1351}1352 1353define arm_aapcs_vfpcc void @aese_setf16_cond_via_ptr(i1 zeroext %0, ptr %1, <16 x i8> %2, ptr %3) nounwind {1354; CHECK-FIX-NOSCHED-LABEL: aese_setf16_cond_via_ptr:1355; CHECK-FIX-NOSCHED: @ %bb.0:1356; CHECK-FIX-NOSCHED-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}1357; CHECK-FIX-NOSCHED-NEXT: push {r4, r5, r6, r7, r8, r9, r10, r11, lr}1358; CHECK-FIX-NOSCHED-NEXT: .pad #121359; CHECK-FIX-NOSCHED-NEXT: sub sp, sp, #121360; CHECK-FIX-NOSCHED-NEXT: cmp r0, #01361; CHECK-FIX-NOSCHED-NEXT: beq .LBB36_31362; CHECK-FIX-NOSCHED-NEXT: @ %bb.1:1363; CHECK-FIX-NOSCHED-NEXT: vld1.64 {d16, d17}, [r2]1364; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r3, d17[3]1365; CHECK-FIX-NOSCHED-NEXT: ldrh r7, [r1]1366; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r9, d17[0]1367; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r10, d16[3]1368; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r11, d16[2]1369; CHECK-FIX-NOSCHED-NEXT: str r3, [sp, #8] @ 4-byte Spill1370; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r3, d17[2]1371; CHECK-FIX-NOSCHED-NEXT: str r3, [sp, #4] @ 4-byte Spill1372; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r3, d17[1]1373; CHECK-FIX-NOSCHED-NEXT: str r3, [sp] @ 4-byte Spill1374; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r3, d16[1]1375; CHECK-FIX-NOSCHED-NEXT: cmp r0, #01376; CHECK-FIX-NOSCHED-NEXT: bne .LBB36_41377; CHECK-FIX-NOSCHED-NEXT: .LBB36_2:1378; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r0, d1[3]1379; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r4, d1[2]1380; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r5, d1[1]1381; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r6, d1[0]1382; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r12, d0[3]1383; CHECK-FIX-NOSCHED-NEXT: vmov.u16 lr, d0[2]1384; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r8, d0[1]1385; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r1, d0[0]1386; CHECK-FIX-NOSCHED-NEXT: b .LBB36_51387; CHECK-FIX-NOSCHED-NEXT: .LBB36_3:1388; CHECK-FIX-NOSCHED-NEXT: add r3, r2, #81389; CHECK-FIX-NOSCHED-NEXT: vld1.32 {d16[0]}, [r2:32]1390; CHECK-FIX-NOSCHED-NEXT: vld1.32 {d17[0]}, [r3:32]1391; CHECK-FIX-NOSCHED-NEXT: add r3, r2, #41392; CHECK-FIX-NOSCHED-NEXT: vld1.32 {d16[1]}, [r3:32]1393; CHECK-FIX-NOSCHED-NEXT: add r3, r2, #121394; CHECK-FIX-NOSCHED-NEXT: vld1.32 {d17[1]}, [r3:32]1395; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r3, d17[3]1396; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r9, d17[0]1397; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r10, d16[3]1398; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r11, d16[2]1399; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r7, d16[0]1400; CHECK-FIX-NOSCHED-NEXT: str r3, [sp, #8] @ 4-byte Spill1401; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r3, d17[2]1402; CHECK-FIX-NOSCHED-NEXT: str r3, [sp, #4] @ 4-byte Spill1403; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r3, d17[1]1404; CHECK-FIX-NOSCHED-NEXT: str r3, [sp] @ 4-byte Spill1405; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r3, d16[1]1406; CHECK-FIX-NOSCHED-NEXT: cmp r0, #01407; CHECK-FIX-NOSCHED-NEXT: beq .LBB36_21408; CHECK-FIX-NOSCHED-NEXT: .LBB36_4:1409; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r0, d1[3]1410; CHECK-FIX-NOSCHED-NEXT: ldrh r1, [r1]1411; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r4, d1[2]1412; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r5, d1[1]1413; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r6, d1[0]1414; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r12, d0[3]1415; CHECK-FIX-NOSCHED-NEXT: vmov.u16 lr, d0[2]1416; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r8, d0[1]1417; CHECK-FIX-NOSCHED-NEXT: .LBB36_5:1418; CHECK-FIX-NOSCHED-NEXT: pkhbt r1, r1, r8, lsl #161419; CHECK-FIX-NOSCHED-NEXT: pkhbt r3, r7, r3, lsl #161420; CHECK-FIX-NOSCHED-NEXT: pkhbt r0, r4, r0, lsl #161421; CHECK-FIX-NOSCHED-NEXT: vmov.32 d18[0], r11422; CHECK-FIX-NOSCHED-NEXT: pkhbt r1, lr, r12, lsl #161423; CHECK-FIX-NOSCHED-NEXT: vmov.32 d16[0], r31424; CHECK-FIX-NOSCHED-NEXT: vmov.32 d18[1], r11425; CHECK-FIX-NOSCHED-NEXT: pkhbt r1, r11, r10, lsl #161426; CHECK-FIX-NOSCHED-NEXT: vmov.32 d16[1], r11427; CHECK-FIX-NOSCHED-NEXT: pkhbt r1, r6, r5, lsl #161428; CHECK-FIX-NOSCHED-NEXT: vmov.32 d19[0], r11429; CHECK-FIX-NOSCHED-NEXT: ldr r1, [sp] @ 4-byte Reload1430; CHECK-FIX-NOSCHED-NEXT: pkhbt r1, r9, r1, lsl #161431; CHECK-FIX-NOSCHED-NEXT: vmov.32 d19[1], r01432; CHECK-FIX-NOSCHED-NEXT: ldr r0, [sp, #8] @ 4-byte Reload1433; CHECK-FIX-NOSCHED-NEXT: vmov.32 d17[0], r11434; CHECK-FIX-NOSCHED-NEXT: ldr r1, [sp, #4] @ 4-byte Reload1435; CHECK-FIX-NOSCHED-NEXT: pkhbt r0, r1, r0, lsl #161436; CHECK-FIX-NOSCHED-NEXT: vmov.32 d17[1], r01437; CHECK-FIX-NOSCHED-NEXT: aese.8 q8, q91438; CHECK-FIX-NOSCHED-NEXT: aesmc.8 q8, q81439; CHECK-FIX-NOSCHED-NEXT: vst1.64 {d16, d17}, [r2]1440; CHECK-FIX-NOSCHED-NEXT: add sp, sp, #121441; CHECK-FIX-NOSCHED-NEXT: pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}1442;1443; CHECK-CORTEX-FIX-LABEL: aese_setf16_cond_via_ptr:1444; CHECK-CORTEX-FIX: @ %bb.0:1445; CHECK-CORTEX-FIX-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}1446; CHECK-CORTEX-FIX-NEXT: push {r4, r5, r6, r7, r8, r9, r10, r11, lr}1447; CHECK-CORTEX-FIX-NEXT: .pad #241448; CHECK-CORTEX-FIX-NEXT: sub sp, sp, #241449; CHECK-CORTEX-FIX-NEXT: cmp r0, #01450; CHECK-CORTEX-FIX-NEXT: beq .LBB36_31451; CHECK-CORTEX-FIX-NEXT: @ %bb.1:1452; CHECK-CORTEX-FIX-NEXT: vld1.64 {d16, d17}, [r2]1453; CHECK-CORTEX-FIX-NEXT: vmov.u16 r3, d16[1]1454; CHECK-CORTEX-FIX-NEXT: vmov.u16 r6, d17[0]1455; CHECK-CORTEX-FIX-NEXT: vmov.u16 r7, d17[2]1456; CHECK-CORTEX-FIX-NEXT: vmov.u16 r4, d17[3]1457; CHECK-CORTEX-FIX-NEXT: str r3, [sp, #20] @ 4-byte Spill1458; CHECK-CORTEX-FIX-NEXT: vmov.u16 r3, d16[2]1459; CHECK-CORTEX-FIX-NEXT: str r3, [sp, #8] @ 4-byte Spill1460; CHECK-CORTEX-FIX-NEXT: vmov.u16 r3, d16[3]1461; CHECK-CORTEX-FIX-NEXT: str r3, [sp, #4] @ 4-byte Spill1462; CHECK-CORTEX-FIX-NEXT: vmov.u16 r3, d17[1]1463; CHECK-CORTEX-FIX-NEXT: str r3, [sp, #12] @ 4-byte Spill1464; CHECK-CORTEX-FIX-NEXT: ldrh r3, [r1]1465; CHECK-CORTEX-FIX-NEXT: str r3, [sp, #16] @ 4-byte Spill1466; CHECK-CORTEX-FIX-NEXT: mov r3, r61467; CHECK-CORTEX-FIX-NEXT: cmp r0, #01468; CHECK-CORTEX-FIX-NEXT: bne .LBB36_41469; CHECK-CORTEX-FIX-NEXT: .LBB36_2:1470; CHECK-CORTEX-FIX-NEXT: vmov.u16 r0, d0[0]1471; CHECK-CORTEX-FIX-NEXT: b .LBB36_51472; CHECK-CORTEX-FIX-NEXT: .LBB36_3:1473; CHECK-CORTEX-FIX-NEXT: vld1.32 {d16[0]}, [r2:32]1474; CHECK-CORTEX-FIX-NEXT: add r3, r2, #81475; CHECK-CORTEX-FIX-NEXT: add r7, r2, #41476; CHECK-CORTEX-FIX-NEXT: vld1.32 {d17[0]}, [r3:32]1477; CHECK-CORTEX-FIX-NEXT: add r3, r2, #121478; CHECK-CORTEX-FIX-NEXT: vld1.32 {d16[1]}, [r7:32]1479; CHECK-CORTEX-FIX-NEXT: vld1.32 {d17[1]}, [r3:32]1480; CHECK-CORTEX-FIX-NEXT: vmov.u16 r3, d16[0]1481; CHECK-CORTEX-FIX-NEXT: vmov.u16 r7, d17[1]1482; CHECK-CORTEX-FIX-NEXT: vmov.u16 r4, d17[3]1483; CHECK-CORTEX-FIX-NEXT: str r3, [sp, #16] @ 4-byte Spill1484; CHECK-CORTEX-FIX-NEXT: vmov.u16 r3, d16[1]1485; CHECK-CORTEX-FIX-NEXT: str r7, [sp, #12] @ 4-byte Spill1486; CHECK-CORTEX-FIX-NEXT: vmov.u16 r7, d17[2]1487; CHECK-CORTEX-FIX-NEXT: str r3, [sp, #20] @ 4-byte Spill1488; CHECK-CORTEX-FIX-NEXT: vmov.u16 r3, d16[2]1489; CHECK-CORTEX-FIX-NEXT: str r3, [sp, #8] @ 4-byte Spill1490; CHECK-CORTEX-FIX-NEXT: vmov.u16 r3, d16[3]1491; CHECK-CORTEX-FIX-NEXT: str r3, [sp, #4] @ 4-byte Spill1492; CHECK-CORTEX-FIX-NEXT: vmov.u16 r3, d17[0]1493; CHECK-CORTEX-FIX-NEXT: cmp r0, #01494; CHECK-CORTEX-FIX-NEXT: beq .LBB36_21495; CHECK-CORTEX-FIX-NEXT: .LBB36_4:1496; CHECK-CORTEX-FIX-NEXT: ldrh r0, [r1]1497; CHECK-CORTEX-FIX-NEXT: .LBB36_5:1498; CHECK-CORTEX-FIX-NEXT: str r0, [sp] @ 4-byte Spill1499; CHECK-CORTEX-FIX-NEXT: ldr r0, [sp, #8] @ 4-byte Reload1500; CHECK-CORTEX-FIX-NEXT: ldr r1, [sp, #4] @ 4-byte Reload1501; CHECK-CORTEX-FIX-NEXT: pkhbt r9, r7, r4, lsl #161502; CHECK-CORTEX-FIX-NEXT: ldr r4, [sp, #20] @ 4-byte Reload1503; CHECK-CORTEX-FIX-NEXT: vmov.u16 r10, d0[1]1504; CHECK-CORTEX-FIX-NEXT: vmov.u16 r6, d0[2]1505; CHECK-CORTEX-FIX-NEXT: vmov.u16 r12, d0[3]1506; CHECK-CORTEX-FIX-NEXT: vmov.u16 r11, d1[0]1507; CHECK-CORTEX-FIX-NEXT: vmov.u16 r5, d1[1]1508; CHECK-CORTEX-FIX-NEXT: vmov.u16 lr, d1[2]1509; CHECK-CORTEX-FIX-NEXT: vmov.u16 r8, d1[3]1510; CHECK-CORTEX-FIX-NEXT: pkhbt r7, r0, r1, lsl #161511; CHECK-CORTEX-FIX-NEXT: ldr r1, [sp, #12] @ 4-byte Reload1512; CHECK-CORTEX-FIX-NEXT: pkhbt r0, lr, r8, lsl #161513; CHECK-CORTEX-FIX-NEXT: pkhbt r6, r6, r12, lsl #161514; CHECK-CORTEX-FIX-NEXT: pkhbt r5, r11, r5, lsl #161515; CHECK-CORTEX-FIX-NEXT: pkhbt r1, r3, r1, lsl #161516; CHECK-CORTEX-FIX-NEXT: ldr r3, [sp, #16] @ 4-byte Reload1517; CHECK-CORTEX-FIX-NEXT: pkhbt r4, r3, r4, lsl #161518; CHECK-CORTEX-FIX-NEXT: ldr r3, [sp] @ 4-byte Reload1519; CHECK-CORTEX-FIX-NEXT: vmov.32 d18[0], r41520; CHECK-CORTEX-FIX-NEXT: vmov.32 d19[0], r11521; CHECK-CORTEX-FIX-NEXT: vmov.32 d18[1], r71522; CHECK-CORTEX-FIX-NEXT: vmov.32 d19[1], r91523; CHECK-CORTEX-FIX-NEXT: pkhbt r3, r3, r10, lsl #161524; CHECK-CORTEX-FIX-NEXT: vmov.32 d16[0], r31525; CHECK-CORTEX-FIX-NEXT: vmov.32 d17[0], r51526; CHECK-CORTEX-FIX-NEXT: vmov.32 d16[1], r61527; CHECK-CORTEX-FIX-NEXT: vmov.32 d17[1], r01528; CHECK-CORTEX-FIX-NEXT: aese.8 q9, q81529; CHECK-CORTEX-FIX-NEXT: aesmc.8 q8, q91530; CHECK-CORTEX-FIX-NEXT: vst1.64 {d16, d17}, [r2]1531; CHECK-CORTEX-FIX-NEXT: add sp, sp, #241532; CHECK-CORTEX-FIX-NEXT: pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}1533 br i1 %0, label %5, label %121534 15355:1536 %6 = bitcast ptr %1 to ptr1537 %7 = load i16, ptr %6, align 21538 %8 = bitcast ptr %3 to ptr1539 %9 = load <8 x i16>, ptr %8, align 81540 %10 = insertelement <8 x i16> %9, i16 %7, i64 01541 %11 = bitcast <8 x i16> %10 to <8 x half>1542 br label %151543 154412:1545 %13 = bitcast ptr %3 to ptr1546 %14 = load <8 x half>, ptr %13, align 81547 br label %151548 154915:1550 %16 = phi <8 x half> [ %11, %5 ], [ %14, %12 ]1551 br i1 %0, label %17, label %231552 155317:1554 %18 = bitcast ptr %1 to ptr1555 %19 = load i16, ptr %18, align 21556 %20 = bitcast <16 x i8> %2 to <8 x i16>1557 %21 = insertelement <8 x i16> %20, i16 %19, i64 01558 %22 = bitcast <8 x i16> %21 to <8 x half>1559 br label %251560 156123:1562 %24 = bitcast <16 x i8> %2 to <8 x half>1563 br label %251564 156525:1566 %26 = phi <8 x half> [ %22, %17 ], [ %24, %23 ]1567 %27 = bitcast <8 x half> %16 to <16 x i8>1568 %28 = bitcast <8 x half> %26 to <16 x i8>1569 %29 = call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %27, <16 x i8> %28)1570 %30 = call <16 x i8> @llvm.arm.neon.aesmc(<16 x i8> %29)1571 store <16 x i8> %30, ptr %3, align 81572 ret void1573}1574 1575define arm_aapcs_vfpcc void @aese_setf16_cond_via_val(i1 zeroext %0, half %1, <16 x i8> %2, ptr %3) nounwind {1576; CHECK-FIX-NOSCHED-LABEL: aese_setf16_cond_via_val:1577; CHECK-FIX-NOSCHED: @ %bb.0:1578; CHECK-FIX-NOSCHED-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}1579; CHECK-FIX-NOSCHED-NEXT: push {r4, r5, r6, r7, r8, r9, r10, r11, lr}1580; CHECK-FIX-NOSCHED-NEXT: .pad #121581; CHECK-FIX-NOSCHED-NEXT: sub sp, sp, #121582; CHECK-FIX-NOSCHED-NEXT: cmp r0, #01583; CHECK-FIX-NOSCHED-NEXT: beq .LBB37_21584; CHECK-FIX-NOSCHED-NEXT: @ %bb.1:1585; CHECK-FIX-NOSCHED-NEXT: vld1.64 {d16, d17}, [r1]1586; CHECK-FIX-NOSCHED-NEXT: vmov.f32 s2, s01587; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r2, d17[1]1588; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r7, d17[3]1589; CHECK-FIX-NOSCHED-NEXT: vmov.u16 lr, d17[2]1590; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r11, d16[2]1591; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r8, d16[1]1592; CHECK-FIX-NOSCHED-NEXT: str r2, [sp, #8] @ 4-byte Spill1593; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r2, d17[0]1594; CHECK-FIX-NOSCHED-NEXT: str r2, [sp, #4] @ 4-byte Spill1595; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r2, d16[3]1596; CHECK-FIX-NOSCHED-NEXT: str r2, [sp] @ 4-byte Spill1597; CHECK-FIX-NOSCHED-NEXT: b .LBB37_31598; CHECK-FIX-NOSCHED-NEXT: .LBB37_2:1599; CHECK-FIX-NOSCHED-NEXT: add r2, r1, #81600; CHECK-FIX-NOSCHED-NEXT: vld1.32 {d16[0]}, [r1:32]1601; CHECK-FIX-NOSCHED-NEXT: vld1.32 {d17[0]}, [r2:32]1602; CHECK-FIX-NOSCHED-NEXT: add r2, r1, #41603; CHECK-FIX-NOSCHED-NEXT: vld1.32 {d16[1]}, [r2:32]1604; CHECK-FIX-NOSCHED-NEXT: add r2, r1, #121605; CHECK-FIX-NOSCHED-NEXT: vld1.32 {d17[1]}, [r2:32]1606; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r2, d17[1]1607; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r7, d17[3]1608; CHECK-FIX-NOSCHED-NEXT: vmov.u16 lr, d17[2]1609; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r11, d16[2]1610; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r8, d16[1]1611; CHECK-FIX-NOSCHED-NEXT: str r2, [sp, #8] @ 4-byte Spill1612; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r2, d17[0]1613; CHECK-FIX-NOSCHED-NEXT: str r2, [sp, #4] @ 4-byte Spill1614; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r2, d16[3]1615; CHECK-FIX-NOSCHED-NEXT: str r2, [sp] @ 4-byte Spill1616; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r2, d16[0]1617; CHECK-FIX-NOSCHED-NEXT: vmov s2, r21618; CHECK-FIX-NOSCHED-NEXT: .LBB37_3:1619; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r9, d3[3]1620; CHECK-FIX-NOSCHED-NEXT: cmp r0, #01621; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r10, d3[2]1622; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r2, d3[1]1623; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r3, d3[0]1624; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r4, d2[3]1625; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r5, d2[2]1626; CHECK-FIX-NOSCHED-NEXT: beq .LBB37_51627; CHECK-FIX-NOSCHED-NEXT: @ %bb.4:1628; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r12, d2[1]1629; CHECK-FIX-NOSCHED-NEXT: b .LBB37_61630; CHECK-FIX-NOSCHED-NEXT: .LBB37_5:1631; CHECK-FIX-NOSCHED-NEXT: mov r0, lr1632; CHECK-FIX-NOSCHED-NEXT: vmov.u16 lr, d2[0]1633; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r12, d2[1]1634; CHECK-FIX-NOSCHED-NEXT: vmov s0, lr1635; CHECK-FIX-NOSCHED-NEXT: mov lr, r01636; CHECK-FIX-NOSCHED-NEXT: .LBB37_6:1637; CHECK-FIX-NOSCHED-NEXT: vmov r0, s01638; CHECK-FIX-NOSCHED-NEXT: vmov r6, s21639; CHECK-FIX-NOSCHED-NEXT: pkhbt r0, r0, r12, lsl #161640; CHECK-FIX-NOSCHED-NEXT: pkhbt r6, r6, r8, lsl #161641; CHECK-FIX-NOSCHED-NEXT: vmov.32 d18[0], r01642; CHECK-FIX-NOSCHED-NEXT: pkhbt r0, r5, r4, lsl #161643; CHECK-FIX-NOSCHED-NEXT: vmov.32 d16[0], r61644; CHECK-FIX-NOSCHED-NEXT: vmov.32 d18[1], r01645; CHECK-FIX-NOSCHED-NEXT: ldr r0, [sp] @ 4-byte Reload1646; CHECK-FIX-NOSCHED-NEXT: pkhbt r0, r11, r0, lsl #161647; CHECK-FIX-NOSCHED-NEXT: vmov.32 d16[1], r01648; CHECK-FIX-NOSCHED-NEXT: pkhbt r0, r3, r2, lsl #161649; CHECK-FIX-NOSCHED-NEXT: ldr r2, [sp, #4] @ 4-byte Reload1650; CHECK-FIX-NOSCHED-NEXT: vmov.32 d19[0], r01651; CHECK-FIX-NOSCHED-NEXT: ldr r0, [sp, #8] @ 4-byte Reload1652; CHECK-FIX-NOSCHED-NEXT: pkhbt r0, r2, r0, lsl #161653; CHECK-FIX-NOSCHED-NEXT: vmov.32 d17[0], r01654; CHECK-FIX-NOSCHED-NEXT: pkhbt r0, r10, r9, lsl #161655; CHECK-FIX-NOSCHED-NEXT: vmov.32 d19[1], r01656; CHECK-FIX-NOSCHED-NEXT: pkhbt r0, lr, r7, lsl #161657; CHECK-FIX-NOSCHED-NEXT: vmov.32 d17[1], r01658; CHECK-FIX-NOSCHED-NEXT: aese.8 q8, q91659; CHECK-FIX-NOSCHED-NEXT: aesmc.8 q8, q81660; CHECK-FIX-NOSCHED-NEXT: vst1.64 {d16, d17}, [r1]1661; CHECK-FIX-NOSCHED-NEXT: add sp, sp, #121662; CHECK-FIX-NOSCHED-NEXT: pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}1663;1664; CHECK-CORTEX-FIX-LABEL: aese_setf16_cond_via_val:1665; CHECK-CORTEX-FIX: @ %bb.0:1666; CHECK-CORTEX-FIX-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}1667; CHECK-CORTEX-FIX-NEXT: push {r4, r5, r6, r7, r8, r9, r10, r11, lr}1668; CHECK-CORTEX-FIX-NEXT: .pad #121669; CHECK-CORTEX-FIX-NEXT: sub sp, sp, #121670; CHECK-CORTEX-FIX-NEXT: cmp r0, #01671; CHECK-CORTEX-FIX-NEXT: beq .LBB37_31672; CHECK-CORTEX-FIX-NEXT: @ %bb.1:1673; CHECK-CORTEX-FIX-NEXT: vld1.64 {d16, d17}, [r1]1674; CHECK-CORTEX-FIX-NEXT: vmov.f32 s2, s01675; CHECK-CORTEX-FIX-NEXT: vmov.u16 r2, d16[1]1676; CHECK-CORTEX-FIX-NEXT: vmov.u16 r7, d16[2]1677; CHECK-CORTEX-FIX-NEXT: vmov.u16 r10, d16[3]1678; CHECK-CORTEX-FIX-NEXT: vmov.u16 r11, d17[2]1679; CHECK-CORTEX-FIX-NEXT: vmov.u16 r6, d17[3]1680; CHECK-CORTEX-FIX-NEXT: str r2, [sp, #8] @ 4-byte Spill1681; CHECK-CORTEX-FIX-NEXT: vmov.u16 r2, d17[0]1682; CHECK-CORTEX-FIX-NEXT: str r2, [sp, #4] @ 4-byte Spill1683; CHECK-CORTEX-FIX-NEXT: vmov.u16 r2, d17[1]1684; CHECK-CORTEX-FIX-NEXT: str r2, [sp] @ 4-byte Spill1685; CHECK-CORTEX-FIX-NEXT: cmp r0, #01686; CHECK-CORTEX-FIX-NEXT: bne .LBB37_41687; CHECK-CORTEX-FIX-NEXT: .LBB37_2:1688; CHECK-CORTEX-FIX-NEXT: vmov.u16 lr, d2[0]1689; CHECK-CORTEX-FIX-NEXT: vmov.u16 r8, d2[1]1690; CHECK-CORTEX-FIX-NEXT: vmov.u16 r3, d2[2]1691; CHECK-CORTEX-FIX-NEXT: vmov.u16 r4, d2[3]1692; CHECK-CORTEX-FIX-NEXT: vmov.u16 r9, d3[0]1693; CHECK-CORTEX-FIX-NEXT: vmov.u16 r2, d3[1]1694; CHECK-CORTEX-FIX-NEXT: vmov.u16 r5, d3[2]1695; CHECK-CORTEX-FIX-NEXT: vmov.u16 r12, d3[3]1696; CHECK-CORTEX-FIX-NEXT: vmov s0, lr1697; CHECK-CORTEX-FIX-NEXT: b .LBB37_51698; CHECK-CORTEX-FIX-NEXT: .LBB37_3:1699; CHECK-CORTEX-FIX-NEXT: vld1.32 {d16[0]}, [r1:32]1700; CHECK-CORTEX-FIX-NEXT: add r2, r1, #81701; CHECK-CORTEX-FIX-NEXT: add r3, r1, #41702; CHECK-CORTEX-FIX-NEXT: vld1.32 {d17[0]}, [r2:32]1703; CHECK-CORTEX-FIX-NEXT: add r2, r1, #121704; CHECK-CORTEX-FIX-NEXT: vld1.32 {d16[1]}, [r3:32]1705; CHECK-CORTEX-FIX-NEXT: vld1.32 {d17[1]}, [r2:32]1706; CHECK-CORTEX-FIX-NEXT: vmov.u16 r3, d16[1]1707; CHECK-CORTEX-FIX-NEXT: vmov.u16 r2, d16[0]1708; CHECK-CORTEX-FIX-NEXT: vmov.u16 r7, d16[2]1709; CHECK-CORTEX-FIX-NEXT: vmov.u16 r10, d16[3]1710; CHECK-CORTEX-FIX-NEXT: vmov.u16 r11, d17[2]1711; CHECK-CORTEX-FIX-NEXT: vmov.u16 r6, d17[3]1712; CHECK-CORTEX-FIX-NEXT: str r3, [sp, #8] @ 4-byte Spill1713; CHECK-CORTEX-FIX-NEXT: vmov.u16 r3, d17[0]1714; CHECK-CORTEX-FIX-NEXT: vmov s2, r21715; CHECK-CORTEX-FIX-NEXT: str r3, [sp, #4] @ 4-byte Spill1716; CHECK-CORTEX-FIX-NEXT: vmov.u16 r3, d17[1]1717; CHECK-CORTEX-FIX-NEXT: str r3, [sp] @ 4-byte Spill1718; CHECK-CORTEX-FIX-NEXT: cmp r0, #01719; CHECK-CORTEX-FIX-NEXT: beq .LBB37_21720; CHECK-CORTEX-FIX-NEXT: .LBB37_4:1721; CHECK-CORTEX-FIX-NEXT: vmov.u16 r8, d2[1]1722; CHECK-CORTEX-FIX-NEXT: vmov.u16 r3, d2[2]1723; CHECK-CORTEX-FIX-NEXT: vmov.u16 r4, d2[3]1724; CHECK-CORTEX-FIX-NEXT: vmov.u16 r9, d3[0]1725; CHECK-CORTEX-FIX-NEXT: vmov.u16 r2, d3[1]1726; CHECK-CORTEX-FIX-NEXT: vmov.u16 r5, d3[2]1727; CHECK-CORTEX-FIX-NEXT: vmov.u16 r12, d3[3]1728; CHECK-CORTEX-FIX-NEXT: .LBB37_5:1729; CHECK-CORTEX-FIX-NEXT: pkhbt lr, r11, r6, lsl #161730; CHECK-CORTEX-FIX-NEXT: pkhbt r0, r7, r10, lsl #161731; CHECK-CORTEX-FIX-NEXT: ldm sp, {r6, r7} @ 8-byte Folded Reload1732; CHECK-CORTEX-FIX-NEXT: pkhbt r3, r3, r4, lsl #161733; CHECK-CORTEX-FIX-NEXT: pkhbt r5, r5, r12, lsl #161734; CHECK-CORTEX-FIX-NEXT: pkhbt r2, r9, r2, lsl #161735; CHECK-CORTEX-FIX-NEXT: pkhbt r4, r7, r6, lsl #161736; CHECK-CORTEX-FIX-NEXT: vmov r7, s21737; CHECK-CORTEX-FIX-NEXT: ldr r6, [sp, #8] @ 4-byte Reload1738; CHECK-CORTEX-FIX-NEXT: pkhbt r7, r7, r6, lsl #161739; CHECK-CORTEX-FIX-NEXT: vmov r6, s01740; CHECK-CORTEX-FIX-NEXT: vmov.32 d18[0], r71741; CHECK-CORTEX-FIX-NEXT: vmov.32 d19[0], r41742; CHECK-CORTEX-FIX-NEXT: vmov.32 d18[1], r01743; CHECK-CORTEX-FIX-NEXT: vmov.32 d19[1], lr1744; CHECK-CORTEX-FIX-NEXT: pkhbt r6, r6, r8, lsl #161745; CHECK-CORTEX-FIX-NEXT: vmov.32 d16[0], r61746; CHECK-CORTEX-FIX-NEXT: vmov.32 d17[0], r21747; CHECK-CORTEX-FIX-NEXT: vmov.32 d16[1], r31748; CHECK-CORTEX-FIX-NEXT: vmov.32 d17[1], r51749; CHECK-CORTEX-FIX-NEXT: aese.8 q9, q81750; CHECK-CORTEX-FIX-NEXT: aesmc.8 q8, q91751; CHECK-CORTEX-FIX-NEXT: vst1.64 {d16, d17}, [r1]1752; CHECK-CORTEX-FIX-NEXT: add sp, sp, #121753; CHECK-CORTEX-FIX-NEXT: pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}1754 br i1 %0, label %5, label %111755 17565:1757 %6 = bitcast ptr %3 to ptr1758 %7 = load <8 x i16>, ptr %6, align 81759 %8 = bitcast half %1 to i161760 %9 = insertelement <8 x i16> %7, i16 %8, i64 01761 %10 = bitcast <8 x i16> %9 to <8 x half>1762 br label %141763 176411:1765 %12 = bitcast ptr %3 to ptr1766 %13 = load <8 x half>, ptr %12, align 81767 br label %141768 176914:1770 %15 = phi <8 x half> [ %10, %5 ], [ %13, %11 ]1771 br i1 %0, label %16, label %211772 177316:1774 %17 = bitcast <16 x i8> %2 to <8 x i16>1775 %18 = bitcast half %1 to i161776 %19 = insertelement <8 x i16> %17, i16 %18, i64 01777 %20 = bitcast <8 x i16> %19 to <8 x half>1778 br label %231779 178021:1781 %22 = bitcast <16 x i8> %2 to <8 x half>1782 br label %231783 178423:1785 %24 = phi <8 x half> [ %20, %16 ], [ %22, %21 ]1786 %25 = bitcast <8 x half> %15 to <16 x i8>1787 %26 = bitcast <8 x half> %24 to <16 x i8>1788 %27 = call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %25, <16 x i8> %26)1789 %28 = call <16 x i8> @llvm.arm.neon.aesmc(<16 x i8> %27)1790 store <16 x i8> %28, ptr %3, align 81791 ret void1792}1793 1794define arm_aapcs_vfpcc void @aese_setf16_loop_via_ptr(i32 %0, ptr %1, <16 x i8> %2, ptr %3) nounwind {1795; CHECK-FIX-LABEL: aese_setf16_loop_via_ptr:1796; CHECK-FIX: @ %bb.0:1797; CHECK-FIX-NEXT: vorr q0, q0, q01798; CHECK-FIX-NEXT: ldrh r1, [r1]1799; CHECK-FIX-NEXT: cmp r0, #01800; CHECK-FIX-NEXT: strh r1, [r2]1801; CHECK-FIX-NEXT: bxeq lr1802; CHECK-FIX-NEXT: .LBB38_1:1803; CHECK-FIX-NEXT: vmov.16 d0[0], r11804; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r2]1805; CHECK-FIX-NEXT: .LBB38_2: @ =>This Inner Loop Header: Depth=11806; CHECK-FIX-NEXT: aese.8 q8, q01807; CHECK-FIX-NEXT: subs r0, r0, #11808; CHECK-FIX-NEXT: aesmc.8 q8, q81809; CHECK-FIX-NEXT: bne .LBB38_21810; CHECK-FIX-NEXT: @ %bb.3:1811; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r2]1812; CHECK-FIX-NEXT: bx lr1813 %5 = bitcast ptr %1 to ptr1814 %6 = load i16, ptr %5, align 21815 %7 = bitcast <16 x i8> %2 to <8 x i16>1816 %8 = insertelement <8 x i16> %7, i16 %6, i64 01817 %9 = bitcast <8 x i16> %8 to <16 x i8>1818 %10 = bitcast ptr %3 to ptr1819 store i16 %6, ptr %10, align 81820 %11 = icmp eq i32 %0, 01821 br i1 %11, label %15, label %121822 182312:1824 %13 = load <16 x i8>, ptr %3, align 81825 br label %161826 182714:1828 store <16 x i8> %20, ptr %3, align 81829 br label %151830 183115:1832 ret void1833 183416:1835 %17 = phi <16 x i8> [ %13, %12 ], [ %20, %16 ]1836 %18 = phi i32 [ 0, %12 ], [ %21, %16 ]1837 %19 = call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %17, <16 x i8> %9)1838 %20 = call <16 x i8> @llvm.arm.neon.aesmc(<16 x i8> %19)1839 %21 = add nuw i32 %18, 11840 %22 = icmp eq i32 %21, %01841 br i1 %22, label %14, label %161842}1843 1844define arm_aapcs_vfpcc void @aese_setf16_loop_via_val(i32 %0, half %1, <16 x i8> %2, ptr %3) nounwind {1845; CHECK-FIX-LABEL: aese_setf16_loop_via_val:1846; CHECK-FIX: @ %bb.0:1847; CHECK-FIX-NEXT: vorr q1, q1, q11848; CHECK-FIX-NEXT: cmp r0, #01849; CHECK-FIX-NEXT: bxeq lr1850; CHECK-FIX-NEXT: .LBB39_1:1851; CHECK-FIX-NEXT: vmov r2, s01852; CHECK-FIX-NEXT: vmov.16 d2[0], r21853; CHECK-FIX-NEXT: .LBB39_2: @ =>This Inner Loop Header: Depth=11854; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r1]1855; CHECK-FIX-NEXT: subs r0, r0, #11856; CHECK-FIX-NEXT: vmov.16 d16[0], r21857; CHECK-FIX-NEXT: aese.8 q8, q11858; CHECK-FIX-NEXT: aesmc.8 q8, q81859; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r1]1860; CHECK-FIX-NEXT: bne .LBB39_21861; CHECK-FIX-NEXT: @ %bb.3:1862; CHECK-FIX-NEXT: bx lr1863 %5 = icmp eq i32 %0, 01864 br i1 %5, label %13, label %61865 18666:1867 %7 = bitcast <16 x i8> %2 to <8 x i16>1868 %8 = bitcast half %1 to i161869 %9 = insertelement <8 x i16> %7, i16 %8, i64 01870 %10 = bitcast <8 x i16> %9 to <16 x i8>1871 %11 = bitcast ptr %3 to ptr1872 %12 = bitcast ptr %3 to ptr1873 br label %141874 187513:1876 ret void1877 187814:1879 %15 = phi i32 [ 0, %6 ], [ %21, %14 ]1880 %16 = load <8 x i16>, ptr %11, align 81881 %17 = insertelement <8 x i16> %16, i16 %8, i64 01882 %18 = bitcast <8 x i16> %17 to <16 x i8>1883 store half %1, ptr %12, align 81884 %19 = call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %18, <16 x i8> %10)1885 %20 = call <16 x i8> @llvm.arm.neon.aesmc(<16 x i8> %19)1886 store <16 x i8> %20, ptr %3, align 81887 %21 = add nuw i32 %15, 11888 %22 = icmp eq i32 %21, %01889 br i1 %22, label %13, label %141890}1891 1892define arm_aapcs_vfpcc void @aese_setf32_via_ptr(ptr %0, <16 x i8> %1, ptr %2) nounwind {1893; CHECK-FIX-LABEL: aese_setf32_via_ptr:1894; CHECK-FIX: @ %bb.0:1895; CHECK-FIX-NEXT: vldr s0, [r0]1896; CHECK-FIX-NEXT: vld1.64 {d2, d3}, [r1]1897; CHECK-FIX-NEXT: vmov.f32 s4, s01898; CHECK-FIX-NEXT: vorr q1, q1, q11899; CHECK-FIX-NEXT: vorr q0, q0, q01900; CHECK-FIX-NEXT: aese.8 q1, q01901; CHECK-FIX-NEXT: aesmc.8 q8, q11902; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r1]1903; CHECK-FIX-NEXT: bx lr1904 %4 = load float, ptr %0, align 41905 %5 = bitcast ptr %2 to ptr1906 %6 = load <4 x float>, ptr %5, align 81907 %7 = insertelement <4 x float> %6, float %4, i64 01908 %8 = bitcast <4 x float> %7 to <16 x i8>1909 %9 = bitcast <16 x i8> %1 to <4 x float>1910 %10 = insertelement <4 x float> %9, float %4, i64 01911 %11 = bitcast <4 x float> %10 to <16 x i8>1912 %12 = call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %8, <16 x i8> %11)1913 %13 = call <16 x i8> @llvm.arm.neon.aesmc(<16 x i8> %12)1914 store <16 x i8> %13, ptr %2, align 81915 ret void1916}1917 1918define arm_aapcs_vfpcc void @aese_setf32_via_val(float %0, <16 x i8> %1, ptr %2) nounwind {1919; CHECK-FIX-LABEL: aese_setf32_via_val:1920; CHECK-FIX: @ %bb.0:1921; CHECK-FIX-NEXT: vmov.f32 s4, s01922; CHECK-FIX-NEXT: vld1.64 {d0, d1}, [r0]1923; CHECK-FIX-NEXT: vmov.f32 s0, s41924; CHECK-FIX-NEXT: vorr q0, q0, q01925; CHECK-FIX-NEXT: vorr q1, q1, q11926; CHECK-FIX-NEXT: aese.8 q0, q11927; CHECK-FIX-NEXT: aesmc.8 q8, q01928; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r0]1929; CHECK-FIX-NEXT: bx lr1930 %4 = bitcast ptr %2 to ptr1931 %5 = load <4 x float>, ptr %4, align 81932 %6 = insertelement <4 x float> %5, float %0, i64 01933 %7 = bitcast <4 x float> %6 to <16 x i8>1934 %8 = bitcast <16 x i8> %1 to <4 x float>1935 %9 = insertelement <4 x float> %8, float %0, i64 01936 %10 = bitcast <4 x float> %9 to <16 x i8>1937 %11 = call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %7, <16 x i8> %10)1938 %12 = call <16 x i8> @llvm.arm.neon.aesmc(<16 x i8> %11)1939 store <16 x i8> %12, ptr %2, align 81940 ret void1941}1942 1943define arm_aapcs_vfpcc void @aese_setf32_cond_via_ptr(i1 zeroext %0, ptr %1, <16 x i8> %2, ptr %3) nounwind {1944; CHECK-FIX-LABEL: aese_setf32_cond_via_ptr:1945; CHECK-FIX: @ %bb.0:1946; CHECK-FIX-NEXT: vorr q0, q0, q01947; CHECK-FIX-NEXT: cmp r0, #01948; CHECK-FIX-NEXT: beq .LBB42_21949; CHECK-FIX-NEXT: @ %bb.1:1950; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r2]1951; CHECK-FIX-NEXT: vld1.32 {d16[0]}, [r1:32]1952; CHECK-FIX-NEXT: cmp r0, #01953; CHECK-FIX-NEXT: bne .LBB42_31954; CHECK-FIX-NEXT: b .LBB42_41955; CHECK-FIX-NEXT: .LBB42_2:1956; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r2]1957; CHECK-FIX-NEXT: cmp r0, #01958; CHECK-FIX-NEXT: beq .LBB42_41959; CHECK-FIX-NEXT: .LBB42_3:1960; CHECK-FIX-NEXT: vld1.32 {d0[0]}, [r1:32]1961; CHECK-FIX-NEXT: .LBB42_4:1962; CHECK-FIX-NEXT: aese.8 q8, q01963; CHECK-FIX-NEXT: aesmc.8 q8, q81964; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r2]1965; CHECK-FIX-NEXT: bx lr1966 br i1 %0, label %5, label %101967 19685:1969 %6 = load float, ptr %1, align 41970 %7 = bitcast ptr %3 to ptr1971 %8 = load <4 x float>, ptr %7, align 81972 %9 = insertelement <4 x float> %8, float %6, i64 01973 br label %131974 197510:1976 %11 = bitcast ptr %3 to ptr1977 %12 = load <4 x float>, ptr %11, align 81978 br label %131979 198013:1981 %14 = phi <4 x float> [ %9, %5 ], [ %12, %10 ]1982 br i1 %0, label %15, label %191983 198415:1985 %16 = load float, ptr %1, align 41986 %17 = bitcast <16 x i8> %2 to <4 x float>1987 %18 = insertelement <4 x float> %17, float %16, i64 01988 br label %211989 199019:1991 %20 = bitcast <16 x i8> %2 to <4 x float>1992 br label %211993 199421:1995 %22 = phi <4 x float> [ %18, %15 ], [ %20, %19 ]1996 %23 = bitcast <4 x float> %14 to <16 x i8>1997 %24 = bitcast <4 x float> %22 to <16 x i8>1998 %25 = call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %23, <16 x i8> %24)1999 %26 = call <16 x i8> @llvm.arm.neon.aesmc(<16 x i8> %25)2000 store <16 x i8> %26, ptr %3, align 82001 ret void2002}2003 2004define arm_aapcs_vfpcc void @aese_setf32_cond_via_val(i1 zeroext %0, float %1, <16 x i8> %2, ptr %3) nounwind {2005; CHECK-FIX-NOSCHED-LABEL: aese_setf32_cond_via_val:2006; CHECK-FIX-NOSCHED: @ %bb.0:2007; CHECK-FIX-NOSCHED-NEXT: vld1.64 {d4, d5}, [r1]2008; CHECK-FIX-NOSCHED-NEXT: cmp r0, #02009; CHECK-FIX-NOSCHED-NEXT: vmovne.f32 s8, s02010; CHECK-FIX-NOSCHED-NEXT: vorr q2, q2, q22011; CHECK-FIX-NOSCHED-NEXT: cmp r0, #02012; CHECK-FIX-NOSCHED-NEXT: vmovne.f32 s4, s02013; CHECK-FIX-NOSCHED-NEXT: vorr q1, q1, q12014; CHECK-FIX-NOSCHED-NEXT: aese.8 q2, q12015; CHECK-FIX-NOSCHED-NEXT: aesmc.8 q8, q22016; CHECK-FIX-NOSCHED-NEXT: vst1.64 {d16, d17}, [r1]2017; CHECK-FIX-NOSCHED-NEXT: bx lr2018;2019; CHECK-CORTEX-FIX-LABEL: aese_setf32_cond_via_val:2020; CHECK-CORTEX-FIX: @ %bb.0:2021; CHECK-CORTEX-FIX-NEXT: cmp r0, #02022; CHECK-CORTEX-FIX-NEXT: vld1.64 {d4, d5}, [r1]2023; CHECK-CORTEX-FIX-NEXT: vmovne.f32 s8, s02024; CHECK-CORTEX-FIX-NEXT: vorr q2, q2, q22025; CHECK-CORTEX-FIX-NEXT: cmp r0, #02026; CHECK-CORTEX-FIX-NEXT: vmovne.f32 s4, s02027; CHECK-CORTEX-FIX-NEXT: vorr q1, q1, q12028; CHECK-CORTEX-FIX-NEXT: aese.8 q2, q12029; CHECK-CORTEX-FIX-NEXT: aesmc.8 q8, q22030; CHECK-CORTEX-FIX-NEXT: vst1.64 {d16, d17}, [r1]2031; CHECK-CORTEX-FIX-NEXT: bx lr2032 %5 = bitcast ptr %3 to ptr2033 %6 = load <4 x float>, ptr %5, align 82034 %7 = insertelement <4 x float> %6, float %1, i64 02035 %8 = select i1 %0, <4 x float> %7, <4 x float> %62036 %9 = bitcast <16 x i8> %2 to <4 x float>2037 %10 = insertelement <4 x float> %9, float %1, i64 02038 %11 = select i1 %0, <4 x float> %10, <4 x float> %92039 %12 = bitcast <4 x float> %8 to <16 x i8>2040 %13 = bitcast <4 x float> %11 to <16 x i8>2041 %14 = call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %12, <16 x i8> %13)2042 %15 = call <16 x i8> @llvm.arm.neon.aesmc(<16 x i8> %14)2043 store <16 x i8> %15, ptr %3, align 82044 ret void2045}2046 2047define arm_aapcs_vfpcc void @aese_setf32_loop_via_ptr(i32 %0, ptr %1, <16 x i8> %2, ptr %3) nounwind {2048; CHECK-FIX-NOSCHED-LABEL: aese_setf32_loop_via_ptr:2049; CHECK-FIX-NOSCHED: @ %bb.0:2050; CHECK-FIX-NOSCHED-NEXT: vldr s4, [r1]2051; CHECK-FIX-NOSCHED-NEXT: cmp r0, #02052; CHECK-FIX-NOSCHED-NEXT: vstr s4, [r2]2053; CHECK-FIX-NOSCHED-NEXT: bxeq lr2054; CHECK-FIX-NOSCHED-NEXT: .LBB44_1:2055; CHECK-FIX-NOSCHED-NEXT: vmov.f32 s0, s42056; CHECK-FIX-NOSCHED-NEXT: vld1.64 {d16, d17}, [r2]2057; CHECK-FIX-NOSCHED-NEXT: .LBB44_2: @ =>This Inner Loop Header: Depth=12058; CHECK-FIX-NOSCHED-NEXT: vorr q0, q0, q02059; CHECK-FIX-NOSCHED-NEXT: aese.8 q8, q02060; CHECK-FIX-NOSCHED-NEXT: subs r0, r0, #12061; CHECK-FIX-NOSCHED-NEXT: aesmc.8 q8, q82062; CHECK-FIX-NOSCHED-NEXT: bne .LBB44_22063; CHECK-FIX-NOSCHED-NEXT: @ %bb.3:2064; CHECK-FIX-NOSCHED-NEXT: vst1.64 {d16, d17}, [r2]2065; CHECK-FIX-NOSCHED-NEXT: bx lr2066;2067; CHECK-CORTEX-FIX-LABEL: aese_setf32_loop_via_ptr:2068; CHECK-CORTEX-FIX: @ %bb.0:2069; CHECK-CORTEX-FIX-NEXT: vldr s4, [r1]2070; CHECK-CORTEX-FIX-NEXT: cmp r0, #02071; CHECK-CORTEX-FIX-NEXT: vstr s4, [r2]2072; CHECK-CORTEX-FIX-NEXT: bxeq lr2073; CHECK-CORTEX-FIX-NEXT: .LBB44_1:2074; CHECK-CORTEX-FIX-NEXT: vld1.64 {d16, d17}, [r2]2075; CHECK-CORTEX-FIX-NEXT: vmov.f32 s0, s42076; CHECK-CORTEX-FIX-NEXT: .LBB44_2: @ =>This Inner Loop Header: Depth=12077; CHECK-CORTEX-FIX-NEXT: vorr q0, q0, q02078; CHECK-CORTEX-FIX-NEXT: aese.8 q8, q02079; CHECK-CORTEX-FIX-NEXT: subs r0, r0, #12080; CHECK-CORTEX-FIX-NEXT: aesmc.8 q8, q82081; CHECK-CORTEX-FIX-NEXT: bne .LBB44_22082; CHECK-CORTEX-FIX-NEXT: @ %bb.3:2083; CHECK-CORTEX-FIX-NEXT: vst1.64 {d16, d17}, [r2]2084; CHECK-CORTEX-FIX-NEXT: bx lr2085 %5 = load float, ptr %1, align 42086 %6 = bitcast <16 x i8> %2 to <4 x float>2087 %7 = insertelement <4 x float> %6, float %5, i64 02088 %8 = bitcast <4 x float> %7 to <16 x i8>2089 %9 = bitcast ptr %3 to ptr2090 store float %5, ptr %9, align 82091 %10 = icmp eq i32 %0, 02092 br i1 %10, label %14, label %112093 209411:2095 %12 = load <16 x i8>, ptr %3, align 82096 br label %152097 209813:2099 store <16 x i8> %19, ptr %3, align 82100 br label %142101 210214:2103 ret void2104 210515:2106 %16 = phi <16 x i8> [ %12, %11 ], [ %19, %15 ]2107 %17 = phi i32 [ 0, %11 ], [ %20, %15 ]2108 %18 = call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %16, <16 x i8> %8)2109 %19 = call <16 x i8> @llvm.arm.neon.aesmc(<16 x i8> %18)2110 %20 = add nuw i32 %17, 12111 %21 = icmp eq i32 %20, %02112 br i1 %21, label %13, label %152113}2114 2115define arm_aapcs_vfpcc void @aese_setf32_loop_via_val(i32 %0, float %1, <16 x i8> %2, ptr %3) nounwind {2116; CHECK-FIX-NOSCHED-LABEL: aese_setf32_loop_via_val:2117; CHECK-FIX-NOSCHED: @ %bb.0:2118; CHECK-FIX-NOSCHED-NEXT: cmp r0, #02119; CHECK-FIX-NOSCHED-NEXT: bxeq lr2120; CHECK-FIX-NOSCHED-NEXT: .LBB45_1:2121; CHECK-FIX-NOSCHED-NEXT: vmov.f32 s4, s02122; CHECK-FIX-NOSCHED-NEXT: .LBB45_2: @ =>This Inner Loop Header: Depth=12123; CHECK-FIX-NOSCHED-NEXT: vld1.64 {d4, d5}, [r1]2124; CHECK-FIX-NOSCHED-NEXT: subs r0, r0, #12125; CHECK-FIX-NOSCHED-NEXT: vmov.f32 s8, s02126; CHECK-FIX-NOSCHED-NEXT: vorr q2, q2, q22127; CHECK-FIX-NOSCHED-NEXT: vorr q1, q1, q12128; CHECK-FIX-NOSCHED-NEXT: aese.8 q2, q12129; CHECK-FIX-NOSCHED-NEXT: aesmc.8 q8, q22130; CHECK-FIX-NOSCHED-NEXT: vst1.64 {d16, d17}, [r1]2131; CHECK-FIX-NOSCHED-NEXT: bne .LBB45_22132; CHECK-FIX-NOSCHED-NEXT: @ %bb.3:2133; CHECK-FIX-NOSCHED-NEXT: bx lr2134;2135; CHECK-CORTEX-FIX-LABEL: aese_setf32_loop_via_val:2136; CHECK-CORTEX-FIX: @ %bb.0:2137; CHECK-CORTEX-FIX-NEXT: cmp r0, #02138; CHECK-CORTEX-FIX-NEXT: bxeq lr2139; CHECK-CORTEX-FIX-NEXT: .LBB45_1:2140; CHECK-CORTEX-FIX-NEXT: vmov.f32 s4, s02141; CHECK-CORTEX-FIX-NEXT: .LBB45_2: @ =>This Inner Loop Header: Depth=12142; CHECK-CORTEX-FIX-NEXT: vld1.64 {d4, d5}, [r1]2143; CHECK-CORTEX-FIX-NEXT: vmov.f32 s8, s02144; CHECK-CORTEX-FIX-NEXT: vorr q2, q2, q22145; CHECK-CORTEX-FIX-NEXT: subs r0, r0, #12146; CHECK-CORTEX-FIX-NEXT: vorr q1, q1, q12147; CHECK-CORTEX-FIX-NEXT: aese.8 q2, q12148; CHECK-CORTEX-FIX-NEXT: aesmc.8 q8, q22149; CHECK-CORTEX-FIX-NEXT: vst1.64 {d16, d17}, [r1]2150; CHECK-CORTEX-FIX-NEXT: bne .LBB45_22151; CHECK-CORTEX-FIX-NEXT: @ %bb.3:2152; CHECK-CORTEX-FIX-NEXT: bx lr2153 %5 = icmp eq i32 %0, 02154 br i1 %5, label %12, label %62155 21566:2157 %7 = bitcast <16 x i8> %2 to <4 x float>2158 %8 = insertelement <4 x float> %7, float %1, i64 02159 %9 = bitcast <4 x float> %8 to <16 x i8>2160 %10 = bitcast ptr %3 to ptr2161 %11 = bitcast ptr %3 to ptr2162 br label %132163 216412:2165 ret void2166 216713:2168 %14 = phi i32 [ 0, %6 ], [ %20, %13 ]2169 %15 = load <4 x float>, ptr %10, align 82170 %16 = insertelement <4 x float> %15, float %1, i64 02171 %17 = bitcast <4 x float> %16 to <16 x i8>2172 store float %1, ptr %11, align 82173 %18 = call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %17, <16 x i8> %9)2174 %19 = call <16 x i8> @llvm.arm.neon.aesmc(<16 x i8> %18)2175 store <16 x i8> %19, ptr %3, align 82176 %20 = add nuw i32 %14, 12177 %21 = icmp eq i32 %20, %02178 br i1 %21, label %12, label %132179}2180 2181define arm_aapcs_vfpcc void @aesd_zero(ptr %0) nounwind {2182; CHECK-FIX-LABEL: aesd_zero:2183; CHECK-FIX: @ %bb.0:2184; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r0]2185; CHECK-FIX-NEXT: vmov.i32 q9, #0x02186; CHECK-FIX-NEXT: aesd.8 q9, q82187; CHECK-FIX-NEXT: aesimc.8 q8, q92188; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r0]2189; CHECK-FIX-NEXT: bx lr2190 %2 = load <16 x i8>, ptr %0, align 82191 %3 = call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> zeroinitializer, <16 x i8> %2)2192 %4 = call <16 x i8> @llvm.arm.neon.aesimc(<16 x i8> %3)2193 store <16 x i8> %4, ptr %0, align 82194 ret void2195}2196 2197define arm_aapcs_vfpcc void @aesd_via_call1(ptr %0) nounwind {2198; CHECK-FIX-LABEL: aesd_via_call1:2199; CHECK-FIX: @ %bb.0:2200; CHECK-FIX-NEXT: .save {r4, lr}2201; CHECK-FIX-NEXT: push {r4, lr}2202; CHECK-FIX-NEXT: mov r4, r02203; CHECK-FIX-NEXT: bl get_input2204; CHECK-FIX-NEXT: vorr q0, q0, q02205; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r4]2206; CHECK-FIX-NEXT: aesd.8 q8, q02207; CHECK-FIX-NEXT: aesimc.8 q8, q82208; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r4]2209; CHECK-FIX-NEXT: pop {r4, pc}2210 %2 = call arm_aapcs_vfpcc <16 x i8> @get_input()2211 %3 = load <16 x i8>, ptr %0, align 82212 %4 = call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %2, <16 x i8> %3)2213 %5 = call <16 x i8> @llvm.arm.neon.aesimc(<16 x i8> %4)2214 store <16 x i8> %5, ptr %0, align 82215 ret void2216}2217 2218define arm_aapcs_vfpcc void @aesd_via_call2(half %0, ptr %1) nounwind {2219; CHECK-FIX-LABEL: aesd_via_call2:2220; CHECK-FIX: @ %bb.0:2221; CHECK-FIX-NEXT: .save {r4, lr}2222; CHECK-FIX-NEXT: push {r4, lr}2223; CHECK-FIX-NEXT: mov r4, r02224; CHECK-FIX-NEXT: bl get_inputf162225; CHECK-FIX-NEXT: vorr q0, q0, q02226; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r4]2227; CHECK-FIX-NEXT: aesd.8 q8, q02228; CHECK-FIX-NEXT: aesimc.8 q8, q82229; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r4]2230; CHECK-FIX-NEXT: pop {r4, pc}2231 %3 = call arm_aapcs_vfpcc <16 x i8> @get_inputf16(half %0)2232 %4 = load <16 x i8>, ptr %1, align 82233 %5 = call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %3, <16 x i8> %4)2234 %6 = call <16 x i8> @llvm.arm.neon.aesimc(<16 x i8> %5)2235 store <16 x i8> %6, ptr %1, align 82236 ret void2237}2238 2239define arm_aapcs_vfpcc void @aesd_via_call3(float %0, ptr %1) nounwind {2240; CHECK-FIX-LABEL: aesd_via_call3:2241; CHECK-FIX: @ %bb.0:2242; CHECK-FIX-NEXT: .save {r4, lr}2243; CHECK-FIX-NEXT: push {r4, lr}2244; CHECK-FIX-NEXT: mov r4, r02245; CHECK-FIX-NEXT: bl get_inputf322246; CHECK-FIX-NEXT: vorr q0, q0, q02247; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r4]2248; CHECK-FIX-NEXT: aesd.8 q8, q02249; CHECK-FIX-NEXT: aesimc.8 q8, q82250; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r4]2251; CHECK-FIX-NEXT: pop {r4, pc}2252 %3 = call arm_aapcs_vfpcc <16 x i8> @get_inputf32(float %0)2253 %4 = load <16 x i8>, ptr %1, align 82254 %5 = call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %3, <16 x i8> %4)2255 %6 = call <16 x i8> @llvm.arm.neon.aesimc(<16 x i8> %5)2256 store <16 x i8> %6, ptr %1, align 82257 ret void2258}2259 2260define arm_aapcs_vfpcc void @aesd_once_via_ptr(ptr %0, ptr %1) nounwind {2261; CHECK-FIX-LABEL: aesd_once_via_ptr:2262; CHECK-FIX: @ %bb.0:2263; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r0]2264; CHECK-FIX-NEXT: vld1.64 {d18, d19}, [r1]2265; CHECK-FIX-NEXT: aesd.8 q9, q82266; CHECK-FIX-NEXT: aesimc.8 q8, q92267; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r1]2268; CHECK-FIX-NEXT: bx lr2269 %3 = load <16 x i8>, ptr %1, align 82270 %4 = load <16 x i8>, ptr %0, align 82271 %5 = call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %3, <16 x i8> %4)2272 %6 = call <16 x i8> @llvm.arm.neon.aesimc(<16 x i8> %5)2273 store <16 x i8> %6, ptr %1, align 82274 ret void2275}2276 2277define arm_aapcs_vfpcc <16 x i8> @aesd_once_via_val(<16 x i8> %0, <16 x i8> %1) nounwind {2278; CHECK-FIX-LABEL: aesd_once_via_val:2279; CHECK-FIX: @ %bb.0:2280; CHECK-FIX-NEXT: vorr q0, q0, q02281; CHECK-FIX-NEXT: vorr q1, q1, q12282; CHECK-FIX-NEXT: aesd.8 q0, q12283; CHECK-FIX-NEXT: aesimc.8 q0, q02284; CHECK-FIX-NEXT: bx lr2285 %3 = call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %1, <16 x i8> %0)2286 %4 = call <16 x i8> @llvm.arm.neon.aesimc(<16 x i8> %3)2287 ret <16 x i8> %42288}2289 2290define arm_aapcs_vfpcc void @aesd_twice_via_ptr(ptr %0, ptr %1) nounwind {2291; CHECK-FIX-LABEL: aesd_twice_via_ptr:2292; CHECK-FIX: @ %bb.0:2293; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r0]2294; CHECK-FIX-NEXT: vld1.64 {d18, d19}, [r1]2295; CHECK-FIX-NEXT: aesd.8 q9, q82296; CHECK-FIX-NEXT: aesimc.8 q8, q92297; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r1]2298; CHECK-FIX-NEXT: vld1.64 {d18, d19}, [r0]2299; CHECK-FIX-NEXT: aesd.8 q9, q82300; CHECK-FIX-NEXT: aesimc.8 q8, q92301; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r1]2302; CHECK-FIX-NEXT: bx lr2303 %3 = load <16 x i8>, ptr %1, align 82304 %4 = load <16 x i8>, ptr %0, align 82305 %5 = call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %3, <16 x i8> %4)2306 %6 = call <16 x i8> @llvm.arm.neon.aesimc(<16 x i8> %5)2307 store <16 x i8> %6, ptr %1, align 82308 %7 = load <16 x i8>, ptr %0, align 82309 %8 = call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %6, <16 x i8> %7)2310 %9 = call <16 x i8> @llvm.arm.neon.aesimc(<16 x i8> %8)2311 store <16 x i8> %9, ptr %1, align 82312 ret void2313}2314 2315define arm_aapcs_vfpcc <16 x i8> @aesd_twice_via_val(<16 x i8> %0, <16 x i8> %1) nounwind {2316; CHECK-FIX-LABEL: aesd_twice_via_val:2317; CHECK-FIX: @ %bb.0:2318; CHECK-FIX-NEXT: vorr q1, q1, q12319; CHECK-FIX-NEXT: vorr q0, q0, q02320; CHECK-FIX-NEXT: vorr q0, q0, q02321; CHECK-FIX-NEXT: aesd.8 q1, q02322; CHECK-FIX-NEXT: aesimc.8 q8, q12323; CHECK-FIX-NEXT: aesd.8 q8, q02324; CHECK-FIX-NEXT: aesimc.8 q0, q82325; CHECK-FIX-NEXT: bx lr2326 %3 = call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %1, <16 x i8> %0)2327 %4 = call <16 x i8> @llvm.arm.neon.aesimc(<16 x i8> %3)2328 %5 = call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %4, <16 x i8> %0)2329 %6 = call <16 x i8> @llvm.arm.neon.aesimc(<16 x i8> %5)2330 ret <16 x i8> %62331}2332 2333define arm_aapcs_vfpcc void @aesd_loop_via_ptr(i32 %0, ptr %1, ptr %2) nounwind {2334; CHECK-FIX-NOSCHED-LABEL: aesd_loop_via_ptr:2335; CHECK-FIX-NOSCHED: @ %bb.0:2336; CHECK-FIX-NOSCHED-NEXT: cmp r0, #02337; CHECK-FIX-NOSCHED-NEXT: bxeq lr2338; CHECK-FIX-NOSCHED-NEXT: .LBB54_1: @ =>This Inner Loop Header: Depth=12339; CHECK-FIX-NOSCHED-NEXT: vld1.64 {d16, d17}, [r1]2340; CHECK-FIX-NOSCHED-NEXT: subs r0, r0, #12341; CHECK-FIX-NOSCHED-NEXT: vld1.64 {d18, d19}, [r2]2342; CHECK-FIX-NOSCHED-NEXT: aesd.8 q9, q82343; CHECK-FIX-NOSCHED-NEXT: aesimc.8 q8, q92344; CHECK-FIX-NOSCHED-NEXT: vst1.64 {d16, d17}, [r2]2345; CHECK-FIX-NOSCHED-NEXT: bne .LBB54_12346; CHECK-FIX-NOSCHED-NEXT: @ %bb.2:2347; CHECK-FIX-NOSCHED-NEXT: bx lr2348;2349; CHECK-CORTEX-FIX-LABEL: aesd_loop_via_ptr:2350; CHECK-CORTEX-FIX: @ %bb.0:2351; CHECK-CORTEX-FIX-NEXT: cmp r0, #02352; CHECK-CORTEX-FIX-NEXT: bxeq lr2353; CHECK-CORTEX-FIX-NEXT: .LBB54_1: @ =>This Inner Loop Header: Depth=12354; CHECK-CORTEX-FIX-NEXT: vld1.64 {d16, d17}, [r1]2355; CHECK-CORTEX-FIX-NEXT: vld1.64 {d18, d19}, [r2]2356; CHECK-CORTEX-FIX-NEXT: subs r0, r0, #12357; CHECK-CORTEX-FIX-NEXT: aesd.8 q9, q82358; CHECK-CORTEX-FIX-NEXT: aesimc.8 q8, q92359; CHECK-CORTEX-FIX-NEXT: vst1.64 {d16, d17}, [r2]2360; CHECK-CORTEX-FIX-NEXT: bne .LBB54_12361; CHECK-CORTEX-FIX-NEXT: @ %bb.2:2362; CHECK-CORTEX-FIX-NEXT: bx lr2363 %4 = icmp eq i32 %0, 02364 br i1 %4, label %5, label %62365 23665:2367 ret void2368 23696:2370 %7 = phi i32 [ %12, %6 ], [ 0, %3 ]2371 %8 = load <16 x i8>, ptr %2, align 82372 %9 = load <16 x i8>, ptr %1, align 82373 %10 = call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %8, <16 x i8> %9)2374 %11 = call <16 x i8> @llvm.arm.neon.aesimc(<16 x i8> %10)2375 store <16 x i8> %11, ptr %2, align 82376 %12 = add nuw i32 %7, 12377 %13 = icmp eq i32 %12, %02378 br i1 %13, label %5, label %62379}2380 2381define arm_aapcs_vfpcc <16 x i8> @aesd_loop_via_val(i32 %0, <16 x i8> %1, <16 x i8> %2) nounwind {2382; CHECK-FIX-LABEL: aesd_loop_via_val:2383; CHECK-FIX: @ %bb.0:2384; CHECK-FIX-NEXT: vorr q1, q1, q12385; CHECK-FIX-NEXT: vorr q0, q0, q02386; CHECK-FIX-NEXT: cmp r0, #02387; CHECK-FIX-NEXT: beq .LBB55_22388; CHECK-FIX-NEXT: .LBB55_1: @ =>This Inner Loop Header: Depth=12389; CHECK-FIX-NEXT: aesd.8 q1, q02390; CHECK-FIX-NEXT: subs r0, r0, #12391; CHECK-FIX-NEXT: aesimc.8 q1, q12392; CHECK-FIX-NEXT: bne .LBB55_12393; CHECK-FIX-NEXT: .LBB55_2:2394; CHECK-FIX-NEXT: vorr q0, q1, q12395; CHECK-FIX-NEXT: bx lr2396 %4 = icmp eq i32 %0, 02397 br i1 %4, label %5, label %72398 23995:2400 %6 = phi <16 x i8> [ %2, %3 ], [ %11, %7 ]2401 ret <16 x i8> %62402 24037:2404 %8 = phi i32 [ %12, %7 ], [ 0, %3 ]2405 %9 = phi <16 x i8> [ %11, %7 ], [ %2, %3 ]2406 %10 = call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %9, <16 x i8> %1)2407 %11 = call <16 x i8> @llvm.arm.neon.aesimc(<16 x i8> %10)2408 %12 = add nuw i32 %8, 12409 %13 = icmp eq i32 %12, %02410 br i1 %13, label %5, label %72411}2412 2413define arm_aapcs_vfpcc void @aesd_set8_via_ptr(ptr %0, <16 x i8> %1, ptr %2) nounwind {2414; CHECK-FIX-NOSCHED-LABEL: aesd_set8_via_ptr:2415; CHECK-FIX-NOSCHED: @ %bb.0:2416; CHECK-FIX-NOSCHED-NEXT: vorr q0, q0, q02417; CHECK-FIX-NOSCHED-NEXT: ldrb r0, [r0]2418; CHECK-FIX-NOSCHED-NEXT: vld1.64 {d16, d17}, [r1]2419; CHECK-FIX-NOSCHED-NEXT: vmov.8 d0[0], r02420; CHECK-FIX-NOSCHED-NEXT: vmov.8 d16[0], r02421; CHECK-FIX-NOSCHED-NEXT: aesd.8 q8, q02422; CHECK-FIX-NOSCHED-NEXT: aesimc.8 q8, q82423; CHECK-FIX-NOSCHED-NEXT: vst1.64 {d16, d17}, [r1]2424; CHECK-FIX-NOSCHED-NEXT: bx lr2425;2426; CHECK-CORTEX-FIX-LABEL: aesd_set8_via_ptr:2427; CHECK-CORTEX-FIX: @ %bb.0:2428; CHECK-CORTEX-FIX-NEXT: vorr q0, q0, q02429; CHECK-CORTEX-FIX-NEXT: vld1.64 {d16, d17}, [r1]2430; CHECK-CORTEX-FIX-NEXT: ldrb r0, [r0]2431; CHECK-CORTEX-FIX-NEXT: vmov.8 d0[0], r02432; CHECK-CORTEX-FIX-NEXT: vmov.8 d16[0], r02433; CHECK-CORTEX-FIX-NEXT: aesd.8 q8, q02434; CHECK-CORTEX-FIX-NEXT: aesimc.8 q8, q82435; CHECK-CORTEX-FIX-NEXT: vst1.64 {d16, d17}, [r1]2436; CHECK-CORTEX-FIX-NEXT: bx lr2437 %4 = load i8, ptr %0, align 12438 %5 = load <16 x i8>, ptr %2, align 82439 %6 = insertelement <16 x i8> %5, i8 %4, i64 02440 %7 = insertelement <16 x i8> %1, i8 %4, i64 02441 %8 = call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %6, <16 x i8> %7)2442 %9 = call <16 x i8> @llvm.arm.neon.aesimc(<16 x i8> %8)2443 store <16 x i8> %9, ptr %2, align 82444 ret void2445}2446 2447define arm_aapcs_vfpcc void @aesd_set8_via_val(i8 zeroext %0, <16 x i8> %1, ptr %2) nounwind {2448; CHECK-FIX-LABEL: aesd_set8_via_val:2449; CHECK-FIX: @ %bb.0:2450; CHECK-FIX-NEXT: vorr q0, q0, q02451; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r1]2452; CHECK-FIX-NEXT: vmov.8 d0[0], r02453; CHECK-FIX-NEXT: vmov.8 d16[0], r02454; CHECK-FIX-NEXT: aesd.8 q8, q02455; CHECK-FIX-NEXT: aesimc.8 q8, q82456; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r1]2457; CHECK-FIX-NEXT: bx lr2458 %4 = load <16 x i8>, ptr %2, align 82459 %5 = insertelement <16 x i8> %4, i8 %0, i64 02460 %6 = insertelement <16 x i8> %1, i8 %0, i64 02461 %7 = call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %5, <16 x i8> %6)2462 %8 = call <16 x i8> @llvm.arm.neon.aesimc(<16 x i8> %7)2463 store <16 x i8> %8, ptr %2, align 82464 ret void2465}2466 2467define arm_aapcs_vfpcc void @aesd_set8_cond_via_ptr(i1 zeroext %0, ptr %1, <16 x i8> %2, ptr %3) nounwind {2468; CHECK-FIX-LABEL: aesd_set8_cond_via_ptr:2469; CHECK-FIX: @ %bb.0:2470; CHECK-FIX-NEXT: vorr q0, q0, q02471; CHECK-FIX-NEXT: cmp r0, #02472; CHECK-FIX-NEXT: beq .LBB58_22473; CHECK-FIX-NEXT: @ %bb.1:2474; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r2]2475; CHECK-FIX-NEXT: vld1.8 {d16[0]}, [r1]2476; CHECK-FIX-NEXT: cmp r0, #02477; CHECK-FIX-NEXT: bne .LBB58_32478; CHECK-FIX-NEXT: b .LBB58_42479; CHECK-FIX-NEXT: .LBB58_2:2480; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r2]2481; CHECK-FIX-NEXT: cmp r0, #02482; CHECK-FIX-NEXT: beq .LBB58_42483; CHECK-FIX-NEXT: .LBB58_3:2484; CHECK-FIX-NEXT: vld1.8 {d0[0]}, [r1]2485; CHECK-FIX-NEXT: .LBB58_4:2486; CHECK-FIX-NEXT: aesd.8 q8, q02487; CHECK-FIX-NEXT: aesimc.8 q8, q82488; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r2]2489; CHECK-FIX-NEXT: bx lr2490 br i1 %0, label %5, label %92491 24925:2493 %6 = load i8, ptr %1, align 12494 %7 = load <16 x i8>, ptr %3, align 82495 %8 = insertelement <16 x i8> %7, i8 %6, i64 02496 br label %112497 24989:2499 %10 = load <16 x i8>, ptr %3, align 82500 br label %112501 250211:2503 %12 = phi <16 x i8> [ %8, %5 ], [ %10, %9 ]2504 br i1 %0, label %13, label %162505 250613:2507 %14 = load i8, ptr %1, align 12508 %15 = insertelement <16 x i8> %2, i8 %14, i64 02509 br label %162510 251116:2512 %17 = phi <16 x i8> [ %15, %13 ], [ %2, %11 ]2513 %18 = call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %12, <16 x i8> %17)2514 %19 = call <16 x i8> @llvm.arm.neon.aesimc(<16 x i8> %18)2515 store <16 x i8> %19, ptr %3, align 82516 ret void2517}2518 2519define arm_aapcs_vfpcc void @aesd_set8_cond_via_val(i1 zeroext %0, i8 zeroext %1, <16 x i8> %2, ptr %3) nounwind {2520; CHECK-FIX-LABEL: aesd_set8_cond_via_val:2521; CHECK-FIX: @ %bb.0:2522; CHECK-FIX-NEXT: vorr q0, q0, q02523; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r2]2524; CHECK-FIX-NEXT: cmp r0, #02525; CHECK-FIX-NEXT: beq .LBB59_22526; CHECK-FIX-NEXT: @ %bb.1:2527; CHECK-FIX-NEXT: vmov.8 d16[0], r12528; CHECK-FIX-NEXT: .LBB59_2: @ %select.end2529; CHECK-FIX-NEXT: cmp r0, #02530; CHECK-FIX-NEXT: beq .LBB59_42531; CHECK-FIX-NEXT: @ %bb.3:2532; CHECK-FIX-NEXT: vmov.8 d0[0], r12533; CHECK-FIX-NEXT: .LBB59_4: @ %select.end22534; CHECK-FIX-NEXT: aesd.8 q8, q02535; CHECK-FIX-NEXT: aesimc.8 q8, q82536; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r2]2537; CHECK-FIX-NEXT: bx lr2538 %5 = load <16 x i8>, ptr %3, align 82539 %6 = insertelement <16 x i8> %5, i8 %1, i64 02540 %7 = select i1 %0, <16 x i8> %6, <16 x i8> %52541 %8 = insertelement <16 x i8> %2, i8 %1, i64 02542 %9 = select i1 %0, <16 x i8> %8, <16 x i8> %22543 %10 = call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %7, <16 x i8> %9)2544 %11 = call <16 x i8> @llvm.arm.neon.aesimc(<16 x i8> %10)2545 store <16 x i8> %11, ptr %3, align 82546 ret void2547}2548 2549define arm_aapcs_vfpcc void @aesd_set8_loop_via_ptr(i32 %0, ptr %1, <16 x i8> %2, ptr %3) nounwind {2550; CHECK-FIX-LABEL: aesd_set8_loop_via_ptr:2551; CHECK-FIX: @ %bb.0:2552; CHECK-FIX-NEXT: vorr q0, q0, q02553; CHECK-FIX-NEXT: ldrb r1, [r1]2554; CHECK-FIX-NEXT: cmp r0, #02555; CHECK-FIX-NEXT: strb r1, [r2]2556; CHECK-FIX-NEXT: bxeq lr2557; CHECK-FIX-NEXT: .LBB60_1:2558; CHECK-FIX-NEXT: vmov.8 d0[0], r12559; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r2]2560; CHECK-FIX-NEXT: .LBB60_2: @ =>This Inner Loop Header: Depth=12561; CHECK-FIX-NEXT: aesd.8 q8, q02562; CHECK-FIX-NEXT: subs r0, r0, #12563; CHECK-FIX-NEXT: aesimc.8 q8, q82564; CHECK-FIX-NEXT: bne .LBB60_22565; CHECK-FIX-NEXT: @ %bb.3:2566; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r2]2567; CHECK-FIX-NEXT: bx lr2568 %5 = load i8, ptr %1, align 12569 %6 = insertelement <16 x i8> %2, i8 %5, i64 02570 %7 = getelementptr inbounds <16 x i8>, ptr %3, i32 0, i32 02571 store i8 %5, ptr %7, align 82572 %8 = icmp eq i32 %0, 02573 br i1 %8, label %12, label %92574 25759:2576 %10 = load <16 x i8>, ptr %3, align 82577 br label %132578 257911:2580 store <16 x i8> %17, ptr %3, align 82581 br label %122582 258312:2584 ret void2585 258613:2587 %14 = phi <16 x i8> [ %10, %9 ], [ %17, %13 ]2588 %15 = phi i32 [ 0, %9 ], [ %18, %13 ]2589 %16 = call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %14, <16 x i8> %6)2590 %17 = call <16 x i8> @llvm.arm.neon.aesimc(<16 x i8> %16)2591 %18 = add nuw i32 %15, 12592 %19 = icmp eq i32 %18, %02593 br i1 %19, label %11, label %132594}2595 2596define arm_aapcs_vfpcc void @aesd_set8_loop_via_val(i32 %0, i8 zeroext %1, <16 x i8> %2, ptr %3) nounwind {2597; CHECK-FIX-LABEL: aesd_set8_loop_via_val:2598; CHECK-FIX: @ %bb.0:2599; CHECK-FIX-NEXT: vorr q0, q0, q02600; CHECK-FIX-NEXT: cmp r0, #02601; CHECK-FIX-NEXT: bxeq lr2602; CHECK-FIX-NEXT: .LBB61_1:2603; CHECK-FIX-NEXT: vmov.8 d0[0], r12604; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r2]2605; CHECK-FIX-NEXT: .LBB61_2: @ =>This Inner Loop Header: Depth=12606; CHECK-FIX-NEXT: vmov.8 d16[0], r12607; CHECK-FIX-NEXT: subs r0, r0, #12608; CHECK-FIX-NEXT: aesd.8 q8, q02609; CHECK-FIX-NEXT: aesimc.8 q8, q82610; CHECK-FIX-NEXT: bne .LBB61_22611; CHECK-FIX-NEXT: @ %bb.3:2612; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r2]2613; CHECK-FIX-NEXT: bx lr2614 %5 = icmp eq i32 %0, 02615 br i1 %5, label %10, label %62616 26176:2618 %7 = insertelement <16 x i8> %2, i8 %1, i64 02619 %8 = load <16 x i8>, ptr %3, align 82620 br label %112621 26229:2623 store <16 x i8> %16, ptr %3, align 82624 br label %102625 262610:2627 ret void2628 262911:2630 %12 = phi <16 x i8> [ %8, %6 ], [ %16, %11 ]2631 %13 = phi i32 [ 0, %6 ], [ %17, %11 ]2632 %14 = insertelement <16 x i8> %12, i8 %1, i64 02633 %15 = call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %14, <16 x i8> %7)2634 %16 = call <16 x i8> @llvm.arm.neon.aesimc(<16 x i8> %15)2635 %17 = add nuw i32 %13, 12636 %18 = icmp eq i32 %17, %02637 br i1 %18, label %9, label %112638}2639 2640define arm_aapcs_vfpcc void @aesd_set16_via_ptr(ptr %0, <16 x i8> %1, ptr %2) nounwind {2641; CHECK-FIX-NOSCHED-LABEL: aesd_set16_via_ptr:2642; CHECK-FIX-NOSCHED: @ %bb.0:2643; CHECK-FIX-NOSCHED-NEXT: vorr q0, q0, q02644; CHECK-FIX-NOSCHED-NEXT: ldrh r0, [r0]2645; CHECK-FIX-NOSCHED-NEXT: vld1.64 {d16, d17}, [r1]2646; CHECK-FIX-NOSCHED-NEXT: vmov.16 d0[0], r02647; CHECK-FIX-NOSCHED-NEXT: vmov.16 d16[0], r02648; CHECK-FIX-NOSCHED-NEXT: aesd.8 q8, q02649; CHECK-FIX-NOSCHED-NEXT: aesimc.8 q8, q82650; CHECK-FIX-NOSCHED-NEXT: vst1.64 {d16, d17}, [r1]2651; CHECK-FIX-NOSCHED-NEXT: bx lr2652;2653; CHECK-CORTEX-FIX-LABEL: aesd_set16_via_ptr:2654; CHECK-CORTEX-FIX: @ %bb.0:2655; CHECK-CORTEX-FIX-NEXT: vorr q0, q0, q02656; CHECK-CORTEX-FIX-NEXT: vld1.64 {d16, d17}, [r1]2657; CHECK-CORTEX-FIX-NEXT: ldrh r0, [r0]2658; CHECK-CORTEX-FIX-NEXT: vmov.16 d0[0], r02659; CHECK-CORTEX-FIX-NEXT: vmov.16 d16[0], r02660; CHECK-CORTEX-FIX-NEXT: aesd.8 q8, q02661; CHECK-CORTEX-FIX-NEXT: aesimc.8 q8, q82662; CHECK-CORTEX-FIX-NEXT: vst1.64 {d16, d17}, [r1]2663; CHECK-CORTEX-FIX-NEXT: bx lr2664 %4 = load i16, ptr %0, align 22665 %5 = bitcast ptr %2 to ptr2666 %6 = load <8 x i16>, ptr %5, align 82667 %7 = insertelement <8 x i16> %6, i16 %4, i64 02668 %8 = bitcast <8 x i16> %7 to <16 x i8>2669 %9 = bitcast <16 x i8> %1 to <8 x i16>2670 %10 = insertelement <8 x i16> %9, i16 %4, i64 02671 %11 = bitcast <8 x i16> %10 to <16 x i8>2672 %12 = call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %8, <16 x i8> %11)2673 %13 = call <16 x i8> @llvm.arm.neon.aesimc(<16 x i8> %12)2674 store <16 x i8> %13, ptr %2, align 82675 ret void2676}2677 2678define arm_aapcs_vfpcc void @aesd_set16_via_val(i16 zeroext %0, <16 x i8> %1, ptr %2) nounwind {2679; CHECK-FIX-LABEL: aesd_set16_via_val:2680; CHECK-FIX: @ %bb.0:2681; CHECK-FIX-NEXT: vorr q0, q0, q02682; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r1]2683; CHECK-FIX-NEXT: vmov.16 d0[0], r02684; CHECK-FIX-NEXT: vmov.16 d16[0], r02685; CHECK-FIX-NEXT: aesd.8 q8, q02686; CHECK-FIX-NEXT: aesimc.8 q8, q82687; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r1]2688; CHECK-FIX-NEXT: bx lr2689 %4 = bitcast ptr %2 to ptr2690 %5 = load <8 x i16>, ptr %4, align 82691 %6 = insertelement <8 x i16> %5, i16 %0, i64 02692 %7 = bitcast <8 x i16> %6 to <16 x i8>2693 %8 = bitcast <16 x i8> %1 to <8 x i16>2694 %9 = insertelement <8 x i16> %8, i16 %0, i64 02695 %10 = bitcast <8 x i16> %9 to <16 x i8>2696 %11 = call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %7, <16 x i8> %10)2697 %12 = call <16 x i8> @llvm.arm.neon.aesimc(<16 x i8> %11)2698 store <16 x i8> %12, ptr %2, align 82699 ret void2700}2701 2702define arm_aapcs_vfpcc void @aesd_set16_cond_via_ptr(i1 zeroext %0, ptr %1, <16 x i8> %2, ptr %3) nounwind {2703; CHECK-FIX-LABEL: aesd_set16_cond_via_ptr:2704; CHECK-FIX: @ %bb.0:2705; CHECK-FIX-NEXT: vorr q0, q0, q02706; CHECK-FIX-NEXT: cmp r0, #02707; CHECK-FIX-NEXT: beq .LBB64_22708; CHECK-FIX-NEXT: @ %bb.1:2709; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r2]2710; CHECK-FIX-NEXT: vld1.16 {d16[0]}, [r1:16]2711; CHECK-FIX-NEXT: cmp r0, #02712; CHECK-FIX-NEXT: bne .LBB64_32713; CHECK-FIX-NEXT: b .LBB64_42714; CHECK-FIX-NEXT: .LBB64_2:2715; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r2]2716; CHECK-FIX-NEXT: cmp r0, #02717; CHECK-FIX-NEXT: beq .LBB64_42718; CHECK-FIX-NEXT: .LBB64_3:2719; CHECK-FIX-NEXT: vld1.16 {d0[0]}, [r1:16]2720; CHECK-FIX-NEXT: .LBB64_4:2721; CHECK-FIX-NEXT: aesd.8 q8, q02722; CHECK-FIX-NEXT: aesimc.8 q8, q82723; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r2]2724; CHECK-FIX-NEXT: bx lr2725 br i1 %0, label %5, label %102726 27275:2728 %6 = load i16, ptr %1, align 22729 %7 = bitcast ptr %3 to ptr2730 %8 = load <8 x i16>, ptr %7, align 82731 %9 = insertelement <8 x i16> %8, i16 %6, i64 02732 br label %132733 273410:2735 %11 = bitcast ptr %3 to ptr2736 %12 = load <8 x i16>, ptr %11, align 82737 br label %132738 273913:2740 %14 = phi <8 x i16> [ %9, %5 ], [ %12, %10 ]2741 br i1 %0, label %15, label %192742 274315:2744 %16 = load i16, ptr %1, align 22745 %17 = bitcast <16 x i8> %2 to <8 x i16>2746 %18 = insertelement <8 x i16> %17, i16 %16, i64 02747 br label %212748 274919:2750 %20 = bitcast <16 x i8> %2 to <8 x i16>2751 br label %212752 275321:2754 %22 = phi <8 x i16> [ %18, %15 ], [ %20, %19 ]2755 %23 = bitcast <8 x i16> %14 to <16 x i8>2756 %24 = bitcast <8 x i16> %22 to <16 x i8>2757 %25 = call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %23, <16 x i8> %24)2758 %26 = call <16 x i8> @llvm.arm.neon.aesimc(<16 x i8> %25)2759 store <16 x i8> %26, ptr %3, align 82760 ret void2761}2762 2763define arm_aapcs_vfpcc void @aesd_set16_cond_via_val(i1 zeroext %0, i16 zeroext %1, <16 x i8> %2, ptr %3) nounwind {2764; CHECK-FIX-LABEL: aesd_set16_cond_via_val:2765; CHECK-FIX: @ %bb.0:2766; CHECK-FIX-NEXT: vorr q0, q0, q02767; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r2]2768; CHECK-FIX-NEXT: cmp r0, #02769; CHECK-FIX-NEXT: beq .LBB65_22770; CHECK-FIX-NEXT: @ %bb.1:2771; CHECK-FIX-NEXT: vmov.16 d16[0], r12772; CHECK-FIX-NEXT: .LBB65_2: @ %select.end2773; CHECK-FIX-NEXT: cmp r0, #02774; CHECK-FIX-NEXT: beq .LBB65_42775; CHECK-FIX-NEXT: @ %bb.3:2776; CHECK-FIX-NEXT: vmov.16 d0[0], r12777; CHECK-FIX-NEXT: .LBB65_4: @ %select.end22778; CHECK-FIX-NEXT: aesd.8 q8, q02779; CHECK-FIX-NEXT: aesimc.8 q8, q82780; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r2]2781; CHECK-FIX-NEXT: bx lr2782 %5 = bitcast ptr %3 to ptr2783 %6 = load <8 x i16>, ptr %5, align 82784 %7 = insertelement <8 x i16> %6, i16 %1, i64 02785 %8 = select i1 %0, <8 x i16> %7, <8 x i16> %62786 %9 = bitcast <16 x i8> %2 to <8 x i16>2787 %10 = insertelement <8 x i16> %9, i16 %1, i64 02788 %11 = select i1 %0, <8 x i16> %10, <8 x i16> %92789 %12 = bitcast <8 x i16> %8 to <16 x i8>2790 %13 = bitcast <8 x i16> %11 to <16 x i8>2791 %14 = call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %12, <16 x i8> %13)2792 %15 = call <16 x i8> @llvm.arm.neon.aesimc(<16 x i8> %14)2793 store <16 x i8> %15, ptr %3, align 82794 ret void2795}2796 2797define arm_aapcs_vfpcc void @aesd_set16_loop_via_ptr(i32 %0, ptr %1, <16 x i8> %2, ptr %3) nounwind {2798; CHECK-FIX-LABEL: aesd_set16_loop_via_ptr:2799; CHECK-FIX: @ %bb.0:2800; CHECK-FIX-NEXT: vorr q0, q0, q02801; CHECK-FIX-NEXT: ldrh r1, [r1]2802; CHECK-FIX-NEXT: cmp r0, #02803; CHECK-FIX-NEXT: strh r1, [r2]2804; CHECK-FIX-NEXT: bxeq lr2805; CHECK-FIX-NEXT: .LBB66_1:2806; CHECK-FIX-NEXT: vmov.16 d0[0], r12807; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r2]2808; CHECK-FIX-NEXT: .LBB66_2: @ =>This Inner Loop Header: Depth=12809; CHECK-FIX-NEXT: aesd.8 q8, q02810; CHECK-FIX-NEXT: subs r0, r0, #12811; CHECK-FIX-NEXT: aesimc.8 q8, q82812; CHECK-FIX-NEXT: bne .LBB66_22813; CHECK-FIX-NEXT: @ %bb.3:2814; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r2]2815; CHECK-FIX-NEXT: bx lr2816 %5 = load i16, ptr %1, align 22817 %6 = bitcast <16 x i8> %2 to <8 x i16>2818 %7 = insertelement <8 x i16> %6, i16 %5, i64 02819 %8 = bitcast <8 x i16> %7 to <16 x i8>2820 %9 = bitcast ptr %3 to ptr2821 store i16 %5, ptr %9, align 82822 %10 = icmp eq i32 %0, 02823 br i1 %10, label %14, label %112824 282511:2826 %12 = load <16 x i8>, ptr %3, align 82827 br label %152828 282913:2830 store <16 x i8> %19, ptr %3, align 82831 br label %142832 283314:2834 ret void2835 283615:2837 %16 = phi <16 x i8> [ %12, %11 ], [ %19, %15 ]2838 %17 = phi i32 [ 0, %11 ], [ %20, %15 ]2839 %18 = call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %16, <16 x i8> %8)2840 %19 = call <16 x i8> @llvm.arm.neon.aesimc(<16 x i8> %18)2841 %20 = add nuw i32 %17, 12842 %21 = icmp eq i32 %20, %02843 br i1 %21, label %13, label %152844}2845 2846define arm_aapcs_vfpcc void @aesd_set16_loop_via_val(i32 %0, i16 zeroext %1, <16 x i8> %2, ptr %3) nounwind {2847; CHECK-FIX-LABEL: aesd_set16_loop_via_val:2848; CHECK-FIX: @ %bb.0:2849; CHECK-FIX-NEXT: vorr q0, q0, q02850; CHECK-FIX-NEXT: cmp r0, #02851; CHECK-FIX-NEXT: bxeq lr2852; CHECK-FIX-NEXT: .LBB67_1:2853; CHECK-FIX-NEXT: vmov.16 d0[0], r12854; CHECK-FIX-NEXT: .LBB67_2: @ =>This Inner Loop Header: Depth=12855; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r2]2856; CHECK-FIX-NEXT: subs r0, r0, #12857; CHECK-FIX-NEXT: vmov.16 d16[0], r12858; CHECK-FIX-NEXT: aesd.8 q8, q02859; CHECK-FIX-NEXT: aesimc.8 q8, q82860; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r2]2861; CHECK-FIX-NEXT: bne .LBB67_22862; CHECK-FIX-NEXT: @ %bb.3:2863; CHECK-FIX-NEXT: bx lr2864 %5 = icmp eq i32 %0, 02865 br i1 %5, label %12, label %62866 28676:2868 %7 = bitcast <16 x i8> %2 to <8 x i16>2869 %8 = insertelement <8 x i16> %7, i16 %1, i64 02870 %9 = bitcast <8 x i16> %8 to <16 x i8>2871 %10 = bitcast ptr %3 to ptr2872 %11 = bitcast ptr %3 to ptr2873 br label %132874 287512:2876 ret void2877 287813:2879 %14 = phi i32 [ 0, %6 ], [ %20, %13 ]2880 %15 = load <8 x i16>, ptr %10, align 82881 %16 = insertelement <8 x i16> %15, i16 %1, i64 02882 %17 = bitcast <8 x i16> %16 to <16 x i8>2883 store i16 %1, ptr %11, align 82884 %18 = call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %17, <16 x i8> %9)2885 %19 = call <16 x i8> @llvm.arm.neon.aesimc(<16 x i8> %18)2886 store <16 x i8> %19, ptr %3, align 82887 %20 = add nuw i32 %14, 12888 %21 = icmp eq i32 %20, %02889 br i1 %21, label %12, label %132890}2891 2892define arm_aapcs_vfpcc void @aesd_set32_via_ptr(ptr %0, <16 x i8> %1, ptr %2) nounwind {2893; CHECK-FIX-NOSCHED-LABEL: aesd_set32_via_ptr:2894; CHECK-FIX-NOSCHED: @ %bb.0:2895; CHECK-FIX-NOSCHED-NEXT: vorr q0, q0, q02896; CHECK-FIX-NOSCHED-NEXT: ldr r0, [r0]2897; CHECK-FIX-NOSCHED-NEXT: vld1.64 {d16, d17}, [r1]2898; CHECK-FIX-NOSCHED-NEXT: vmov.32 d0[0], r02899; CHECK-FIX-NOSCHED-NEXT: vmov.32 d16[0], r02900; CHECK-FIX-NOSCHED-NEXT: aesd.8 q8, q02901; CHECK-FIX-NOSCHED-NEXT: aesimc.8 q8, q82902; CHECK-FIX-NOSCHED-NEXT: vst1.64 {d16, d17}, [r1]2903; CHECK-FIX-NOSCHED-NEXT: bx lr2904;2905; CHECK-CORTEX-FIX-LABEL: aesd_set32_via_ptr:2906; CHECK-CORTEX-FIX: @ %bb.0:2907; CHECK-CORTEX-FIX-NEXT: vorr q0, q0, q02908; CHECK-CORTEX-FIX-NEXT: vld1.64 {d16, d17}, [r1]2909; CHECK-CORTEX-FIX-NEXT: ldr r0, [r0]2910; CHECK-CORTEX-FIX-NEXT: vmov.32 d0[0], r02911; CHECK-CORTEX-FIX-NEXT: vmov.32 d16[0], r02912; CHECK-CORTEX-FIX-NEXT: aesd.8 q8, q02913; CHECK-CORTEX-FIX-NEXT: aesimc.8 q8, q82914; CHECK-CORTEX-FIX-NEXT: vst1.64 {d16, d17}, [r1]2915; CHECK-CORTEX-FIX-NEXT: bx lr2916 %4 = load i32, ptr %0, align 42917 %5 = bitcast ptr %2 to ptr2918 %6 = load <4 x i32>, ptr %5, align 82919 %7 = insertelement <4 x i32> %6, i32 %4, i64 02920 %8 = bitcast <4 x i32> %7 to <16 x i8>2921 %9 = bitcast <16 x i8> %1 to <4 x i32>2922 %10 = insertelement <4 x i32> %9, i32 %4, i64 02923 %11 = bitcast <4 x i32> %10 to <16 x i8>2924 %12 = call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %8, <16 x i8> %11)2925 %13 = call <16 x i8> @llvm.arm.neon.aesimc(<16 x i8> %12)2926 store <16 x i8> %13, ptr %2, align 82927 ret void2928}2929 2930define arm_aapcs_vfpcc void @aesd_set32_via_val(i32 %0, <16 x i8> %1, ptr %2) nounwind {2931; CHECK-FIX-LABEL: aesd_set32_via_val:2932; CHECK-FIX: @ %bb.0:2933; CHECK-FIX-NEXT: vorr q0, q0, q02934; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r1]2935; CHECK-FIX-NEXT: vmov.32 d0[0], r02936; CHECK-FIX-NEXT: vmov.32 d16[0], r02937; CHECK-FIX-NEXT: aesd.8 q8, q02938; CHECK-FIX-NEXT: aesimc.8 q8, q82939; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r1]2940; CHECK-FIX-NEXT: bx lr2941 %4 = bitcast ptr %2 to ptr2942 %5 = load <4 x i32>, ptr %4, align 82943 %6 = insertelement <4 x i32> %5, i32 %0, i64 02944 %7 = bitcast <4 x i32> %6 to <16 x i8>2945 %8 = bitcast <16 x i8> %1 to <4 x i32>2946 %9 = insertelement <4 x i32> %8, i32 %0, i64 02947 %10 = bitcast <4 x i32> %9 to <16 x i8>2948 %11 = call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %7, <16 x i8> %10)2949 %12 = call <16 x i8> @llvm.arm.neon.aesimc(<16 x i8> %11)2950 store <16 x i8> %12, ptr %2, align 82951 ret void2952}2953 2954define arm_aapcs_vfpcc void @aesd_set32_cond_via_ptr(i1 zeroext %0, ptr %1, <16 x i8> %2, ptr %3) nounwind {2955; CHECK-FIX-LABEL: aesd_set32_cond_via_ptr:2956; CHECK-FIX: @ %bb.0:2957; CHECK-FIX-NEXT: vorr q0, q0, q02958; CHECK-FIX-NEXT: cmp r0, #02959; CHECK-FIX-NEXT: beq .LBB70_22960; CHECK-FIX-NEXT: @ %bb.1:2961; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r2]2962; CHECK-FIX-NEXT: vld1.32 {d16[0]}, [r1:32]2963; CHECK-FIX-NEXT: cmp r0, #02964; CHECK-FIX-NEXT: bne .LBB70_32965; CHECK-FIX-NEXT: b .LBB70_42966; CHECK-FIX-NEXT: .LBB70_2:2967; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r2]2968; CHECK-FIX-NEXT: cmp r0, #02969; CHECK-FIX-NEXT: beq .LBB70_42970; CHECK-FIX-NEXT: .LBB70_3:2971; CHECK-FIX-NEXT: vld1.32 {d0[0]}, [r1:32]2972; CHECK-FIX-NEXT: .LBB70_4:2973; CHECK-FIX-NEXT: aesd.8 q8, q02974; CHECK-FIX-NEXT: aesimc.8 q8, q82975; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r2]2976; CHECK-FIX-NEXT: bx lr2977 br i1 %0, label %5, label %102978 29795:2980 %6 = load i32, ptr %1, align 42981 %7 = bitcast ptr %3 to ptr2982 %8 = load <4 x i32>, ptr %7, align 82983 %9 = insertelement <4 x i32> %8, i32 %6, i64 02984 br label %132985 298610:2987 %11 = bitcast ptr %3 to ptr2988 %12 = load <4 x i32>, ptr %11, align 82989 br label %132990 299113:2992 %14 = phi <4 x i32> [ %9, %5 ], [ %12, %10 ]2993 br i1 %0, label %15, label %192994 299515:2996 %16 = load i32, ptr %1, align 42997 %17 = bitcast <16 x i8> %2 to <4 x i32>2998 %18 = insertelement <4 x i32> %17, i32 %16, i64 02999 br label %213000 300119:3002 %20 = bitcast <16 x i8> %2 to <4 x i32>3003 br label %213004 300521:3006 %22 = phi <4 x i32> [ %18, %15 ], [ %20, %19 ]3007 %23 = bitcast <4 x i32> %14 to <16 x i8>3008 %24 = bitcast <4 x i32> %22 to <16 x i8>3009 %25 = call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %23, <16 x i8> %24)3010 %26 = call <16 x i8> @llvm.arm.neon.aesimc(<16 x i8> %25)3011 store <16 x i8> %26, ptr %3, align 83012 ret void3013}3014 3015define arm_aapcs_vfpcc void @aesd_set32_cond_via_val(i1 zeroext %0, i32 %1, <16 x i8> %2, ptr %3) nounwind {3016; CHECK-FIX-LABEL: aesd_set32_cond_via_val:3017; CHECK-FIX: @ %bb.0:3018; CHECK-FIX-NEXT: vorr q0, q0, q03019; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r2]3020; CHECK-FIX-NEXT: cmp r0, #03021; CHECK-FIX-NEXT: beq .LBB71_23022; CHECK-FIX-NEXT: @ %bb.1:3023; CHECK-FIX-NEXT: vmov.32 d16[0], r13024; CHECK-FIX-NEXT: .LBB71_2: @ %select.end3025; CHECK-FIX-NEXT: cmp r0, #03026; CHECK-FIX-NEXT: beq .LBB71_43027; CHECK-FIX-NEXT: @ %bb.3:3028; CHECK-FIX-NEXT: vmov.32 d0[0], r13029; CHECK-FIX-NEXT: .LBB71_4: @ %select.end23030; CHECK-FIX-NEXT: aesd.8 q8, q03031; CHECK-FIX-NEXT: aesimc.8 q8, q83032; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r2]3033; CHECK-FIX-NEXT: bx lr3034 %5 = bitcast ptr %3 to ptr3035 %6 = load <4 x i32>, ptr %5, align 83036 %7 = insertelement <4 x i32> %6, i32 %1, i64 03037 %8 = select i1 %0, <4 x i32> %7, <4 x i32> %63038 %9 = bitcast <16 x i8> %2 to <4 x i32>3039 %10 = insertelement <4 x i32> %9, i32 %1, i64 03040 %11 = select i1 %0, <4 x i32> %10, <4 x i32> %93041 %12 = bitcast <4 x i32> %8 to <16 x i8>3042 %13 = bitcast <4 x i32> %11 to <16 x i8>3043 %14 = call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %12, <16 x i8> %13)3044 %15 = call <16 x i8> @llvm.arm.neon.aesimc(<16 x i8> %14)3045 store <16 x i8> %15, ptr %3, align 83046 ret void3047}3048 3049define arm_aapcs_vfpcc void @aesd_set32_loop_via_ptr(i32 %0, ptr %1, <16 x i8> %2, ptr %3) nounwind {3050; CHECK-FIX-LABEL: aesd_set32_loop_via_ptr:3051; CHECK-FIX: @ %bb.0:3052; CHECK-FIX-NEXT: vorr q0, q0, q03053; CHECK-FIX-NEXT: ldr r1, [r1]3054; CHECK-FIX-NEXT: cmp r0, #03055; CHECK-FIX-NEXT: str r1, [r2]3056; CHECK-FIX-NEXT: bxeq lr3057; CHECK-FIX-NEXT: .LBB72_1:3058; CHECK-FIX-NEXT: vmov.32 d0[0], r13059; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r2]3060; CHECK-FIX-NEXT: .LBB72_2: @ =>This Inner Loop Header: Depth=13061; CHECK-FIX-NEXT: aesd.8 q8, q03062; CHECK-FIX-NEXT: subs r0, r0, #13063; CHECK-FIX-NEXT: aesimc.8 q8, q83064; CHECK-FIX-NEXT: bne .LBB72_23065; CHECK-FIX-NEXT: @ %bb.3:3066; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r2]3067; CHECK-FIX-NEXT: bx lr3068 %5 = load i32, ptr %1, align 43069 %6 = bitcast <16 x i8> %2 to <4 x i32>3070 %7 = insertelement <4 x i32> %6, i32 %5, i64 03071 %8 = bitcast <4 x i32> %7 to <16 x i8>3072 %9 = bitcast ptr %3 to ptr3073 store i32 %5, ptr %9, align 83074 %10 = icmp eq i32 %0, 03075 br i1 %10, label %14, label %113076 307711:3078 %12 = load <16 x i8>, ptr %3, align 83079 br label %153080 308113:3082 store <16 x i8> %19, ptr %3, align 83083 br label %143084 308514:3086 ret void3087 308815:3089 %16 = phi <16 x i8> [ %12, %11 ], [ %19, %15 ]3090 %17 = phi i32 [ 0, %11 ], [ %20, %15 ]3091 %18 = call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %16, <16 x i8> %8)3092 %19 = call <16 x i8> @llvm.arm.neon.aesimc(<16 x i8> %18)3093 %20 = add nuw i32 %17, 13094 %21 = icmp eq i32 %20, %03095 br i1 %21, label %13, label %153096}3097 3098define arm_aapcs_vfpcc void @aesd_set32_loop_via_val(i32 %0, i32 %1, <16 x i8> %2, ptr %3) nounwind {3099; CHECK-FIX-LABEL: aesd_set32_loop_via_val:3100; CHECK-FIX: @ %bb.0:3101; CHECK-FIX-NEXT: vorr q0, q0, q03102; CHECK-FIX-NEXT: cmp r0, #03103; CHECK-FIX-NEXT: bxeq lr3104; CHECK-FIX-NEXT: .LBB73_1:3105; CHECK-FIX-NEXT: vmov.32 d0[0], r13106; CHECK-FIX-NEXT: .LBB73_2: @ =>This Inner Loop Header: Depth=13107; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r2]3108; CHECK-FIX-NEXT: subs r0, r0, #13109; CHECK-FIX-NEXT: vmov.32 d16[0], r13110; CHECK-FIX-NEXT: aesd.8 q8, q03111; CHECK-FIX-NEXT: aesimc.8 q8, q83112; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r2]3113; CHECK-FIX-NEXT: bne .LBB73_23114; CHECK-FIX-NEXT: @ %bb.3:3115; CHECK-FIX-NEXT: bx lr3116 %5 = icmp eq i32 %0, 03117 br i1 %5, label %12, label %63118 31196:3120 %7 = bitcast <16 x i8> %2 to <4 x i32>3121 %8 = insertelement <4 x i32> %7, i32 %1, i64 03122 %9 = bitcast <4 x i32> %8 to <16 x i8>3123 %10 = bitcast ptr %3 to ptr3124 %11 = bitcast ptr %3 to ptr3125 br label %133126 312712:3128 ret void3129 313013:3131 %14 = phi i32 [ 0, %6 ], [ %20, %13 ]3132 %15 = load <4 x i32>, ptr %10, align 83133 %16 = insertelement <4 x i32> %15, i32 %1, i64 03134 %17 = bitcast <4 x i32> %16 to <16 x i8>3135 store i32 %1, ptr %11, align 83136 %18 = call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %17, <16 x i8> %9)3137 %19 = call <16 x i8> @llvm.arm.neon.aesimc(<16 x i8> %18)3138 store <16 x i8> %19, ptr %3, align 83139 %20 = add nuw i32 %14, 13140 %21 = icmp eq i32 %20, %03141 br i1 %21, label %12, label %133142}3143 3144define arm_aapcs_vfpcc void @aesd_set64_via_ptr(ptr %0, <16 x i8> %1, ptr %2) nounwind {3145; CHECK-FIX-NOSCHED-LABEL: aesd_set64_via_ptr:3146; CHECK-FIX-NOSCHED: @ %bb.0:3147; CHECK-FIX-NOSCHED-NEXT: vorr q0, q0, q03148; CHECK-FIX-NOSCHED-NEXT: vld1.64 {d16, d17}, [r1]3149; CHECK-FIX-NOSCHED-NEXT: vldr d0, [r0]3150; CHECK-FIX-NOSCHED-NEXT: vorr d16, d0, d03151; CHECK-FIX-NOSCHED-NEXT: aesd.8 q8, q03152; CHECK-FIX-NOSCHED-NEXT: aesimc.8 q8, q83153; CHECK-FIX-NOSCHED-NEXT: vst1.64 {d16, d17}, [r1]3154; CHECK-FIX-NOSCHED-NEXT: bx lr3155;3156; CHECK-CORTEX-FIX-LABEL: aesd_set64_via_ptr:3157; CHECK-CORTEX-FIX: @ %bb.0:3158; CHECK-CORTEX-FIX-NEXT: vorr q0, q0, q03159; CHECK-CORTEX-FIX-NEXT: vldr d0, [r0]3160; CHECK-CORTEX-FIX-NEXT: vld1.64 {d16, d17}, [r1]3161; CHECK-CORTEX-FIX-NEXT: vorr d16, d0, d03162; CHECK-CORTEX-FIX-NEXT: aesd.8 q8, q03163; CHECK-CORTEX-FIX-NEXT: aesimc.8 q8, q83164; CHECK-CORTEX-FIX-NEXT: vst1.64 {d16, d17}, [r1]3165; CHECK-CORTEX-FIX-NEXT: bx lr3166 %4 = load i64, ptr %0, align 83167 %5 = bitcast ptr %2 to ptr3168 %6 = load <2 x i64>, ptr %5, align 83169 %7 = insertelement <2 x i64> %6, i64 %4, i64 03170 %8 = bitcast <2 x i64> %7 to <16 x i8>3171 %9 = bitcast <16 x i8> %1 to <2 x i64>3172 %10 = insertelement <2 x i64> %9, i64 %4, i64 03173 %11 = bitcast <2 x i64> %10 to <16 x i8>3174 %12 = call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %8, <16 x i8> %11)3175 %13 = call <16 x i8> @llvm.arm.neon.aesimc(<16 x i8> %12)3176 store <16 x i8> %13, ptr %2, align 83177 ret void3178}3179 3180define arm_aapcs_vfpcc void @aesd_set64_via_val(i64 %0, <16 x i8> %1, ptr %2) nounwind {3181; CHECK-FIX-LABEL: aesd_set64_via_val:3182; CHECK-FIX: @ %bb.0:3183; CHECK-FIX-NEXT: vorr q0, q0, q03184; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r2]3185; CHECK-FIX-NEXT: vmov.32 d0[0], r03186; CHECK-FIX-NEXT: vmov.32 d16[0], r03187; CHECK-FIX-NEXT: vmov.32 d0[1], r13188; CHECK-FIX-NEXT: vmov.32 d16[1], r13189; CHECK-FIX-NEXT: aesd.8 q8, q03190; CHECK-FIX-NEXT: aesimc.8 q8, q83191; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r2]3192; CHECK-FIX-NEXT: bx lr3193 %4 = bitcast ptr %2 to ptr3194 %5 = load <2 x i64>, ptr %4, align 83195 %6 = insertelement <2 x i64> %5, i64 %0, i64 03196 %7 = bitcast <2 x i64> %6 to <16 x i8>3197 %8 = bitcast <16 x i8> %1 to <2 x i64>3198 %9 = insertelement <2 x i64> %8, i64 %0, i64 03199 %10 = bitcast <2 x i64> %9 to <16 x i8>3200 %11 = call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %7, <16 x i8> %10)3201 %12 = call <16 x i8> @llvm.arm.neon.aesimc(<16 x i8> %11)3202 store <16 x i8> %12, ptr %2, align 83203 ret void3204}3205 3206define arm_aapcs_vfpcc void @aesd_set64_cond_via_ptr(i1 zeroext %0, ptr %1, <16 x i8> %2, ptr %3) nounwind {3207; CHECK-FIX-NOSCHED-LABEL: aesd_set64_cond_via_ptr:3208; CHECK-FIX-NOSCHED: @ %bb.0:3209; CHECK-FIX-NOSCHED-NEXT: cmp r0, #03210; CHECK-FIX-NOSCHED-NEXT: beq .LBB76_23211; CHECK-FIX-NOSCHED-NEXT: @ %bb.1:3212; CHECK-FIX-NOSCHED-NEXT: vld1.64 {d16, d17}, [r2]3213; CHECK-FIX-NOSCHED-NEXT: vldr d16, [r1]3214; CHECK-FIX-NOSCHED-NEXT: b .LBB76_33215; CHECK-FIX-NOSCHED-NEXT: .LBB76_2:3216; CHECK-FIX-NOSCHED-NEXT: vld1.64 {d16, d17}, [r2]3217; CHECK-FIX-NOSCHED-NEXT: .LBB76_3:3218; CHECK-FIX-NOSCHED-NEXT: cmp r0, #03219; CHECK-FIX-NOSCHED-NEXT: vldrne d0, [r1]3220; CHECK-FIX-NOSCHED-NEXT: vorr q0, q0, q03221; CHECK-FIX-NOSCHED-NEXT: aesd.8 q8, q03222; CHECK-FIX-NOSCHED-NEXT: aesimc.8 q8, q83223; CHECK-FIX-NOSCHED-NEXT: vst1.64 {d16, d17}, [r2]3224; CHECK-FIX-NOSCHED-NEXT: bx lr3225;3226; CHECK-CORTEX-FIX-LABEL: aesd_set64_cond_via_ptr:3227; CHECK-CORTEX-FIX: @ %bb.0:3228; CHECK-CORTEX-FIX-NEXT: cmp r0, #03229; CHECK-CORTEX-FIX-NEXT: beq .LBB76_23230; CHECK-CORTEX-FIX-NEXT: @ %bb.1:3231; CHECK-CORTEX-FIX-NEXT: vldr d18, [r1]3232; CHECK-CORTEX-FIX-NEXT: vld1.64 {d16, d17}, [r2]3233; CHECK-CORTEX-FIX-NEXT: vorr d16, d18, d183234; CHECK-CORTEX-FIX-NEXT: b .LBB76_33235; CHECK-CORTEX-FIX-NEXT: .LBB76_2:3236; CHECK-CORTEX-FIX-NEXT: vld1.64 {d16, d17}, [r2]3237; CHECK-CORTEX-FIX-NEXT: .LBB76_3:3238; CHECK-CORTEX-FIX-NEXT: cmp r0, #03239; CHECK-CORTEX-FIX-NEXT: vldrne d0, [r1]3240; CHECK-CORTEX-FIX-NEXT: vorr q0, q0, q03241; CHECK-CORTEX-FIX-NEXT: aesd.8 q8, q03242; CHECK-CORTEX-FIX-NEXT: aesimc.8 q8, q83243; CHECK-CORTEX-FIX-NEXT: vst1.64 {d16, d17}, [r2]3244; CHECK-CORTEX-FIX-NEXT: bx lr3245 br i1 %0, label %5, label %103246 32475:3248 %6 = load i64, ptr %1, align 83249 %7 = bitcast ptr %3 to ptr3250 %8 = load <2 x i64>, ptr %7, align 83251 %9 = insertelement <2 x i64> %8, i64 %6, i64 03252 br label %133253 325410:3255 %11 = bitcast ptr %3 to ptr3256 %12 = load <2 x i64>, ptr %11, align 83257 br label %133258 325913:3260 %14 = phi <2 x i64> [ %9, %5 ], [ %12, %10 ]3261 br i1 %0, label %15, label %193262 326315:3264 %16 = load i64, ptr %1, align 83265 %17 = bitcast <16 x i8> %2 to <2 x i64>3266 %18 = insertelement <2 x i64> %17, i64 %16, i64 03267 br label %213268 326919:3270 %20 = bitcast <16 x i8> %2 to <2 x i64>3271 br label %213272 327321:3274 %22 = phi <2 x i64> [ %18, %15 ], [ %20, %19 ]3275 %23 = bitcast <2 x i64> %14 to <16 x i8>3276 %24 = bitcast <2 x i64> %22 to <16 x i8>3277 %25 = call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %23, <16 x i8> %24)3278 %26 = call <16 x i8> @llvm.arm.neon.aesimc(<16 x i8> %25)3279 store <16 x i8> %26, ptr %3, align 83280 ret void3281}3282 3283define arm_aapcs_vfpcc void @aesd_set64_cond_via_val(i1 zeroext %0, i64 %1, <16 x i8> %2, ptr %3) nounwind {3284; CHECK-FIX-LABEL: aesd_set64_cond_via_val:3285; CHECK-FIX: @ %bb.0:3286; CHECK-FIX-NEXT: vorr q0, q0, q03287; CHECK-FIX-NEXT: ldr r1, [sp]3288; CHECK-FIX-NEXT: cmp r0, #03289; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r1]3290; CHECK-FIX-NEXT: beq .LBB77_23291; CHECK-FIX-NEXT: @ %bb.1:3292; CHECK-FIX-NEXT: vmov.32 d16[0], r23293; CHECK-FIX-NEXT: vmov.32 d16[1], r33294; CHECK-FIX-NEXT: .LBB77_2: @ %select.end3295; CHECK-FIX-NEXT: cmp r0, #03296; CHECK-FIX-NEXT: beq .LBB77_43297; CHECK-FIX-NEXT: @ %bb.3:3298; CHECK-FIX-NEXT: vmov.32 d0[0], r23299; CHECK-FIX-NEXT: vmov.32 d0[1], r33300; CHECK-FIX-NEXT: .LBB77_4: @ %select.end23301; CHECK-FIX-NEXT: aesd.8 q8, q03302; CHECK-FIX-NEXT: aesimc.8 q8, q83303; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r1]3304; CHECK-FIX-NEXT: bx lr3305 %5 = bitcast ptr %3 to ptr3306 %6 = load <2 x i64>, ptr %5, align 83307 %7 = insertelement <2 x i64> %6, i64 %1, i64 03308 %8 = select i1 %0, <2 x i64> %7, <2 x i64> %63309 %9 = bitcast <16 x i8> %2 to <2 x i64>3310 %10 = insertelement <2 x i64> %9, i64 %1, i64 03311 %11 = select i1 %0, <2 x i64> %10, <2 x i64> %93312 %12 = bitcast <2 x i64> %8 to <16 x i8>3313 %13 = bitcast <2 x i64> %11 to <16 x i8>3314 %14 = call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %12, <16 x i8> %13)3315 %15 = call <16 x i8> @llvm.arm.neon.aesimc(<16 x i8> %14)3316 store <16 x i8> %15, ptr %3, align 83317 ret void3318}3319 3320define arm_aapcs_vfpcc void @aesd_set64_loop_via_ptr(i32 %0, ptr %1, <16 x i8> %2, ptr %3) nounwind {3321; CHECK-FIX-NOSCHED-LABEL: aesd_set64_loop_via_ptr:3322; CHECK-FIX-NOSCHED: @ %bb.0:3323; CHECK-FIX-NOSCHED-NEXT: vorr q0, q0, q03324; CHECK-FIX-NOSCHED-NEXT: .save {r4, r5, r11, lr}3325; CHECK-FIX-NOSCHED-NEXT: push {r4, r5, r11, lr}3326; CHECK-FIX-NOSCHED-NEXT: ldrd r4, r5, [r1]3327; CHECK-FIX-NOSCHED-NEXT: cmp r0, #03328; CHECK-FIX-NOSCHED-NEXT: strd r4, r5, [r2]3329; CHECK-FIX-NOSCHED-NEXT: beq .LBB78_43330; CHECK-FIX-NOSCHED-NEXT: @ %bb.1:3331; CHECK-FIX-NOSCHED-NEXT: vmov d0, r4, r53332; CHECK-FIX-NOSCHED-NEXT: vld1.64 {d16, d17}, [r2]3333; CHECK-FIX-NOSCHED-NEXT: .LBB78_2: @ =>This Inner Loop Header: Depth=13334; CHECK-FIX-NOSCHED-NEXT: aesd.8 q8, q03335; CHECK-FIX-NOSCHED-NEXT: subs r0, r0, #13336; CHECK-FIX-NOSCHED-NEXT: aesimc.8 q8, q83337; CHECK-FIX-NOSCHED-NEXT: bne .LBB78_23338; CHECK-FIX-NOSCHED-NEXT: @ %bb.3:3339; CHECK-FIX-NOSCHED-NEXT: vst1.64 {d16, d17}, [r2]3340; CHECK-FIX-NOSCHED-NEXT: .LBB78_4:3341; CHECK-FIX-NOSCHED-NEXT: pop {r4, r5, r11, pc}3342;3343; CHECK-CORTEX-FIX-LABEL: aesd_set64_loop_via_ptr:3344; CHECK-CORTEX-FIX: @ %bb.0:3345; CHECK-CORTEX-FIX-NEXT: vorr q0, q0, q03346; CHECK-CORTEX-FIX-NEXT: .save {r4, r5, r11, lr}3347; CHECK-CORTEX-FIX-NEXT: push {r4, r5, r11, lr}3348; CHECK-CORTEX-FIX-NEXT: ldrd r4, r5, [r1]3349; CHECK-CORTEX-FIX-NEXT: cmp r0, #03350; CHECK-CORTEX-FIX-NEXT: strd r4, r5, [r2]3351; CHECK-CORTEX-FIX-NEXT: popeq {r4, r5, r11, pc}3352; CHECK-CORTEX-FIX-NEXT: .LBB78_1:3353; CHECK-CORTEX-FIX-NEXT: vmov d0, r4, r53354; CHECK-CORTEX-FIX-NEXT: vld1.64 {d16, d17}, [r2]3355; CHECK-CORTEX-FIX-NEXT: .LBB78_2: @ =>This Inner Loop Header: Depth=13356; CHECK-CORTEX-FIX-NEXT: aesd.8 q8, q03357; CHECK-CORTEX-FIX-NEXT: subs r0, r0, #13358; CHECK-CORTEX-FIX-NEXT: aesimc.8 q8, q83359; CHECK-CORTEX-FIX-NEXT: bne .LBB78_23360; CHECK-CORTEX-FIX-NEXT: @ %bb.3:3361; CHECK-CORTEX-FIX-NEXT: vst1.64 {d16, d17}, [r2]3362; CHECK-CORTEX-FIX-NEXT: pop {r4, r5, r11, pc}3363 %5 = load i64, ptr %1, align 83364 %6 = bitcast <16 x i8> %2 to <2 x i64>3365 %7 = insertelement <2 x i64> %6, i64 %5, i64 03366 %8 = bitcast <2 x i64> %7 to <16 x i8>3367 %9 = bitcast ptr %3 to ptr3368 store i64 %5, ptr %9, align 83369 %10 = icmp eq i32 %0, 03370 br i1 %10, label %14, label %113371 337211:3373 %12 = load <16 x i8>, ptr %3, align 83374 br label %153375 337613:3377 store <16 x i8> %19, ptr %3, align 83378 br label %143379 338014:3381 ret void3382 338315:3384 %16 = phi <16 x i8> [ %12, %11 ], [ %19, %15 ]3385 %17 = phi i32 [ 0, %11 ], [ %20, %15 ]3386 %18 = call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %16, <16 x i8> %8)3387 %19 = call <16 x i8> @llvm.arm.neon.aesimc(<16 x i8> %18)3388 %20 = add nuw i32 %17, 13389 %21 = icmp eq i32 %20, %03390 br i1 %21, label %13, label %153391}3392 3393define arm_aapcs_vfpcc void @aesd_set64_loop_via_val(i32 %0, i64 %1, <16 x i8> %2, ptr %3) nounwind {3394; CHECK-FIX-LABEL: aesd_set64_loop_via_val:3395; CHECK-FIX: @ %bb.0:3396; CHECK-FIX-NEXT: vorr q0, q0, q03397; CHECK-FIX-NEXT: cmp r0, #03398; CHECK-FIX-NEXT: bxeq lr3399; CHECK-FIX-NEXT: .LBB79_1:3400; CHECK-FIX-NEXT: vmov.32 d0[0], r23401; CHECK-FIX-NEXT: ldr r1, [sp]3402; CHECK-FIX-NEXT: vmov.32 d0[1], r33403; CHECK-FIX-NEXT: .LBB79_2: @ =>This Inner Loop Header: Depth=13404; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r1]3405; CHECK-FIX-NEXT: subs r0, r0, #13406; CHECK-FIX-NEXT: vmov.32 d16[0], r23407; CHECK-FIX-NEXT: vmov.32 d16[1], r33408; CHECK-FIX-NEXT: aesd.8 q8, q03409; CHECK-FIX-NEXT: aesimc.8 q8, q83410; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r1]3411; CHECK-FIX-NEXT: bne .LBB79_23412; CHECK-FIX-NEXT: @ %bb.3:3413; CHECK-FIX-NEXT: bx lr3414 %5 = icmp eq i32 %0, 03415 br i1 %5, label %12, label %63416 34176:3418 %7 = bitcast <16 x i8> %2 to <2 x i64>3419 %8 = insertelement <2 x i64> %7, i64 %1, i64 03420 %9 = bitcast <2 x i64> %8 to <16 x i8>3421 %10 = bitcast ptr %3 to ptr3422 %11 = bitcast ptr %3 to ptr3423 br label %133424 342512:3426 ret void3427 342813:3429 %14 = phi i32 [ 0, %6 ], [ %20, %13 ]3430 %15 = load <2 x i64>, ptr %10, align 83431 %16 = insertelement <2 x i64> %15, i64 %1, i64 03432 %17 = bitcast <2 x i64> %16 to <16 x i8>3433 store i64 %1, ptr %11, align 83434 %18 = call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %17, <16 x i8> %9)3435 %19 = call <16 x i8> @llvm.arm.neon.aesimc(<16 x i8> %18)3436 store <16 x i8> %19, ptr %3, align 83437 %20 = add nuw i32 %14, 13438 %21 = icmp eq i32 %20, %03439 br i1 %21, label %12, label %133440}3441 3442define arm_aapcs_vfpcc void @aesd_setf16_via_ptr(ptr %0, <16 x i8> %1, ptr %2) nounwind {3443; CHECK-FIX-NOSCHED-LABEL: aesd_setf16_via_ptr:3444; CHECK-FIX-NOSCHED: @ %bb.0:3445; CHECK-FIX-NOSCHED-NEXT: vorr q0, q0, q03446; CHECK-FIX-NOSCHED-NEXT: ldrh r0, [r0]3447; CHECK-FIX-NOSCHED-NEXT: vld1.64 {d16, d17}, [r1]3448; CHECK-FIX-NOSCHED-NEXT: vmov.16 d0[0], r03449; CHECK-FIX-NOSCHED-NEXT: vmov.16 d16[0], r03450; CHECK-FIX-NOSCHED-NEXT: aesd.8 q8, q03451; CHECK-FIX-NOSCHED-NEXT: aesimc.8 q8, q83452; CHECK-FIX-NOSCHED-NEXT: vst1.64 {d16, d17}, [r1]3453; CHECK-FIX-NOSCHED-NEXT: bx lr3454;3455; CHECK-CORTEX-FIX-LABEL: aesd_setf16_via_ptr:3456; CHECK-CORTEX-FIX: @ %bb.0:3457; CHECK-CORTEX-FIX-NEXT: vorr q0, q0, q03458; CHECK-CORTEX-FIX-NEXT: vld1.64 {d16, d17}, [r1]3459; CHECK-CORTEX-FIX-NEXT: ldrh r0, [r0]3460; CHECK-CORTEX-FIX-NEXT: vmov.16 d0[0], r03461; CHECK-CORTEX-FIX-NEXT: vmov.16 d16[0], r03462; CHECK-CORTEX-FIX-NEXT: aesd.8 q8, q03463; CHECK-CORTEX-FIX-NEXT: aesimc.8 q8, q83464; CHECK-CORTEX-FIX-NEXT: vst1.64 {d16, d17}, [r1]3465; CHECK-CORTEX-FIX-NEXT: bx lr3466 %4 = bitcast ptr %0 to ptr3467 %5 = load i16, ptr %4, align 23468 %6 = bitcast ptr %2 to ptr3469 %7 = load <8 x i16>, ptr %6, align 83470 %8 = insertelement <8 x i16> %7, i16 %5, i64 03471 %9 = bitcast <8 x i16> %8 to <16 x i8>3472 %10 = bitcast <16 x i8> %1 to <8 x i16>3473 %11 = insertelement <8 x i16> %10, i16 %5, i64 03474 %12 = bitcast <8 x i16> %11 to <16 x i8>3475 %13 = call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %9, <16 x i8> %12)3476 %14 = call <16 x i8> @llvm.arm.neon.aesimc(<16 x i8> %13)3477 store <16 x i8> %14, ptr %2, align 83478 ret void3479}3480 3481define arm_aapcs_vfpcc void @aesd_setf16_via_val(half %0, <16 x i8> %1, ptr %2) nounwind {3482; CHECK-FIX-LABEL: aesd_setf16_via_val:3483; CHECK-FIX: @ %bb.0:3484; CHECK-FIX-NEXT: vorr q1, q1, q13485; CHECK-FIX-NEXT: vmov r1, s03486; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r0]3487; CHECK-FIX-NEXT: vmov.16 d2[0], r13488; CHECK-FIX-NEXT: vmov.16 d16[0], r13489; CHECK-FIX-NEXT: aesd.8 q8, q13490; CHECK-FIX-NEXT: aesimc.8 q8, q83491; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r0]3492; CHECK-FIX-NEXT: bx lr3493 %4 = bitcast ptr %2 to ptr3494 %5 = load <8 x i16>, ptr %4, align 83495 %6 = bitcast half %0 to i163496 %7 = insertelement <8 x i16> %5, i16 %6, i64 03497 %8 = bitcast <8 x i16> %7 to <16 x i8>3498 %9 = bitcast <16 x i8> %1 to <8 x i16>3499 %10 = insertelement <8 x i16> %9, i16 %6, i64 03500 %11 = bitcast <8 x i16> %10 to <16 x i8>3501 %12 = call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %8, <16 x i8> %11)3502 %13 = call <16 x i8> @llvm.arm.neon.aesimc(<16 x i8> %12)3503 store <16 x i8> %13, ptr %2, align 83504 ret void3505}3506 3507define arm_aapcs_vfpcc void @aesd_setf16_cond_via_ptr(i1 zeroext %0, ptr %1, <16 x i8> %2, ptr %3) nounwind {3508; CHECK-FIX-NOSCHED-LABEL: aesd_setf16_cond_via_ptr:3509; CHECK-FIX-NOSCHED: @ %bb.0:3510; CHECK-FIX-NOSCHED-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}3511; CHECK-FIX-NOSCHED-NEXT: push {r4, r5, r6, r7, r8, r9, r10, r11, lr}3512; CHECK-FIX-NOSCHED-NEXT: .pad #123513; CHECK-FIX-NOSCHED-NEXT: sub sp, sp, #123514; CHECK-FIX-NOSCHED-NEXT: cmp r0, #03515; CHECK-FIX-NOSCHED-NEXT: beq .LBB82_33516; CHECK-FIX-NOSCHED-NEXT: @ %bb.1:3517; CHECK-FIX-NOSCHED-NEXT: vld1.64 {d16, d17}, [r2]3518; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r3, d17[3]3519; CHECK-FIX-NOSCHED-NEXT: ldrh r7, [r1]3520; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r9, d17[0]3521; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r10, d16[3]3522; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r11, d16[2]3523; CHECK-FIX-NOSCHED-NEXT: str r3, [sp, #8] @ 4-byte Spill3524; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r3, d17[2]3525; CHECK-FIX-NOSCHED-NEXT: str r3, [sp, #4] @ 4-byte Spill3526; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r3, d17[1]3527; CHECK-FIX-NOSCHED-NEXT: str r3, [sp] @ 4-byte Spill3528; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r3, d16[1]3529; CHECK-FIX-NOSCHED-NEXT: cmp r0, #03530; CHECK-FIX-NOSCHED-NEXT: bne .LBB82_43531; CHECK-FIX-NOSCHED-NEXT: .LBB82_2:3532; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r0, d1[3]3533; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r4, d1[2]3534; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r5, d1[1]3535; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r6, d1[0]3536; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r12, d0[3]3537; CHECK-FIX-NOSCHED-NEXT: vmov.u16 lr, d0[2]3538; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r8, d0[1]3539; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r1, d0[0]3540; CHECK-FIX-NOSCHED-NEXT: b .LBB82_53541; CHECK-FIX-NOSCHED-NEXT: .LBB82_3:3542; CHECK-FIX-NOSCHED-NEXT: add r3, r2, #83543; CHECK-FIX-NOSCHED-NEXT: vld1.32 {d16[0]}, [r2:32]3544; CHECK-FIX-NOSCHED-NEXT: vld1.32 {d17[0]}, [r3:32]3545; CHECK-FIX-NOSCHED-NEXT: add r3, r2, #43546; CHECK-FIX-NOSCHED-NEXT: vld1.32 {d16[1]}, [r3:32]3547; CHECK-FIX-NOSCHED-NEXT: add r3, r2, #123548; CHECK-FIX-NOSCHED-NEXT: vld1.32 {d17[1]}, [r3:32]3549; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r3, d17[3]3550; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r9, d17[0]3551; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r10, d16[3]3552; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r11, d16[2]3553; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r7, d16[0]3554; CHECK-FIX-NOSCHED-NEXT: str r3, [sp, #8] @ 4-byte Spill3555; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r3, d17[2]3556; CHECK-FIX-NOSCHED-NEXT: str r3, [sp, #4] @ 4-byte Spill3557; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r3, d17[1]3558; CHECK-FIX-NOSCHED-NEXT: str r3, [sp] @ 4-byte Spill3559; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r3, d16[1]3560; CHECK-FIX-NOSCHED-NEXT: cmp r0, #03561; CHECK-FIX-NOSCHED-NEXT: beq .LBB82_23562; CHECK-FIX-NOSCHED-NEXT: .LBB82_4:3563; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r0, d1[3]3564; CHECK-FIX-NOSCHED-NEXT: ldrh r1, [r1]3565; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r4, d1[2]3566; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r5, d1[1]3567; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r6, d1[0]3568; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r12, d0[3]3569; CHECK-FIX-NOSCHED-NEXT: vmov.u16 lr, d0[2]3570; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r8, d0[1]3571; CHECK-FIX-NOSCHED-NEXT: .LBB82_5:3572; CHECK-FIX-NOSCHED-NEXT: pkhbt r1, r1, r8, lsl #163573; CHECK-FIX-NOSCHED-NEXT: pkhbt r3, r7, r3, lsl #163574; CHECK-FIX-NOSCHED-NEXT: pkhbt r0, r4, r0, lsl #163575; CHECK-FIX-NOSCHED-NEXT: vmov.32 d18[0], r13576; CHECK-FIX-NOSCHED-NEXT: pkhbt r1, lr, r12, lsl #163577; CHECK-FIX-NOSCHED-NEXT: vmov.32 d16[0], r33578; CHECK-FIX-NOSCHED-NEXT: vmov.32 d18[1], r13579; CHECK-FIX-NOSCHED-NEXT: pkhbt r1, r11, r10, lsl #163580; CHECK-FIX-NOSCHED-NEXT: vmov.32 d16[1], r13581; CHECK-FIX-NOSCHED-NEXT: pkhbt r1, r6, r5, lsl #163582; CHECK-FIX-NOSCHED-NEXT: vmov.32 d19[0], r13583; CHECK-FIX-NOSCHED-NEXT: ldr r1, [sp] @ 4-byte Reload3584; CHECK-FIX-NOSCHED-NEXT: pkhbt r1, r9, r1, lsl #163585; CHECK-FIX-NOSCHED-NEXT: vmov.32 d19[1], r03586; CHECK-FIX-NOSCHED-NEXT: ldr r0, [sp, #8] @ 4-byte Reload3587; CHECK-FIX-NOSCHED-NEXT: vmov.32 d17[0], r13588; CHECK-FIX-NOSCHED-NEXT: ldr r1, [sp, #4] @ 4-byte Reload3589; CHECK-FIX-NOSCHED-NEXT: pkhbt r0, r1, r0, lsl #163590; CHECK-FIX-NOSCHED-NEXT: vmov.32 d17[1], r03591; CHECK-FIX-NOSCHED-NEXT: aesd.8 q8, q93592; CHECK-FIX-NOSCHED-NEXT: aesimc.8 q8, q83593; CHECK-FIX-NOSCHED-NEXT: vst1.64 {d16, d17}, [r2]3594; CHECK-FIX-NOSCHED-NEXT: add sp, sp, #123595; CHECK-FIX-NOSCHED-NEXT: pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}3596;3597; CHECK-CORTEX-FIX-LABEL: aesd_setf16_cond_via_ptr:3598; CHECK-CORTEX-FIX: @ %bb.0:3599; CHECK-CORTEX-FIX-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}3600; CHECK-CORTEX-FIX-NEXT: push {r4, r5, r6, r7, r8, r9, r10, r11, lr}3601; CHECK-CORTEX-FIX-NEXT: .pad #243602; CHECK-CORTEX-FIX-NEXT: sub sp, sp, #243603; CHECK-CORTEX-FIX-NEXT: cmp r0, #03604; CHECK-CORTEX-FIX-NEXT: beq .LBB82_33605; CHECK-CORTEX-FIX-NEXT: @ %bb.1:3606; CHECK-CORTEX-FIX-NEXT: vld1.64 {d16, d17}, [r2]3607; CHECK-CORTEX-FIX-NEXT: vmov.u16 r3, d16[1]3608; CHECK-CORTEX-FIX-NEXT: vmov.u16 r6, d17[0]3609; CHECK-CORTEX-FIX-NEXT: vmov.u16 r7, d17[2]3610; CHECK-CORTEX-FIX-NEXT: vmov.u16 r4, d17[3]3611; CHECK-CORTEX-FIX-NEXT: str r3, [sp, #20] @ 4-byte Spill3612; CHECK-CORTEX-FIX-NEXT: vmov.u16 r3, d16[2]3613; CHECK-CORTEX-FIX-NEXT: str r3, [sp, #8] @ 4-byte Spill3614; CHECK-CORTEX-FIX-NEXT: vmov.u16 r3, d16[3]3615; CHECK-CORTEX-FIX-NEXT: str r3, [sp, #4] @ 4-byte Spill3616; CHECK-CORTEX-FIX-NEXT: vmov.u16 r3, d17[1]3617; CHECK-CORTEX-FIX-NEXT: str r3, [sp, #12] @ 4-byte Spill3618; CHECK-CORTEX-FIX-NEXT: ldrh r3, [r1]3619; CHECK-CORTEX-FIX-NEXT: str r3, [sp, #16] @ 4-byte Spill3620; CHECK-CORTEX-FIX-NEXT: mov r3, r63621; CHECK-CORTEX-FIX-NEXT: cmp r0, #03622; CHECK-CORTEX-FIX-NEXT: bne .LBB82_43623; CHECK-CORTEX-FIX-NEXT: .LBB82_2:3624; CHECK-CORTEX-FIX-NEXT: vmov.u16 r0, d0[0]3625; CHECK-CORTEX-FIX-NEXT: b .LBB82_53626; CHECK-CORTEX-FIX-NEXT: .LBB82_3:3627; CHECK-CORTEX-FIX-NEXT: vld1.32 {d16[0]}, [r2:32]3628; CHECK-CORTEX-FIX-NEXT: add r3, r2, #83629; CHECK-CORTEX-FIX-NEXT: add r7, r2, #43630; CHECK-CORTEX-FIX-NEXT: vld1.32 {d17[0]}, [r3:32]3631; CHECK-CORTEX-FIX-NEXT: add r3, r2, #123632; CHECK-CORTEX-FIX-NEXT: vld1.32 {d16[1]}, [r7:32]3633; CHECK-CORTEX-FIX-NEXT: vld1.32 {d17[1]}, [r3:32]3634; CHECK-CORTEX-FIX-NEXT: vmov.u16 r3, d16[0]3635; CHECK-CORTEX-FIX-NEXT: vmov.u16 r7, d17[1]3636; CHECK-CORTEX-FIX-NEXT: vmov.u16 r4, d17[3]3637; CHECK-CORTEX-FIX-NEXT: str r3, [sp, #16] @ 4-byte Spill3638; CHECK-CORTEX-FIX-NEXT: vmov.u16 r3, d16[1]3639; CHECK-CORTEX-FIX-NEXT: str r7, [sp, #12] @ 4-byte Spill3640; CHECK-CORTEX-FIX-NEXT: vmov.u16 r7, d17[2]3641; CHECK-CORTEX-FIX-NEXT: str r3, [sp, #20] @ 4-byte Spill3642; CHECK-CORTEX-FIX-NEXT: vmov.u16 r3, d16[2]3643; CHECK-CORTEX-FIX-NEXT: str r3, [sp, #8] @ 4-byte Spill3644; CHECK-CORTEX-FIX-NEXT: vmov.u16 r3, d16[3]3645; CHECK-CORTEX-FIX-NEXT: str r3, [sp, #4] @ 4-byte Spill3646; CHECK-CORTEX-FIX-NEXT: vmov.u16 r3, d17[0]3647; CHECK-CORTEX-FIX-NEXT: cmp r0, #03648; CHECK-CORTEX-FIX-NEXT: beq .LBB82_23649; CHECK-CORTEX-FIX-NEXT: .LBB82_4:3650; CHECK-CORTEX-FIX-NEXT: ldrh r0, [r1]3651; CHECK-CORTEX-FIX-NEXT: .LBB82_5:3652; CHECK-CORTEX-FIX-NEXT: str r0, [sp] @ 4-byte Spill3653; CHECK-CORTEX-FIX-NEXT: ldr r0, [sp, #8] @ 4-byte Reload3654; CHECK-CORTEX-FIX-NEXT: ldr r1, [sp, #4] @ 4-byte Reload3655; CHECK-CORTEX-FIX-NEXT: pkhbt r9, r7, r4, lsl #163656; CHECK-CORTEX-FIX-NEXT: ldr r4, [sp, #20] @ 4-byte Reload3657; CHECK-CORTEX-FIX-NEXT: vmov.u16 r10, d0[1]3658; CHECK-CORTEX-FIX-NEXT: vmov.u16 r6, d0[2]3659; CHECK-CORTEX-FIX-NEXT: vmov.u16 r12, d0[3]3660; CHECK-CORTEX-FIX-NEXT: vmov.u16 r11, d1[0]3661; CHECK-CORTEX-FIX-NEXT: vmov.u16 r5, d1[1]3662; CHECK-CORTEX-FIX-NEXT: vmov.u16 lr, d1[2]3663; CHECK-CORTEX-FIX-NEXT: vmov.u16 r8, d1[3]3664; CHECK-CORTEX-FIX-NEXT: pkhbt r7, r0, r1, lsl #163665; CHECK-CORTEX-FIX-NEXT: ldr r1, [sp, #12] @ 4-byte Reload3666; CHECK-CORTEX-FIX-NEXT: pkhbt r0, lr, r8, lsl #163667; CHECK-CORTEX-FIX-NEXT: pkhbt r6, r6, r12, lsl #163668; CHECK-CORTEX-FIX-NEXT: pkhbt r5, r11, r5, lsl #163669; CHECK-CORTEX-FIX-NEXT: pkhbt r1, r3, r1, lsl #163670; CHECK-CORTEX-FIX-NEXT: ldr r3, [sp, #16] @ 4-byte Reload3671; CHECK-CORTEX-FIX-NEXT: pkhbt r4, r3, r4, lsl #163672; CHECK-CORTEX-FIX-NEXT: ldr r3, [sp] @ 4-byte Reload3673; CHECK-CORTEX-FIX-NEXT: vmov.32 d18[0], r43674; CHECK-CORTEX-FIX-NEXT: vmov.32 d19[0], r13675; CHECK-CORTEX-FIX-NEXT: vmov.32 d18[1], r73676; CHECK-CORTEX-FIX-NEXT: vmov.32 d19[1], r93677; CHECK-CORTEX-FIX-NEXT: pkhbt r3, r3, r10, lsl #163678; CHECK-CORTEX-FIX-NEXT: vmov.32 d16[0], r33679; CHECK-CORTEX-FIX-NEXT: vmov.32 d17[0], r53680; CHECK-CORTEX-FIX-NEXT: vmov.32 d16[1], r63681; CHECK-CORTEX-FIX-NEXT: vmov.32 d17[1], r03682; CHECK-CORTEX-FIX-NEXT: aesd.8 q9, q83683; CHECK-CORTEX-FIX-NEXT: aesimc.8 q8, q93684; CHECK-CORTEX-FIX-NEXT: vst1.64 {d16, d17}, [r2]3685; CHECK-CORTEX-FIX-NEXT: add sp, sp, #243686; CHECK-CORTEX-FIX-NEXT: pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}3687 br i1 %0, label %5, label %123688 36895:3690 %6 = bitcast ptr %1 to ptr3691 %7 = load i16, ptr %6, align 23692 %8 = bitcast ptr %3 to ptr3693 %9 = load <8 x i16>, ptr %8, align 83694 %10 = insertelement <8 x i16> %9, i16 %7, i64 03695 %11 = bitcast <8 x i16> %10 to <8 x half>3696 br label %153697 369812:3699 %13 = bitcast ptr %3 to ptr3700 %14 = load <8 x half>, ptr %13, align 83701 br label %153702 370315:3704 %16 = phi <8 x half> [ %11, %5 ], [ %14, %12 ]3705 br i1 %0, label %17, label %233706 370717:3708 %18 = bitcast ptr %1 to ptr3709 %19 = load i16, ptr %18, align 23710 %20 = bitcast <16 x i8> %2 to <8 x i16>3711 %21 = insertelement <8 x i16> %20, i16 %19, i64 03712 %22 = bitcast <8 x i16> %21 to <8 x half>3713 br label %253714 371523:3716 %24 = bitcast <16 x i8> %2 to <8 x half>3717 br label %253718 371925:3720 %26 = phi <8 x half> [ %22, %17 ], [ %24, %23 ]3721 %27 = bitcast <8 x half> %16 to <16 x i8>3722 %28 = bitcast <8 x half> %26 to <16 x i8>3723 %29 = call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %27, <16 x i8> %28)3724 %30 = call <16 x i8> @llvm.arm.neon.aesimc(<16 x i8> %29)3725 store <16 x i8> %30, ptr %3, align 83726 ret void3727}3728 3729define arm_aapcs_vfpcc void @aesd_setf16_cond_via_val(i1 zeroext %0, half %1, <16 x i8> %2, ptr %3) nounwind {3730; CHECK-FIX-NOSCHED-LABEL: aesd_setf16_cond_via_val:3731; CHECK-FIX-NOSCHED: @ %bb.0:3732; CHECK-FIX-NOSCHED-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}3733; CHECK-FIX-NOSCHED-NEXT: push {r4, r5, r6, r7, r8, r9, r10, r11, lr}3734; CHECK-FIX-NOSCHED-NEXT: .pad #123735; CHECK-FIX-NOSCHED-NEXT: sub sp, sp, #123736; CHECK-FIX-NOSCHED-NEXT: cmp r0, #03737; CHECK-FIX-NOSCHED-NEXT: beq .LBB83_23738; CHECK-FIX-NOSCHED-NEXT: @ %bb.1:3739; CHECK-FIX-NOSCHED-NEXT: vld1.64 {d16, d17}, [r1]3740; CHECK-FIX-NOSCHED-NEXT: vmov.f32 s2, s03741; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r2, d17[1]3742; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r7, d17[3]3743; CHECK-FIX-NOSCHED-NEXT: vmov.u16 lr, d17[2]3744; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r11, d16[2]3745; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r8, d16[1]3746; CHECK-FIX-NOSCHED-NEXT: str r2, [sp, #8] @ 4-byte Spill3747; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r2, d17[0]3748; CHECK-FIX-NOSCHED-NEXT: str r2, [sp, #4] @ 4-byte Spill3749; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r2, d16[3]3750; CHECK-FIX-NOSCHED-NEXT: str r2, [sp] @ 4-byte Spill3751; CHECK-FIX-NOSCHED-NEXT: b .LBB83_33752; CHECK-FIX-NOSCHED-NEXT: .LBB83_2:3753; CHECK-FIX-NOSCHED-NEXT: add r2, r1, #83754; CHECK-FIX-NOSCHED-NEXT: vld1.32 {d16[0]}, [r1:32]3755; CHECK-FIX-NOSCHED-NEXT: vld1.32 {d17[0]}, [r2:32]3756; CHECK-FIX-NOSCHED-NEXT: add r2, r1, #43757; CHECK-FIX-NOSCHED-NEXT: vld1.32 {d16[1]}, [r2:32]3758; CHECK-FIX-NOSCHED-NEXT: add r2, r1, #123759; CHECK-FIX-NOSCHED-NEXT: vld1.32 {d17[1]}, [r2:32]3760; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r2, d17[1]3761; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r7, d17[3]3762; CHECK-FIX-NOSCHED-NEXT: vmov.u16 lr, d17[2]3763; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r11, d16[2]3764; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r8, d16[1]3765; CHECK-FIX-NOSCHED-NEXT: str r2, [sp, #8] @ 4-byte Spill3766; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r2, d17[0]3767; CHECK-FIX-NOSCHED-NEXT: str r2, [sp, #4] @ 4-byte Spill3768; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r2, d16[3]3769; CHECK-FIX-NOSCHED-NEXT: str r2, [sp] @ 4-byte Spill3770; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r2, d16[0]3771; CHECK-FIX-NOSCHED-NEXT: vmov s2, r23772; CHECK-FIX-NOSCHED-NEXT: .LBB83_3:3773; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r9, d3[3]3774; CHECK-FIX-NOSCHED-NEXT: cmp r0, #03775; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r10, d3[2]3776; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r2, d3[1]3777; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r3, d3[0]3778; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r4, d2[3]3779; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r5, d2[2]3780; CHECK-FIX-NOSCHED-NEXT: beq .LBB83_53781; CHECK-FIX-NOSCHED-NEXT: @ %bb.4:3782; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r12, d2[1]3783; CHECK-FIX-NOSCHED-NEXT: b .LBB83_63784; CHECK-FIX-NOSCHED-NEXT: .LBB83_5:3785; CHECK-FIX-NOSCHED-NEXT: mov r0, lr3786; CHECK-FIX-NOSCHED-NEXT: vmov.u16 lr, d2[0]3787; CHECK-FIX-NOSCHED-NEXT: vmov.u16 r12, d2[1]3788; CHECK-FIX-NOSCHED-NEXT: vmov s0, lr3789; CHECK-FIX-NOSCHED-NEXT: mov lr, r03790; CHECK-FIX-NOSCHED-NEXT: .LBB83_6:3791; CHECK-FIX-NOSCHED-NEXT: vmov r0, s03792; CHECK-FIX-NOSCHED-NEXT: vmov r6, s23793; CHECK-FIX-NOSCHED-NEXT: pkhbt r0, r0, r12, lsl #163794; CHECK-FIX-NOSCHED-NEXT: pkhbt r6, r6, r8, lsl #163795; CHECK-FIX-NOSCHED-NEXT: vmov.32 d18[0], r03796; CHECK-FIX-NOSCHED-NEXT: pkhbt r0, r5, r4, lsl #163797; CHECK-FIX-NOSCHED-NEXT: vmov.32 d16[0], r63798; CHECK-FIX-NOSCHED-NEXT: vmov.32 d18[1], r03799; CHECK-FIX-NOSCHED-NEXT: ldr r0, [sp] @ 4-byte Reload3800; CHECK-FIX-NOSCHED-NEXT: pkhbt r0, r11, r0, lsl #163801; CHECK-FIX-NOSCHED-NEXT: vmov.32 d16[1], r03802; CHECK-FIX-NOSCHED-NEXT: pkhbt r0, r3, r2, lsl #163803; CHECK-FIX-NOSCHED-NEXT: ldr r2, [sp, #4] @ 4-byte Reload3804; CHECK-FIX-NOSCHED-NEXT: vmov.32 d19[0], r03805; CHECK-FIX-NOSCHED-NEXT: ldr r0, [sp, #8] @ 4-byte Reload3806; CHECK-FIX-NOSCHED-NEXT: pkhbt r0, r2, r0, lsl #163807; CHECK-FIX-NOSCHED-NEXT: vmov.32 d17[0], r03808; CHECK-FIX-NOSCHED-NEXT: pkhbt r0, r10, r9, lsl #163809; CHECK-FIX-NOSCHED-NEXT: vmov.32 d19[1], r03810; CHECK-FIX-NOSCHED-NEXT: pkhbt r0, lr, r7, lsl #163811; CHECK-FIX-NOSCHED-NEXT: vmov.32 d17[1], r03812; CHECK-FIX-NOSCHED-NEXT: aesd.8 q8, q93813; CHECK-FIX-NOSCHED-NEXT: aesimc.8 q8, q83814; CHECK-FIX-NOSCHED-NEXT: vst1.64 {d16, d17}, [r1]3815; CHECK-FIX-NOSCHED-NEXT: add sp, sp, #123816; CHECK-FIX-NOSCHED-NEXT: pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}3817;3818; CHECK-CORTEX-FIX-LABEL: aesd_setf16_cond_via_val:3819; CHECK-CORTEX-FIX: @ %bb.0:3820; CHECK-CORTEX-FIX-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}3821; CHECK-CORTEX-FIX-NEXT: push {r4, r5, r6, r7, r8, r9, r10, r11, lr}3822; CHECK-CORTEX-FIX-NEXT: .pad #123823; CHECK-CORTEX-FIX-NEXT: sub sp, sp, #123824; CHECK-CORTEX-FIX-NEXT: cmp r0, #03825; CHECK-CORTEX-FIX-NEXT: beq .LBB83_33826; CHECK-CORTEX-FIX-NEXT: @ %bb.1:3827; CHECK-CORTEX-FIX-NEXT: vld1.64 {d16, d17}, [r1]3828; CHECK-CORTEX-FIX-NEXT: vmov.f32 s2, s03829; CHECK-CORTEX-FIX-NEXT: vmov.u16 r2, d16[1]3830; CHECK-CORTEX-FIX-NEXT: vmov.u16 r7, d16[2]3831; CHECK-CORTEX-FIX-NEXT: vmov.u16 r10, d16[3]3832; CHECK-CORTEX-FIX-NEXT: vmov.u16 r11, d17[2]3833; CHECK-CORTEX-FIX-NEXT: vmov.u16 r6, d17[3]3834; CHECK-CORTEX-FIX-NEXT: str r2, [sp, #8] @ 4-byte Spill3835; CHECK-CORTEX-FIX-NEXT: vmov.u16 r2, d17[0]3836; CHECK-CORTEX-FIX-NEXT: str r2, [sp, #4] @ 4-byte Spill3837; CHECK-CORTEX-FIX-NEXT: vmov.u16 r2, d17[1]3838; CHECK-CORTEX-FIX-NEXT: str r2, [sp] @ 4-byte Spill3839; CHECK-CORTEX-FIX-NEXT: cmp r0, #03840; CHECK-CORTEX-FIX-NEXT: bne .LBB83_43841; CHECK-CORTEX-FIX-NEXT: .LBB83_2:3842; CHECK-CORTEX-FIX-NEXT: vmov.u16 lr, d2[0]3843; CHECK-CORTEX-FIX-NEXT: vmov.u16 r8, d2[1]3844; CHECK-CORTEX-FIX-NEXT: vmov.u16 r3, d2[2]3845; CHECK-CORTEX-FIX-NEXT: vmov.u16 r4, d2[3]3846; CHECK-CORTEX-FIX-NEXT: vmov.u16 r9, d3[0]3847; CHECK-CORTEX-FIX-NEXT: vmov.u16 r2, d3[1]3848; CHECK-CORTEX-FIX-NEXT: vmov.u16 r5, d3[2]3849; CHECK-CORTEX-FIX-NEXT: vmov.u16 r12, d3[3]3850; CHECK-CORTEX-FIX-NEXT: vmov s0, lr3851; CHECK-CORTEX-FIX-NEXT: b .LBB83_53852; CHECK-CORTEX-FIX-NEXT: .LBB83_3:3853; CHECK-CORTEX-FIX-NEXT: vld1.32 {d16[0]}, [r1:32]3854; CHECK-CORTEX-FIX-NEXT: add r2, r1, #83855; CHECK-CORTEX-FIX-NEXT: add r3, r1, #43856; CHECK-CORTEX-FIX-NEXT: vld1.32 {d17[0]}, [r2:32]3857; CHECK-CORTEX-FIX-NEXT: add r2, r1, #123858; CHECK-CORTEX-FIX-NEXT: vld1.32 {d16[1]}, [r3:32]3859; CHECK-CORTEX-FIX-NEXT: vld1.32 {d17[1]}, [r2:32]3860; CHECK-CORTEX-FIX-NEXT: vmov.u16 r3, d16[1]3861; CHECK-CORTEX-FIX-NEXT: vmov.u16 r2, d16[0]3862; CHECK-CORTEX-FIX-NEXT: vmov.u16 r7, d16[2]3863; CHECK-CORTEX-FIX-NEXT: vmov.u16 r10, d16[3]3864; CHECK-CORTEX-FIX-NEXT: vmov.u16 r11, d17[2]3865; CHECK-CORTEX-FIX-NEXT: vmov.u16 r6, d17[3]3866; CHECK-CORTEX-FIX-NEXT: str r3, [sp, #8] @ 4-byte Spill3867; CHECK-CORTEX-FIX-NEXT: vmov.u16 r3, d17[0]3868; CHECK-CORTEX-FIX-NEXT: vmov s2, r23869; CHECK-CORTEX-FIX-NEXT: str r3, [sp, #4] @ 4-byte Spill3870; CHECK-CORTEX-FIX-NEXT: vmov.u16 r3, d17[1]3871; CHECK-CORTEX-FIX-NEXT: str r3, [sp] @ 4-byte Spill3872; CHECK-CORTEX-FIX-NEXT: cmp r0, #03873; CHECK-CORTEX-FIX-NEXT: beq .LBB83_23874; CHECK-CORTEX-FIX-NEXT: .LBB83_4:3875; CHECK-CORTEX-FIX-NEXT: vmov.u16 r8, d2[1]3876; CHECK-CORTEX-FIX-NEXT: vmov.u16 r3, d2[2]3877; CHECK-CORTEX-FIX-NEXT: vmov.u16 r4, d2[3]3878; CHECK-CORTEX-FIX-NEXT: vmov.u16 r9, d3[0]3879; CHECK-CORTEX-FIX-NEXT: vmov.u16 r2, d3[1]3880; CHECK-CORTEX-FIX-NEXT: vmov.u16 r5, d3[2]3881; CHECK-CORTEX-FIX-NEXT: vmov.u16 r12, d3[3]3882; CHECK-CORTEX-FIX-NEXT: .LBB83_5:3883; CHECK-CORTEX-FIX-NEXT: pkhbt lr, r11, r6, lsl #163884; CHECK-CORTEX-FIX-NEXT: pkhbt r0, r7, r10, lsl #163885; CHECK-CORTEX-FIX-NEXT: ldm sp, {r6, r7} @ 8-byte Folded Reload3886; CHECK-CORTEX-FIX-NEXT: pkhbt r3, r3, r4, lsl #163887; CHECK-CORTEX-FIX-NEXT: pkhbt r5, r5, r12, lsl #163888; CHECK-CORTEX-FIX-NEXT: pkhbt r2, r9, r2, lsl #163889; CHECK-CORTEX-FIX-NEXT: pkhbt r4, r7, r6, lsl #163890; CHECK-CORTEX-FIX-NEXT: vmov r7, s23891; CHECK-CORTEX-FIX-NEXT: ldr r6, [sp, #8] @ 4-byte Reload3892; CHECK-CORTEX-FIX-NEXT: pkhbt r7, r7, r6, lsl #163893; CHECK-CORTEX-FIX-NEXT: vmov r6, s03894; CHECK-CORTEX-FIX-NEXT: vmov.32 d18[0], r73895; CHECK-CORTEX-FIX-NEXT: vmov.32 d19[0], r43896; CHECK-CORTEX-FIX-NEXT: vmov.32 d18[1], r03897; CHECK-CORTEX-FIX-NEXT: vmov.32 d19[1], lr3898; CHECK-CORTEX-FIX-NEXT: pkhbt r6, r6, r8, lsl #163899; CHECK-CORTEX-FIX-NEXT: vmov.32 d16[0], r63900; CHECK-CORTEX-FIX-NEXT: vmov.32 d17[0], r23901; CHECK-CORTEX-FIX-NEXT: vmov.32 d16[1], r33902; CHECK-CORTEX-FIX-NEXT: vmov.32 d17[1], r53903; CHECK-CORTEX-FIX-NEXT: aesd.8 q9, q83904; CHECK-CORTEX-FIX-NEXT: aesimc.8 q8, q93905; CHECK-CORTEX-FIX-NEXT: vst1.64 {d16, d17}, [r1]3906; CHECK-CORTEX-FIX-NEXT: add sp, sp, #123907; CHECK-CORTEX-FIX-NEXT: pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}3908 br i1 %0, label %5, label %113909 39105:3911 %6 = bitcast ptr %3 to ptr3912 %7 = load <8 x i16>, ptr %6, align 83913 %8 = bitcast half %1 to i163914 %9 = insertelement <8 x i16> %7, i16 %8, i64 03915 %10 = bitcast <8 x i16> %9 to <8 x half>3916 br label %143917 391811:3919 %12 = bitcast ptr %3 to ptr3920 %13 = load <8 x half>, ptr %12, align 83921 br label %143922 392314:3924 %15 = phi <8 x half> [ %10, %5 ], [ %13, %11 ]3925 br i1 %0, label %16, label %213926 392716:3928 %17 = bitcast <16 x i8> %2 to <8 x i16>3929 %18 = bitcast half %1 to i163930 %19 = insertelement <8 x i16> %17, i16 %18, i64 03931 %20 = bitcast <8 x i16> %19 to <8 x half>3932 br label %233933 393421:3935 %22 = bitcast <16 x i8> %2 to <8 x half>3936 br label %233937 393823:3939 %24 = phi <8 x half> [ %20, %16 ], [ %22, %21 ]3940 %25 = bitcast <8 x half> %15 to <16 x i8>3941 %26 = bitcast <8 x half> %24 to <16 x i8>3942 %27 = call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %25, <16 x i8> %26)3943 %28 = call <16 x i8> @llvm.arm.neon.aesimc(<16 x i8> %27)3944 store <16 x i8> %28, ptr %3, align 83945 ret void3946}3947 3948define arm_aapcs_vfpcc void @aesd_setf16_loop_via_ptr(i32 %0, ptr %1, <16 x i8> %2, ptr %3) nounwind {3949; CHECK-FIX-LABEL: aesd_setf16_loop_via_ptr:3950; CHECK-FIX: @ %bb.0:3951; CHECK-FIX-NEXT: vorr q0, q0, q03952; CHECK-FIX-NEXT: ldrh r1, [r1]3953; CHECK-FIX-NEXT: cmp r0, #03954; CHECK-FIX-NEXT: strh r1, [r2]3955; CHECK-FIX-NEXT: bxeq lr3956; CHECK-FIX-NEXT: .LBB84_1:3957; CHECK-FIX-NEXT: vmov.16 d0[0], r13958; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r2]3959; CHECK-FIX-NEXT: .LBB84_2: @ =>This Inner Loop Header: Depth=13960; CHECK-FIX-NEXT: aesd.8 q8, q03961; CHECK-FIX-NEXT: subs r0, r0, #13962; CHECK-FIX-NEXT: aesimc.8 q8, q83963; CHECK-FIX-NEXT: bne .LBB84_23964; CHECK-FIX-NEXT: @ %bb.3:3965; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r2]3966; CHECK-FIX-NEXT: bx lr3967 %5 = bitcast ptr %1 to ptr3968 %6 = load i16, ptr %5, align 23969 %7 = bitcast <16 x i8> %2 to <8 x i16>3970 %8 = insertelement <8 x i16> %7, i16 %6, i64 03971 %9 = bitcast <8 x i16> %8 to <16 x i8>3972 %10 = bitcast ptr %3 to ptr3973 store i16 %6, ptr %10, align 83974 %11 = icmp eq i32 %0, 03975 br i1 %11, label %15, label %123976 397712:3978 %13 = load <16 x i8>, ptr %3, align 83979 br label %163980 398114:3982 store <16 x i8> %20, ptr %3, align 83983 br label %153984 398515:3986 ret void3987 398816:3989 %17 = phi <16 x i8> [ %13, %12 ], [ %20, %16 ]3990 %18 = phi i32 [ 0, %12 ], [ %21, %16 ]3991 %19 = call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %17, <16 x i8> %9)3992 %20 = call <16 x i8> @llvm.arm.neon.aesimc(<16 x i8> %19)3993 %21 = add nuw i32 %18, 13994 %22 = icmp eq i32 %21, %03995 br i1 %22, label %14, label %163996}3997 3998define arm_aapcs_vfpcc void @aesd_setf16_loop_via_val(i32 %0, half %1, <16 x i8> %2, ptr %3) nounwind {3999; CHECK-FIX-LABEL: aesd_setf16_loop_via_val:4000; CHECK-FIX: @ %bb.0:4001; CHECK-FIX-NEXT: vorr q1, q1, q14002; CHECK-FIX-NEXT: cmp r0, #04003; CHECK-FIX-NEXT: bxeq lr4004; CHECK-FIX-NEXT: .LBB85_1:4005; CHECK-FIX-NEXT: vmov r2, s04006; CHECK-FIX-NEXT: vmov.16 d2[0], r24007; CHECK-FIX-NEXT: .LBB85_2: @ =>This Inner Loop Header: Depth=14008; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r1]4009; CHECK-FIX-NEXT: subs r0, r0, #14010; CHECK-FIX-NEXT: vmov.16 d16[0], r24011; CHECK-FIX-NEXT: aesd.8 q8, q14012; CHECK-FIX-NEXT: aesimc.8 q8, q84013; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r1]4014; CHECK-FIX-NEXT: bne .LBB85_24015; CHECK-FIX-NEXT: @ %bb.3:4016; CHECK-FIX-NEXT: bx lr4017 %5 = icmp eq i32 %0, 04018 br i1 %5, label %13, label %64019 40206:4021 %7 = bitcast <16 x i8> %2 to <8 x i16>4022 %8 = bitcast half %1 to i164023 %9 = insertelement <8 x i16> %7, i16 %8, i64 04024 %10 = bitcast <8 x i16> %9 to <16 x i8>4025 %11 = bitcast ptr %3 to ptr4026 %12 = bitcast ptr %3 to ptr4027 br label %144028 402913:4030 ret void4031 403214:4033 %15 = phi i32 [ 0, %6 ], [ %21, %14 ]4034 %16 = load <8 x i16>, ptr %11, align 84035 %17 = insertelement <8 x i16> %16, i16 %8, i64 04036 %18 = bitcast <8 x i16> %17 to <16 x i8>4037 store half %1, ptr %12, align 84038 %19 = call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %18, <16 x i8> %10)4039 %20 = call <16 x i8> @llvm.arm.neon.aesimc(<16 x i8> %19)4040 store <16 x i8> %20, ptr %3, align 84041 %21 = add nuw i32 %15, 14042 %22 = icmp eq i32 %21, %04043 br i1 %22, label %13, label %144044}4045 4046define arm_aapcs_vfpcc void @aesd_setf32_via_ptr(ptr %0, <16 x i8> %1, ptr %2) nounwind {4047; CHECK-FIX-LABEL: aesd_setf32_via_ptr:4048; CHECK-FIX: @ %bb.0:4049; CHECK-FIX-NEXT: vldr s0, [r0]4050; CHECK-FIX-NEXT: vld1.64 {d2, d3}, [r1]4051; CHECK-FIX-NEXT: vmov.f32 s4, s04052; CHECK-FIX-NEXT: vorr q1, q1, q14053; CHECK-FIX-NEXT: vorr q0, q0, q04054; CHECK-FIX-NEXT: aesd.8 q1, q04055; CHECK-FIX-NEXT: aesimc.8 q8, q14056; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r1]4057; CHECK-FIX-NEXT: bx lr4058 %4 = load float, ptr %0, align 44059 %5 = bitcast ptr %2 to ptr4060 %6 = load <4 x float>, ptr %5, align 84061 %7 = insertelement <4 x float> %6, float %4, i64 04062 %8 = bitcast <4 x float> %7 to <16 x i8>4063 %9 = bitcast <16 x i8> %1 to <4 x float>4064 %10 = insertelement <4 x float> %9, float %4, i64 04065 %11 = bitcast <4 x float> %10 to <16 x i8>4066 %12 = call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %8, <16 x i8> %11)4067 %13 = call <16 x i8> @llvm.arm.neon.aesimc(<16 x i8> %12)4068 store <16 x i8> %13, ptr %2, align 84069 ret void4070}4071 4072define arm_aapcs_vfpcc void @aesd_setf32_via_val(float %0, <16 x i8> %1, ptr %2) nounwind {4073; CHECK-FIX-LABEL: aesd_setf32_via_val:4074; CHECK-FIX: @ %bb.0:4075; CHECK-FIX-NEXT: vmov.f32 s4, s04076; CHECK-FIX-NEXT: vld1.64 {d0, d1}, [r0]4077; CHECK-FIX-NEXT: vmov.f32 s0, s44078; CHECK-FIX-NEXT: vorr q0, q0, q04079; CHECK-FIX-NEXT: vorr q1, q1, q14080; CHECK-FIX-NEXT: aesd.8 q0, q14081; CHECK-FIX-NEXT: aesimc.8 q8, q04082; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r0]4083; CHECK-FIX-NEXT: bx lr4084 %4 = bitcast ptr %2 to ptr4085 %5 = load <4 x float>, ptr %4, align 84086 %6 = insertelement <4 x float> %5, float %0, i64 04087 %7 = bitcast <4 x float> %6 to <16 x i8>4088 %8 = bitcast <16 x i8> %1 to <4 x float>4089 %9 = insertelement <4 x float> %8, float %0, i64 04090 %10 = bitcast <4 x float> %9 to <16 x i8>4091 %11 = call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %7, <16 x i8> %10)4092 %12 = call <16 x i8> @llvm.arm.neon.aesimc(<16 x i8> %11)4093 store <16 x i8> %12, ptr %2, align 84094 ret void4095}4096 4097define arm_aapcs_vfpcc void @aesd_setf32_cond_via_ptr(i1 zeroext %0, ptr %1, <16 x i8> %2, ptr %3) nounwind {4098; CHECK-FIX-LABEL: aesd_setf32_cond_via_ptr:4099; CHECK-FIX: @ %bb.0:4100; CHECK-FIX-NEXT: vorr q0, q0, q04101; CHECK-FIX-NEXT: cmp r0, #04102; CHECK-FIX-NEXT: beq .LBB88_24103; CHECK-FIX-NEXT: @ %bb.1:4104; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r2]4105; CHECK-FIX-NEXT: vld1.32 {d16[0]}, [r1:32]4106; CHECK-FIX-NEXT: cmp r0, #04107; CHECK-FIX-NEXT: bne .LBB88_34108; CHECK-FIX-NEXT: b .LBB88_44109; CHECK-FIX-NEXT: .LBB88_2:4110; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r2]4111; CHECK-FIX-NEXT: cmp r0, #04112; CHECK-FIX-NEXT: beq .LBB88_44113; CHECK-FIX-NEXT: .LBB88_3:4114; CHECK-FIX-NEXT: vld1.32 {d0[0]}, [r1:32]4115; CHECK-FIX-NEXT: .LBB88_4:4116; CHECK-FIX-NEXT: aesd.8 q8, q04117; CHECK-FIX-NEXT: aesimc.8 q8, q84118; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r2]4119; CHECK-FIX-NEXT: bx lr4120 br i1 %0, label %5, label %104121 41225:4123 %6 = load float, ptr %1, align 44124 %7 = bitcast ptr %3 to ptr4125 %8 = load <4 x float>, ptr %7, align 84126 %9 = insertelement <4 x float> %8, float %6, i64 04127 br label %134128 412910:4130 %11 = bitcast ptr %3 to ptr4131 %12 = load <4 x float>, ptr %11, align 84132 br label %134133 413413:4135 %14 = phi <4 x float> [ %9, %5 ], [ %12, %10 ]4136 br i1 %0, label %15, label %194137 413815:4139 %16 = load float, ptr %1, align 44140 %17 = bitcast <16 x i8> %2 to <4 x float>4141 %18 = insertelement <4 x float> %17, float %16, i64 04142 br label %214143 414419:4145 %20 = bitcast <16 x i8> %2 to <4 x float>4146 br label %214147 414821:4149 %22 = phi <4 x float> [ %18, %15 ], [ %20, %19 ]4150 %23 = bitcast <4 x float> %14 to <16 x i8>4151 %24 = bitcast <4 x float> %22 to <16 x i8>4152 %25 = call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %23, <16 x i8> %24)4153 %26 = call <16 x i8> @llvm.arm.neon.aesimc(<16 x i8> %25)4154 store <16 x i8> %26, ptr %3, align 84155 ret void4156}4157 4158define arm_aapcs_vfpcc void @aesd_setf32_cond_via_val(i1 zeroext %0, float %1, <16 x i8> %2, ptr %3) nounwind {4159; CHECK-FIX-NOSCHED-LABEL: aesd_setf32_cond_via_val:4160; CHECK-FIX-NOSCHED: @ %bb.0:4161; CHECK-FIX-NOSCHED-NEXT: vld1.64 {d4, d5}, [r1]4162; CHECK-FIX-NOSCHED-NEXT: cmp r0, #04163; CHECK-FIX-NOSCHED-NEXT: vmovne.f32 s8, s04164; CHECK-FIX-NOSCHED-NEXT: vorr q2, q2, q24165; CHECK-FIX-NOSCHED-NEXT: cmp r0, #04166; CHECK-FIX-NOSCHED-NEXT: vmovne.f32 s4, s04167; CHECK-FIX-NOSCHED-NEXT: vorr q1, q1, q14168; CHECK-FIX-NOSCHED-NEXT: aesd.8 q2, q14169; CHECK-FIX-NOSCHED-NEXT: aesimc.8 q8, q24170; CHECK-FIX-NOSCHED-NEXT: vst1.64 {d16, d17}, [r1]4171; CHECK-FIX-NOSCHED-NEXT: bx lr4172;4173; CHECK-CORTEX-FIX-LABEL: aesd_setf32_cond_via_val:4174; CHECK-CORTEX-FIX: @ %bb.0:4175; CHECK-CORTEX-FIX-NEXT: cmp r0, #04176; CHECK-CORTEX-FIX-NEXT: vld1.64 {d4, d5}, [r1]4177; CHECK-CORTEX-FIX-NEXT: vmovne.f32 s8, s04178; CHECK-CORTEX-FIX-NEXT: vorr q2, q2, q24179; CHECK-CORTEX-FIX-NEXT: cmp r0, #04180; CHECK-CORTEX-FIX-NEXT: vmovne.f32 s4, s04181; CHECK-CORTEX-FIX-NEXT: vorr q1, q1, q14182; CHECK-CORTEX-FIX-NEXT: aesd.8 q2, q14183; CHECK-CORTEX-FIX-NEXT: aesimc.8 q8, q24184; CHECK-CORTEX-FIX-NEXT: vst1.64 {d16, d17}, [r1]4185; CHECK-CORTEX-FIX-NEXT: bx lr4186 %5 = bitcast ptr %3 to ptr4187 %6 = load <4 x float>, ptr %5, align 84188 %7 = insertelement <4 x float> %6, float %1, i64 04189 %8 = select i1 %0, <4 x float> %7, <4 x float> %64190 %9 = bitcast <16 x i8> %2 to <4 x float>4191 %10 = insertelement <4 x float> %9, float %1, i64 04192 %11 = select i1 %0, <4 x float> %10, <4 x float> %94193 %12 = bitcast <4 x float> %8 to <16 x i8>4194 %13 = bitcast <4 x float> %11 to <16 x i8>4195 %14 = call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %12, <16 x i8> %13)4196 %15 = call <16 x i8> @llvm.arm.neon.aesimc(<16 x i8> %14)4197 store <16 x i8> %15, ptr %3, align 84198 ret void4199}4200 4201define arm_aapcs_vfpcc void @aesd_setf32_loop_via_ptr(i32 %0, ptr %1, <16 x i8> %2, ptr %3) nounwind {4202; CHECK-FIX-NOSCHED-LABEL: aesd_setf32_loop_via_ptr:4203; CHECK-FIX-NOSCHED: @ %bb.0:4204; CHECK-FIX-NOSCHED-NEXT: vldr s4, [r1]4205; CHECK-FIX-NOSCHED-NEXT: cmp r0, #04206; CHECK-FIX-NOSCHED-NEXT: vstr s4, [r2]4207; CHECK-FIX-NOSCHED-NEXT: bxeq lr4208; CHECK-FIX-NOSCHED-NEXT: .LBB90_1:4209; CHECK-FIX-NOSCHED-NEXT: vmov.f32 s0, s44210; CHECK-FIX-NOSCHED-NEXT: vld1.64 {d16, d17}, [r2]4211; CHECK-FIX-NOSCHED-NEXT: .LBB90_2: @ =>This Inner Loop Header: Depth=14212; CHECK-FIX-NOSCHED-NEXT: vorr q0, q0, q04213; CHECK-FIX-NOSCHED-NEXT: aesd.8 q8, q04214; CHECK-FIX-NOSCHED-NEXT: subs r0, r0, #14215; CHECK-FIX-NOSCHED-NEXT: aesimc.8 q8, q84216; CHECK-FIX-NOSCHED-NEXT: bne .LBB90_24217; CHECK-FIX-NOSCHED-NEXT: @ %bb.3:4218; CHECK-FIX-NOSCHED-NEXT: vst1.64 {d16, d17}, [r2]4219; CHECK-FIX-NOSCHED-NEXT: bx lr4220;4221; CHECK-CORTEX-FIX-LABEL: aesd_setf32_loop_via_ptr:4222; CHECK-CORTEX-FIX: @ %bb.0:4223; CHECK-CORTEX-FIX-NEXT: vldr s4, [r1]4224; CHECK-CORTEX-FIX-NEXT: cmp r0, #04225; CHECK-CORTEX-FIX-NEXT: vstr s4, [r2]4226; CHECK-CORTEX-FIX-NEXT: bxeq lr4227; CHECK-CORTEX-FIX-NEXT: .LBB90_1:4228; CHECK-CORTEX-FIX-NEXT: vld1.64 {d16, d17}, [r2]4229; CHECK-CORTEX-FIX-NEXT: vmov.f32 s0, s44230; CHECK-CORTEX-FIX-NEXT: .LBB90_2: @ =>This Inner Loop Header: Depth=14231; CHECK-CORTEX-FIX-NEXT: vorr q0, q0, q04232; CHECK-CORTEX-FIX-NEXT: aesd.8 q8, q04233; CHECK-CORTEX-FIX-NEXT: subs r0, r0, #14234; CHECK-CORTEX-FIX-NEXT: aesimc.8 q8, q84235; CHECK-CORTEX-FIX-NEXT: bne .LBB90_24236; CHECK-CORTEX-FIX-NEXT: @ %bb.3:4237; CHECK-CORTEX-FIX-NEXT: vst1.64 {d16, d17}, [r2]4238; CHECK-CORTEX-FIX-NEXT: bx lr4239 %5 = load float, ptr %1, align 44240 %6 = bitcast <16 x i8> %2 to <4 x float>4241 %7 = insertelement <4 x float> %6, float %5, i64 04242 %8 = bitcast <4 x float> %7 to <16 x i8>4243 %9 = bitcast ptr %3 to ptr4244 store float %5, ptr %9, align 84245 %10 = icmp eq i32 %0, 04246 br i1 %10, label %14, label %114247 424811:4249 %12 = load <16 x i8>, ptr %3, align 84250 br label %154251 425213:4253 store <16 x i8> %19, ptr %3, align 84254 br label %144255 425614:4257 ret void4258 425915:4260 %16 = phi <16 x i8> [ %12, %11 ], [ %19, %15 ]4261 %17 = phi i32 [ 0, %11 ], [ %20, %15 ]4262 %18 = call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %16, <16 x i8> %8)4263 %19 = call <16 x i8> @llvm.arm.neon.aesimc(<16 x i8> %18)4264 %20 = add nuw i32 %17, 14265 %21 = icmp eq i32 %20, %04266 br i1 %21, label %13, label %154267}4268 4269define arm_aapcs_vfpcc void @aesd_setf32_loop_via_val(i32 %0, float %1, <16 x i8> %2, ptr %3) nounwind {4270; CHECK-FIX-NOSCHED-LABEL: aesd_setf32_loop_via_val:4271; CHECK-FIX-NOSCHED: @ %bb.0:4272; CHECK-FIX-NOSCHED-NEXT: cmp r0, #04273; CHECK-FIX-NOSCHED-NEXT: bxeq lr4274; CHECK-FIX-NOSCHED-NEXT: .LBB91_1:4275; CHECK-FIX-NOSCHED-NEXT: vmov.f32 s4, s04276; CHECK-FIX-NOSCHED-NEXT: .LBB91_2: @ =>This Inner Loop Header: Depth=14277; CHECK-FIX-NOSCHED-NEXT: vld1.64 {d4, d5}, [r1]4278; CHECK-FIX-NOSCHED-NEXT: subs r0, r0, #14279; CHECK-FIX-NOSCHED-NEXT: vmov.f32 s8, s04280; CHECK-FIX-NOSCHED-NEXT: vorr q2, q2, q24281; CHECK-FIX-NOSCHED-NEXT: vorr q1, q1, q14282; CHECK-FIX-NOSCHED-NEXT: aesd.8 q2, q14283; CHECK-FIX-NOSCHED-NEXT: aesimc.8 q8, q24284; CHECK-FIX-NOSCHED-NEXT: vst1.64 {d16, d17}, [r1]4285; CHECK-FIX-NOSCHED-NEXT: bne .LBB91_24286; CHECK-FIX-NOSCHED-NEXT: @ %bb.3:4287; CHECK-FIX-NOSCHED-NEXT: bx lr4288;4289; CHECK-CORTEX-FIX-LABEL: aesd_setf32_loop_via_val:4290; CHECK-CORTEX-FIX: @ %bb.0:4291; CHECK-CORTEX-FIX-NEXT: cmp r0, #04292; CHECK-CORTEX-FIX-NEXT: bxeq lr4293; CHECK-CORTEX-FIX-NEXT: .LBB91_1:4294; CHECK-CORTEX-FIX-NEXT: vmov.f32 s4, s04295; CHECK-CORTEX-FIX-NEXT: .LBB91_2: @ =>This Inner Loop Header: Depth=14296; CHECK-CORTEX-FIX-NEXT: vld1.64 {d4, d5}, [r1]4297; CHECK-CORTEX-FIX-NEXT: vmov.f32 s8, s04298; CHECK-CORTEX-FIX-NEXT: vorr q2, q2, q24299; CHECK-CORTEX-FIX-NEXT: subs r0, r0, #14300; CHECK-CORTEX-FIX-NEXT: vorr q1, q1, q14301; CHECK-CORTEX-FIX-NEXT: aesd.8 q2, q14302; CHECK-CORTEX-FIX-NEXT: aesimc.8 q8, q24303; CHECK-CORTEX-FIX-NEXT: vst1.64 {d16, d17}, [r1]4304; CHECK-CORTEX-FIX-NEXT: bne .LBB91_24305; CHECK-CORTEX-FIX-NEXT: @ %bb.3:4306; CHECK-CORTEX-FIX-NEXT: bx lr4307 %5 = icmp eq i32 %0, 04308 br i1 %5, label %12, label %64309 43106:4311 %7 = bitcast <16 x i8> %2 to <4 x float>4312 %8 = insertelement <4 x float> %7, float %1, i64 04313 %9 = bitcast <4 x float> %8 to <16 x i8>4314 %10 = bitcast ptr %3 to ptr4315 %11 = bitcast ptr %3 to ptr4316 br label %134317 431812:4319 ret void4320 432113:4322 %14 = phi i32 [ 0, %6 ], [ %20, %13 ]4323 %15 = load <4 x float>, ptr %10, align 84324 %16 = insertelement <4 x float> %15, float %1, i64 04325 %17 = bitcast <4 x float> %16 to <16 x i8>4326 store float %1, ptr %11, align 84327 %18 = call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %17, <16 x i8> %9)4328 %19 = call <16 x i8> @llvm.arm.neon.aesimc(<16 x i8> %18)4329 store <16 x i8> %19, ptr %3, align 84330 %20 = add nuw i32 %14, 14331 %21 = icmp eq i32 %20, %04332 br i1 %21, label %12, label %134333}4334 4335define arm_aapcs_vfpcc void @aese_constantisland(ptr %0) nounwind {4336; CHECK-FIX-NOSCHED-LABEL: aese_constantisland:4337; CHECK-FIX-NOSCHED: @ %bb.0:4338; CHECK-FIX-NOSCHED-NEXT: vld1.64 {d16, d17}, [r0]4339; CHECK-FIX-NOSCHED-NEXT: adr r1, .LCPI92_04340; CHECK-FIX-NOSCHED-NEXT: vld1.64 {d18, d19}, [r1:128]4341; CHECK-FIX-NOSCHED-NEXT: aese.8 q9, q84342; CHECK-FIX-NOSCHED-NEXT: aesmc.8 q8, q94343; CHECK-FIX-NOSCHED-NEXT: vst1.64 {d16, d17}, [r0]4344; CHECK-FIX-NOSCHED-NEXT: bx lr4345; CHECK-FIX-NOSCHED-NEXT: .p2align 44346; CHECK-FIX-NOSCHED-NEXT: @ %bb.1:4347; CHECK-FIX-NOSCHED-NEXT: .LCPI92_0:4348; CHECK-FIX-NOSCHED-NEXT: .byte 0 @ 0x04349; CHECK-FIX-NOSCHED-NEXT: .byte 1 @ 0x14350; CHECK-FIX-NOSCHED-NEXT: .byte 2 @ 0x24351; CHECK-FIX-NOSCHED-NEXT: .byte 3 @ 0x34352; CHECK-FIX-NOSCHED-NEXT: .byte 4 @ 0x44353; CHECK-FIX-NOSCHED-NEXT: .byte 5 @ 0x54354; CHECK-FIX-NOSCHED-NEXT: .byte 6 @ 0x64355; CHECK-FIX-NOSCHED-NEXT: .byte 7 @ 0x74356; CHECK-FIX-NOSCHED-NEXT: .byte 8 @ 0x84357; CHECK-FIX-NOSCHED-NEXT: .byte 9 @ 0x94358; CHECK-FIX-NOSCHED-NEXT: .byte 10 @ 0xa4359; CHECK-FIX-NOSCHED-NEXT: .byte 11 @ 0xb4360; CHECK-FIX-NOSCHED-NEXT: .byte 12 @ 0xc4361; CHECK-FIX-NOSCHED-NEXT: .byte 13 @ 0xd4362; CHECK-FIX-NOSCHED-NEXT: .byte 14 @ 0xe4363; CHECK-FIX-NOSCHED-NEXT: .byte 15 @ 0xf4364;4365; CHECK-CORTEX-FIX-LABEL: aese_constantisland:4366; CHECK-CORTEX-FIX: @ %bb.0:4367; CHECK-CORTEX-FIX-NEXT: adr r1, .LCPI92_04368; CHECK-CORTEX-FIX-NEXT: vld1.64 {d16, d17}, [r0]4369; CHECK-CORTEX-FIX-NEXT: vld1.64 {d18, d19}, [r1:128]4370; CHECK-CORTEX-FIX-NEXT: aese.8 q9, q84371; CHECK-CORTEX-FIX-NEXT: aesmc.8 q8, q94372; CHECK-CORTEX-FIX-NEXT: vst1.64 {d16, d17}, [r0]4373; CHECK-CORTEX-FIX-NEXT: bx lr4374; CHECK-CORTEX-FIX-NEXT: .p2align 44375; CHECK-CORTEX-FIX-NEXT: @ %bb.1:4376; CHECK-CORTEX-FIX-NEXT: .LCPI92_0:4377; CHECK-CORTEX-FIX-NEXT: .byte 0 @ 0x04378; CHECK-CORTEX-FIX-NEXT: .byte 1 @ 0x14379; CHECK-CORTEX-FIX-NEXT: .byte 2 @ 0x24380; CHECK-CORTEX-FIX-NEXT: .byte 3 @ 0x34381; CHECK-CORTEX-FIX-NEXT: .byte 4 @ 0x44382; CHECK-CORTEX-FIX-NEXT: .byte 5 @ 0x54383; CHECK-CORTEX-FIX-NEXT: .byte 6 @ 0x64384; CHECK-CORTEX-FIX-NEXT: .byte 7 @ 0x74385; CHECK-CORTEX-FIX-NEXT: .byte 8 @ 0x84386; CHECK-CORTEX-FIX-NEXT: .byte 9 @ 0x94387; CHECK-CORTEX-FIX-NEXT: .byte 10 @ 0xa4388; CHECK-CORTEX-FIX-NEXT: .byte 11 @ 0xb4389; CHECK-CORTEX-FIX-NEXT: .byte 12 @ 0xc4390; CHECK-CORTEX-FIX-NEXT: .byte 13 @ 0xd4391; CHECK-CORTEX-FIX-NEXT: .byte 14 @ 0xe4392; CHECK-CORTEX-FIX-NEXT: .byte 15 @ 0xf4393 %2 = load <16 x i8>, ptr %0, align 84394 %3 = call <16 x i8> @llvm.arm.neon.aese(<16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, <16 x i8> %2)4395 %4 = call <16 x i8> @llvm.arm.neon.aesmc(<16 x i8> %3)4396 store <16 x i8> %4, ptr %0, align 84397 ret void4398}4399