brintos

brintos / llvm-project-archived public Read only

0
0
Text · 98.5 KiB · bed8e58 Raw
2118 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+sse2,-bmi2,+slow-shld | FileCheck %s --check-prefixes=ALL,X64,X64-NO-BMI2,X64-NO-SHLD,X64-NO-BMI2-NO-SHLD3; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+sse2,-bmi2,-slow-shld | FileCheck %s --check-prefixes=ALL,X64,X64-NO-BMI2,X64-SHLD,X64-NO-BMI2-HAVE-SHLD4; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+sse2,+bmi2,+slow-shld | FileCheck %s --check-prefixes=ALL,X64,X64-BMI2,X64-NO-SHLD,X64-HAVE-BMI2-NO-SHLD5; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+sse2,+bmi2,-slow-shld | FileCheck %s --check-prefixes=ALL,X64,X64-BMI2,X64-SHLD,X64-HAVE-BMI2-HAVE-SHLD6; RUN: llc < %s -mtriple=i686-unknown-linux-gnu -mattr=+sse2,-bmi2,+slow-shld | FileCheck %s --check-prefixes=ALL,X86,X86-NO-BMI2,X86-NO-SHLD,X86-NO-BMI2-NO-SHLD7; RUN: llc < %s -mtriple=i686-unknown-linux-gnu -mattr=+sse2,-bmi2,-slow-shld | FileCheck %s --check-prefixes=ALL,X86,X86-NO-BMI2,X86-SHLD,X86-NO-BMI2-HAVE-SHLD8; RUN: llc < %s -mtriple=i686-unknown-linux-gnu -mattr=+sse2,+bmi2,+slow-shld | FileCheck %s --check-prefixes=ALL,X86,X86-BMI2,X86-NO-SHLD,X86-HAVE-BMI2-NO-SHLD9; RUN: llc < %s -mtriple=i686-unknown-linux-gnu -mattr=+sse2,+bmi2,-slow-shld | FileCheck %s --check-prefixes=ALL,X86,X86-BMI2,X86-SHLD,X86-HAVE-BMI2-HAVE-SHLD10 11; no @load_1byte_chunk_of_1byte_alloca12 13define void @load_1byte_chunk_of_2byte_alloca(ptr %src, i64 %byteOff, ptr %dst) nounwind {14; X64-NO-BMI2-LABEL: load_1byte_chunk_of_2byte_alloca:15; X64-NO-BMI2:       # %bb.0:16; X64-NO-BMI2-NEXT:    movzwl (%rdi), %eax17; X64-NO-BMI2-NEXT:    leal (,%rsi,8), %ecx18; X64-NO-BMI2-NEXT:    # kill: def $cl killed $cl killed $ecx19; X64-NO-BMI2-NEXT:    shrl %cl, %eax20; X64-NO-BMI2-NEXT:    movb %al, (%rdx)21; X64-NO-BMI2-NEXT:    retq22;23; X64-BMI2-LABEL: load_1byte_chunk_of_2byte_alloca:24; X64-BMI2:       # %bb.0:25; X64-BMI2-NEXT:    movzwl (%rdi), %eax26; X64-BMI2-NEXT:    shll $3, %esi27; X64-BMI2-NEXT:    shrxl %esi, %eax, %eax28; X64-BMI2-NEXT:    movb %al, (%rdx)29; X64-BMI2-NEXT:    retq30;31; X86-NO-BMI2-LABEL: load_1byte_chunk_of_2byte_alloca:32; X86-NO-BMI2:       # %bb.0:33; X86-NO-BMI2-NEXT:    movl {{[0-9]+}}(%esp), %edx34; X86-NO-BMI2-NEXT:    movl {{[0-9]+}}(%esp), %ecx35; X86-NO-BMI2-NEXT:    movl {{[0-9]+}}(%esp), %eax36; X86-NO-BMI2-NEXT:    movzwl (%eax), %eax37; X86-NO-BMI2-NEXT:    shll $3, %ecx38; X86-NO-BMI2-NEXT:    # kill: def $cl killed $cl killed $ecx39; X86-NO-BMI2-NEXT:    shrl %cl, %eax40; X86-NO-BMI2-NEXT:    movb %al, (%edx)41; X86-NO-BMI2-NEXT:    retl42;43; X86-BMI2-LABEL: load_1byte_chunk_of_2byte_alloca:44; X86-BMI2:       # %bb.0:45; X86-BMI2-NEXT:    movl {{[0-9]+}}(%esp), %eax46; X86-BMI2-NEXT:    movl {{[0-9]+}}(%esp), %ecx47; X86-BMI2-NEXT:    movl {{[0-9]+}}(%esp), %edx48; X86-BMI2-NEXT:    movzwl (%edx), %edx49; X86-BMI2-NEXT:    shll $3, %ecx50; X86-BMI2-NEXT:    shrxl %ecx, %edx, %ecx51; X86-BMI2-NEXT:    movb %cl, (%eax)52; X86-BMI2-NEXT:    retl53  %init = load <2 x i8>, ptr %src, align 154  %intermediate.val.frozen = freeze <2 x i8> %init55  %intermediate.val.frozen.bits = bitcast <2 x i8> %intermediate.val.frozen to i1656  %byteOff.tr = trunc i64 %byteOff to i1657  %byteOff.numbits.wide = shl i16 %byteOff.tr, 358  %intermediate.val.frozen.bits.positioned = lshr i16 %intermediate.val.frozen.bits, %byteOff.numbits.wide59  %intermediate.val.frozen.bits.positioned.extracted = trunc i16 %intermediate.val.frozen.bits.positioned to i860  %1 = insertelement <1 x i8> poison, i8 %intermediate.val.frozen.bits.positioned.extracted, i64 061  store <1 x i8> %1, ptr %dst, align 162  ret void63}64 65; no @load_2byte_chunk_of_2byte_alloca66 67define void @load_1byte_chunk_of_4byte_alloca(ptr %src, i64 %byteOff, ptr %dst) nounwind {68; X64-NO-BMI2-LABEL: load_1byte_chunk_of_4byte_alloca:69; X64-NO-BMI2:       # %bb.0:70; X64-NO-BMI2-NEXT:    movl (%rdi), %eax71; X64-NO-BMI2-NEXT:    leal (,%rsi,8), %ecx72; X64-NO-BMI2-NEXT:    # kill: def $cl killed $cl killed $ecx73; X64-NO-BMI2-NEXT:    shrl %cl, %eax74; X64-NO-BMI2-NEXT:    movb %al, (%rdx)75; X64-NO-BMI2-NEXT:    retq76;77; X64-BMI2-LABEL: load_1byte_chunk_of_4byte_alloca:78; X64-BMI2:       # %bb.0:79; X64-BMI2-NEXT:    shll $3, %esi80; X64-BMI2-NEXT:    shrxl %esi, (%rdi), %eax81; X64-BMI2-NEXT:    movb %al, (%rdx)82; X64-BMI2-NEXT:    retq83;84; X86-NO-BMI2-LABEL: load_1byte_chunk_of_4byte_alloca:85; X86-NO-BMI2:       # %bb.0:86; X86-NO-BMI2-NEXT:    movl {{[0-9]+}}(%esp), %edx87; X86-NO-BMI2-NEXT:    movl {{[0-9]+}}(%esp), %ecx88; X86-NO-BMI2-NEXT:    movl {{[0-9]+}}(%esp), %eax89; X86-NO-BMI2-NEXT:    movl (%eax), %eax90; X86-NO-BMI2-NEXT:    shll $3, %ecx91; X86-NO-BMI2-NEXT:    # kill: def $cl killed $cl killed $ecx92; X86-NO-BMI2-NEXT:    shrl %cl, %eax93; X86-NO-BMI2-NEXT:    movb %al, (%edx)94; X86-NO-BMI2-NEXT:    retl95;96; X86-BMI2-LABEL: load_1byte_chunk_of_4byte_alloca:97; X86-BMI2:       # %bb.0:98; X86-BMI2-NEXT:    movl {{[0-9]+}}(%esp), %eax99; X86-BMI2-NEXT:    movl {{[0-9]+}}(%esp), %ecx100; X86-BMI2-NEXT:    movl {{[0-9]+}}(%esp), %edx101; X86-BMI2-NEXT:    shll $3, %ecx102; X86-BMI2-NEXT:    shrxl %ecx, (%edx), %ecx103; X86-BMI2-NEXT:    movb %cl, (%eax)104; X86-BMI2-NEXT:    retl105  %init = load <4 x i8>, ptr %src, align 1106  %intermediate.val.frozen = freeze <4 x i8> %init107  %intermediate.val.frozen.bits = bitcast <4 x i8> %intermediate.val.frozen to i32108  %byteOff.tr = trunc i64 %byteOff to i32109  %byteOff.numbits.wide = shl i32 %byteOff.tr, 3110  %intermediate.val.frozen.bits.positioned = lshr i32 %intermediate.val.frozen.bits, %byteOff.numbits.wide111  %intermediate.val.frozen.bits.positioned.extracted = trunc i32 %intermediate.val.frozen.bits.positioned to i8112  %1 = insertelement <1 x i8> poison, i8 %intermediate.val.frozen.bits.positioned.extracted, i64 0113  store <1 x i8> %1, ptr %dst, align 1114  ret void115}116 117define void @load_2byte_chunk_of_4byte_alloca(ptr %src, i64 %byteOff, ptr %dst) nounwind {118; X64-NO-BMI2-LABEL: load_2byte_chunk_of_4byte_alloca:119; X64-NO-BMI2:       # %bb.0:120; X64-NO-BMI2-NEXT:    movl (%rdi), %eax121; X64-NO-BMI2-NEXT:    leal (,%rsi,8), %ecx122; X64-NO-BMI2-NEXT:    # kill: def $cl killed $cl killed $ecx123; X64-NO-BMI2-NEXT:    shrl %cl, %eax124; X64-NO-BMI2-NEXT:    movw %ax, (%rdx)125; X64-NO-BMI2-NEXT:    retq126;127; X64-BMI2-LABEL: load_2byte_chunk_of_4byte_alloca:128; X64-BMI2:       # %bb.0:129; X64-BMI2-NEXT:    shll $3, %esi130; X64-BMI2-NEXT:    shrxl %esi, (%rdi), %eax131; X64-BMI2-NEXT:    movw %ax, (%rdx)132; X64-BMI2-NEXT:    retq133;134; X86-NO-BMI2-LABEL: load_2byte_chunk_of_4byte_alloca:135; X86-NO-BMI2:       # %bb.0:136; X86-NO-BMI2-NEXT:    movl {{[0-9]+}}(%esp), %eax137; X86-NO-BMI2-NEXT:    movl {{[0-9]+}}(%esp), %ecx138; X86-NO-BMI2-NEXT:    movl {{[0-9]+}}(%esp), %edx139; X86-NO-BMI2-NEXT:    movl (%edx), %edx140; X86-NO-BMI2-NEXT:    shll $3, %ecx141; X86-NO-BMI2-NEXT:    # kill: def $cl killed $cl killed $ecx142; X86-NO-BMI2-NEXT:    shrl %cl, %edx143; X86-NO-BMI2-NEXT:    movw %dx, (%eax)144; X86-NO-BMI2-NEXT:    retl145;146; X86-BMI2-LABEL: load_2byte_chunk_of_4byte_alloca:147; X86-BMI2:       # %bb.0:148; X86-BMI2-NEXT:    movl {{[0-9]+}}(%esp), %eax149; X86-BMI2-NEXT:    movl {{[0-9]+}}(%esp), %ecx150; X86-BMI2-NEXT:    movl {{[0-9]+}}(%esp), %edx151; X86-BMI2-NEXT:    shll $3, %ecx152; X86-BMI2-NEXT:    shrxl %ecx, (%edx), %ecx153; X86-BMI2-NEXT:    movw %cx, (%eax)154; X86-BMI2-NEXT:    retl155  %init = load <4 x i8>, ptr %src, align 1156  %intermediate.val.frozen = freeze <4 x i8> %init157  %intermediate.val.frozen.bits = bitcast <4 x i8> %intermediate.val.frozen to i32158  %byteOff.tr = trunc i64 %byteOff to i32159  %byteOff.numbits.wide = shl i32 %byteOff.tr, 3160  %intermediate.val.frozen.bits.positioned = lshr i32 %intermediate.val.frozen.bits, %byteOff.numbits.wide161  %intermediate.val.frozen.bits.positioned.extracted = trunc i32 %intermediate.val.frozen.bits.positioned to i16162  store i16 %intermediate.val.frozen.bits.positioned.extracted, ptr %dst, align 2163  ret void164}165 166; no @load_4byte_chunk_of_4byte_alloca167 168define void @load_1byte_chunk_of_8byte_alloca(ptr %src, i64 %byteOff, ptr %dst) nounwind {169; X64-NO-BMI2-LABEL: load_1byte_chunk_of_8byte_alloca:170; X64-NO-BMI2:       # %bb.0:171; X64-NO-BMI2-NEXT:    leal (,%rsi,8), %ecx172; X64-NO-BMI2-NEXT:    movq (%rdi), %rax173; X64-NO-BMI2-NEXT:    # kill: def $cl killed $cl killed $ecx174; X64-NO-BMI2-NEXT:    shrq %cl, %rax175; X64-NO-BMI2-NEXT:    movb %al, (%rdx)176; X64-NO-BMI2-NEXT:    retq177;178; X64-BMI2-LABEL: load_1byte_chunk_of_8byte_alloca:179; X64-BMI2:       # %bb.0:180; X64-BMI2-NEXT:    shll $3, %esi181; X64-BMI2-NEXT:    shrxq %rsi, (%rdi), %rax182; X64-BMI2-NEXT:    movb %al, (%rdx)183; X64-BMI2-NEXT:    retq184;185; X86-NO-BMI2-NO-SHLD-LABEL: load_1byte_chunk_of_8byte_alloca:186; X86-NO-BMI2-NO-SHLD:       # %bb.0:187; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %ebx188; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %edi189; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %esi190; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx191; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx192; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax193; X86-NO-BMI2-NO-SHLD-NEXT:    shll $3, %eax194; X86-NO-BMI2-NO-SHLD-NEXT:    movl (%ecx), %esi195; X86-NO-BMI2-NO-SHLD-NEXT:    movl 4(%ecx), %ebx196; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx197; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %esi198; X86-NO-BMI2-NO-SHLD-NEXT:    leal (%ebx,%ebx), %edi199; X86-NO-BMI2-NO-SHLD-NEXT:    notb %cl200; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %edi201; X86-NO-BMI2-NO-SHLD-NEXT:    orl %esi, %edi202; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx203; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %ebx204; X86-NO-BMI2-NO-SHLD-NEXT:    testb $32, %al205; X86-NO-BMI2-NO-SHLD-NEXT:    cmovel %edi, %ebx206; X86-NO-BMI2-NO-SHLD-NEXT:    movb %bl, (%edx)207; X86-NO-BMI2-NO-SHLD-NEXT:    popl %esi208; X86-NO-BMI2-NO-SHLD-NEXT:    popl %edi209; X86-NO-BMI2-NO-SHLD-NEXT:    popl %ebx210; X86-NO-BMI2-NO-SHLD-NEXT:    retl211;212; X86-NO-BMI2-HAVE-SHLD-LABEL: load_1byte_chunk_of_8byte_alloca:213; X86-NO-BMI2-HAVE-SHLD:       # %bb.0:214; X86-NO-BMI2-HAVE-SHLD-NEXT:    pushl %esi215; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax216; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx217; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx218; X86-NO-BMI2-HAVE-SHLD-NEXT:    shll $3, %ecx219; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl (%edx), %esi220; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 4(%edx), %edx221; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %edx, %esi222; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl %cl, %edx223; X86-NO-BMI2-HAVE-SHLD-NEXT:    testb $32, %cl224; X86-NO-BMI2-HAVE-SHLD-NEXT:    cmovel %esi, %edx225; X86-NO-BMI2-HAVE-SHLD-NEXT:    movb %dl, (%eax)226; X86-NO-BMI2-HAVE-SHLD-NEXT:    popl %esi227; X86-NO-BMI2-HAVE-SHLD-NEXT:    retl228;229; X86-HAVE-BMI2-NO-SHLD-LABEL: load_1byte_chunk_of_8byte_alloca:230; X86-HAVE-BMI2-NO-SHLD:       # %bb.0:231; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %ebx232; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %edi233; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %esi234; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax235; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx236; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx237; X86-HAVE-BMI2-NO-SHLD-NEXT:    shll $3, %ecx238; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 4(%edx), %esi239; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %ecx, (%edx), %edx240; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, %ebx241; X86-HAVE-BMI2-NO-SHLD-NEXT:    notb %bl242; X86-HAVE-BMI2-NO-SHLD-NEXT:    leal (%esi,%esi), %edi243; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %ebx, %edi, %edi244; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %edx, %edi245; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %ecx, %esi, %edx246; X86-HAVE-BMI2-NO-SHLD-NEXT:    testb $32, %cl247; X86-HAVE-BMI2-NO-SHLD-NEXT:    cmovel %edi, %edx248; X86-HAVE-BMI2-NO-SHLD-NEXT:    movb %dl, (%eax)249; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %esi250; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %edi251; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %ebx252; X86-HAVE-BMI2-NO-SHLD-NEXT:    retl253;254; X86-HAVE-BMI2-HAVE-SHLD-LABEL: load_1byte_chunk_of_8byte_alloca:255; X86-HAVE-BMI2-HAVE-SHLD:       # %bb.0:256; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    pushl %esi257; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax258; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx259; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx260; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shll $3, %ecx261; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl (%edx), %esi262; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 4(%edx), %edx263; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %edx, %esi264; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxl %ecx, %edx, %edx265; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    testb $32, %cl266; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    cmovel %esi, %edx267; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movb %dl, (%eax)268; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    popl %esi269; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    retl270  %init = load <8 x i8>, ptr %src, align 1271  %byteOff.numbits = shl nuw nsw i64 %byteOff, 3272  %intermediate.val.frozen = freeze <8 x i8> %init273  %intermediate.val.frozen.bits = bitcast <8 x i8> %intermediate.val.frozen to i64274  %intermediate.val.frozen.bits.positioned = lshr i64 %intermediate.val.frozen.bits, %byteOff.numbits275  %intermediate.val.frozen.bits.positioned.extracted = trunc i64 %intermediate.val.frozen.bits.positioned to i8276  %1 = insertelement <1 x i8> poison, i8 %intermediate.val.frozen.bits.positioned.extracted, i64 0277  store <1 x i8> %1, ptr %dst, align 1278  ret void279}280 281define void @load_2byte_chunk_of_8byte_alloca(ptr %src, i64 %byteOff, ptr %dst) nounwind {282; X64-NO-BMI2-LABEL: load_2byte_chunk_of_8byte_alloca:283; X64-NO-BMI2:       # %bb.0:284; X64-NO-BMI2-NEXT:    leal (,%rsi,8), %ecx285; X64-NO-BMI2-NEXT:    movq (%rdi), %rax286; X64-NO-BMI2-NEXT:    # kill: def $cl killed $cl killed $ecx287; X64-NO-BMI2-NEXT:    shrq %cl, %rax288; X64-NO-BMI2-NEXT:    movw %ax, (%rdx)289; X64-NO-BMI2-NEXT:    retq290;291; X64-BMI2-LABEL: load_2byte_chunk_of_8byte_alloca:292; X64-BMI2:       # %bb.0:293; X64-BMI2-NEXT:    shll $3, %esi294; X64-BMI2-NEXT:    shrxq %rsi, (%rdi), %rax295; X64-BMI2-NEXT:    movw %ax, (%rdx)296; X64-BMI2-NEXT:    retq297;298; X86-NO-BMI2-NO-SHLD-LABEL: load_2byte_chunk_of_8byte_alloca:299; X86-NO-BMI2-NO-SHLD:       # %bb.0:300; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %ebx301; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %edi302; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %esi303; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx304; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx305; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax306; X86-NO-BMI2-NO-SHLD-NEXT:    shll $3, %eax307; X86-NO-BMI2-NO-SHLD-NEXT:    movl (%ecx), %edi308; X86-NO-BMI2-NO-SHLD-NEXT:    movl 4(%ecx), %esi309; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx310; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %edi311; X86-NO-BMI2-NO-SHLD-NEXT:    leal (%esi,%esi), %ebx312; X86-NO-BMI2-NO-SHLD-NEXT:    notb %cl313; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %ebx314; X86-NO-BMI2-NO-SHLD-NEXT:    orl %edi, %ebx315; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx316; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %esi317; X86-NO-BMI2-NO-SHLD-NEXT:    testb $32, %al318; X86-NO-BMI2-NO-SHLD-NEXT:    cmovel %ebx, %esi319; X86-NO-BMI2-NO-SHLD-NEXT:    movw %si, (%edx)320; X86-NO-BMI2-NO-SHLD-NEXT:    popl %esi321; X86-NO-BMI2-NO-SHLD-NEXT:    popl %edi322; X86-NO-BMI2-NO-SHLD-NEXT:    popl %ebx323; X86-NO-BMI2-NO-SHLD-NEXT:    retl324;325; X86-NO-BMI2-HAVE-SHLD-LABEL: load_2byte_chunk_of_8byte_alloca:326; X86-NO-BMI2-HAVE-SHLD:       # %bb.0:327; X86-NO-BMI2-HAVE-SHLD-NEXT:    pushl %esi328; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax329; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx330; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx331; X86-NO-BMI2-HAVE-SHLD-NEXT:    shll $3, %ecx332; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl (%edx), %esi333; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 4(%edx), %edx334; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %edx, %esi335; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl %cl, %edx336; X86-NO-BMI2-HAVE-SHLD-NEXT:    testb $32, %cl337; X86-NO-BMI2-HAVE-SHLD-NEXT:    cmovel %esi, %edx338; X86-NO-BMI2-HAVE-SHLD-NEXT:    movw %dx, (%eax)339; X86-NO-BMI2-HAVE-SHLD-NEXT:    popl %esi340; X86-NO-BMI2-HAVE-SHLD-NEXT:    retl341;342; X86-HAVE-BMI2-NO-SHLD-LABEL: load_2byte_chunk_of_8byte_alloca:343; X86-HAVE-BMI2-NO-SHLD:       # %bb.0:344; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %ebx345; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %edi346; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %esi347; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax348; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx349; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx350; X86-HAVE-BMI2-NO-SHLD-NEXT:    shll $3, %ecx351; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 4(%edx), %esi352; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %ecx, (%edx), %edx353; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, %ebx354; X86-HAVE-BMI2-NO-SHLD-NEXT:    notb %bl355; X86-HAVE-BMI2-NO-SHLD-NEXT:    leal (%esi,%esi), %edi356; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %ebx, %edi, %edi357; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %edx, %edi358; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %ecx, %esi, %edx359; X86-HAVE-BMI2-NO-SHLD-NEXT:    testb $32, %cl360; X86-HAVE-BMI2-NO-SHLD-NEXT:    cmovel %edi, %edx361; X86-HAVE-BMI2-NO-SHLD-NEXT:    movw %dx, (%eax)362; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %esi363; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %edi364; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %ebx365; X86-HAVE-BMI2-NO-SHLD-NEXT:    retl366;367; X86-HAVE-BMI2-HAVE-SHLD-LABEL: load_2byte_chunk_of_8byte_alloca:368; X86-HAVE-BMI2-HAVE-SHLD:       # %bb.0:369; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    pushl %esi370; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax371; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx372; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx373; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shll $3, %ecx374; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl (%edx), %esi375; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 4(%edx), %edx376; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %edx, %esi377; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxl %ecx, %edx, %edx378; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    testb $32, %cl379; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    cmovel %esi, %edx380; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movw %dx, (%eax)381; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    popl %esi382; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    retl383  %init = load <8 x i8>, ptr %src, align 1384  %byteOff.numbits = shl nuw nsw i64 %byteOff, 3385  %intermediate.val.frozen = freeze <8 x i8> %init386  %intermediate.val.frozen.bits = bitcast <8 x i8> %intermediate.val.frozen to i64387  %intermediate.val.frozen.bits.positioned = lshr i64 %intermediate.val.frozen.bits, %byteOff.numbits388  %intermediate.val.frozen.bits.positioned.extracted = trunc i64 %intermediate.val.frozen.bits.positioned to i16389  store i16 %intermediate.val.frozen.bits.positioned.extracted, ptr %dst, align 2390  ret void391}392 393define void @load_4byte_chunk_of_8byte_alloca(ptr %src, i64 %byteOff, ptr %dst) nounwind {394; X64-NO-BMI2-LABEL: load_4byte_chunk_of_8byte_alloca:395; X64-NO-BMI2:       # %bb.0:396; X64-NO-BMI2-NEXT:    leal (,%rsi,8), %ecx397; X64-NO-BMI2-NEXT:    movq (%rdi), %rax398; X64-NO-BMI2-NEXT:    # kill: def $cl killed $cl killed $ecx399; X64-NO-BMI2-NEXT:    shrq %cl, %rax400; X64-NO-BMI2-NEXT:    movl %eax, (%rdx)401; X64-NO-BMI2-NEXT:    retq402;403; X64-BMI2-LABEL: load_4byte_chunk_of_8byte_alloca:404; X64-BMI2:       # %bb.0:405; X64-BMI2-NEXT:    shll $3, %esi406; X64-BMI2-NEXT:    shrxq %rsi, (%rdi), %rax407; X64-BMI2-NEXT:    movl %eax, (%rdx)408; X64-BMI2-NEXT:    retq409;410; X86-NO-BMI2-NO-SHLD-LABEL: load_4byte_chunk_of_8byte_alloca:411; X86-NO-BMI2-NO-SHLD:       # %bb.0:412; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %ebx413; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %edi414; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %esi415; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx416; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx417; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax418; X86-NO-BMI2-NO-SHLD-NEXT:    shll $3, %eax419; X86-NO-BMI2-NO-SHLD-NEXT:    movl (%ecx), %edi420; X86-NO-BMI2-NO-SHLD-NEXT:    movl 4(%ecx), %esi421; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx422; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %edi423; X86-NO-BMI2-NO-SHLD-NEXT:    leal (%esi,%esi), %ebx424; X86-NO-BMI2-NO-SHLD-NEXT:    notb %cl425; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %ebx426; X86-NO-BMI2-NO-SHLD-NEXT:    orl %edi, %ebx427; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx428; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %esi429; X86-NO-BMI2-NO-SHLD-NEXT:    testb $32, %al430; X86-NO-BMI2-NO-SHLD-NEXT:    cmovel %ebx, %esi431; X86-NO-BMI2-NO-SHLD-NEXT:    movl %esi, (%edx)432; X86-NO-BMI2-NO-SHLD-NEXT:    popl %esi433; X86-NO-BMI2-NO-SHLD-NEXT:    popl %edi434; X86-NO-BMI2-NO-SHLD-NEXT:    popl %ebx435; X86-NO-BMI2-NO-SHLD-NEXT:    retl436;437; X86-NO-BMI2-HAVE-SHLD-LABEL: load_4byte_chunk_of_8byte_alloca:438; X86-NO-BMI2-HAVE-SHLD:       # %bb.0:439; X86-NO-BMI2-HAVE-SHLD-NEXT:    pushl %esi440; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax441; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx442; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx443; X86-NO-BMI2-HAVE-SHLD-NEXT:    shll $3, %ecx444; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl (%edx), %esi445; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 4(%edx), %edx446; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %edx, %esi447; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl %cl, %edx448; X86-NO-BMI2-HAVE-SHLD-NEXT:    testb $32, %cl449; X86-NO-BMI2-HAVE-SHLD-NEXT:    cmovel %esi, %edx450; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, (%eax)451; X86-NO-BMI2-HAVE-SHLD-NEXT:    popl %esi452; X86-NO-BMI2-HAVE-SHLD-NEXT:    retl453;454; X86-HAVE-BMI2-NO-SHLD-LABEL: load_4byte_chunk_of_8byte_alloca:455; X86-HAVE-BMI2-NO-SHLD:       # %bb.0:456; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %ebx457; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %edi458; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %esi459; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax460; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx461; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx462; X86-HAVE-BMI2-NO-SHLD-NEXT:    shll $3, %ecx463; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 4(%edx), %esi464; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %ecx, (%edx), %edx465; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, %ebx466; X86-HAVE-BMI2-NO-SHLD-NEXT:    notb %bl467; X86-HAVE-BMI2-NO-SHLD-NEXT:    leal (%esi,%esi), %edi468; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %ebx, %edi, %edi469; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %edx, %edi470; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %ecx, %esi, %edx471; X86-HAVE-BMI2-NO-SHLD-NEXT:    testb $32, %cl472; X86-HAVE-BMI2-NO-SHLD-NEXT:    cmovel %edi, %edx473; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edx, (%eax)474; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %esi475; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %edi476; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %ebx477; X86-HAVE-BMI2-NO-SHLD-NEXT:    retl478;479; X86-HAVE-BMI2-HAVE-SHLD-LABEL: load_4byte_chunk_of_8byte_alloca:480; X86-HAVE-BMI2-HAVE-SHLD:       # %bb.0:481; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    pushl %esi482; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax483; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx484; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx485; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shll $3, %ecx486; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl (%edx), %esi487; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 4(%edx), %edx488; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %edx, %esi489; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxl %ecx, %edx, %edx490; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    testb $32, %cl491; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    cmovel %esi, %edx492; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edx, (%eax)493; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    popl %esi494; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    retl495  %init = load <8 x i8>, ptr %src, align 1496  %byteOff.numbits = shl nuw nsw i64 %byteOff, 3497  %intermediate.val.frozen = freeze <8 x i8> %init498  %intermediate.val.frozen.bits = bitcast <8 x i8> %intermediate.val.frozen to i64499  %intermediate.val.frozen.bits.positioned = lshr i64 %intermediate.val.frozen.bits, %byteOff.numbits500  %intermediate.val.frozen.bits.positioned.extracted = trunc i64 %intermediate.val.frozen.bits.positioned to i32501  store i32 %intermediate.val.frozen.bits.positioned.extracted, ptr %dst, align 4502  ret void503}504 505; no @load_8byte_chunk_of_8byte_alloca506 507define void @load_1byte_chunk_of_16byte_alloca(ptr %src, i64 %byteOff, ptr %dst) nounwind {508; X64-NO-BMI2-NO-SHLD-LABEL: load_1byte_chunk_of_16byte_alloca:509; X64-NO-BMI2-NO-SHLD:       # %bb.0:510; X64-NO-BMI2-NO-SHLD-NEXT:    shll $3, %esi511; X64-NO-BMI2-NO-SHLD-NEXT:    movdqu (%rdi), %xmm0512; X64-NO-BMI2-NO-SHLD-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]513; X64-NO-BMI2-NO-SHLD-NEXT:    movq %xmm1, %rax514; X64-NO-BMI2-NO-SHLD-NEXT:    movq %xmm0, %rdi515; X64-NO-BMI2-NO-SHLD-NEXT:    movl %esi, %ecx516; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %cl, %rdi517; X64-NO-BMI2-NO-SHLD-NEXT:    leal (%rax,%rax), %r8d518; X64-NO-BMI2-NO-SHLD-NEXT:    notb %cl519; X64-NO-BMI2-NO-SHLD-NEXT:    shlq %cl, %r8520; X64-NO-BMI2-NO-SHLD-NEXT:    orl %edi, %r8d521; X64-NO-BMI2-NO-SHLD-NEXT:    movl %esi, %ecx522; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %cl, %rax523; X64-NO-BMI2-NO-SHLD-NEXT:    testb $64, %sil524; X64-NO-BMI2-NO-SHLD-NEXT:    cmoveq %r8, %rax525; X64-NO-BMI2-NO-SHLD-NEXT:    movb %al, (%rdx)526; X64-NO-BMI2-NO-SHLD-NEXT:    retq527;528; X64-NO-BMI2-HAVE-SHLD-LABEL: load_1byte_chunk_of_16byte_alloca:529; X64-NO-BMI2-HAVE-SHLD:       # %bb.0:530; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rsi, %rcx531; X64-NO-BMI2-HAVE-SHLD-NEXT:    shll $3, %ecx532; X64-NO-BMI2-HAVE-SHLD-NEXT:    movdqu (%rdi), %xmm0533; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %xmm0, %rax534; X64-NO-BMI2-HAVE-SHLD-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]535; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %xmm0, %rsi536; X64-NO-BMI2-HAVE-SHLD-NEXT:    shrdq %cl, %rsi, %rax537; X64-NO-BMI2-HAVE-SHLD-NEXT:    shrq %cl, %rsi538; X64-NO-BMI2-HAVE-SHLD-NEXT:    testb $64, %cl539; X64-NO-BMI2-HAVE-SHLD-NEXT:    cmoveq %rax, %rsi540; X64-NO-BMI2-HAVE-SHLD-NEXT:    movb %sil, (%rdx)541; X64-NO-BMI2-HAVE-SHLD-NEXT:    retq542;543; X64-HAVE-BMI2-NO-SHLD-LABEL: load_1byte_chunk_of_16byte_alloca:544; X64-HAVE-BMI2-NO-SHLD:       # %bb.0:545; X64-HAVE-BMI2-NO-SHLD-NEXT:    shll $3, %esi546; X64-HAVE-BMI2-NO-SHLD-NEXT:    movdqu (%rdi), %xmm0547; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %xmm0, %rax548; X64-HAVE-BMI2-NO-SHLD-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]549; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %xmm0, %rcx550; X64-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, %edi551; X64-HAVE-BMI2-NO-SHLD-NEXT:    notb %dil552; X64-HAVE-BMI2-NO-SHLD-NEXT:    leal (%rcx,%rcx), %r8d553; X64-HAVE-BMI2-NO-SHLD-NEXT:    shlxq %rdi, %r8, %rdi554; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrxq %rsi, %rax, %rax555; X64-HAVE-BMI2-NO-SHLD-NEXT:    orl %edi, %eax556; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrxq %rsi, %rcx, %rcx557; X64-HAVE-BMI2-NO-SHLD-NEXT:    testb $64, %sil558; X64-HAVE-BMI2-NO-SHLD-NEXT:    cmoveq %rax, %rcx559; X64-HAVE-BMI2-NO-SHLD-NEXT:    movb %cl, (%rdx)560; X64-HAVE-BMI2-NO-SHLD-NEXT:    retq561;562; X64-HAVE-BMI2-HAVE-SHLD-LABEL: load_1byte_chunk_of_16byte_alloca:563; X64-HAVE-BMI2-HAVE-SHLD:       # %bb.0:564; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rsi, %rcx565; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shll $3, %ecx566; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movdqu (%rdi), %xmm0567; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %xmm0, %rax568; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]569; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %xmm0, %rsi570; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shrdq %cl, %rsi, %rax571; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxq %rcx, %rsi, %rsi572; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    testb $64, %cl573; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    cmoveq %rax, %rsi574; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movb %sil, (%rdx)575; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    retq576;577; X86-NO-BMI2-NO-SHLD-LABEL: load_1byte_chunk_of_16byte_alloca:578; X86-NO-BMI2-NO-SHLD:       # %bb.0:579; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %esi580; X86-NO-BMI2-NO-SHLD-NEXT:    subl $40, %esp581; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx582; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax583; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx584; X86-NO-BMI2-NO-SHLD-NEXT:    movups (%edx), %xmm0585; X86-NO-BMI2-NO-SHLD-NEXT:    shll $3, %ecx586; X86-NO-BMI2-NO-SHLD-NEXT:    xorps %xmm1, %xmm1587; X86-NO-BMI2-NO-SHLD-NEXT:    movaps %xmm1, {{[0-9]+}}(%esp)588; X86-NO-BMI2-NO-SHLD-NEXT:    movaps %xmm0, (%esp)589; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, %edx590; X86-NO-BMI2-NO-SHLD-NEXT:    shrb $3, %dl591; X86-NO-BMI2-NO-SHLD-NEXT:    andb $12, %dl592; X86-NO-BMI2-NO-SHLD-NEXT:    movzbl %dl, %edx593; X86-NO-BMI2-NO-SHLD-NEXT:    movl (%esp,%edx), %esi594; X86-NO-BMI2-NO-SHLD-NEXT:    movl 4(%esp,%edx), %edx595; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %esi596; X86-NO-BMI2-NO-SHLD-NEXT:    notb %cl597; X86-NO-BMI2-NO-SHLD-NEXT:    addl %edx, %edx598; X86-NO-BMI2-NO-SHLD-NEXT:    # kill: def $cl killed $cl killed $ecx599; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %edx600; X86-NO-BMI2-NO-SHLD-NEXT:    orl %esi, %edx601; X86-NO-BMI2-NO-SHLD-NEXT:    movb %dl, (%eax)602; X86-NO-BMI2-NO-SHLD-NEXT:    addl $40, %esp603; X86-NO-BMI2-NO-SHLD-NEXT:    popl %esi604; X86-NO-BMI2-NO-SHLD-NEXT:    retl605;606; X86-SHLD-LABEL: load_1byte_chunk_of_16byte_alloca:607; X86-SHLD:       # %bb.0:608; X86-SHLD-NEXT:    pushl %ebx609; X86-SHLD-NEXT:    subl $40, %esp610; X86-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx611; X86-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax612; X86-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx613; X86-SHLD-NEXT:    movups (%edx), %xmm0614; X86-SHLD-NEXT:    shll $3, %ecx615; X86-SHLD-NEXT:    xorps %xmm1, %xmm1616; X86-SHLD-NEXT:    movaps %xmm1, {{[0-9]+}}(%esp)617; X86-SHLD-NEXT:    movaps %xmm0, (%esp)618; X86-SHLD-NEXT:    movl %ecx, %edx619; X86-SHLD-NEXT:    shrb $3, %dl620; X86-SHLD-NEXT:    andb $12, %dl621; X86-SHLD-NEXT:    movzbl %dl, %edx622; X86-SHLD-NEXT:    movl (%esp,%edx), %ebx623; X86-SHLD-NEXT:    movl 4(%esp,%edx), %edx624; X86-SHLD-NEXT:    # kill: def $cl killed $cl killed $ecx625; X86-SHLD-NEXT:    shrdl %cl, %edx, %ebx626; X86-SHLD-NEXT:    movb %bl, (%eax)627; X86-SHLD-NEXT:    addl $40, %esp628; X86-SHLD-NEXT:    popl %ebx629; X86-SHLD-NEXT:    retl630;631; X86-HAVE-BMI2-NO-SHLD-LABEL: load_1byte_chunk_of_16byte_alloca:632; X86-HAVE-BMI2-NO-SHLD:       # %bb.0:633; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %esi634; X86-HAVE-BMI2-NO-SHLD-NEXT:    subl $40, %esp635; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx636; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax637; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx638; X86-HAVE-BMI2-NO-SHLD-NEXT:    movups (%edx), %xmm0639; X86-HAVE-BMI2-NO-SHLD-NEXT:    shll $3, %ecx640; X86-HAVE-BMI2-NO-SHLD-NEXT:    xorps %xmm1, %xmm1641; X86-HAVE-BMI2-NO-SHLD-NEXT:    movaps %xmm1, {{[0-9]+}}(%esp)642; X86-HAVE-BMI2-NO-SHLD-NEXT:    movaps %xmm0, (%esp)643; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, %edx644; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrb $3, %dl645; X86-HAVE-BMI2-NO-SHLD-NEXT:    andb $12, %dl646; X86-HAVE-BMI2-NO-SHLD-NEXT:    movzbl %dl, %edx647; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %ecx, (%esp,%edx), %esi648; X86-HAVE-BMI2-NO-SHLD-NEXT:    notb %cl649; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 4(%esp,%edx), %edx650; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl %edx, %edx651; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %ecx, %edx, %ecx652; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %esi, %ecx653; X86-HAVE-BMI2-NO-SHLD-NEXT:    movb %cl, (%eax)654; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl $40, %esp655; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %esi656; X86-HAVE-BMI2-NO-SHLD-NEXT:    retl657  %init = load <16 x i8>, ptr %src, align 1658  %byteOff.numbits = shl nuw nsw i64 %byteOff, 3659  %intermediate.val.frozen = freeze <16 x i8> %init660  %intermediate.val.frozen.bits = bitcast <16 x i8> %intermediate.val.frozen to i128661  %byteOff.numbits.wide = zext i64 %byteOff.numbits to i128662  %intermediate.val.frozen.bits.positioned = lshr i128 %intermediate.val.frozen.bits, %byteOff.numbits.wide663  %intermediate.val.frozen.bits.positioned.extracted = trunc i128 %intermediate.val.frozen.bits.positioned to i8664  %1 = insertelement <1 x i8> poison, i8 %intermediate.val.frozen.bits.positioned.extracted, i64 0665  store <1 x i8> %1, ptr %dst, align 1666  ret void667}668 669define void @load_2byte_chunk_of_16byte_alloca(ptr %src, i64 %byteOff, ptr %dst) nounwind {670; X64-NO-BMI2-NO-SHLD-LABEL: load_2byte_chunk_of_16byte_alloca:671; X64-NO-BMI2-NO-SHLD:       # %bb.0:672; X64-NO-BMI2-NO-SHLD-NEXT:    shll $3, %esi673; X64-NO-BMI2-NO-SHLD-NEXT:    movdqu (%rdi), %xmm0674; X64-NO-BMI2-NO-SHLD-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]675; X64-NO-BMI2-NO-SHLD-NEXT:    movq %xmm1, %rax676; X64-NO-BMI2-NO-SHLD-NEXT:    movq %xmm0, %rdi677; X64-NO-BMI2-NO-SHLD-NEXT:    movl %esi, %ecx678; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %cl, %rdi679; X64-NO-BMI2-NO-SHLD-NEXT:    leal (%rax,%rax), %r8d680; X64-NO-BMI2-NO-SHLD-NEXT:    notb %cl681; X64-NO-BMI2-NO-SHLD-NEXT:    shlq %cl, %r8682; X64-NO-BMI2-NO-SHLD-NEXT:    orl %edi, %r8d683; X64-NO-BMI2-NO-SHLD-NEXT:    movl %esi, %ecx684; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %cl, %rax685; X64-NO-BMI2-NO-SHLD-NEXT:    testb $64, %sil686; X64-NO-BMI2-NO-SHLD-NEXT:    cmoveq %r8, %rax687; X64-NO-BMI2-NO-SHLD-NEXT:    movw %ax, (%rdx)688; X64-NO-BMI2-NO-SHLD-NEXT:    retq689;690; X64-NO-BMI2-HAVE-SHLD-LABEL: load_2byte_chunk_of_16byte_alloca:691; X64-NO-BMI2-HAVE-SHLD:       # %bb.0:692; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rsi, %rcx693; X64-NO-BMI2-HAVE-SHLD-NEXT:    shll $3, %ecx694; X64-NO-BMI2-HAVE-SHLD-NEXT:    movdqu (%rdi), %xmm0695; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %xmm0, %rax696; X64-NO-BMI2-HAVE-SHLD-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]697; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %xmm0, %rsi698; X64-NO-BMI2-HAVE-SHLD-NEXT:    shrdq %cl, %rsi, %rax699; X64-NO-BMI2-HAVE-SHLD-NEXT:    shrq %cl, %rsi700; X64-NO-BMI2-HAVE-SHLD-NEXT:    testb $64, %cl701; X64-NO-BMI2-HAVE-SHLD-NEXT:    cmoveq %rax, %rsi702; X64-NO-BMI2-HAVE-SHLD-NEXT:    movw %si, (%rdx)703; X64-NO-BMI2-HAVE-SHLD-NEXT:    retq704;705; X64-HAVE-BMI2-NO-SHLD-LABEL: load_2byte_chunk_of_16byte_alloca:706; X64-HAVE-BMI2-NO-SHLD:       # %bb.0:707; X64-HAVE-BMI2-NO-SHLD-NEXT:    shll $3, %esi708; X64-HAVE-BMI2-NO-SHLD-NEXT:    movdqu (%rdi), %xmm0709; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %xmm0, %rax710; X64-HAVE-BMI2-NO-SHLD-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]711; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %xmm0, %rcx712; X64-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, %edi713; X64-HAVE-BMI2-NO-SHLD-NEXT:    notb %dil714; X64-HAVE-BMI2-NO-SHLD-NEXT:    leal (%rcx,%rcx), %r8d715; X64-HAVE-BMI2-NO-SHLD-NEXT:    shlxq %rdi, %r8, %rdi716; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrxq %rsi, %rax, %rax717; X64-HAVE-BMI2-NO-SHLD-NEXT:    orl %edi, %eax718; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrxq %rsi, %rcx, %rcx719; X64-HAVE-BMI2-NO-SHLD-NEXT:    testb $64, %sil720; X64-HAVE-BMI2-NO-SHLD-NEXT:    cmoveq %rax, %rcx721; X64-HAVE-BMI2-NO-SHLD-NEXT:    movw %cx, (%rdx)722; X64-HAVE-BMI2-NO-SHLD-NEXT:    retq723;724; X64-HAVE-BMI2-HAVE-SHLD-LABEL: load_2byte_chunk_of_16byte_alloca:725; X64-HAVE-BMI2-HAVE-SHLD:       # %bb.0:726; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rsi, %rcx727; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shll $3, %ecx728; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movdqu (%rdi), %xmm0729; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %xmm0, %rax730; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]731; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %xmm0, %rsi732; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shrdq %cl, %rsi, %rax733; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxq %rcx, %rsi, %rsi734; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    testb $64, %cl735; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    cmoveq %rax, %rsi736; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movw %si, (%rdx)737; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    retq738;739; X86-NO-BMI2-NO-SHLD-LABEL: load_2byte_chunk_of_16byte_alloca:740; X86-NO-BMI2-NO-SHLD:       # %bb.0:741; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %esi742; X86-NO-BMI2-NO-SHLD-NEXT:    subl $40, %esp743; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx744; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax745; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx746; X86-NO-BMI2-NO-SHLD-NEXT:    movups (%edx), %xmm0747; X86-NO-BMI2-NO-SHLD-NEXT:    shll $3, %ecx748; X86-NO-BMI2-NO-SHLD-NEXT:    xorps %xmm1, %xmm1749; X86-NO-BMI2-NO-SHLD-NEXT:    movaps %xmm1, {{[0-9]+}}(%esp)750; X86-NO-BMI2-NO-SHLD-NEXT:    movaps %xmm0, (%esp)751; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, %edx752; X86-NO-BMI2-NO-SHLD-NEXT:    shrb $3, %dl753; X86-NO-BMI2-NO-SHLD-NEXT:    andb $12, %dl754; X86-NO-BMI2-NO-SHLD-NEXT:    movzbl %dl, %edx755; X86-NO-BMI2-NO-SHLD-NEXT:    movl (%esp,%edx), %esi756; X86-NO-BMI2-NO-SHLD-NEXT:    movl 4(%esp,%edx), %edx757; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %esi758; X86-NO-BMI2-NO-SHLD-NEXT:    notb %cl759; X86-NO-BMI2-NO-SHLD-NEXT:    addl %edx, %edx760; X86-NO-BMI2-NO-SHLD-NEXT:    # kill: def $cl killed $cl killed $ecx761; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %edx762; X86-NO-BMI2-NO-SHLD-NEXT:    orl %esi, %edx763; X86-NO-BMI2-NO-SHLD-NEXT:    movw %dx, (%eax)764; X86-NO-BMI2-NO-SHLD-NEXT:    addl $40, %esp765; X86-NO-BMI2-NO-SHLD-NEXT:    popl %esi766; X86-NO-BMI2-NO-SHLD-NEXT:    retl767;768; X86-SHLD-LABEL: load_2byte_chunk_of_16byte_alloca:769; X86-SHLD:       # %bb.0:770; X86-SHLD-NEXT:    pushl %esi771; X86-SHLD-NEXT:    subl $40, %esp772; X86-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx773; X86-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax774; X86-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx775; X86-SHLD-NEXT:    movups (%edx), %xmm0776; X86-SHLD-NEXT:    shll $3, %ecx777; X86-SHLD-NEXT:    xorps %xmm1, %xmm1778; X86-SHLD-NEXT:    movaps %xmm1, {{[0-9]+}}(%esp)779; X86-SHLD-NEXT:    movaps %xmm0, (%esp)780; X86-SHLD-NEXT:    movl %ecx, %edx781; X86-SHLD-NEXT:    shrb $3, %dl782; X86-SHLD-NEXT:    andb $12, %dl783; X86-SHLD-NEXT:    movzbl %dl, %edx784; X86-SHLD-NEXT:    movl (%esp,%edx), %esi785; X86-SHLD-NEXT:    movl 4(%esp,%edx), %edx786; X86-SHLD-NEXT:    # kill: def $cl killed $cl killed $ecx787; X86-SHLD-NEXT:    shrdl %cl, %edx, %esi788; X86-SHLD-NEXT:    movw %si, (%eax)789; X86-SHLD-NEXT:    addl $40, %esp790; X86-SHLD-NEXT:    popl %esi791; X86-SHLD-NEXT:    retl792;793; X86-HAVE-BMI2-NO-SHLD-LABEL: load_2byte_chunk_of_16byte_alloca:794; X86-HAVE-BMI2-NO-SHLD:       # %bb.0:795; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %esi796; X86-HAVE-BMI2-NO-SHLD-NEXT:    subl $40, %esp797; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx798; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax799; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx800; X86-HAVE-BMI2-NO-SHLD-NEXT:    movups (%edx), %xmm0801; X86-HAVE-BMI2-NO-SHLD-NEXT:    shll $3, %ecx802; X86-HAVE-BMI2-NO-SHLD-NEXT:    xorps %xmm1, %xmm1803; X86-HAVE-BMI2-NO-SHLD-NEXT:    movaps %xmm1, {{[0-9]+}}(%esp)804; X86-HAVE-BMI2-NO-SHLD-NEXT:    movaps %xmm0, (%esp)805; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, %edx806; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrb $3, %dl807; X86-HAVE-BMI2-NO-SHLD-NEXT:    andb $12, %dl808; X86-HAVE-BMI2-NO-SHLD-NEXT:    movzbl %dl, %edx809; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %ecx, (%esp,%edx), %esi810; X86-HAVE-BMI2-NO-SHLD-NEXT:    notb %cl811; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 4(%esp,%edx), %edx812; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl %edx, %edx813; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %ecx, %edx, %ecx814; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %esi, %ecx815; X86-HAVE-BMI2-NO-SHLD-NEXT:    movw %cx, (%eax)816; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl $40, %esp817; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %esi818; X86-HAVE-BMI2-NO-SHLD-NEXT:    retl819  %init = load <16 x i8>, ptr %src, align 1820  %byteOff.numbits = shl nuw nsw i64 %byteOff, 3821  %intermediate.val.frozen = freeze <16 x i8> %init822  %intermediate.val.frozen.bits = bitcast <16 x i8> %intermediate.val.frozen to i128823  %byteOff.numbits.wide = zext i64 %byteOff.numbits to i128824  %intermediate.val.frozen.bits.positioned = lshr i128 %intermediate.val.frozen.bits, %byteOff.numbits.wide825  %intermediate.val.frozen.bits.positioned.extracted = trunc i128 %intermediate.val.frozen.bits.positioned to i16826  store i16 %intermediate.val.frozen.bits.positioned.extracted, ptr %dst, align 2827  ret void828}829 830define void @load_4byte_chunk_of_16byte_alloca(ptr %src, i64 %byteOff, ptr %dst) nounwind {831; X64-NO-BMI2-NO-SHLD-LABEL: load_4byte_chunk_of_16byte_alloca:832; X64-NO-BMI2-NO-SHLD:       # %bb.0:833; X64-NO-BMI2-NO-SHLD-NEXT:    shll $3, %esi834; X64-NO-BMI2-NO-SHLD-NEXT:    movdqu (%rdi), %xmm0835; X64-NO-BMI2-NO-SHLD-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]836; X64-NO-BMI2-NO-SHLD-NEXT:    movq %xmm1, %rax837; X64-NO-BMI2-NO-SHLD-NEXT:    movq %xmm0, %rdi838; X64-NO-BMI2-NO-SHLD-NEXT:    movl %esi, %ecx839; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %cl, %rdi840; X64-NO-BMI2-NO-SHLD-NEXT:    leal (%rax,%rax), %r8d841; X64-NO-BMI2-NO-SHLD-NEXT:    notb %cl842; X64-NO-BMI2-NO-SHLD-NEXT:    shlq %cl, %r8843; X64-NO-BMI2-NO-SHLD-NEXT:    orl %edi, %r8d844; X64-NO-BMI2-NO-SHLD-NEXT:    movl %esi, %ecx845; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %cl, %rax846; X64-NO-BMI2-NO-SHLD-NEXT:    testb $64, %sil847; X64-NO-BMI2-NO-SHLD-NEXT:    cmoveq %r8, %rax848; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, (%rdx)849; X64-NO-BMI2-NO-SHLD-NEXT:    retq850;851; X64-NO-BMI2-HAVE-SHLD-LABEL: load_4byte_chunk_of_16byte_alloca:852; X64-NO-BMI2-HAVE-SHLD:       # %bb.0:853; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rsi, %rcx854; X64-NO-BMI2-HAVE-SHLD-NEXT:    shll $3, %ecx855; X64-NO-BMI2-HAVE-SHLD-NEXT:    movdqu (%rdi), %xmm0856; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %xmm0, %rax857; X64-NO-BMI2-HAVE-SHLD-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]858; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %xmm0, %rsi859; X64-NO-BMI2-HAVE-SHLD-NEXT:    shrdq %cl, %rsi, %rax860; X64-NO-BMI2-HAVE-SHLD-NEXT:    shrq %cl, %rsi861; X64-NO-BMI2-HAVE-SHLD-NEXT:    testb $64, %cl862; X64-NO-BMI2-HAVE-SHLD-NEXT:    cmoveq %rax, %rsi863; X64-NO-BMI2-HAVE-SHLD-NEXT:    movl %esi, (%rdx)864; X64-NO-BMI2-HAVE-SHLD-NEXT:    retq865;866; X64-HAVE-BMI2-NO-SHLD-LABEL: load_4byte_chunk_of_16byte_alloca:867; X64-HAVE-BMI2-NO-SHLD:       # %bb.0:868; X64-HAVE-BMI2-NO-SHLD-NEXT:    shll $3, %esi869; X64-HAVE-BMI2-NO-SHLD-NEXT:    movdqu (%rdi), %xmm0870; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %xmm0, %rax871; X64-HAVE-BMI2-NO-SHLD-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]872; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %xmm0, %rcx873; X64-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, %edi874; X64-HAVE-BMI2-NO-SHLD-NEXT:    notb %dil875; X64-HAVE-BMI2-NO-SHLD-NEXT:    leal (%rcx,%rcx), %r8d876; X64-HAVE-BMI2-NO-SHLD-NEXT:    shlxq %rdi, %r8, %rdi877; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrxq %rsi, %rax, %rax878; X64-HAVE-BMI2-NO-SHLD-NEXT:    orl %edi, %eax879; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrxq %rsi, %rcx, %rcx880; X64-HAVE-BMI2-NO-SHLD-NEXT:    testb $64, %sil881; X64-HAVE-BMI2-NO-SHLD-NEXT:    cmoveq %rax, %rcx882; X64-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, (%rdx)883; X64-HAVE-BMI2-NO-SHLD-NEXT:    retq884;885; X64-HAVE-BMI2-HAVE-SHLD-LABEL: load_4byte_chunk_of_16byte_alloca:886; X64-HAVE-BMI2-HAVE-SHLD:       # %bb.0:887; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rsi, %rcx888; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shll $3, %ecx889; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movdqu (%rdi), %xmm0890; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %xmm0, %rax891; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]892; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %xmm0, %rsi893; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shrdq %cl, %rsi, %rax894; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxq %rcx, %rsi, %rsi895; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    testb $64, %cl896; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    cmoveq %rax, %rsi897; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, (%rdx)898; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    retq899;900; X86-NO-BMI2-NO-SHLD-LABEL: load_4byte_chunk_of_16byte_alloca:901; X86-NO-BMI2-NO-SHLD:       # %bb.0:902; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %esi903; X86-NO-BMI2-NO-SHLD-NEXT:    subl $40, %esp904; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx905; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax906; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx907; X86-NO-BMI2-NO-SHLD-NEXT:    movups (%edx), %xmm0908; X86-NO-BMI2-NO-SHLD-NEXT:    shll $3, %ecx909; X86-NO-BMI2-NO-SHLD-NEXT:    xorps %xmm1, %xmm1910; X86-NO-BMI2-NO-SHLD-NEXT:    movaps %xmm1, {{[0-9]+}}(%esp)911; X86-NO-BMI2-NO-SHLD-NEXT:    movaps %xmm0, (%esp)912; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, %edx913; X86-NO-BMI2-NO-SHLD-NEXT:    shrb $3, %dl914; X86-NO-BMI2-NO-SHLD-NEXT:    andb $12, %dl915; X86-NO-BMI2-NO-SHLD-NEXT:    movzbl %dl, %edx916; X86-NO-BMI2-NO-SHLD-NEXT:    movl (%esp,%edx), %esi917; X86-NO-BMI2-NO-SHLD-NEXT:    movl 4(%esp,%edx), %edx918; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %esi919; X86-NO-BMI2-NO-SHLD-NEXT:    notb %cl920; X86-NO-BMI2-NO-SHLD-NEXT:    addl %edx, %edx921; X86-NO-BMI2-NO-SHLD-NEXT:    # kill: def $cl killed $cl killed $ecx922; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %edx923; X86-NO-BMI2-NO-SHLD-NEXT:    orl %esi, %edx924; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, (%eax)925; X86-NO-BMI2-NO-SHLD-NEXT:    addl $40, %esp926; X86-NO-BMI2-NO-SHLD-NEXT:    popl %esi927; X86-NO-BMI2-NO-SHLD-NEXT:    retl928;929; X86-SHLD-LABEL: load_4byte_chunk_of_16byte_alloca:930; X86-SHLD:       # %bb.0:931; X86-SHLD-NEXT:    pushl %esi932; X86-SHLD-NEXT:    subl $40, %esp933; X86-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx934; X86-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax935; X86-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx936; X86-SHLD-NEXT:    movups (%edx), %xmm0937; X86-SHLD-NEXT:    shll $3, %ecx938; X86-SHLD-NEXT:    xorps %xmm1, %xmm1939; X86-SHLD-NEXT:    movaps %xmm1, {{[0-9]+}}(%esp)940; X86-SHLD-NEXT:    movaps %xmm0, (%esp)941; X86-SHLD-NEXT:    movl %ecx, %edx942; X86-SHLD-NEXT:    shrb $3, %dl943; X86-SHLD-NEXT:    andb $12, %dl944; X86-SHLD-NEXT:    movzbl %dl, %edx945; X86-SHLD-NEXT:    movl (%esp,%edx), %esi946; X86-SHLD-NEXT:    movl 4(%esp,%edx), %edx947; X86-SHLD-NEXT:    # kill: def $cl killed $cl killed $ecx948; X86-SHLD-NEXT:    shrdl %cl, %edx, %esi949; X86-SHLD-NEXT:    movl %esi, (%eax)950; X86-SHLD-NEXT:    addl $40, %esp951; X86-SHLD-NEXT:    popl %esi952; X86-SHLD-NEXT:    retl953;954; X86-HAVE-BMI2-NO-SHLD-LABEL: load_4byte_chunk_of_16byte_alloca:955; X86-HAVE-BMI2-NO-SHLD:       # %bb.0:956; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %esi957; X86-HAVE-BMI2-NO-SHLD-NEXT:    subl $40, %esp958; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx959; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax960; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx961; X86-HAVE-BMI2-NO-SHLD-NEXT:    movups (%edx), %xmm0962; X86-HAVE-BMI2-NO-SHLD-NEXT:    shll $3, %ecx963; X86-HAVE-BMI2-NO-SHLD-NEXT:    xorps %xmm1, %xmm1964; X86-HAVE-BMI2-NO-SHLD-NEXT:    movaps %xmm1, {{[0-9]+}}(%esp)965; X86-HAVE-BMI2-NO-SHLD-NEXT:    movaps %xmm0, (%esp)966; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, %edx967; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrb $3, %dl968; X86-HAVE-BMI2-NO-SHLD-NEXT:    andb $12, %dl969; X86-HAVE-BMI2-NO-SHLD-NEXT:    movzbl %dl, %edx970; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %ecx, (%esp,%edx), %esi971; X86-HAVE-BMI2-NO-SHLD-NEXT:    notb %cl972; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 4(%esp,%edx), %edx973; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl %edx, %edx974; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %ecx, %edx, %ecx975; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %esi, %ecx976; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, (%eax)977; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl $40, %esp978; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %esi979; X86-HAVE-BMI2-NO-SHLD-NEXT:    retl980  %init = load <16 x i8>, ptr %src, align 1981  %byteOff.numbits = shl nuw nsw i64 %byteOff, 3982  %intermediate.val.frozen = freeze <16 x i8> %init983  %intermediate.val.frozen.bits = bitcast <16 x i8> %intermediate.val.frozen to i128984  %byteOff.numbits.wide = zext i64 %byteOff.numbits to i128985  %intermediate.val.frozen.bits.positioned = lshr i128 %intermediate.val.frozen.bits, %byteOff.numbits.wide986  %intermediate.val.frozen.bits.positioned.extracted = trunc i128 %intermediate.val.frozen.bits.positioned to i32987  store i32 %intermediate.val.frozen.bits.positioned.extracted, ptr %dst, align 4988  ret void989}990 991define void @load_8byte_chunk_of_16byte_alloca(ptr %src, i64 %byteOff, ptr %dst) nounwind {992; X64-NO-BMI2-NO-SHLD-LABEL: load_8byte_chunk_of_16byte_alloca:993; X64-NO-BMI2-NO-SHLD:       # %bb.0:994; X64-NO-BMI2-NO-SHLD-NEXT:    shll $3, %esi995; X64-NO-BMI2-NO-SHLD-NEXT:    movdqu (%rdi), %xmm0996; X64-NO-BMI2-NO-SHLD-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]997; X64-NO-BMI2-NO-SHLD-NEXT:    movq %xmm1, %rax998; X64-NO-BMI2-NO-SHLD-NEXT:    movq %xmm0, %rdi999; X64-NO-BMI2-NO-SHLD-NEXT:    movl %esi, %ecx1000; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %cl, %rdi1001; X64-NO-BMI2-NO-SHLD-NEXT:    notb %cl1002; X64-NO-BMI2-NO-SHLD-NEXT:    leaq (%rax,%rax), %r81003; X64-NO-BMI2-NO-SHLD-NEXT:    shlq %cl, %r81004; X64-NO-BMI2-NO-SHLD-NEXT:    orq %rdi, %r81005; X64-NO-BMI2-NO-SHLD-NEXT:    movl %esi, %ecx1006; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %cl, %rax1007; X64-NO-BMI2-NO-SHLD-NEXT:    testb $64, %sil1008; X64-NO-BMI2-NO-SHLD-NEXT:    cmoveq %r8, %rax1009; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rax, (%rdx)1010; X64-NO-BMI2-NO-SHLD-NEXT:    retq1011;1012; X64-NO-BMI2-HAVE-SHLD-LABEL: load_8byte_chunk_of_16byte_alloca:1013; X64-NO-BMI2-HAVE-SHLD:       # %bb.0:1014; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rsi, %rcx1015; X64-NO-BMI2-HAVE-SHLD-NEXT:    shll $3, %ecx1016; X64-NO-BMI2-HAVE-SHLD-NEXT:    movdqu (%rdi), %xmm01017; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %xmm0, %rax1018; X64-NO-BMI2-HAVE-SHLD-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]1019; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %xmm0, %rsi1020; X64-NO-BMI2-HAVE-SHLD-NEXT:    shrdq %cl, %rsi, %rax1021; X64-NO-BMI2-HAVE-SHLD-NEXT:    shrq %cl, %rsi1022; X64-NO-BMI2-HAVE-SHLD-NEXT:    testb $64, %cl1023; X64-NO-BMI2-HAVE-SHLD-NEXT:    cmoveq %rax, %rsi1024; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rsi, (%rdx)1025; X64-NO-BMI2-HAVE-SHLD-NEXT:    retq1026;1027; X64-HAVE-BMI2-NO-SHLD-LABEL: load_8byte_chunk_of_16byte_alloca:1028; X64-HAVE-BMI2-NO-SHLD:       # %bb.0:1029; X64-HAVE-BMI2-NO-SHLD-NEXT:    shll $3, %esi1030; X64-HAVE-BMI2-NO-SHLD-NEXT:    movdqu (%rdi), %xmm01031; X64-HAVE-BMI2-NO-SHLD-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]1032; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %xmm1, %rax1033; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %xmm0, %rcx1034; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrxq %rsi, %rcx, %rcx1035; X64-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, %edi1036; X64-HAVE-BMI2-NO-SHLD-NEXT:    notb %dil1037; X64-HAVE-BMI2-NO-SHLD-NEXT:    leaq (%rax,%rax), %r81038; X64-HAVE-BMI2-NO-SHLD-NEXT:    shlxq %rdi, %r8, %rdi1039; X64-HAVE-BMI2-NO-SHLD-NEXT:    orq %rcx, %rdi1040; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrxq %rsi, %rax, %rax1041; X64-HAVE-BMI2-NO-SHLD-NEXT:    testb $64, %sil1042; X64-HAVE-BMI2-NO-SHLD-NEXT:    cmoveq %rdi, %rax1043; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rax, (%rdx)1044; X64-HAVE-BMI2-NO-SHLD-NEXT:    retq1045;1046; X64-HAVE-BMI2-HAVE-SHLD-LABEL: load_8byte_chunk_of_16byte_alloca:1047; X64-HAVE-BMI2-HAVE-SHLD:       # %bb.0:1048; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rsi, %rcx1049; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shll $3, %ecx1050; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movdqu (%rdi), %xmm01051; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %xmm0, %rax1052; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]1053; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %xmm0, %rsi1054; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shrdq %cl, %rsi, %rax1055; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxq %rcx, %rsi, %rsi1056; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    testb $64, %cl1057; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    cmoveq %rax, %rsi1058; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rsi, (%rdx)1059; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    retq1060;1061; X86-NO-BMI2-NO-SHLD-LABEL: load_8byte_chunk_of_16byte_alloca:1062; X86-NO-BMI2-NO-SHLD:       # %bb.0:1063; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %ebp1064; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %ebx1065; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %edi1066; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %esi1067; X86-NO-BMI2-NO-SHLD-NEXT:    subl $44, %esp1068; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax1069; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx1070; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx1071; X86-NO-BMI2-NO-SHLD-NEXT:    movups (%ecx), %xmm01072; X86-NO-BMI2-NO-SHLD-NEXT:    shll $3, %eax1073; X86-NO-BMI2-NO-SHLD-NEXT:    xorps %xmm1, %xmm11074; X86-NO-BMI2-NO-SHLD-NEXT:    movaps %xmm1, {{[0-9]+}}(%esp)1075; X86-NO-BMI2-NO-SHLD-NEXT:    movaps %xmm0, (%esp)1076; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx1077; X86-NO-BMI2-NO-SHLD-NEXT:    shrb $3, %cl1078; X86-NO-BMI2-NO-SHLD-NEXT:    andb $12, %cl1079; X86-NO-BMI2-NO-SHLD-NEXT:    movzbl %cl, %ebx1080; X86-NO-BMI2-NO-SHLD-NEXT:    movl (%esp,%ebx), %ebp1081; X86-NO-BMI2-NO-SHLD-NEXT:    movl 4(%esp,%ebx), %esi1082; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx1083; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %ebp1084; X86-NO-BMI2-NO-SHLD-NEXT:    notb %cl1085; X86-NO-BMI2-NO-SHLD-NEXT:    leal (%esi,%esi), %edi1086; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %edi1087; X86-NO-BMI2-NO-SHLD-NEXT:    orl %ebp, %edi1088; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx1089; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %esi1090; X86-NO-BMI2-NO-SHLD-NEXT:    andb $24, %al1091; X86-NO-BMI2-NO-SHLD-NEXT:    notb %al1092; X86-NO-BMI2-NO-SHLD-NEXT:    movl 8(%esp,%ebx), %ebx1093; X86-NO-BMI2-NO-SHLD-NEXT:    addl %ebx, %ebx1094; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx1095; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %ebx1096; X86-NO-BMI2-NO-SHLD-NEXT:    orl %esi, %ebx1097; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, 4(%edx)1098; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edi, (%edx)1099; X86-NO-BMI2-NO-SHLD-NEXT:    addl $44, %esp1100; X86-NO-BMI2-NO-SHLD-NEXT:    popl %esi1101; X86-NO-BMI2-NO-SHLD-NEXT:    popl %edi1102; X86-NO-BMI2-NO-SHLD-NEXT:    popl %ebx1103; X86-NO-BMI2-NO-SHLD-NEXT:    popl %ebp1104; X86-NO-BMI2-NO-SHLD-NEXT:    retl1105;1106; X86-SHLD-LABEL: load_8byte_chunk_of_16byte_alloca:1107; X86-SHLD:       # %bb.0:1108; X86-SHLD-NEXT:    pushl %ebx1109; X86-SHLD-NEXT:    pushl %edi1110; X86-SHLD-NEXT:    pushl %esi1111; X86-SHLD-NEXT:    subl $32, %esp1112; X86-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx1113; X86-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax1114; X86-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx1115; X86-SHLD-NEXT:    movups (%edx), %xmm01116; X86-SHLD-NEXT:    shll $3, %ecx1117; X86-SHLD-NEXT:    xorps %xmm1, %xmm11118; X86-SHLD-NEXT:    movaps %xmm1, {{[0-9]+}}(%esp)1119; X86-SHLD-NEXT:    movaps %xmm0, (%esp)1120; X86-SHLD-NEXT:    movl %ecx, %edx1121; X86-SHLD-NEXT:    shrb $3, %dl1122; X86-SHLD-NEXT:    andb $12, %dl1123; X86-SHLD-NEXT:    movzbl %dl, %edx1124; X86-SHLD-NEXT:    movl 8(%esp,%edx), %esi1125; X86-SHLD-NEXT:    movl (%esp,%edx), %edi1126; X86-SHLD-NEXT:    movl 4(%esp,%edx), %edx1127; X86-SHLD-NEXT:    movl %edx, %ebx1128; X86-SHLD-NEXT:    shrdl %cl, %esi, %ebx1129; X86-SHLD-NEXT:    # kill: def $cl killed $cl killed $ecx1130; X86-SHLD-NEXT:    shrdl %cl, %edx, %edi1131; X86-SHLD-NEXT:    movl %ebx, 4(%eax)1132; X86-SHLD-NEXT:    movl %edi, (%eax)1133; X86-SHLD-NEXT:    addl $32, %esp1134; X86-SHLD-NEXT:    popl %esi1135; X86-SHLD-NEXT:    popl %edi1136; X86-SHLD-NEXT:    popl %ebx1137; X86-SHLD-NEXT:    retl1138;1139; X86-HAVE-BMI2-NO-SHLD-LABEL: load_8byte_chunk_of_16byte_alloca:1140; X86-HAVE-BMI2-NO-SHLD:       # %bb.0:1141; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %ebp1142; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %ebx1143; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %edi1144; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %esi1145; X86-HAVE-BMI2-NO-SHLD-NEXT:    subl $44, %esp1146; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx1147; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax1148; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx1149; X86-HAVE-BMI2-NO-SHLD-NEXT:    movups (%edx), %xmm01150; X86-HAVE-BMI2-NO-SHLD-NEXT:    shll $3, %ecx1151; X86-HAVE-BMI2-NO-SHLD-NEXT:    xorps %xmm1, %xmm11152; X86-HAVE-BMI2-NO-SHLD-NEXT:    movaps %xmm1, {{[0-9]+}}(%esp)1153; X86-HAVE-BMI2-NO-SHLD-NEXT:    movaps %xmm0, (%esp)1154; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, %edx1155; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrb $3, %dl1156; X86-HAVE-BMI2-NO-SHLD-NEXT:    andb $12, %dl1157; X86-HAVE-BMI2-NO-SHLD-NEXT:    movzbl %dl, %edx1158; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %ecx, (%esp,%edx), %esi1159; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, %ebx1160; X86-HAVE-BMI2-NO-SHLD-NEXT:    notb %bl1161; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 4(%esp,%edx), %edi1162; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 8(%esp,%edx), %ebp1163; X86-HAVE-BMI2-NO-SHLD-NEXT:    leal (%edi,%edi), %edx1164; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %ebx, %edx, %edx1165; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %esi, %edx1166; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %ecx, %edi, %esi1167; X86-HAVE-BMI2-NO-SHLD-NEXT:    andb $24, %cl1168; X86-HAVE-BMI2-NO-SHLD-NEXT:    notb %cl1169; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl %ebp, %ebp1170; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %ecx, %ebp, %ecx1171; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %esi, %ecx1172; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, 4(%eax)1173; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edx, (%eax)1174; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl $44, %esp1175; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %esi1176; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %edi1177; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %ebx1178; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %ebp1179; X86-HAVE-BMI2-NO-SHLD-NEXT:    retl1180  %init = load <16 x i8>, ptr %src, align 11181  %byteOff.numbits = shl nuw nsw i64 %byteOff, 31182  %intermediate.val.frozen = freeze <16 x i8> %init1183  %intermediate.val.frozen.bits = bitcast <16 x i8> %intermediate.val.frozen to i1281184  %byteOff.numbits.wide = zext i64 %byteOff.numbits to i1281185  %intermediate.val.frozen.bits.positioned = lshr i128 %intermediate.val.frozen.bits, %byteOff.numbits.wide1186  %intermediate.val.frozen.bits.positioned.extracted = trunc i128 %intermediate.val.frozen.bits.positioned to i641187  store i64 %intermediate.val.frozen.bits.positioned.extracted, ptr %dst, align 81188  ret void1189}1190 1191; no @load_16byte_chunk_of_16byte_alloca1192 1193define void @load_1byte_chunk_of_32byte_alloca(ptr %src, i64 %byteOff, ptr %dst) nounwind {1194; X64-LABEL: load_1byte_chunk_of_32byte_alloca:1195; X64:       # %bb.0:1196; X64-NEXT:    movups (%rdi), %xmm01197; X64-NEXT:    movups 16(%rdi), %xmm11198; X64-NEXT:    leal (,%rsi,8), %eax1199; X64-NEXT:    xorps %xmm2, %xmm21200; X64-NEXT:    movaps %xmm2, -{{[0-9]+}}(%rsp)1201; X64-NEXT:    movaps %xmm2, -{{[0-9]+}}(%rsp)1202; X64-NEXT:    movaps %xmm1, -{{[0-9]+}}(%rsp)1203; X64-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)1204; X64-NEXT:    shrb $6, %al1205; X64-NEXT:    movzbl %al, %eax1206; X64-NEXT:    leaq -72(%rsp,%rax,8), %rax1207; X64-NEXT:    andl $7, %esi1208; X64-NEXT:    movzbl (%rsi,%rax), %eax1209; X64-NEXT:    movb %al, (%rdx)1210; X64-NEXT:    retq1211;1212; X86-NO-BMI2-NO-SHLD-LABEL: load_1byte_chunk_of_32byte_alloca:1213; X86-NO-BMI2-NO-SHLD:       # %bb.0:1214; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %esi1215; X86-NO-BMI2-NO-SHLD-NEXT:    subl $72, %esp1216; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx1217; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax1218; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx1219; X86-NO-BMI2-NO-SHLD-NEXT:    movups (%edx), %xmm01220; X86-NO-BMI2-NO-SHLD-NEXT:    movups 16(%edx), %xmm11221; X86-NO-BMI2-NO-SHLD-NEXT:    shll $3, %ecx1222; X86-NO-BMI2-NO-SHLD-NEXT:    xorps %xmm2, %xmm21223; X86-NO-BMI2-NO-SHLD-NEXT:    movaps %xmm2, {{[0-9]+}}(%esp)1224; X86-NO-BMI2-NO-SHLD-NEXT:    movaps %xmm2, {{[0-9]+}}(%esp)1225; X86-NO-BMI2-NO-SHLD-NEXT:    movaps %xmm1, {{[0-9]+}}(%esp)1226; X86-NO-BMI2-NO-SHLD-NEXT:    movaps %xmm0, (%esp)1227; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, %edx1228; X86-NO-BMI2-NO-SHLD-NEXT:    shrb $5, %dl1229; X86-NO-BMI2-NO-SHLD-NEXT:    movzbl %dl, %edx1230; X86-NO-BMI2-NO-SHLD-NEXT:    movl (%esp,%edx,4), %esi1231; X86-NO-BMI2-NO-SHLD-NEXT:    movl 4(%esp,%edx,4), %edx1232; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %esi1233; X86-NO-BMI2-NO-SHLD-NEXT:    notb %cl1234; X86-NO-BMI2-NO-SHLD-NEXT:    addl %edx, %edx1235; X86-NO-BMI2-NO-SHLD-NEXT:    # kill: def $cl killed $cl killed $ecx1236; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %edx1237; X86-NO-BMI2-NO-SHLD-NEXT:    orl %esi, %edx1238; X86-NO-BMI2-NO-SHLD-NEXT:    movb %dl, (%eax)1239; X86-NO-BMI2-NO-SHLD-NEXT:    addl $72, %esp1240; X86-NO-BMI2-NO-SHLD-NEXT:    popl %esi1241; X86-NO-BMI2-NO-SHLD-NEXT:    retl1242;1243; X86-SHLD-LABEL: load_1byte_chunk_of_32byte_alloca:1244; X86-SHLD:       # %bb.0:1245; X86-SHLD-NEXT:    pushl %ebx1246; X86-SHLD-NEXT:    subl $72, %esp1247; X86-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx1248; X86-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax1249; X86-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx1250; X86-SHLD-NEXT:    movups (%edx), %xmm01251; X86-SHLD-NEXT:    movups 16(%edx), %xmm11252; X86-SHLD-NEXT:    shll $3, %ecx1253; X86-SHLD-NEXT:    xorps %xmm2, %xmm21254; X86-SHLD-NEXT:    movaps %xmm2, {{[0-9]+}}(%esp)1255; X86-SHLD-NEXT:    movaps %xmm2, {{[0-9]+}}(%esp)1256; X86-SHLD-NEXT:    movaps %xmm1, {{[0-9]+}}(%esp)1257; X86-SHLD-NEXT:    movaps %xmm0, (%esp)1258; X86-SHLD-NEXT:    movl %ecx, %edx1259; X86-SHLD-NEXT:    shrb $5, %dl1260; X86-SHLD-NEXT:    movzbl %dl, %edx1261; X86-SHLD-NEXT:    movl (%esp,%edx,4), %ebx1262; X86-SHLD-NEXT:    movl 4(%esp,%edx,4), %edx1263; X86-SHLD-NEXT:    # kill: def $cl killed $cl killed $ecx1264; X86-SHLD-NEXT:    shrdl %cl, %edx, %ebx1265; X86-SHLD-NEXT:    movb %bl, (%eax)1266; X86-SHLD-NEXT:    addl $72, %esp1267; X86-SHLD-NEXT:    popl %ebx1268; X86-SHLD-NEXT:    retl1269;1270; X86-HAVE-BMI2-NO-SHLD-LABEL: load_1byte_chunk_of_32byte_alloca:1271; X86-HAVE-BMI2-NO-SHLD:       # %bb.0:1272; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %esi1273; X86-HAVE-BMI2-NO-SHLD-NEXT:    subl $72, %esp1274; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx1275; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax1276; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx1277; X86-HAVE-BMI2-NO-SHLD-NEXT:    movups (%edx), %xmm01278; X86-HAVE-BMI2-NO-SHLD-NEXT:    movups 16(%edx), %xmm11279; X86-HAVE-BMI2-NO-SHLD-NEXT:    shll $3, %ecx1280; X86-HAVE-BMI2-NO-SHLD-NEXT:    xorps %xmm2, %xmm21281; X86-HAVE-BMI2-NO-SHLD-NEXT:    movaps %xmm2, {{[0-9]+}}(%esp)1282; X86-HAVE-BMI2-NO-SHLD-NEXT:    movaps %xmm2, {{[0-9]+}}(%esp)1283; X86-HAVE-BMI2-NO-SHLD-NEXT:    movaps %xmm1, {{[0-9]+}}(%esp)1284; X86-HAVE-BMI2-NO-SHLD-NEXT:    movaps %xmm0, (%esp)1285; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, %edx1286; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrb $5, %dl1287; X86-HAVE-BMI2-NO-SHLD-NEXT:    movzbl %dl, %edx1288; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %ecx, (%esp,%edx,4), %esi1289; X86-HAVE-BMI2-NO-SHLD-NEXT:    notb %cl1290; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 4(%esp,%edx,4), %edx1291; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl %edx, %edx1292; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %ecx, %edx, %ecx1293; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %esi, %ecx1294; X86-HAVE-BMI2-NO-SHLD-NEXT:    movb %cl, (%eax)1295; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl $72, %esp1296; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %esi1297; X86-HAVE-BMI2-NO-SHLD-NEXT:    retl1298  %init = load <32 x i8>, ptr %src, align 11299  %byteOff.numbits = shl nuw nsw i64 %byteOff, 31300  %intermediate.val.frozen = freeze <32 x i8> %init1301  %intermediate.val.frozen.bits = bitcast <32 x i8> %intermediate.val.frozen to i2561302  %byteOff.numbits.wide = zext i64 %byteOff.numbits to i2561303  %intermediate.val.frozen.bits.positioned = lshr i256 %intermediate.val.frozen.bits, %byteOff.numbits.wide1304  %intermediate.val.frozen.bits.positioned.extracted = trunc i256 %intermediate.val.frozen.bits.positioned to i81305  %1 = insertelement <1 x i8> poison, i8 %intermediate.val.frozen.bits.positioned.extracted, i64 01306  store <1 x i8> %1, ptr %dst, align 11307  ret void1308}1309 1310define void @load_2byte_chunk_of_32byte_alloca(ptr %src, i64 %byteOff, ptr %dst) nounwind {1311; X64-NO-BMI2-LABEL: load_2byte_chunk_of_32byte_alloca:1312; X64-NO-BMI2:       # %bb.0:1313; X64-NO-BMI2-NEXT:    movups (%rdi), %xmm01314; X64-NO-BMI2-NEXT:    movups 16(%rdi), %xmm11315; X64-NO-BMI2-NEXT:    leal (,%rsi,8), %ecx1316; X64-NO-BMI2-NEXT:    xorps %xmm2, %xmm21317; X64-NO-BMI2-NEXT:    movaps %xmm2, -{{[0-9]+}}(%rsp)1318; X64-NO-BMI2-NEXT:    movaps %xmm2, -{{[0-9]+}}(%rsp)1319; X64-NO-BMI2-NEXT:    movaps %xmm1, -{{[0-9]+}}(%rsp)1320; X64-NO-BMI2-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)1321; X64-NO-BMI2-NEXT:    movl %ecx, %eax1322; X64-NO-BMI2-NEXT:    shrb $6, %al1323; X64-NO-BMI2-NEXT:    movzbl %al, %eax1324; X64-NO-BMI2-NEXT:    movq -72(%rsp,%rax,8), %rsi1325; X64-NO-BMI2-NEXT:    shrq %cl, %rsi1326; X64-NO-BMI2-NEXT:    movl -64(%rsp,%rax,8), %eax1327; X64-NO-BMI2-NEXT:    addl %eax, %eax1328; X64-NO-BMI2-NEXT:    andb $56, %cl1329; X64-NO-BMI2-NEXT:    notb %cl1330; X64-NO-BMI2-NEXT:    # kill: def $cl killed $cl killed $ecx1331; X64-NO-BMI2-NEXT:    shlq %cl, %rax1332; X64-NO-BMI2-NEXT:    orl %esi, %eax1333; X64-NO-BMI2-NEXT:    movw %ax, (%rdx)1334; X64-NO-BMI2-NEXT:    retq1335;1336; X64-BMI2-LABEL: load_2byte_chunk_of_32byte_alloca:1337; X64-BMI2:       # %bb.0:1338; X64-BMI2-NEXT:    movups (%rdi), %xmm01339; X64-BMI2-NEXT:    movups 16(%rdi), %xmm11340; X64-BMI2-NEXT:    shll $3, %esi1341; X64-BMI2-NEXT:    xorps %xmm2, %xmm21342; X64-BMI2-NEXT:    movaps %xmm2, -{{[0-9]+}}(%rsp)1343; X64-BMI2-NEXT:    movaps %xmm2, -{{[0-9]+}}(%rsp)1344; X64-BMI2-NEXT:    movaps %xmm1, -{{[0-9]+}}(%rsp)1345; X64-BMI2-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)1346; X64-BMI2-NEXT:    movl %esi, %eax1347; X64-BMI2-NEXT:    shrb $6, %al1348; X64-BMI2-NEXT:    movzbl %al, %eax1349; X64-BMI2-NEXT:    shrxq %rsi, -72(%rsp,%rax,8), %rcx1350; X64-BMI2-NEXT:    # kill: def $sil killed $sil killed $rsi def $rsi1351; X64-BMI2-NEXT:    andb $56, %sil1352; X64-BMI2-NEXT:    notb %sil1353; X64-BMI2-NEXT:    movl -64(%rsp,%rax,8), %eax1354; X64-BMI2-NEXT:    addl %eax, %eax1355; X64-BMI2-NEXT:    shlxq %rsi, %rax, %rax1356; X64-BMI2-NEXT:    orl %eax, %ecx1357; X64-BMI2-NEXT:    movw %cx, (%rdx)1358; X64-BMI2-NEXT:    retq1359;1360; X86-NO-BMI2-NO-SHLD-LABEL: load_2byte_chunk_of_32byte_alloca:1361; X86-NO-BMI2-NO-SHLD:       # %bb.0:1362; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %esi1363; X86-NO-BMI2-NO-SHLD-NEXT:    subl $72, %esp1364; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx1365; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax1366; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx1367; X86-NO-BMI2-NO-SHLD-NEXT:    movups (%edx), %xmm01368; X86-NO-BMI2-NO-SHLD-NEXT:    movups 16(%edx), %xmm11369; X86-NO-BMI2-NO-SHLD-NEXT:    shll $3, %ecx1370; X86-NO-BMI2-NO-SHLD-NEXT:    xorps %xmm2, %xmm21371; X86-NO-BMI2-NO-SHLD-NEXT:    movaps %xmm2, {{[0-9]+}}(%esp)1372; X86-NO-BMI2-NO-SHLD-NEXT:    movaps %xmm2, {{[0-9]+}}(%esp)1373; X86-NO-BMI2-NO-SHLD-NEXT:    movaps %xmm1, {{[0-9]+}}(%esp)1374; X86-NO-BMI2-NO-SHLD-NEXT:    movaps %xmm0, (%esp)1375; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, %edx1376; X86-NO-BMI2-NO-SHLD-NEXT:    shrb $5, %dl1377; X86-NO-BMI2-NO-SHLD-NEXT:    movzbl %dl, %edx1378; X86-NO-BMI2-NO-SHLD-NEXT:    movl (%esp,%edx,4), %esi1379; X86-NO-BMI2-NO-SHLD-NEXT:    movl 4(%esp,%edx,4), %edx1380; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %esi1381; X86-NO-BMI2-NO-SHLD-NEXT:    notb %cl1382; X86-NO-BMI2-NO-SHLD-NEXT:    addl %edx, %edx1383; X86-NO-BMI2-NO-SHLD-NEXT:    # kill: def $cl killed $cl killed $ecx1384; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %edx1385; X86-NO-BMI2-NO-SHLD-NEXT:    orl %esi, %edx1386; X86-NO-BMI2-NO-SHLD-NEXT:    movw %dx, (%eax)1387; X86-NO-BMI2-NO-SHLD-NEXT:    addl $72, %esp1388; X86-NO-BMI2-NO-SHLD-NEXT:    popl %esi1389; X86-NO-BMI2-NO-SHLD-NEXT:    retl1390;1391; X86-SHLD-LABEL: load_2byte_chunk_of_32byte_alloca:1392; X86-SHLD:       # %bb.0:1393; X86-SHLD-NEXT:    pushl %esi1394; X86-SHLD-NEXT:    subl $72, %esp1395; X86-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx1396; X86-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax1397; X86-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx1398; X86-SHLD-NEXT:    movups (%edx), %xmm01399; X86-SHLD-NEXT:    movups 16(%edx), %xmm11400; X86-SHLD-NEXT:    shll $3, %ecx1401; X86-SHLD-NEXT:    xorps %xmm2, %xmm21402; X86-SHLD-NEXT:    movaps %xmm2, {{[0-9]+}}(%esp)1403; X86-SHLD-NEXT:    movaps %xmm2, {{[0-9]+}}(%esp)1404; X86-SHLD-NEXT:    movaps %xmm1, {{[0-9]+}}(%esp)1405; X86-SHLD-NEXT:    movaps %xmm0, (%esp)1406; X86-SHLD-NEXT:    movl %ecx, %edx1407; X86-SHLD-NEXT:    shrb $5, %dl1408; X86-SHLD-NEXT:    movzbl %dl, %edx1409; X86-SHLD-NEXT:    movl (%esp,%edx,4), %esi1410; X86-SHLD-NEXT:    movl 4(%esp,%edx,4), %edx1411; X86-SHLD-NEXT:    # kill: def $cl killed $cl killed $ecx1412; X86-SHLD-NEXT:    shrdl %cl, %edx, %esi1413; X86-SHLD-NEXT:    movw %si, (%eax)1414; X86-SHLD-NEXT:    addl $72, %esp1415; X86-SHLD-NEXT:    popl %esi1416; X86-SHLD-NEXT:    retl1417;1418; X86-HAVE-BMI2-NO-SHLD-LABEL: load_2byte_chunk_of_32byte_alloca:1419; X86-HAVE-BMI2-NO-SHLD:       # %bb.0:1420; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %esi1421; X86-HAVE-BMI2-NO-SHLD-NEXT:    subl $72, %esp1422; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx1423; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax1424; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx1425; X86-HAVE-BMI2-NO-SHLD-NEXT:    movups (%edx), %xmm01426; X86-HAVE-BMI2-NO-SHLD-NEXT:    movups 16(%edx), %xmm11427; X86-HAVE-BMI2-NO-SHLD-NEXT:    shll $3, %ecx1428; X86-HAVE-BMI2-NO-SHLD-NEXT:    xorps %xmm2, %xmm21429; X86-HAVE-BMI2-NO-SHLD-NEXT:    movaps %xmm2, {{[0-9]+}}(%esp)1430; X86-HAVE-BMI2-NO-SHLD-NEXT:    movaps %xmm2, {{[0-9]+}}(%esp)1431; X86-HAVE-BMI2-NO-SHLD-NEXT:    movaps %xmm1, {{[0-9]+}}(%esp)1432; X86-HAVE-BMI2-NO-SHLD-NEXT:    movaps %xmm0, (%esp)1433; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, %edx1434; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrb $5, %dl1435; X86-HAVE-BMI2-NO-SHLD-NEXT:    movzbl %dl, %edx1436; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %ecx, (%esp,%edx,4), %esi1437; X86-HAVE-BMI2-NO-SHLD-NEXT:    notb %cl1438; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 4(%esp,%edx,4), %edx1439; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl %edx, %edx1440; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %ecx, %edx, %ecx1441; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %esi, %ecx1442; X86-HAVE-BMI2-NO-SHLD-NEXT:    movw %cx, (%eax)1443; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl $72, %esp1444; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %esi1445; X86-HAVE-BMI2-NO-SHLD-NEXT:    retl1446  %init = load <32 x i8>, ptr %src, align 11447  %byteOff.numbits = shl nuw nsw i64 %byteOff, 31448  %intermediate.val.frozen = freeze <32 x i8> %init1449  %intermediate.val.frozen.bits = bitcast <32 x i8> %intermediate.val.frozen to i2561450  %byteOff.numbits.wide = zext i64 %byteOff.numbits to i2561451  %intermediate.val.frozen.bits.positioned = lshr i256 %intermediate.val.frozen.bits, %byteOff.numbits.wide1452  %intermediate.val.frozen.bits.positioned.extracted = trunc i256 %intermediate.val.frozen.bits.positioned to i161453  store i16 %intermediate.val.frozen.bits.positioned.extracted, ptr %dst, align 21454  ret void1455}1456 1457define void @load_4byte_chunk_of_32byte_alloca(ptr %src, i64 %byteOff, ptr %dst) nounwind {1458; X64-NO-BMI2-LABEL: load_4byte_chunk_of_32byte_alloca:1459; X64-NO-BMI2:       # %bb.0:1460; X64-NO-BMI2-NEXT:    movups (%rdi), %xmm01461; X64-NO-BMI2-NEXT:    movups 16(%rdi), %xmm11462; X64-NO-BMI2-NEXT:    leal (,%rsi,8), %ecx1463; X64-NO-BMI2-NEXT:    xorps %xmm2, %xmm21464; X64-NO-BMI2-NEXT:    movaps %xmm2, -{{[0-9]+}}(%rsp)1465; X64-NO-BMI2-NEXT:    movaps %xmm2, -{{[0-9]+}}(%rsp)1466; X64-NO-BMI2-NEXT:    movaps %xmm1, -{{[0-9]+}}(%rsp)1467; X64-NO-BMI2-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)1468; X64-NO-BMI2-NEXT:    movl %ecx, %eax1469; X64-NO-BMI2-NEXT:    shrb $6, %al1470; X64-NO-BMI2-NEXT:    movzbl %al, %eax1471; X64-NO-BMI2-NEXT:    movq -72(%rsp,%rax,8), %rsi1472; X64-NO-BMI2-NEXT:    shrq %cl, %rsi1473; X64-NO-BMI2-NEXT:    movl -64(%rsp,%rax,8), %eax1474; X64-NO-BMI2-NEXT:    addl %eax, %eax1475; X64-NO-BMI2-NEXT:    andb $56, %cl1476; X64-NO-BMI2-NEXT:    notb %cl1477; X64-NO-BMI2-NEXT:    # kill: def $cl killed $cl killed $ecx1478; X64-NO-BMI2-NEXT:    shlq %cl, %rax1479; X64-NO-BMI2-NEXT:    orl %esi, %eax1480; X64-NO-BMI2-NEXT:    movl %eax, (%rdx)1481; X64-NO-BMI2-NEXT:    retq1482;1483; X64-BMI2-LABEL: load_4byte_chunk_of_32byte_alloca:1484; X64-BMI2:       # %bb.0:1485; X64-BMI2-NEXT:    movups (%rdi), %xmm01486; X64-BMI2-NEXT:    movups 16(%rdi), %xmm11487; X64-BMI2-NEXT:    shll $3, %esi1488; X64-BMI2-NEXT:    xorps %xmm2, %xmm21489; X64-BMI2-NEXT:    movaps %xmm2, -{{[0-9]+}}(%rsp)1490; X64-BMI2-NEXT:    movaps %xmm2, -{{[0-9]+}}(%rsp)1491; X64-BMI2-NEXT:    movaps %xmm1, -{{[0-9]+}}(%rsp)1492; X64-BMI2-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)1493; X64-BMI2-NEXT:    movl %esi, %eax1494; X64-BMI2-NEXT:    shrb $6, %al1495; X64-BMI2-NEXT:    movzbl %al, %eax1496; X64-BMI2-NEXT:    shrxq %rsi, -72(%rsp,%rax,8), %rcx1497; X64-BMI2-NEXT:    # kill: def $sil killed $sil killed $rsi def $rsi1498; X64-BMI2-NEXT:    andb $56, %sil1499; X64-BMI2-NEXT:    notb %sil1500; X64-BMI2-NEXT:    movl -64(%rsp,%rax,8), %eax1501; X64-BMI2-NEXT:    addl %eax, %eax1502; X64-BMI2-NEXT:    shlxq %rsi, %rax, %rax1503; X64-BMI2-NEXT:    orl %eax, %ecx1504; X64-BMI2-NEXT:    movl %ecx, (%rdx)1505; X64-BMI2-NEXT:    retq1506;1507; X86-NO-BMI2-NO-SHLD-LABEL: load_4byte_chunk_of_32byte_alloca:1508; X86-NO-BMI2-NO-SHLD:       # %bb.0:1509; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %esi1510; X86-NO-BMI2-NO-SHLD-NEXT:    subl $72, %esp1511; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx1512; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax1513; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx1514; X86-NO-BMI2-NO-SHLD-NEXT:    movups (%edx), %xmm01515; X86-NO-BMI2-NO-SHLD-NEXT:    movups 16(%edx), %xmm11516; X86-NO-BMI2-NO-SHLD-NEXT:    shll $3, %ecx1517; X86-NO-BMI2-NO-SHLD-NEXT:    xorps %xmm2, %xmm21518; X86-NO-BMI2-NO-SHLD-NEXT:    movaps %xmm2, {{[0-9]+}}(%esp)1519; X86-NO-BMI2-NO-SHLD-NEXT:    movaps %xmm2, {{[0-9]+}}(%esp)1520; X86-NO-BMI2-NO-SHLD-NEXT:    movaps %xmm1, {{[0-9]+}}(%esp)1521; X86-NO-BMI2-NO-SHLD-NEXT:    movaps %xmm0, (%esp)1522; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, %edx1523; X86-NO-BMI2-NO-SHLD-NEXT:    shrb $5, %dl1524; X86-NO-BMI2-NO-SHLD-NEXT:    movzbl %dl, %edx1525; X86-NO-BMI2-NO-SHLD-NEXT:    movl (%esp,%edx,4), %esi1526; X86-NO-BMI2-NO-SHLD-NEXT:    movl 4(%esp,%edx,4), %edx1527; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %esi1528; X86-NO-BMI2-NO-SHLD-NEXT:    notb %cl1529; X86-NO-BMI2-NO-SHLD-NEXT:    addl %edx, %edx1530; X86-NO-BMI2-NO-SHLD-NEXT:    # kill: def $cl killed $cl killed $ecx1531; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %edx1532; X86-NO-BMI2-NO-SHLD-NEXT:    orl %esi, %edx1533; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, (%eax)1534; X86-NO-BMI2-NO-SHLD-NEXT:    addl $72, %esp1535; X86-NO-BMI2-NO-SHLD-NEXT:    popl %esi1536; X86-NO-BMI2-NO-SHLD-NEXT:    retl1537;1538; X86-SHLD-LABEL: load_4byte_chunk_of_32byte_alloca:1539; X86-SHLD:       # %bb.0:1540; X86-SHLD-NEXT:    pushl %esi1541; X86-SHLD-NEXT:    subl $72, %esp1542; X86-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx1543; X86-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax1544; X86-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx1545; X86-SHLD-NEXT:    movups (%edx), %xmm01546; X86-SHLD-NEXT:    movups 16(%edx), %xmm11547; X86-SHLD-NEXT:    shll $3, %ecx1548; X86-SHLD-NEXT:    xorps %xmm2, %xmm21549; X86-SHLD-NEXT:    movaps %xmm2, {{[0-9]+}}(%esp)1550; X86-SHLD-NEXT:    movaps %xmm2, {{[0-9]+}}(%esp)1551; X86-SHLD-NEXT:    movaps %xmm1, {{[0-9]+}}(%esp)1552; X86-SHLD-NEXT:    movaps %xmm0, (%esp)1553; X86-SHLD-NEXT:    movl %ecx, %edx1554; X86-SHLD-NEXT:    shrb $5, %dl1555; X86-SHLD-NEXT:    movzbl %dl, %edx1556; X86-SHLD-NEXT:    movl (%esp,%edx,4), %esi1557; X86-SHLD-NEXT:    movl 4(%esp,%edx,4), %edx1558; X86-SHLD-NEXT:    # kill: def $cl killed $cl killed $ecx1559; X86-SHLD-NEXT:    shrdl %cl, %edx, %esi1560; X86-SHLD-NEXT:    movl %esi, (%eax)1561; X86-SHLD-NEXT:    addl $72, %esp1562; X86-SHLD-NEXT:    popl %esi1563; X86-SHLD-NEXT:    retl1564;1565; X86-HAVE-BMI2-NO-SHLD-LABEL: load_4byte_chunk_of_32byte_alloca:1566; X86-HAVE-BMI2-NO-SHLD:       # %bb.0:1567; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %esi1568; X86-HAVE-BMI2-NO-SHLD-NEXT:    subl $72, %esp1569; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx1570; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax1571; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx1572; X86-HAVE-BMI2-NO-SHLD-NEXT:    movups (%edx), %xmm01573; X86-HAVE-BMI2-NO-SHLD-NEXT:    movups 16(%edx), %xmm11574; X86-HAVE-BMI2-NO-SHLD-NEXT:    shll $3, %ecx1575; X86-HAVE-BMI2-NO-SHLD-NEXT:    xorps %xmm2, %xmm21576; X86-HAVE-BMI2-NO-SHLD-NEXT:    movaps %xmm2, {{[0-9]+}}(%esp)1577; X86-HAVE-BMI2-NO-SHLD-NEXT:    movaps %xmm2, {{[0-9]+}}(%esp)1578; X86-HAVE-BMI2-NO-SHLD-NEXT:    movaps %xmm1, {{[0-9]+}}(%esp)1579; X86-HAVE-BMI2-NO-SHLD-NEXT:    movaps %xmm0, (%esp)1580; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, %edx1581; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrb $5, %dl1582; X86-HAVE-BMI2-NO-SHLD-NEXT:    movzbl %dl, %edx1583; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %ecx, (%esp,%edx,4), %esi1584; X86-HAVE-BMI2-NO-SHLD-NEXT:    notb %cl1585; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 4(%esp,%edx,4), %edx1586; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl %edx, %edx1587; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %ecx, %edx, %ecx1588; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %esi, %ecx1589; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, (%eax)1590; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl $72, %esp1591; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %esi1592; X86-HAVE-BMI2-NO-SHLD-NEXT:    retl1593  %init = load <32 x i8>, ptr %src, align 11594  %byteOff.numbits = shl nuw nsw i64 %byteOff, 31595  %intermediate.val.frozen = freeze <32 x i8> %init1596  %intermediate.val.frozen.bits = bitcast <32 x i8> %intermediate.val.frozen to i2561597  %byteOff.numbits.wide = zext i64 %byteOff.numbits to i2561598  %intermediate.val.frozen.bits.positioned = lshr i256 %intermediate.val.frozen.bits, %byteOff.numbits.wide1599  %intermediate.val.frozen.bits.positioned.extracted = trunc i256 %intermediate.val.frozen.bits.positioned to i321600  store i32 %intermediate.val.frozen.bits.positioned.extracted, ptr %dst, align 41601  ret void1602}1603 1604define void @load_8byte_chunk_of_32byte_alloca(ptr %src, i64 %byteOff, ptr %dst) nounwind {1605; X64-NO-BMI2-NO-SHLD-LABEL: load_8byte_chunk_of_32byte_alloca:1606; X64-NO-BMI2-NO-SHLD:       # %bb.0:1607; X64-NO-BMI2-NO-SHLD-NEXT:    movups (%rdi), %xmm01608; X64-NO-BMI2-NO-SHLD-NEXT:    movups 16(%rdi), %xmm11609; X64-NO-BMI2-NO-SHLD-NEXT:    leal (,%rsi,8), %ecx1610; X64-NO-BMI2-NO-SHLD-NEXT:    xorps %xmm2, %xmm21611; X64-NO-BMI2-NO-SHLD-NEXT:    movaps %xmm2, -{{[0-9]+}}(%rsp)1612; X64-NO-BMI2-NO-SHLD-NEXT:    movaps %xmm2, -{{[0-9]+}}(%rsp)1613; X64-NO-BMI2-NO-SHLD-NEXT:    movaps %xmm1, -{{[0-9]+}}(%rsp)1614; X64-NO-BMI2-NO-SHLD-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)1615; X64-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, %eax1616; X64-NO-BMI2-NO-SHLD-NEXT:    shrb $6, %al1617; X64-NO-BMI2-NO-SHLD-NEXT:    movzbl %al, %eax1618; X64-NO-BMI2-NO-SHLD-NEXT:    movq -72(%rsp,%rax,8), %rsi1619; X64-NO-BMI2-NO-SHLD-NEXT:    movq -64(%rsp,%rax,8), %rax1620; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %cl, %rsi1621; X64-NO-BMI2-NO-SHLD-NEXT:    notb %cl1622; X64-NO-BMI2-NO-SHLD-NEXT:    addq %rax, %rax1623; X64-NO-BMI2-NO-SHLD-NEXT:    # kill: def $cl killed $cl killed $ecx1624; X64-NO-BMI2-NO-SHLD-NEXT:    shlq %cl, %rax1625; X64-NO-BMI2-NO-SHLD-NEXT:    orq %rsi, %rax1626; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rax, (%rdx)1627; X64-NO-BMI2-NO-SHLD-NEXT:    retq1628;1629; X64-SHLD-LABEL: load_8byte_chunk_of_32byte_alloca:1630; X64-SHLD:       # %bb.0:1631; X64-SHLD-NEXT:    movups (%rdi), %xmm01632; X64-SHLD-NEXT:    movups 16(%rdi), %xmm11633; X64-SHLD-NEXT:    leal (,%rsi,8), %ecx1634; X64-SHLD-NEXT:    xorps %xmm2, %xmm21635; X64-SHLD-NEXT:    movaps %xmm2, -{{[0-9]+}}(%rsp)1636; X64-SHLD-NEXT:    movaps %xmm2, -{{[0-9]+}}(%rsp)1637; X64-SHLD-NEXT:    movaps %xmm1, -{{[0-9]+}}(%rsp)1638; X64-SHLD-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)1639; X64-SHLD-NEXT:    movl %ecx, %eax1640; X64-SHLD-NEXT:    shrb $6, %al1641; X64-SHLD-NEXT:    movzbl %al, %eax1642; X64-SHLD-NEXT:    movq -72(%rsp,%rax,8), %rsi1643; X64-SHLD-NEXT:    movq -64(%rsp,%rax,8), %rax1644; X64-SHLD-NEXT:    # kill: def $cl killed $cl killed $ecx1645; X64-SHLD-NEXT:    shrdq %cl, %rax, %rsi1646; X64-SHLD-NEXT:    movq %rsi, (%rdx)1647; X64-SHLD-NEXT:    retq1648;1649; X64-HAVE-BMI2-NO-SHLD-LABEL: load_8byte_chunk_of_32byte_alloca:1650; X64-HAVE-BMI2-NO-SHLD:       # %bb.0:1651; X64-HAVE-BMI2-NO-SHLD-NEXT:    movups (%rdi), %xmm01652; X64-HAVE-BMI2-NO-SHLD-NEXT:    movups 16(%rdi), %xmm11653; X64-HAVE-BMI2-NO-SHLD-NEXT:    shll $3, %esi1654; X64-HAVE-BMI2-NO-SHLD-NEXT:    xorps %xmm2, %xmm21655; X64-HAVE-BMI2-NO-SHLD-NEXT:    movaps %xmm2, -{{[0-9]+}}(%rsp)1656; X64-HAVE-BMI2-NO-SHLD-NEXT:    movaps %xmm2, -{{[0-9]+}}(%rsp)1657; X64-HAVE-BMI2-NO-SHLD-NEXT:    movaps %xmm1, -{{[0-9]+}}(%rsp)1658; X64-HAVE-BMI2-NO-SHLD-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)1659; X64-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, %eax1660; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrb $6, %al1661; X64-HAVE-BMI2-NO-SHLD-NEXT:    movzbl %al, %eax1662; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrxq %rsi, -72(%rsp,%rax,8), %rcx1663; X64-HAVE-BMI2-NO-SHLD-NEXT:    notb %sil1664; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq -64(%rsp,%rax,8), %rax1665; X64-HAVE-BMI2-NO-SHLD-NEXT:    addq %rax, %rax1666; X64-HAVE-BMI2-NO-SHLD-NEXT:    shlxq %rsi, %rax, %rax1667; X64-HAVE-BMI2-NO-SHLD-NEXT:    orq %rcx, %rax1668; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rax, (%rdx)1669; X64-HAVE-BMI2-NO-SHLD-NEXT:    retq1670;1671; X86-NO-BMI2-NO-SHLD-LABEL: load_8byte_chunk_of_32byte_alloca:1672; X86-NO-BMI2-NO-SHLD:       # %bb.0:1673; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %ebp1674; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %ebx1675; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %edi1676; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %esi1677; X86-NO-BMI2-NO-SHLD-NEXT:    subl $76, %esp1678; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax1679; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx1680; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx1681; X86-NO-BMI2-NO-SHLD-NEXT:    movups (%ecx), %xmm01682; X86-NO-BMI2-NO-SHLD-NEXT:    movups 16(%ecx), %xmm11683; X86-NO-BMI2-NO-SHLD-NEXT:    shll $3, %eax1684; X86-NO-BMI2-NO-SHLD-NEXT:    xorps %xmm2, %xmm21685; X86-NO-BMI2-NO-SHLD-NEXT:    movaps %xmm2, {{[0-9]+}}(%esp)1686; X86-NO-BMI2-NO-SHLD-NEXT:    movaps %xmm2, {{[0-9]+}}(%esp)1687; X86-NO-BMI2-NO-SHLD-NEXT:    movaps %xmm1, {{[0-9]+}}(%esp)1688; X86-NO-BMI2-NO-SHLD-NEXT:    movaps %xmm0, (%esp)1689; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx1690; X86-NO-BMI2-NO-SHLD-NEXT:    shrb $5, %cl1691; X86-NO-BMI2-NO-SHLD-NEXT:    movzbl %cl, %ebx1692; X86-NO-BMI2-NO-SHLD-NEXT:    movl (%esp,%ebx,4), %ebp1693; X86-NO-BMI2-NO-SHLD-NEXT:    movl 4(%esp,%ebx,4), %esi1694; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx1695; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %ebp1696; X86-NO-BMI2-NO-SHLD-NEXT:    notb %cl1697; X86-NO-BMI2-NO-SHLD-NEXT:    leal (%esi,%esi), %edi1698; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %edi1699; X86-NO-BMI2-NO-SHLD-NEXT:    orl %ebp, %edi1700; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx1701; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %esi1702; X86-NO-BMI2-NO-SHLD-NEXT:    andb $24, %al1703; X86-NO-BMI2-NO-SHLD-NEXT:    notb %al1704; X86-NO-BMI2-NO-SHLD-NEXT:    movl 8(%esp,%ebx,4), %ebx1705; X86-NO-BMI2-NO-SHLD-NEXT:    addl %ebx, %ebx1706; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx1707; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %ebx1708; X86-NO-BMI2-NO-SHLD-NEXT:    orl %esi, %ebx1709; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, 4(%edx)1710; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edi, (%edx)1711; X86-NO-BMI2-NO-SHLD-NEXT:    addl $76, %esp1712; X86-NO-BMI2-NO-SHLD-NEXT:    popl %esi1713; X86-NO-BMI2-NO-SHLD-NEXT:    popl %edi1714; X86-NO-BMI2-NO-SHLD-NEXT:    popl %ebx1715; X86-NO-BMI2-NO-SHLD-NEXT:    popl %ebp1716; X86-NO-BMI2-NO-SHLD-NEXT:    retl1717;1718; X86-SHLD-LABEL: load_8byte_chunk_of_32byte_alloca:1719; X86-SHLD:       # %bb.0:1720; X86-SHLD-NEXT:    pushl %ebx1721; X86-SHLD-NEXT:    pushl %edi1722; X86-SHLD-NEXT:    pushl %esi1723; X86-SHLD-NEXT:    subl $64, %esp1724; X86-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx1725; X86-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax1726; X86-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx1727; X86-SHLD-NEXT:    movups (%edx), %xmm01728; X86-SHLD-NEXT:    movups 16(%edx), %xmm11729; X86-SHLD-NEXT:    shll $3, %ecx1730; X86-SHLD-NEXT:    xorps %xmm2, %xmm21731; X86-SHLD-NEXT:    movaps %xmm2, {{[0-9]+}}(%esp)1732; X86-SHLD-NEXT:    movaps %xmm2, {{[0-9]+}}(%esp)1733; X86-SHLD-NEXT:    movaps %xmm1, {{[0-9]+}}(%esp)1734; X86-SHLD-NEXT:    movaps %xmm0, (%esp)1735; X86-SHLD-NEXT:    movl %ecx, %edx1736; X86-SHLD-NEXT:    shrb $5, %dl1737; X86-SHLD-NEXT:    movzbl %dl, %edx1738; X86-SHLD-NEXT:    movl 8(%esp,%edx,4), %esi1739; X86-SHLD-NEXT:    movl (%esp,%edx,4), %edi1740; X86-SHLD-NEXT:    movl 4(%esp,%edx,4), %edx1741; X86-SHLD-NEXT:    movl %edx, %ebx1742; X86-SHLD-NEXT:    shrdl %cl, %esi, %ebx1743; X86-SHLD-NEXT:    # kill: def $cl killed $cl killed $ecx1744; X86-SHLD-NEXT:    shrdl %cl, %edx, %edi1745; X86-SHLD-NEXT:    movl %ebx, 4(%eax)1746; X86-SHLD-NEXT:    movl %edi, (%eax)1747; X86-SHLD-NEXT:    addl $64, %esp1748; X86-SHLD-NEXT:    popl %esi1749; X86-SHLD-NEXT:    popl %edi1750; X86-SHLD-NEXT:    popl %ebx1751; X86-SHLD-NEXT:    retl1752;1753; X86-HAVE-BMI2-NO-SHLD-LABEL: load_8byte_chunk_of_32byte_alloca:1754; X86-HAVE-BMI2-NO-SHLD:       # %bb.0:1755; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %ebp1756; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %ebx1757; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %edi1758; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %esi1759; X86-HAVE-BMI2-NO-SHLD-NEXT:    subl $76, %esp1760; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx1761; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax1762; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx1763; X86-HAVE-BMI2-NO-SHLD-NEXT:    movups (%edx), %xmm01764; X86-HAVE-BMI2-NO-SHLD-NEXT:    movups 16(%edx), %xmm11765; X86-HAVE-BMI2-NO-SHLD-NEXT:    shll $3, %ecx1766; X86-HAVE-BMI2-NO-SHLD-NEXT:    xorps %xmm2, %xmm21767; X86-HAVE-BMI2-NO-SHLD-NEXT:    movaps %xmm2, {{[0-9]+}}(%esp)1768; X86-HAVE-BMI2-NO-SHLD-NEXT:    movaps %xmm2, {{[0-9]+}}(%esp)1769; X86-HAVE-BMI2-NO-SHLD-NEXT:    movaps %xmm1, {{[0-9]+}}(%esp)1770; X86-HAVE-BMI2-NO-SHLD-NEXT:    movaps %xmm0, (%esp)1771; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, %edx1772; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrb $5, %dl1773; X86-HAVE-BMI2-NO-SHLD-NEXT:    movzbl %dl, %edx1774; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %ecx, (%esp,%edx,4), %esi1775; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, %ebx1776; X86-HAVE-BMI2-NO-SHLD-NEXT:    notb %bl1777; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 4(%esp,%edx,4), %edi1778; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 8(%esp,%edx,4), %ebp1779; X86-HAVE-BMI2-NO-SHLD-NEXT:    leal (%edi,%edi), %edx1780; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %ebx, %edx, %edx1781; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %esi, %edx1782; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %ecx, %edi, %esi1783; X86-HAVE-BMI2-NO-SHLD-NEXT:    andb $24, %cl1784; X86-HAVE-BMI2-NO-SHLD-NEXT:    notb %cl1785; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl %ebp, %ebp1786; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %ecx, %ebp, %ecx1787; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %esi, %ecx1788; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, 4(%eax)1789; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edx, (%eax)1790; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl $76, %esp1791; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %esi1792; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %edi1793; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %ebx1794; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %ebp1795; X86-HAVE-BMI2-NO-SHLD-NEXT:    retl1796  %init = load <32 x i8>, ptr %src, align 11797  %byteOff.numbits = shl nuw nsw i64 %byteOff, 31798  %intermediate.val.frozen = freeze <32 x i8> %init1799  %intermediate.val.frozen.bits = bitcast <32 x i8> %intermediate.val.frozen to i2561800  %byteOff.numbits.wide = zext i64 %byteOff.numbits to i2561801  %intermediate.val.frozen.bits.positioned = lshr i256 %intermediate.val.frozen.bits, %byteOff.numbits.wide1802  %intermediate.val.frozen.bits.positioned.extracted = trunc i256 %intermediate.val.frozen.bits.positioned to i641803  store i64 %intermediate.val.frozen.bits.positioned.extracted, ptr %dst, align 81804  ret void1805}1806 1807define void @load_16byte_chunk_of_32byte_alloca(ptr %src, i64 %byteOff, ptr %dst) nounwind {1808; X64-NO-BMI2-NO-SHLD-LABEL: load_16byte_chunk_of_32byte_alloca:1809; X64-NO-BMI2-NO-SHLD:       # %bb.0:1810; X64-NO-BMI2-NO-SHLD-NEXT:    movups (%rdi), %xmm01811; X64-NO-BMI2-NO-SHLD-NEXT:    movups 16(%rdi), %xmm11812; X64-NO-BMI2-NO-SHLD-NEXT:    leal (,%rsi,8), %eax1813; X64-NO-BMI2-NO-SHLD-NEXT:    xorps %xmm2, %xmm21814; X64-NO-BMI2-NO-SHLD-NEXT:    movaps %xmm2, -{{[0-9]+}}(%rsp)1815; X64-NO-BMI2-NO-SHLD-NEXT:    movaps %xmm2, -{{[0-9]+}}(%rsp)1816; X64-NO-BMI2-NO-SHLD-NEXT:    movaps %xmm1, -{{[0-9]+}}(%rsp)1817; X64-NO-BMI2-NO-SHLD-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)1818; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx1819; X64-NO-BMI2-NO-SHLD-NEXT:    shrb $6, %cl1820; X64-NO-BMI2-NO-SHLD-NEXT:    movzbl %cl, %edi1821; X64-NO-BMI2-NO-SHLD-NEXT:    movq -72(%rsp,%rdi,8), %r81822; X64-NO-BMI2-NO-SHLD-NEXT:    movq -64(%rsp,%rdi,8), %r91823; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx1824; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %cl, %r81825; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %esi1826; X64-NO-BMI2-NO-SHLD-NEXT:    notb %sil1827; X64-NO-BMI2-NO-SHLD-NEXT:    leaq (%r9,%r9), %r101828; X64-NO-BMI2-NO-SHLD-NEXT:    movl %esi, %ecx1829; X64-NO-BMI2-NO-SHLD-NEXT:    shlq %cl, %r101830; X64-NO-BMI2-NO-SHLD-NEXT:    orq %r8, %r101831; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx1832; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %cl, %r91833; X64-NO-BMI2-NO-SHLD-NEXT:    movq -56(%rsp,%rdi,8), %rax1834; X64-NO-BMI2-NO-SHLD-NEXT:    addq %rax, %rax1835; X64-NO-BMI2-NO-SHLD-NEXT:    movl %esi, %ecx1836; X64-NO-BMI2-NO-SHLD-NEXT:    shlq %cl, %rax1837; X64-NO-BMI2-NO-SHLD-NEXT:    orq %r9, %rax1838; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rax, 8(%rdx)1839; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r10, (%rdx)1840; X64-NO-BMI2-NO-SHLD-NEXT:    retq1841;1842; X64-NO-BMI2-HAVE-SHLD-LABEL: load_16byte_chunk_of_32byte_alloca:1843; X64-NO-BMI2-HAVE-SHLD:       # %bb.0:1844; X64-NO-BMI2-HAVE-SHLD-NEXT:    movups (%rdi), %xmm01845; X64-NO-BMI2-HAVE-SHLD-NEXT:    movups 16(%rdi), %xmm11846; X64-NO-BMI2-HAVE-SHLD-NEXT:    leal (,%rsi,8), %eax1847; X64-NO-BMI2-HAVE-SHLD-NEXT:    xorps %xmm2, %xmm21848; X64-NO-BMI2-HAVE-SHLD-NEXT:    movaps %xmm2, -{{[0-9]+}}(%rsp)1849; X64-NO-BMI2-HAVE-SHLD-NEXT:    movaps %xmm2, -{{[0-9]+}}(%rsp)1850; X64-NO-BMI2-HAVE-SHLD-NEXT:    movaps %xmm1, -{{[0-9]+}}(%rsp)1851; X64-NO-BMI2-HAVE-SHLD-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)1852; X64-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx1853; X64-NO-BMI2-HAVE-SHLD-NEXT:    shrb $6, %cl1854; X64-NO-BMI2-HAVE-SHLD-NEXT:    movzbl %cl, %esi1855; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq -72(%rsp,%rsi,8), %rdi1856; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq -64(%rsp,%rsi,8), %r81857; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r8, %r91858; X64-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx1859; X64-NO-BMI2-HAVE-SHLD-NEXT:    shrq %cl, %r91860; X64-NO-BMI2-HAVE-SHLD-NEXT:    notb %cl1861; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq -56(%rsp,%rsi,8), %rsi1862; X64-NO-BMI2-HAVE-SHLD-NEXT:    addq %rsi, %rsi1863; X64-NO-BMI2-HAVE-SHLD-NEXT:    shlq %cl, %rsi1864; X64-NO-BMI2-HAVE-SHLD-NEXT:    orq %r9, %rsi1865; X64-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx1866; X64-NO-BMI2-HAVE-SHLD-NEXT:    shrdq %cl, %r8, %rdi1867; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rdi, (%rdx)1868; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rsi, 8(%rdx)1869; X64-NO-BMI2-HAVE-SHLD-NEXT:    retq1870;1871; X64-HAVE-BMI2-NO-SHLD-LABEL: load_16byte_chunk_of_32byte_alloca:1872; X64-HAVE-BMI2-NO-SHLD:       # %bb.0:1873; X64-HAVE-BMI2-NO-SHLD-NEXT:    movups (%rdi), %xmm01874; X64-HAVE-BMI2-NO-SHLD-NEXT:    movups 16(%rdi), %xmm11875; X64-HAVE-BMI2-NO-SHLD-NEXT:    shll $3, %esi1876; X64-HAVE-BMI2-NO-SHLD-NEXT:    xorps %xmm2, %xmm21877; X64-HAVE-BMI2-NO-SHLD-NEXT:    movaps %xmm2, -{{[0-9]+}}(%rsp)1878; X64-HAVE-BMI2-NO-SHLD-NEXT:    movaps %xmm2, -{{[0-9]+}}(%rsp)1879; X64-HAVE-BMI2-NO-SHLD-NEXT:    movaps %xmm1, -{{[0-9]+}}(%rsp)1880; X64-HAVE-BMI2-NO-SHLD-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)1881; X64-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, %eax1882; X64-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, %ecx1883; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrb $6, %cl1884; X64-HAVE-BMI2-NO-SHLD-NEXT:    movzbl %cl, %ecx1885; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrxq %rax, -72(%rsp,%rcx,8), %rdi1886; X64-HAVE-BMI2-NO-SHLD-NEXT:    notb %sil1887; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq -64(%rsp,%rcx,8), %r81888; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq -56(%rsp,%rcx,8), %rcx1889; X64-HAVE-BMI2-NO-SHLD-NEXT:    leaq (%r8,%r8), %r91890; X64-HAVE-BMI2-NO-SHLD-NEXT:    shlxq %rsi, %r9, %r91891; X64-HAVE-BMI2-NO-SHLD-NEXT:    orq %rdi, %r91892; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrxq %rax, %r8, %rax1893; X64-HAVE-BMI2-NO-SHLD-NEXT:    addq %rcx, %rcx1894; X64-HAVE-BMI2-NO-SHLD-NEXT:    shlxq %rsi, %rcx, %rcx1895; X64-HAVE-BMI2-NO-SHLD-NEXT:    orq %rax, %rcx1896; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rcx, 8(%rdx)1897; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %r9, (%rdx)1898; X64-HAVE-BMI2-NO-SHLD-NEXT:    retq1899;1900; X64-HAVE-BMI2-HAVE-SHLD-LABEL: load_16byte_chunk_of_32byte_alloca:1901; X64-HAVE-BMI2-HAVE-SHLD:       # %bb.0:1902; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rsi, %rcx1903; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movups (%rdi), %xmm01904; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movups 16(%rdi), %xmm11905; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shll $3, %ecx1906; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    xorps %xmm2, %xmm21907; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movaps %xmm2, -{{[0-9]+}}(%rsp)1908; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movaps %xmm2, -{{[0-9]+}}(%rsp)1909; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movaps %xmm1, -{{[0-9]+}}(%rsp)1910; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)1911; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, %eax1912; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shrb $6, %al1913; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movzbl %al, %eax1914; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq -72(%rsp,%rax,8), %rsi1915; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq -64(%rsp,%rax,8), %rdi1916; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxq %rcx, %rdi, %r81917; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, %r9d1918; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    notb %r9b1919; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq -56(%rsp,%rax,8), %rax1920; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    addq %rax, %rax1921; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shlxq %r9, %rax, %rax1922; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    orq %r8, %rax1923; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    # kill: def $cl killed $cl killed $rcx1924; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shrdq %cl, %rdi, %rsi1925; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rsi, (%rdx)1926; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rax, 8(%rdx)1927; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    retq1928;1929; X86-NO-BMI2-NO-SHLD-LABEL: load_16byte_chunk_of_32byte_alloca:1930; X86-NO-BMI2-NO-SHLD:       # %bb.0:1931; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %ebp1932; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %ebx1933; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %edi1934; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %esi1935; X86-NO-BMI2-NO-SHLD-NEXT:    subl $92, %esp1936; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax1937; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx1938; X86-NO-BMI2-NO-SHLD-NEXT:    movups (%ecx), %xmm01939; X86-NO-BMI2-NO-SHLD-NEXT:    movups 16(%ecx), %xmm11940; X86-NO-BMI2-NO-SHLD-NEXT:    shll $3, %eax1941; X86-NO-BMI2-NO-SHLD-NEXT:    xorps %xmm2, %xmm21942; X86-NO-BMI2-NO-SHLD-NEXT:    movaps %xmm2, {{[0-9]+}}(%esp)1943; X86-NO-BMI2-NO-SHLD-NEXT:    movaps %xmm2, {{[0-9]+}}(%esp)1944; X86-NO-BMI2-NO-SHLD-NEXT:    movaps %xmm1, {{[0-9]+}}(%esp)1945; X86-NO-BMI2-NO-SHLD-NEXT:    movaps %xmm0, {{[0-9]+}}(%esp)1946; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx1947; X86-NO-BMI2-NO-SHLD-NEXT:    shrb $5, %cl1948; X86-NO-BMI2-NO-SHLD-NEXT:    movzbl %cl, %edi1949; X86-NO-BMI2-NO-SHLD-NEXT:    movl 16(%esp,%edi,4), %edx1950; X86-NO-BMI2-NO-SHLD-NEXT:    movl 20(%esp,%edi,4), %ebp1951; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx1952; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %edx1953; X86-NO-BMI2-NO-SHLD-NEXT:    notb %cl1954; X86-NO-BMI2-NO-SHLD-NEXT:    movb %cl, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill1955; X86-NO-BMI2-NO-SHLD-NEXT:    leal (%ebp,%ebp), %esi1956; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %esi1957; X86-NO-BMI2-NO-SHLD-NEXT:    orl %edx, %esi1958; X86-NO-BMI2-NO-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1959; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx1960; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %ebp1961; X86-NO-BMI2-NO-SHLD-NEXT:    movb %al, %ch1962; X86-NO-BMI2-NO-SHLD-NEXT:    andb $24, %ch1963; X86-NO-BMI2-NO-SHLD-NEXT:    xorb $31, %ch1964; X86-NO-BMI2-NO-SHLD-NEXT:    movl 24(%esp,%edi,4), %edx1965; X86-NO-BMI2-NO-SHLD-NEXT:    leal (%edx,%edx), %ebx1966; X86-NO-BMI2-NO-SHLD-NEXT:    movb %ch, %cl1967; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %ebx1968; X86-NO-BMI2-NO-SHLD-NEXT:    orl %ebp, %ebx1969; X86-NO-BMI2-NO-SHLD-NEXT:    movb %al, %cl1970; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %edx1971; X86-NO-BMI2-NO-SHLD-NEXT:    movl 28(%esp,%edi,4), %esi1972; X86-NO-BMI2-NO-SHLD-NEXT:    leal (%esi,%esi), %ebp1973; X86-NO-BMI2-NO-SHLD-NEXT:    movb {{[-0-9]+}}(%e{{[sb]}}p), %cl # 1-byte Reload1974; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %ebp1975; X86-NO-BMI2-NO-SHLD-NEXT:    orl %edx, %ebp1976; X86-NO-BMI2-NO-SHLD-NEXT:    movb %al, %cl1977; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %esi1978; X86-NO-BMI2-NO-SHLD-NEXT:    movl 32(%esp,%edi,4), %eax1979; X86-NO-BMI2-NO-SHLD-NEXT:    addl %eax, %eax1980; X86-NO-BMI2-NO-SHLD-NEXT:    movb %ch, %cl1981; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %eax1982; X86-NO-BMI2-NO-SHLD-NEXT:    orl %esi, %eax1983; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx1984; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, 12(%ecx)1985; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebp, 8(%ecx)1986; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, 4(%ecx)1987; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1988; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, (%ecx)1989; X86-NO-BMI2-NO-SHLD-NEXT:    addl $92, %esp1990; X86-NO-BMI2-NO-SHLD-NEXT:    popl %esi1991; X86-NO-BMI2-NO-SHLD-NEXT:    popl %edi1992; X86-NO-BMI2-NO-SHLD-NEXT:    popl %ebx1993; X86-NO-BMI2-NO-SHLD-NEXT:    popl %ebp1994; X86-NO-BMI2-NO-SHLD-NEXT:    retl1995;1996; X86-SHLD-LABEL: load_16byte_chunk_of_32byte_alloca:1997; X86-SHLD:       # %bb.0:1998; X86-SHLD-NEXT:    pushl %ebp1999; X86-SHLD-NEXT:    pushl %ebx2000; X86-SHLD-NEXT:    pushl %edi2001; X86-SHLD-NEXT:    pushl %esi2002; X86-SHLD-NEXT:    subl $92, %esp2003; X86-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx2004; X86-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax2005; X86-SHLD-NEXT:    movups (%eax), %xmm02006; X86-SHLD-NEXT:    movups 16(%eax), %xmm12007; X86-SHLD-NEXT:    shll $3, %ecx2008; X86-SHLD-NEXT:    xorps %xmm2, %xmm22009; X86-SHLD-NEXT:    movaps %xmm2, {{[0-9]+}}(%esp)2010; X86-SHLD-NEXT:    movaps %xmm2, {{[0-9]+}}(%esp)2011; X86-SHLD-NEXT:    movaps %xmm1, {{[0-9]+}}(%esp)2012; X86-SHLD-NEXT:    movaps %xmm0, {{[0-9]+}}(%esp)2013; X86-SHLD-NEXT:    movl %ecx, %eax2014; X86-SHLD-NEXT:    shrb $5, %al2015; X86-SHLD-NEXT:    movzbl %al, %ebx2016; X86-SHLD-NEXT:    movl 24(%esp,%ebx,4), %esi2017; X86-SHLD-NEXT:    movl 16(%esp,%ebx,4), %eax2018; X86-SHLD-NEXT:    movl 20(%esp,%ebx,4), %edi2019; X86-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2020; X86-SHLD-NEXT:    shrdl %cl, %esi, %edi2021; X86-SHLD-NEXT:    movl 28(%esp,%ebx,4), %ebp2022; X86-SHLD-NEXT:    shrdl %cl, %ebp, %esi2023; X86-SHLD-NEXT:    movl 32(%esp,%ebx,4), %ebx2024; X86-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx2025; X86-SHLD-NEXT:    shrdl %cl, %ebx, %ebp2026; X86-SHLD-NEXT:    movl %ebp, 12(%edx)2027; X86-SHLD-NEXT:    movl %esi, 8(%edx)2028; X86-SHLD-NEXT:    movl %edi, 4(%edx)2029; X86-SHLD-NEXT:    # kill: def $cl killed $cl killed $ecx2030; X86-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload2031; X86-SHLD-NEXT:    shrdl %cl, %esi, %eax2032; X86-SHLD-NEXT:    movl %eax, (%edx)2033; X86-SHLD-NEXT:    addl $92, %esp2034; X86-SHLD-NEXT:    popl %esi2035; X86-SHLD-NEXT:    popl %edi2036; X86-SHLD-NEXT:    popl %ebx2037; X86-SHLD-NEXT:    popl %ebp2038; X86-SHLD-NEXT:    retl2039;2040; X86-HAVE-BMI2-NO-SHLD-LABEL: load_16byte_chunk_of_32byte_alloca:2041; X86-HAVE-BMI2-NO-SHLD:       # %bb.0:2042; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %ebp2043; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %ebx2044; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %edi2045; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %esi2046; X86-HAVE-BMI2-NO-SHLD-NEXT:    subl $92, %esp2047; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax2048; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx2049; X86-HAVE-BMI2-NO-SHLD-NEXT:    movups (%ecx), %xmm02050; X86-HAVE-BMI2-NO-SHLD-NEXT:    movups 16(%ecx), %xmm12051; X86-HAVE-BMI2-NO-SHLD-NEXT:    shll $3, %eax2052; X86-HAVE-BMI2-NO-SHLD-NEXT:    xorps %xmm2, %xmm22053; X86-HAVE-BMI2-NO-SHLD-NEXT:    movaps %xmm2, {{[0-9]+}}(%esp)2054; X86-HAVE-BMI2-NO-SHLD-NEXT:    movaps %xmm2, {{[0-9]+}}(%esp)2055; X86-HAVE-BMI2-NO-SHLD-NEXT:    movaps %xmm1, {{[0-9]+}}(%esp)2056; X86-HAVE-BMI2-NO-SHLD-NEXT:    movaps %xmm0, {{[0-9]+}}(%esp)2057; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx2058; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, %edx2059; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrb $5, %dl2060; X86-HAVE-BMI2-NO-SHLD-NEXT:    movzbl %dl, %esi2061; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %ecx, 16(%esp,%esi,4), %edx2062; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2063; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, %ebp2064; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, %ebx2065; X86-HAVE-BMI2-NO-SHLD-NEXT:    notb %bl2066; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 20(%esp,%esi,4), %edi2067; X86-HAVE-BMI2-NO-SHLD-NEXT:    leal (%edi,%edi), %edx2068; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %ebx, %edx, %ecx2069; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Folded Reload2070; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2071; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 24(%esp,%esi,4), %ecx2072; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2073; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %ebp, %edi, %edx2074; X86-HAVE-BMI2-NO-SHLD-NEXT:    andb $24, %al2075; X86-HAVE-BMI2-NO-SHLD-NEXT:    xorb $31, %al2076; X86-HAVE-BMI2-NO-SHLD-NEXT:    leal (%ecx,%ecx), %edi2077; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %eax, %edi, %edi2078; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %edx, %edi2079; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 28(%esp,%esi,4), %ecx2080; X86-HAVE-BMI2-NO-SHLD-NEXT:    leal (%ecx,%ecx), %edx2081; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %ebx, %edx, %edx2082; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %ebp, {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Folded Reload2083; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %ebx, %edx2084; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %ebp, %ecx, %ecx2085; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 32(%esp,%esi,4), %esi2086; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl %esi, %esi2087; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %eax, %esi, %eax2088; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %ecx, %eax2089; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx2090; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, 12(%ecx)2091; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edx, 8(%ecx)2092; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edi, 4(%ecx)2093; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload2094; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, (%ecx)2095; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl $92, %esp2096; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %esi2097; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %edi2098; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %ebx2099; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %ebp2100; X86-HAVE-BMI2-NO-SHLD-NEXT:    retl2101  %init = load <32 x i8>, ptr %src, align 12102  %byteOff.numbits = shl nuw nsw i64 %byteOff, 32103  %intermediate.val.frozen = freeze <32 x i8> %init2104  %intermediate.val.frozen.bits = bitcast <32 x i8> %intermediate.val.frozen to i2562105  %byteOff.numbits.wide = zext i64 %byteOff.numbits to i2562106  %intermediate.val.frozen.bits.positioned = lshr i256 %intermediate.val.frozen.bits, %byteOff.numbits.wide2107  %intermediate.val.frozen.bits.positioned.extracted = trunc i256 %intermediate.val.frozen.bits.positioned to i1282108  store i128 %intermediate.val.frozen.bits.positioned.extracted, ptr %dst, align 162109  ret void2110}2111 2112; no @load_32byte_chunk_of_32byte_alloca2113;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:2114; ALL: {{.*}}2115; X64-NO-SHLD: {{.*}}2116; X86: {{.*}}2117; X86-NO-SHLD: {{.*}}2118