3481 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 42; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64 | FileCheck %s --check-prefixes=X64,SSE,SSE43; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64-v2 | FileCheck %s --check-prefixes=X64,SSE,SSE24; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64-v3 | FileCheck %s --check-prefixes=X64,AVX,AVX25; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64-v4 | FileCheck %s --check-prefixes=X64,AVX,AVX5126; RUN: llc < %s -mtriple=i686-unknown-unknown | FileCheck %s --check-prefix=X867 8define i8 @ucmp.8.8(i8 %x, i8 %y) nounwind {9; X64-LABEL: ucmp.8.8:10; X64: # %bb.0:11; X64-NEXT: cmpb %sil, %dil12; X64-NEXT: seta %al13; X64-NEXT: sbbb $0, %al14; X64-NEXT: retq15;16; X86-LABEL: ucmp.8.8:17; X86: # %bb.0:18; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax19; X86-NEXT: cmpb {{[0-9]+}}(%esp), %al20; X86-NEXT: seta %al21; X86-NEXT: sbbb $0, %al22; X86-NEXT: retl23 %1 = call i8 @llvm.ucmp(i8 %x, i8 %y)24 ret i8 %125}26 27define i8 @ucmp.8.16(i16 %x, i16 %y) nounwind {28; X64-LABEL: ucmp.8.16:29; X64: # %bb.0:30; X64-NEXT: cmpw %si, %di31; X64-NEXT: seta %al32; X64-NEXT: sbbb $0, %al33; X64-NEXT: retq34;35; X86-LABEL: ucmp.8.16:36; X86: # %bb.0:37; X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax38; X86-NEXT: cmpw {{[0-9]+}}(%esp), %ax39; X86-NEXT: seta %al40; X86-NEXT: sbbb $0, %al41; X86-NEXT: retl42 %1 = call i8 @llvm.ucmp(i16 %x, i16 %y)43 ret i8 %144}45 46define i8 @ucmp.8.32(i32 %x, i32 %y) nounwind {47; X64-LABEL: ucmp.8.32:48; X64: # %bb.0:49; X64-NEXT: cmpl %esi, %edi50; X64-NEXT: seta %al51; X64-NEXT: sbbb $0, %al52; X64-NEXT: retq53;54; X86-LABEL: ucmp.8.32:55; X86: # %bb.0:56; X86-NEXT: movl {{[0-9]+}}(%esp), %eax57; X86-NEXT: cmpl {{[0-9]+}}(%esp), %eax58; X86-NEXT: seta %al59; X86-NEXT: sbbb $0, %al60; X86-NEXT: retl61 %1 = call i8 @llvm.ucmp(i32 %x, i32 %y)62 ret i8 %163}64 65define i8 @ucmp.8.64(i64 %x, i64 %y) nounwind {66; X64-LABEL: ucmp.8.64:67; X64: # %bb.0:68; X64-NEXT: cmpq %rsi, %rdi69; X64-NEXT: seta %al70; X64-NEXT: sbbb $0, %al71; X64-NEXT: retq72;73; X86-LABEL: ucmp.8.64:74; X86: # %bb.0:75; X86-NEXT: pushl %edi76; X86-NEXT: pushl %esi77; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx78; X86-NEXT: movl {{[0-9]+}}(%esp), %edx79; X86-NEXT: movl {{[0-9]+}}(%esp), %esi80; X86-NEXT: movl {{[0-9]+}}(%esp), %edi81; X86-NEXT: cmpl %ecx, %esi82; X86-NEXT: movl %edi, %eax83; X86-NEXT: sbbl %edx, %eax84; X86-NEXT: setb %al85; X86-NEXT: cmpl %esi, %ecx86; X86-NEXT: sbbl %edi, %edx87; X86-NEXT: sbbb $0, %al88; X86-NEXT: popl %esi89; X86-NEXT: popl %edi90; X86-NEXT: retl91 %1 = call i8 @llvm.ucmp(i64 %x, i64 %y)92 ret i8 %193}94 95define i8 @ucmp.8.128(i128 %x, i128 %y) nounwind {96; X64-LABEL: ucmp.8.128:97; X64: # %bb.0:98; X64-NEXT: cmpq %rdi, %rdx99; X64-NEXT: movq %rcx, %rax100; X64-NEXT: sbbq %rsi, %rax101; X64-NEXT: setb %al102; X64-NEXT: cmpq %rdx, %rdi103; X64-NEXT: sbbq %rcx, %rsi104; X64-NEXT: sbbb $0, %al105; X64-NEXT: retq106;107; X86-LABEL: ucmp.8.128:108; X86: # %bb.0:109; X86-NEXT: pushl %ebp110; X86-NEXT: movl %esp, %ebp111; X86-NEXT: pushl %ebx112; X86-NEXT: pushl %edi113; X86-NEXT: pushl %esi114; X86-NEXT: andl $-16, %esp115; X86-NEXT: subl $16, %esp116; X86-NEXT: movl 8(%ebp), %eax117; X86-NEXT: movl 12(%ebp), %edx118; X86-NEXT: movl 28(%ebp), %ecx119; X86-NEXT: cmpl %eax, 24(%ebp)120; X86-NEXT: movl %ecx, %eax121; X86-NEXT: sbbl %edx, %eax122; X86-NEXT: movl 16(%ebp), %ebx123; X86-NEXT: movl 32(%ebp), %eax124; X86-NEXT: sbbl %ebx, %eax125; X86-NEXT: movl 20(%ebp), %ecx126; X86-NEXT: movl 36(%ebp), %esi127; X86-NEXT: movl %esi, %eax128; X86-NEXT: sbbl %ecx, %eax129; X86-NEXT: setb %al130; X86-NEXT: movl 8(%ebp), %edi131; X86-NEXT: cmpl 24(%ebp), %edi132; X86-NEXT: sbbl 28(%ebp), %edx133; X86-NEXT: sbbl 32(%ebp), %ebx134; X86-NEXT: sbbl %esi, %ecx135; X86-NEXT: sbbb $0, %al136; X86-NEXT: leal -12(%ebp), %esp137; X86-NEXT: popl %esi138; X86-NEXT: popl %edi139; X86-NEXT: popl %ebx140; X86-NEXT: popl %ebp141; X86-NEXT: retl142 %1 = call i8 @llvm.ucmp(i128 %x, i128 %y)143 ret i8 %1144}145 146define i32 @ucmp.32.32(i32 %x, i32 %y) nounwind {147; X64-LABEL: ucmp.32.32:148; X64: # %bb.0:149; X64-NEXT: cmpl %esi, %edi150; X64-NEXT: seta %al151; X64-NEXT: sbbb $0, %al152; X64-NEXT: movsbl %al, %eax153; X64-NEXT: retq154;155; X86-LABEL: ucmp.32.32:156; X86: # %bb.0:157; X86-NEXT: movl {{[0-9]+}}(%esp), %eax158; X86-NEXT: cmpl {{[0-9]+}}(%esp), %eax159; X86-NEXT: seta %al160; X86-NEXT: sbbb $0, %al161; X86-NEXT: movsbl %al, %eax162; X86-NEXT: retl163 %1 = call i32 @llvm.ucmp(i32 %x, i32 %y)164 ret i32 %1165}166 167define i32 @ucmp.32.64(i64 %x, i64 %y) nounwind {168; X64-LABEL: ucmp.32.64:169; X64: # %bb.0:170; X64-NEXT: cmpq %rsi, %rdi171; X64-NEXT: seta %al172; X64-NEXT: sbbb $0, %al173; X64-NEXT: movsbl %al, %eax174; X64-NEXT: retq175;176; X86-LABEL: ucmp.32.64:177; X86: # %bb.0:178; X86-NEXT: pushl %ebx179; X86-NEXT: pushl %edi180; X86-NEXT: pushl %esi181; X86-NEXT: movl {{[0-9]+}}(%esp), %eax182; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx183; X86-NEXT: movl {{[0-9]+}}(%esp), %edx184; X86-NEXT: movl {{[0-9]+}}(%esp), %esi185; X86-NEXT: cmpl %eax, %edx186; X86-NEXT: movl %esi, %edi187; X86-NEXT: sbbl %ecx, %edi188; X86-NEXT: setb %bl189; X86-NEXT: cmpl %edx, %eax190; X86-NEXT: sbbl %esi, %ecx191; X86-NEXT: sbbb $0, %bl192; X86-NEXT: movsbl %bl, %eax193; X86-NEXT: popl %esi194; X86-NEXT: popl %edi195; X86-NEXT: popl %ebx196; X86-NEXT: retl197 %1 = call i32 @llvm.ucmp(i64 %x, i64 %y)198 ret i32 %1199}200 201define i64 @ucmp.64.64(i64 %x, i64 %y) nounwind {202; X64-LABEL: ucmp.64.64:203; X64: # %bb.0:204; X64-NEXT: cmpq %rsi, %rdi205; X64-NEXT: seta %al206; X64-NEXT: sbbb $0, %al207; X64-NEXT: movsbq %al, %rax208; X64-NEXT: retq209;210; X86-LABEL: ucmp.64.64:211; X86: # %bb.0:212; X86-NEXT: pushl %ebx213; X86-NEXT: pushl %edi214; X86-NEXT: pushl %esi215; X86-NEXT: movl {{[0-9]+}}(%esp), %eax216; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx217; X86-NEXT: movl {{[0-9]+}}(%esp), %edx218; X86-NEXT: movl {{[0-9]+}}(%esp), %esi219; X86-NEXT: cmpl %eax, %edx220; X86-NEXT: movl %esi, %edi221; X86-NEXT: sbbl %ecx, %edi222; X86-NEXT: setb %bl223; X86-NEXT: cmpl %edx, %eax224; X86-NEXT: sbbl %esi, %ecx225; X86-NEXT: sbbb $0, %bl226; X86-NEXT: movsbl %bl, %eax227; X86-NEXT: movl %eax, %edx228; X86-NEXT: sarl $31, %edx229; X86-NEXT: popl %esi230; X86-NEXT: popl %edi231; X86-NEXT: popl %ebx232; X86-NEXT: retl233 %1 = call i64 @llvm.ucmp(i64 %x, i64 %y)234 ret i64 %1235}236 237define i4 @ucmp_narrow_result(i32 %x, i32 %y) nounwind {238; X64-LABEL: ucmp_narrow_result:239; X64: # %bb.0:240; X64-NEXT: cmpl %esi, %edi241; X64-NEXT: seta %al242; X64-NEXT: sbbb $0, %al243; X64-NEXT: retq244;245; X86-LABEL: ucmp_narrow_result:246; X86: # %bb.0:247; X86-NEXT: movl {{[0-9]+}}(%esp), %eax248; X86-NEXT: cmpl {{[0-9]+}}(%esp), %eax249; X86-NEXT: seta %al250; X86-NEXT: sbbb $0, %al251; X86-NEXT: retl252 %1 = call i4 @llvm.ucmp(i32 %x, i32 %y)253 ret i4 %1254}255 256define i8 @ucmp_narrow_op(i62 %x, i62 %y) nounwind {257; SSE-LABEL: ucmp_narrow_op:258; SSE: # %bb.0:259; SSE-NEXT: movabsq $4611686018427387903, %rax # imm = 0x3FFFFFFFFFFFFFFF260; SSE-NEXT: andq %rax, %rsi261; SSE-NEXT: andq %rax, %rdi262; SSE-NEXT: cmpq %rsi, %rdi263; SSE-NEXT: seta %al264; SSE-NEXT: sbbb $0, %al265; SSE-NEXT: retq266;267; AVX-LABEL: ucmp_narrow_op:268; AVX: # %bb.0:269; AVX-NEXT: movb $62, %al270; AVX-NEXT: bzhiq %rax, %rsi, %rcx271; AVX-NEXT: bzhiq %rax, %rdi, %rax272; AVX-NEXT: cmpq %rcx, %rax273; AVX-NEXT: seta %al274; AVX-NEXT: sbbb $0, %al275; AVX-NEXT: retq276;277; X86-LABEL: ucmp_narrow_op:278; X86: # %bb.0:279; X86-NEXT: pushl %edi280; X86-NEXT: pushl %esi281; X86-NEXT: movl $1073741823, %ecx # imm = 0x3FFFFFFF282; X86-NEXT: movl {{[0-9]+}}(%esp), %edx283; X86-NEXT: andl %ecx, %edx284; X86-NEXT: andl {{[0-9]+}}(%esp), %ecx285; X86-NEXT: movl {{[0-9]+}}(%esp), %esi286; X86-NEXT: movl {{[0-9]+}}(%esp), %edi287; X86-NEXT: cmpl %esi, %edi288; X86-NEXT: movl %ecx, %eax289; X86-NEXT: sbbl %edx, %eax290; X86-NEXT: setb %al291; X86-NEXT: cmpl %edi, %esi292; X86-NEXT: sbbl %ecx, %edx293; X86-NEXT: sbbb $0, %al294; X86-NEXT: popl %esi295; X86-NEXT: popl %edi296; X86-NEXT: retl297 %1 = call i8 @llvm.ucmp(i62 %x, i62 %y)298 ret i8 %1299}300 301define i141 @ucmp_wide_result(i32 %x, i32 %y) nounwind {302; X64-LABEL: ucmp_wide_result:303; X64: # %bb.0:304; X64-NEXT: cmpl %esi, %edi305; X64-NEXT: seta %al306; X64-NEXT: sbbb $0, %al307; X64-NEXT: movsbq %al, %rax308; X64-NEXT: movq %rax, %rdx309; X64-NEXT: sarq $63, %rdx310; X64-NEXT: movl %edx, %ecx311; X64-NEXT: andl $8191, %ecx # imm = 0x1FFF312; X64-NEXT: retq313;314; X86-LABEL: ucmp_wide_result:315; X86: # %bb.0:316; X86-NEXT: movl {{[0-9]+}}(%esp), %eax317; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx318; X86-NEXT: cmpl {{[0-9]+}}(%esp), %ecx319; X86-NEXT: seta %cl320; X86-NEXT: sbbb $0, %cl321; X86-NEXT: movsbl %cl, %ecx322; X86-NEXT: movl %ecx, (%eax)323; X86-NEXT: sarl $31, %ecx324; X86-NEXT: movl %ecx, 12(%eax)325; X86-NEXT: movl %ecx, 8(%eax)326; X86-NEXT: movl %ecx, 4(%eax)327; X86-NEXT: andl $8191, %ecx # imm = 0x1FFF328; X86-NEXT: movw %cx, 16(%eax)329; X86-NEXT: retl $4330 %1 = call i141 @llvm.ucmp(i32 %x, i32 %y)331 ret i141 %1332}333 334define i8 @ucmp_wide_op(i109 %x, i109 %y) nounwind {335; SSE-LABEL: ucmp_wide_op:336; SSE: # %bb.0:337; SSE-NEXT: movabsq $35184372088831, %rax # imm = 0x1FFFFFFFFFFF338; SSE-NEXT: andq %rax, %rsi339; SSE-NEXT: andq %rax, %rcx340; SSE-NEXT: cmpq %rdi, %rdx341; SSE-NEXT: movq %rcx, %rax342; SSE-NEXT: sbbq %rsi, %rax343; SSE-NEXT: setb %al344; SSE-NEXT: cmpq %rdx, %rdi345; SSE-NEXT: sbbq %rcx, %rsi346; SSE-NEXT: sbbb $0, %al347; SSE-NEXT: retq348;349; AVX-LABEL: ucmp_wide_op:350; AVX: # %bb.0:351; AVX-NEXT: movb $45, %al352; AVX-NEXT: bzhiq %rax, %rsi, %rsi353; AVX-NEXT: bzhiq %rax, %rcx, %rcx354; AVX-NEXT: cmpq %rdi, %rdx355; AVX-NEXT: movq %rcx, %rax356; AVX-NEXT: sbbq %rsi, %rax357; AVX-NEXT: setb %al358; AVX-NEXT: cmpq %rdx, %rdi359; AVX-NEXT: sbbq %rcx, %rsi360; AVX-NEXT: sbbb $0, %al361; AVX-NEXT: retq362;363; X86-LABEL: ucmp_wide_op:364; X86: # %bb.0:365; X86-NEXT: pushl %ebp366; X86-NEXT: pushl %ebx367; X86-NEXT: pushl %edi368; X86-NEXT: pushl %esi369; X86-NEXT: movl $8191, %ecx # imm = 0x1FFF370; X86-NEXT: movl {{[0-9]+}}(%esp), %edx371; X86-NEXT: andl %ecx, %edx372; X86-NEXT: andl {{[0-9]+}}(%esp), %ecx373; X86-NEXT: movl {{[0-9]+}}(%esp), %edi374; X86-NEXT: movl {{[0-9]+}}(%esp), %ebp375; X86-NEXT: movl {{[0-9]+}}(%esp), %eax376; X86-NEXT: cmpl {{[0-9]+}}(%esp), %ebp377; X86-NEXT: sbbl %edi, %eax378; X86-NEXT: movl {{[0-9]+}}(%esp), %esi379; X86-NEXT: movl {{[0-9]+}}(%esp), %ebx380; X86-NEXT: movl %ebx, %eax381; X86-NEXT: sbbl %esi, %eax382; X86-NEXT: movl %ecx, %eax383; X86-NEXT: sbbl %edx, %eax384; X86-NEXT: setb %al385; X86-NEXT: cmpl %ebp, {{[0-9]+}}(%esp)386; X86-NEXT: sbbl {{[0-9]+}}(%esp), %edi387; X86-NEXT: sbbl %ebx, %esi388; X86-NEXT: sbbl %ecx, %edx389; X86-NEXT: sbbb $0, %al390; X86-NEXT: popl %esi391; X86-NEXT: popl %edi392; X86-NEXT: popl %ebx393; X86-NEXT: popl %ebp394; X86-NEXT: retl395 %1 = call i8 @llvm.ucmp(i109 %x, i109 %y)396 ret i8 %1397}398 399define i41 @ucmp_uncommon_types(i7 %x, i7 %y) nounwind {400; X64-LABEL: ucmp_uncommon_types:401; X64: # %bb.0:402; X64-NEXT: andb $127, %sil403; X64-NEXT: andb $127, %dil404; X64-NEXT: cmpb %sil, %dil405; X64-NEXT: seta %al406; X64-NEXT: sbbb $0, %al407; X64-NEXT: movsbq %al, %rax408; X64-NEXT: retq409;410; X86-LABEL: ucmp_uncommon_types:411; X86: # %bb.0:412; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax413; X86-NEXT: andb $127, %al414; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx415; X86-NEXT: andb $127, %cl416; X86-NEXT: cmpb %al, %cl417; X86-NEXT: seta %al418; X86-NEXT: sbbb $0, %al419; X86-NEXT: movsbl %al, %eax420; X86-NEXT: movl %eax, %edx421; X86-NEXT: sarl $31, %edx422; X86-NEXT: retl423 %1 = call i41 @llvm.ucmp(i7 %x, i7 %y)424 ret i41 %1425}426 427define <4 x i32> @ucmp_normal_vectors(<4 x i32> %x, <4 x i32> %y) nounwind {428; SSE4-LABEL: ucmp_normal_vectors:429; SSE4: # %bb.0:430; SSE4-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]431; SSE4-NEXT: pxor %xmm2, %xmm1432; SSE4-NEXT: pxor %xmm2, %xmm0433; SSE4-NEXT: movdqa %xmm0, %xmm2434; SSE4-NEXT: pcmpgtd %xmm1, %xmm2435; SSE4-NEXT: pcmpgtd %xmm0, %xmm1436; SSE4-NEXT: psubd %xmm2, %xmm1437; SSE4-NEXT: movdqa %xmm1, %xmm0438; SSE4-NEXT: retq439;440; SSE2-LABEL: ucmp_normal_vectors:441; SSE2: # %bb.0:442; SSE2-NEXT: movdqa %xmm0, %xmm2443; SSE2-NEXT: pmaxud %xmm1, %xmm2444; SSE2-NEXT: pcmpeqd %xmm0, %xmm2445; SSE2-NEXT: pminud %xmm0, %xmm1446; SSE2-NEXT: pcmpeqd %xmm1, %xmm0447; SSE2-NEXT: psubd %xmm2, %xmm0448; SSE2-NEXT: retq449;450; AVX2-LABEL: ucmp_normal_vectors:451; AVX2: # %bb.0:452; AVX2-NEXT: vpmaxud %xmm1, %xmm0, %xmm2453; AVX2-NEXT: vpcmpeqd %xmm2, %xmm0, %xmm2454; AVX2-NEXT: vpminud %xmm1, %xmm0, %xmm1455; AVX2-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0456; AVX2-NEXT: vpsubd %xmm2, %xmm0, %xmm0457; AVX2-NEXT: retq458;459; AVX512-LABEL: ucmp_normal_vectors:460; AVX512: # %bb.0:461; AVX512-NEXT: vpcmpltud %xmm1, %xmm0, %k1462; AVX512-NEXT: vpcmpnleud %xmm1, %xmm0, %k2463; AVX512-NEXT: vpbroadcastd {{.*#+}} xmm0 {%k2} {z} = [1,1,1,1]464; AVX512-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1465; AVX512-NEXT: vmovdqa32 %xmm1, %xmm0 {%k1}466; AVX512-NEXT: retq467;468; X86-LABEL: ucmp_normal_vectors:469; X86: # %bb.0:470; X86-NEXT: pushl %ebx471; X86-NEXT: pushl %edi472; X86-NEXT: pushl %esi473; X86-NEXT: movl {{[0-9]+}}(%esp), %eax474; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx475; X86-NEXT: movl {{[0-9]+}}(%esp), %esi476; X86-NEXT: movl {{[0-9]+}}(%esp), %edi477; X86-NEXT: movl {{[0-9]+}}(%esp), %edx478; X86-NEXT: cmpl {{[0-9]+}}(%esp), %edx479; X86-NEXT: seta %dl480; X86-NEXT: sbbb $0, %dl481; X86-NEXT: movsbl %dl, %edx482; X86-NEXT: cmpl {{[0-9]+}}(%esp), %edi483; X86-NEXT: seta %bl484; X86-NEXT: sbbb $0, %bl485; X86-NEXT: movsbl %bl, %edi486; X86-NEXT: cmpl {{[0-9]+}}(%esp), %esi487; X86-NEXT: seta %bl488; X86-NEXT: sbbb $0, %bl489; X86-NEXT: movsbl %bl, %esi490; X86-NEXT: cmpl {{[0-9]+}}(%esp), %ecx491; X86-NEXT: seta %cl492; X86-NEXT: sbbb $0, %cl493; X86-NEXT: movsbl %cl, %ecx494; X86-NEXT: movl %ecx, 12(%eax)495; X86-NEXT: movl %esi, 8(%eax)496; X86-NEXT: movl %edi, 4(%eax)497; X86-NEXT: movl %edx, (%eax)498; X86-NEXT: popl %esi499; X86-NEXT: popl %edi500; X86-NEXT: popl %ebx501; X86-NEXT: retl $4502 %1 = call <4 x i32> @llvm.ucmp(<4 x i32> %x, <4 x i32> %y)503 ret <4 x i32> %1504}505 506define <4 x i8> @ucmp_narrow_vec_result(<4 x i32> %x, <4 x i32> %y) nounwind {507; SSE4-LABEL: ucmp_narrow_vec_result:508; SSE4: # %bb.0:509; SSE4-NEXT: movd %xmm1, %eax510; SSE4-NEXT: movd %xmm0, %ecx511; SSE4-NEXT: cmpl %eax, %ecx512; SSE4-NEXT: seta %al513; SSE4-NEXT: sbbb $0, %al514; SSE4-NEXT: movzbl %al, %eax515; SSE4-NEXT: pshufd {{.*#+}} xmm2 = xmm1[1,1,1,1]516; SSE4-NEXT: movd %xmm2, %ecx517; SSE4-NEXT: pshufd {{.*#+}} xmm2 = xmm0[1,1,1,1]518; SSE4-NEXT: movd %xmm2, %edx519; SSE4-NEXT: cmpl %ecx, %edx520; SSE4-NEXT: seta %cl521; SSE4-NEXT: sbbb $0, %cl522; SSE4-NEXT: movzbl %cl, %ecx523; SSE4-NEXT: shll $8, %ecx524; SSE4-NEXT: orl %eax, %ecx525; SSE4-NEXT: pshufd {{.*#+}} xmm2 = xmm1[2,3,2,3]526; SSE4-NEXT: movd %xmm2, %eax527; SSE4-NEXT: pshufd {{.*#+}} xmm2 = xmm0[2,3,2,3]528; SSE4-NEXT: movd %xmm2, %edx529; SSE4-NEXT: cmpl %eax, %edx530; SSE4-NEXT: seta %al531; SSE4-NEXT: sbbb $0, %al532; SSE4-NEXT: movzbl %al, %eax533; SSE4-NEXT: shll $16, %eax534; SSE4-NEXT: orl %ecx, %eax535; SSE4-NEXT: pshufd {{.*#+}} xmm1 = xmm1[3,3,3,3]536; SSE4-NEXT: movd %xmm1, %ecx537; SSE4-NEXT: pshufd {{.*#+}} xmm0 = xmm0[3,3,3,3]538; SSE4-NEXT: movd %xmm0, %edx539; SSE4-NEXT: cmpl %ecx, %edx540; SSE4-NEXT: seta %cl541; SSE4-NEXT: sbbb $0, %cl542; SSE4-NEXT: movzbl %cl, %ecx543; SSE4-NEXT: shll $24, %ecx544; SSE4-NEXT: orl %eax, %ecx545; SSE4-NEXT: movd %ecx, %xmm0546; SSE4-NEXT: retq547;548; SSE2-LABEL: ucmp_narrow_vec_result:549; SSE2: # %bb.0:550; SSE2-NEXT: pextrd $1, %xmm1, %eax551; SSE2-NEXT: pextrd $1, %xmm0, %ecx552; SSE2-NEXT: cmpl %eax, %ecx553; SSE2-NEXT: seta %al554; SSE2-NEXT: sbbb $0, %al555; SSE2-NEXT: movzbl %al, %eax556; SSE2-NEXT: movd %xmm1, %ecx557; SSE2-NEXT: movd %xmm0, %edx558; SSE2-NEXT: cmpl %ecx, %edx559; SSE2-NEXT: seta %cl560; SSE2-NEXT: sbbb $0, %cl561; SSE2-NEXT: movzbl %cl, %ecx562; SSE2-NEXT: movd %ecx, %xmm2563; SSE2-NEXT: pinsrb $1, %eax, %xmm2564; SSE2-NEXT: pextrd $2, %xmm1, %eax565; SSE2-NEXT: pextrd $2, %xmm0, %ecx566; SSE2-NEXT: cmpl %eax, %ecx567; SSE2-NEXT: seta %al568; SSE2-NEXT: sbbb $0, %al569; SSE2-NEXT: movzbl %al, %eax570; SSE2-NEXT: pinsrb $2, %eax, %xmm2571; SSE2-NEXT: pextrd $3, %xmm1, %eax572; SSE2-NEXT: pextrd $3, %xmm0, %ecx573; SSE2-NEXT: cmpl %eax, %ecx574; SSE2-NEXT: seta %al575; SSE2-NEXT: sbbb $0, %al576; SSE2-NEXT: movzbl %al, %eax577; SSE2-NEXT: pinsrb $3, %eax, %xmm2578; SSE2-NEXT: movdqa %xmm2, %xmm0579; SSE2-NEXT: retq580;581; AVX-LABEL: ucmp_narrow_vec_result:582; AVX: # %bb.0:583; AVX-NEXT: vpextrd $1, %xmm1, %eax584; AVX-NEXT: vpextrd $1, %xmm0, %ecx585; AVX-NEXT: cmpl %eax, %ecx586; AVX-NEXT: seta %al587; AVX-NEXT: sbbb $0, %al588; AVX-NEXT: vmovd %xmm1, %ecx589; AVX-NEXT: vmovd %xmm0, %edx590; AVX-NEXT: cmpl %ecx, %edx591; AVX-NEXT: seta %cl592; AVX-NEXT: sbbb $0, %cl593; AVX-NEXT: vmovd %ecx, %xmm2594; AVX-NEXT: vpinsrb $1, %eax, %xmm2, %xmm2595; AVX-NEXT: vpextrd $2, %xmm1, %eax596; AVX-NEXT: vpextrd $2, %xmm0, %ecx597; AVX-NEXT: cmpl %eax, %ecx598; AVX-NEXT: seta %al599; AVX-NEXT: sbbb $0, %al600; AVX-NEXT: vpinsrb $2, %eax, %xmm2, %xmm2601; AVX-NEXT: vpextrd $3, %xmm1, %eax602; AVX-NEXT: vpextrd $3, %xmm0, %ecx603; AVX-NEXT: cmpl %eax, %ecx604; AVX-NEXT: seta %al605; AVX-NEXT: sbbb $0, %al606; AVX-NEXT: vpinsrb $3, %eax, %xmm2, %xmm0607; AVX-NEXT: retq608;609; X86-LABEL: ucmp_narrow_vec_result:610; X86: # %bb.0:611; X86-NEXT: pushl %ebx612; X86-NEXT: pushl %edi613; X86-NEXT: pushl %esi614; X86-NEXT: movl {{[0-9]+}}(%esp), %eax615; X86-NEXT: movl {{[0-9]+}}(%esp), %edx616; X86-NEXT: movl {{[0-9]+}}(%esp), %esi617; X86-NEXT: movl {{[0-9]+}}(%esp), %edi618; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx619; X86-NEXT: cmpl {{[0-9]+}}(%esp), %ecx620; X86-NEXT: seta %cl621; X86-NEXT: sbbb $0, %cl622; X86-NEXT: cmpl {{[0-9]+}}(%esp), %edi623; X86-NEXT: seta %ch624; X86-NEXT: sbbb $0, %ch625; X86-NEXT: cmpl {{[0-9]+}}(%esp), %esi626; X86-NEXT: seta %bl627; X86-NEXT: sbbb $0, %bl628; X86-NEXT: cmpl {{[0-9]+}}(%esp), %edx629; X86-NEXT: seta %dl630; X86-NEXT: sbbb $0, %dl631; X86-NEXT: movb %dl, 3(%eax)632; X86-NEXT: movb %bl, 2(%eax)633; X86-NEXT: movb %ch, 1(%eax)634; X86-NEXT: movb %cl, (%eax)635; X86-NEXT: popl %esi636; X86-NEXT: popl %edi637; X86-NEXT: popl %ebx638; X86-NEXT: retl $4639 %1 = call <4 x i8> @llvm.ucmp(<4 x i32> %x, <4 x i32> %y)640 ret <4 x i8> %1641}642 643define <4 x i32> @ucmp_narrow_vec_op(<4 x i8> %x, <4 x i8> %y) nounwind {644; SSE4-LABEL: ucmp_narrow_vec_op:645; SSE4: # %bb.0:646; SSE4-NEXT: pxor %xmm2, %xmm2647; SSE4-NEXT: punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]648; SSE4-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3]649; SSE4-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]650; SSE4-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]651; SSE4-NEXT: movdqa %xmm0, %xmm2652; SSE4-NEXT: pcmpgtd %xmm1, %xmm2653; SSE4-NEXT: pcmpgtd %xmm0, %xmm1654; SSE4-NEXT: psubd %xmm2, %xmm1655; SSE4-NEXT: movdqa %xmm1, %xmm0656; SSE4-NEXT: retq657;658; SSE2-LABEL: ucmp_narrow_vec_op:659; SSE2: # %bb.0:660; SSE2-NEXT: pmovzxbd {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero661; SSE2-NEXT: pmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero662; SSE2-NEXT: movdqa %xmm0, %xmm2663; SSE2-NEXT: pcmpgtd %xmm1, %xmm2664; SSE2-NEXT: pcmpgtd %xmm0, %xmm1665; SSE2-NEXT: psubd %xmm2, %xmm1666; SSE2-NEXT: movdqa %xmm1, %xmm0667; SSE2-NEXT: retq668;669; AVX2-LABEL: ucmp_narrow_vec_op:670; AVX2: # %bb.0:671; AVX2-NEXT: vpmovzxbd {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero672; AVX2-NEXT: vpmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero673; AVX2-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm2674; AVX2-NEXT: vpcmpgtd %xmm0, %xmm1, %xmm0675; AVX2-NEXT: vpsubd %xmm2, %xmm0, %xmm0676; AVX2-NEXT: retq677;678; AVX512-LABEL: ucmp_narrow_vec_op:679; AVX512: # %bb.0:680; AVX512-NEXT: vpmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero681; AVX512-NEXT: vpmovzxbd {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero682; AVX512-NEXT: vpcmpgtd %xmm0, %xmm1, %k1683; AVX512-NEXT: vpcmpgtd %xmm1, %xmm0, %k2684; AVX512-NEXT: vpbroadcastd {{.*#+}} xmm0 {%k2} {z} = [1,1,1,1]685; AVX512-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1686; AVX512-NEXT: vmovdqa32 %xmm1, %xmm0 {%k1}687; AVX512-NEXT: retq688;689; X86-LABEL: ucmp_narrow_vec_op:690; X86: # %bb.0:691; X86-NEXT: pushl %ebx692; X86-NEXT: pushl %edi693; X86-NEXT: pushl %esi694; X86-NEXT: movl {{[0-9]+}}(%esp), %eax695; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx696; X86-NEXT: movb {{[0-9]+}}(%esp), %ch697; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ebx698; X86-NEXT: movzbl {{[0-9]+}}(%esp), %edx699; X86-NEXT: cmpb {{[0-9]+}}(%esp), %dl700; X86-NEXT: seta %dl701; X86-NEXT: sbbb $0, %dl702; X86-NEXT: movsbl %dl, %edx703; X86-NEXT: cmpb {{[0-9]+}}(%esp), %bl704; X86-NEXT: seta %bl705; X86-NEXT: sbbb $0, %bl706; X86-NEXT: movsbl %bl, %esi707; X86-NEXT: cmpb {{[0-9]+}}(%esp), %ch708; X86-NEXT: seta %ch709; X86-NEXT: sbbb $0, %ch710; X86-NEXT: movsbl %ch, %edi711; X86-NEXT: cmpb {{[0-9]+}}(%esp), %cl712; X86-NEXT: seta %cl713; X86-NEXT: sbbb $0, %cl714; X86-NEXT: movsbl %cl, %ecx715; X86-NEXT: movl %ecx, 12(%eax)716; X86-NEXT: movl %edi, 8(%eax)717; X86-NEXT: movl %esi, 4(%eax)718; X86-NEXT: movl %edx, (%eax)719; X86-NEXT: popl %esi720; X86-NEXT: popl %edi721; X86-NEXT: popl %ebx722; X86-NEXT: retl $4723 %1 = call <4 x i32> @llvm.ucmp(<4 x i8> %x, <4 x i8> %y)724 ret <4 x i32> %1725}726 727define <16 x i32> @ucmp_wide_vec_result(<16 x i8> %x, <16 x i8> %y) nounwind {728; SSE4-LABEL: ucmp_wide_vec_result:729; SSE4: # %bb.0:730; SSE4-NEXT: movdqa %xmm1, %xmm3731; SSE4-NEXT: pxor %xmm5, %xmm5732; SSE4-NEXT: punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm5[0],xmm1[1],xmm5[1],xmm1[2],xmm5[2],xmm1[3],xmm5[3],xmm1[4],xmm5[4],xmm1[5],xmm5[5],xmm1[6],xmm5[6],xmm1[7],xmm5[7]733; SSE4-NEXT: movdqa %xmm1, %xmm4734; SSE4-NEXT: punpcklwd {{.*#+}} xmm4 = xmm4[0],xmm5[0],xmm4[1],xmm5[1],xmm4[2],xmm5[2],xmm4[3],xmm5[3]735; SSE4-NEXT: movdqa %xmm0, %xmm2736; SSE4-NEXT: punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm5[0],xmm2[1],xmm5[1],xmm2[2],xmm5[2],xmm2[3],xmm5[3],xmm2[4],xmm5[4],xmm2[5],xmm5[5],xmm2[6],xmm5[6],xmm2[7],xmm5[7]737; SSE4-NEXT: movdqa %xmm2, %xmm6738; SSE4-NEXT: punpcklwd {{.*#+}} xmm6 = xmm6[0],xmm5[0],xmm6[1],xmm5[1],xmm6[2],xmm5[2],xmm6[3],xmm5[3]739; SSE4-NEXT: movdqa %xmm6, %xmm7740; SSE4-NEXT: pcmpgtd %xmm4, %xmm7741; SSE4-NEXT: pcmpgtd %xmm6, %xmm4742; SSE4-NEXT: psubd %xmm7, %xmm4743; SSE4-NEXT: punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm5[4],xmm1[5],xmm5[5],xmm1[6],xmm5[6],xmm1[7],xmm5[7]744; SSE4-NEXT: punpckhwd {{.*#+}} xmm2 = xmm2[4],xmm5[4],xmm2[5],xmm5[5],xmm2[6],xmm5[6],xmm2[7],xmm5[7]745; SSE4-NEXT: movdqa %xmm2, %xmm6746; SSE4-NEXT: pcmpgtd %xmm1, %xmm6747; SSE4-NEXT: pcmpgtd %xmm2, %xmm1748; SSE4-NEXT: psubd %xmm6, %xmm1749; SSE4-NEXT: punpckhbw {{.*#+}} xmm3 = xmm3[8],xmm5[8],xmm3[9],xmm5[9],xmm3[10],xmm5[10],xmm3[11],xmm5[11],xmm3[12],xmm5[12],xmm3[13],xmm5[13],xmm3[14],xmm5[14],xmm3[15],xmm5[15]750; SSE4-NEXT: movdqa %xmm3, %xmm2751; SSE4-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm5[0],xmm2[1],xmm5[1],xmm2[2],xmm5[2],xmm2[3],xmm5[3]752; SSE4-NEXT: punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm5[8],xmm0[9],xmm5[9],xmm0[10],xmm5[10],xmm0[11],xmm5[11],xmm0[12],xmm5[12],xmm0[13],xmm5[13],xmm0[14],xmm5[14],xmm0[15],xmm5[15]753; SSE4-NEXT: movdqa %xmm0, %xmm6754; SSE4-NEXT: punpcklwd {{.*#+}} xmm6 = xmm6[0],xmm5[0],xmm6[1],xmm5[1],xmm6[2],xmm5[2],xmm6[3],xmm5[3]755; SSE4-NEXT: movdqa %xmm6, %xmm7756; SSE4-NEXT: pcmpgtd %xmm2, %xmm7757; SSE4-NEXT: pcmpgtd %xmm6, %xmm2758; SSE4-NEXT: psubd %xmm7, %xmm2759; SSE4-NEXT: punpckhwd {{.*#+}} xmm3 = xmm3[4],xmm5[4],xmm3[5],xmm5[5],xmm3[6],xmm5[6],xmm3[7],xmm5[7]760; SSE4-NEXT: punpckhwd {{.*#+}} xmm0 = xmm0[4],xmm5[4],xmm0[5],xmm5[5],xmm0[6],xmm5[6],xmm0[7],xmm5[7]761; SSE4-NEXT: movdqa %xmm0, %xmm5762; SSE4-NEXT: pcmpgtd %xmm3, %xmm5763; SSE4-NEXT: pcmpgtd %xmm0, %xmm3764; SSE4-NEXT: psubd %xmm5, %xmm3765; SSE4-NEXT: movdqa %xmm4, %xmm0766; SSE4-NEXT: retq767;768; SSE2-LABEL: ucmp_wide_vec_result:769; SSE2: # %bb.0:770; SSE2-NEXT: movdqa %xmm0, %xmm4771; SSE2-NEXT: pmovzxbd {{.*#+}} xmm0 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero772; SSE2-NEXT: pmovzxbd {{.*#+}} xmm2 = xmm4[0],zero,zero,zero,xmm4[1],zero,zero,zero,xmm4[2],zero,zero,zero,xmm4[3],zero,zero,zero773; SSE2-NEXT: movdqa %xmm2, %xmm3774; SSE2-NEXT: pcmpgtd %xmm0, %xmm3775; SSE2-NEXT: pcmpgtd %xmm2, %xmm0776; SSE2-NEXT: psubd %xmm3, %xmm0777; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm1[1,1,1,1]778; SSE2-NEXT: pmovzxbd {{.*#+}} xmm5 = xmm2[0],zero,zero,zero,xmm2[1],zero,zero,zero,xmm2[2],zero,zero,zero,xmm2[3],zero,zero,zero779; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,1,1]780; SSE2-NEXT: pmovzxbd {{.*#+}} xmm2 = xmm2[0],zero,zero,zero,xmm2[1],zero,zero,zero,xmm2[2],zero,zero,zero,xmm2[3],zero,zero,zero781; SSE2-NEXT: movdqa %xmm2, %xmm3782; SSE2-NEXT: pcmpgtd %xmm5, %xmm3783; SSE2-NEXT: pcmpgtd %xmm2, %xmm5784; SSE2-NEXT: psubd %xmm3, %xmm5785; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm1[2,3,2,3]786; SSE2-NEXT: pmovzxbd {{.*#+}} xmm2 = xmm2[0],zero,zero,zero,xmm2[1],zero,zero,zero,xmm2[2],zero,zero,zero,xmm2[3],zero,zero,zero787; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[2,3,2,3]788; SSE2-NEXT: pmovzxbd {{.*#+}} xmm3 = xmm3[0],zero,zero,zero,xmm3[1],zero,zero,zero,xmm3[2],zero,zero,zero,xmm3[3],zero,zero,zero789; SSE2-NEXT: movdqa %xmm3, %xmm6790; SSE2-NEXT: pcmpgtd %xmm2, %xmm6791; SSE2-NEXT: pcmpgtd %xmm3, %xmm2792; SSE2-NEXT: psubd %xmm6, %xmm2793; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[3,3,3,3]794; SSE2-NEXT: pmovzxbd {{.*#+}} xmm3 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero795; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm4[3,3,3,3]796; SSE2-NEXT: pmovzxbd {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero797; SSE2-NEXT: movdqa %xmm1, %xmm4798; SSE2-NEXT: pcmpgtd %xmm3, %xmm4799; SSE2-NEXT: pcmpgtd %xmm1, %xmm3800; SSE2-NEXT: psubd %xmm4, %xmm3801; SSE2-NEXT: movdqa %xmm5, %xmm1802; SSE2-NEXT: retq803;804; AVX2-LABEL: ucmp_wide_vec_result:805; AVX2: # %bb.0:806; AVX2-NEXT: vpmovzxbd {{.*#+}} ymm2 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero,xmm1[4],zero,zero,zero,xmm1[5],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[7],zero,zero,zero807; AVX2-NEXT: vpmovzxbd {{.*#+}} ymm3 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero808; AVX2-NEXT: vpcmpgtd %ymm2, %ymm3, %ymm4809; AVX2-NEXT: vpcmpgtd %ymm3, %ymm2, %ymm2810; AVX2-NEXT: vpsubd %ymm4, %ymm2, %ymm2811; AVX2-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[2,3,2,3]812; AVX2-NEXT: vpmovzxbd {{.*#+}} ymm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero,xmm1[4],zero,zero,zero,xmm1[5],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[7],zero,zero,zero813; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]814; AVX2-NEXT: vpmovzxbd {{.*#+}} ymm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero815; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm3816; AVX2-NEXT: vpcmpgtd %ymm0, %ymm1, %ymm0817; AVX2-NEXT: vpsubd %ymm3, %ymm0, %ymm1818; AVX2-NEXT: vmovdqa %ymm2, %ymm0819; AVX2-NEXT: retq820;821; AVX512-LABEL: ucmp_wide_vec_result:822; AVX512: # %bb.0:823; AVX512-NEXT: vpcmpltub %xmm1, %xmm0, %k1824; AVX512-NEXT: vpcmpnleub %xmm1, %xmm0, %k2825; AVX512-NEXT: vpbroadcastd {{.*#+}} zmm0 {%k2} {z} = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]826; AVX512-NEXT: vpternlogd {{.*#+}} zmm1 = -1827; AVX512-NEXT: vmovdqa32 %zmm1, %zmm0 {%k1}828; AVX512-NEXT: retq829;830; X86-LABEL: ucmp_wide_vec_result:831; X86: # %bb.0:832; X86-NEXT: pushl %ebp833; X86-NEXT: pushl %ebx834; X86-NEXT: pushl %edi835; X86-NEXT: pushl %esi836; X86-NEXT: subl $12, %esp837; X86-NEXT: movzbl {{[0-9]+}}(%esp), %edx838; X86-NEXT: movb {{[0-9]+}}(%esp), %ah839; X86-NEXT: movb {{[0-9]+}}(%esp), %ch840; X86-NEXT: movb {{[0-9]+}}(%esp), %dh841; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ebx842; X86-NEXT: movb {{[0-9]+}}(%esp), %bh843; X86-NEXT: movb {{[0-9]+}}(%esp), %al844; X86-NEXT: movb {{[0-9]+}}(%esp), %cl845; X86-NEXT: cmpb {{[0-9]+}}(%esp), %cl846; X86-NEXT: seta %cl847; X86-NEXT: sbbb $0, %cl848; X86-NEXT: movb %cl, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill849; X86-NEXT: cmpb {{[0-9]+}}(%esp), %al850; X86-NEXT: seta %al851; X86-NEXT: sbbb $0, %al852; X86-NEXT: movb %al, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill853; X86-NEXT: cmpb {{[0-9]+}}(%esp), %bh854; X86-NEXT: seta %al855; X86-NEXT: sbbb $0, %al856; X86-NEXT: movb %al, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill857; X86-NEXT: cmpb {{[0-9]+}}(%esp), %bl858; X86-NEXT: seta %al859; X86-NEXT: sbbb $0, %al860; X86-NEXT: movb %al, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill861; X86-NEXT: cmpb {{[0-9]+}}(%esp), %dh862; X86-NEXT: seta %al863; X86-NEXT: sbbb $0, %al864; X86-NEXT: movb %al, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill865; X86-NEXT: cmpb {{[0-9]+}}(%esp), %ch866; X86-NEXT: seta %al867; X86-NEXT: sbbb $0, %al868; X86-NEXT: movb %al, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill869; X86-NEXT: cmpb {{[0-9]+}}(%esp), %ah870; X86-NEXT: seta %al871; X86-NEXT: sbbb $0, %al872; X86-NEXT: movb %al, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill873; X86-NEXT: cmpb {{[0-9]+}}(%esp), %dl874; X86-NEXT: seta %bl875; X86-NEXT: sbbb $0, %bl876; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax877; X86-NEXT: cmpb {{[0-9]+}}(%esp), %al878; X86-NEXT: seta %al879; X86-NEXT: sbbb $0, %al880; X86-NEXT: movb %al, (%esp) # 1-byte Spill881; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax882; X86-NEXT: cmpb {{[0-9]+}}(%esp), %al883; X86-NEXT: seta %bh884; X86-NEXT: sbbb $0, %bh885; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax886; X86-NEXT: cmpb {{[0-9]+}}(%esp), %al887; X86-NEXT: seta %al888; X86-NEXT: sbbb $0, %al889; X86-NEXT: movsbl %al, %eax890; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill891; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax892; X86-NEXT: cmpb {{[0-9]+}}(%esp), %al893; X86-NEXT: seta %al894; X86-NEXT: sbbb $0, %al895; X86-NEXT: movsbl %al, %edi896; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax897; X86-NEXT: cmpb {{[0-9]+}}(%esp), %al898; X86-NEXT: seta %al899; X86-NEXT: sbbb $0, %al900; X86-NEXT: movsbl %al, %ebp901; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax902; X86-NEXT: cmpb {{[0-9]+}}(%esp), %al903; X86-NEXT: seta %al904; X86-NEXT: sbbb $0, %al905; X86-NEXT: movsbl %al, %esi906; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax907; X86-NEXT: cmpb {{[0-9]+}}(%esp), %al908; X86-NEXT: seta %al909; X86-NEXT: sbbb $0, %al910; X86-NEXT: movsbl %al, %edx911; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax912; X86-NEXT: cmpb {{[0-9]+}}(%esp), %al913; X86-NEXT: seta %al914; X86-NEXT: sbbb $0, %al915; X86-NEXT: movsbl %al, %ecx916; X86-NEXT: movl {{[0-9]+}}(%esp), %eax917; X86-NEXT: movl %ecx, 60(%eax)918; X86-NEXT: movl %edx, 56(%eax)919; X86-NEXT: movl %esi, 52(%eax)920; X86-NEXT: movl %ebp, 48(%eax)921; X86-NEXT: movl %edi, 44(%eax)922; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload923; X86-NEXT: movl %ecx, 40(%eax)924; X86-NEXT: movsbl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 1-byte Folded Reload925; X86-NEXT: movsbl %bh, %ecx926; X86-NEXT: movl %ecx, 36(%eax)927; X86-NEXT: movsbl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 1-byte Folded Reload928; X86-NEXT: movsbl (%esp), %edx # 1-byte Folded Reload929; X86-NEXT: movl %edx, 32(%eax)930; X86-NEXT: movsbl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 1-byte Folded Reload931; X86-NEXT: movsbl %bl, %edi932; X86-NEXT: movl %edi, 28(%eax)933; X86-NEXT: movsbl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 1-byte Folded Reload934; X86-NEXT: movsbl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 1-byte Folded Reload935; X86-NEXT: movl %ebx, 24(%eax)936; X86-NEXT: movl %edi, 20(%eax)937; X86-NEXT: movl %edx, 16(%eax)938; X86-NEXT: movl %ecx, 12(%eax)939; X86-NEXT: movl %esi, 8(%eax)940; X86-NEXT: movsbl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 1-byte Folded Reload941; X86-NEXT: movl %ecx, 4(%eax)942; X86-NEXT: movsbl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 1-byte Folded Reload943; X86-NEXT: movl %ecx, (%eax)944; X86-NEXT: addl $12, %esp945; X86-NEXT: popl %esi946; X86-NEXT: popl %edi947; X86-NEXT: popl %ebx948; X86-NEXT: popl %ebp949; X86-NEXT: retl $4950 %1 = call <16 x i32> @llvm.ucmp(<16 x i8> %x, <16 x i8> %y)951 ret <16 x i32> %1952}953 954define <16 x i8> @ucmp_wide_vec_op(<16 x i32> %x, <16 x i32> %y) nounwind {955; SSE4-LABEL: ucmp_wide_vec_op:956; SSE4: # %bb.0:957; SSE4-NEXT: pushq %rbp958; SSE4-NEXT: pushq %r15959; SSE4-NEXT: pushq %r14960; SSE4-NEXT: pushq %r13961; SSE4-NEXT: pushq %r12962; SSE4-NEXT: pushq %rbx963; SSE4-NEXT: pshufd {{.*#+}} xmm8 = xmm7[3,3,3,3]964; SSE4-NEXT: movd %xmm8, %eax965; SSE4-NEXT: pshufd {{.*#+}} xmm8 = xmm3[3,3,3,3]966; SSE4-NEXT: movd %xmm8, %ecx967; SSE4-NEXT: cmpl %eax, %ecx968; SSE4-NEXT: seta %al969; SSE4-NEXT: sbbb $0, %al970; SSE4-NEXT: pshufd {{.*#+}} xmm8 = xmm7[2,3,2,3]971; SSE4-NEXT: movd %xmm8, %ecx972; SSE4-NEXT: pshufd {{.*#+}} xmm8 = xmm3[2,3,2,3]973; SSE4-NEXT: movd %xmm8, %edx974; SSE4-NEXT: cmpl %ecx, %edx975; SSE4-NEXT: seta %cl976; SSE4-NEXT: sbbb $0, %cl977; SSE4-NEXT: movd %xmm7, %edx978; SSE4-NEXT: movd %xmm3, %esi979; SSE4-NEXT: cmpl %edx, %esi980; SSE4-NEXT: seta %dl981; SSE4-NEXT: sbbb $0, %dl982; SSE4-NEXT: pshufd {{.*#+}} xmm7 = xmm7[1,1,1,1]983; SSE4-NEXT: movd %xmm7, %esi984; SSE4-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,1,1]985; SSE4-NEXT: movd %xmm3, %edi986; SSE4-NEXT: cmpl %esi, %edi987; SSE4-NEXT: seta %sil988; SSE4-NEXT: movzbl %al, %eax989; SSE4-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill990; SSE4-NEXT: sbbb $0, %sil991; SSE4-NEXT: pshufd {{.*#+}} xmm3 = xmm6[3,3,3,3]992; SSE4-NEXT: movd %xmm3, %edi993; SSE4-NEXT: pshufd {{.*#+}} xmm3 = xmm2[3,3,3,3]994; SSE4-NEXT: movd %xmm3, %r8d995; SSE4-NEXT: cmpl %edi, %r8d996; SSE4-NEXT: seta %dil997; SSE4-NEXT: sbbb $0, %dil998; SSE4-NEXT: movzbl %cl, %eax999; SSE4-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1000; SSE4-NEXT: pshufd {{.*#+}} xmm3 = xmm6[2,3,2,3]1001; SSE4-NEXT: movd %xmm3, %r8d1002; SSE4-NEXT: pshufd {{.*#+}} xmm3 = xmm2[2,3,2,3]1003; SSE4-NEXT: movd %xmm3, %r9d1004; SSE4-NEXT: cmpl %r8d, %r9d1005; SSE4-NEXT: seta %r8b1006; SSE4-NEXT: movzbl %dl, %edx1007; SSE4-NEXT: sbbb $0, %r8b1008; SSE4-NEXT: movd %xmm6, %r9d1009; SSE4-NEXT: movd %xmm2, %r10d1010; SSE4-NEXT: cmpl %r9d, %r10d1011; SSE4-NEXT: seta %r9b1012; SSE4-NEXT: movzbl %sil, %esi1013; SSE4-NEXT: sbbb $0, %r9b1014; SSE4-NEXT: pshufd {{.*#+}} xmm3 = xmm6[1,1,1,1]1015; SSE4-NEXT: movd %xmm3, %r10d1016; SSE4-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,1,1]1017; SSE4-NEXT: movd %xmm2, %r11d1018; SSE4-NEXT: cmpl %r10d, %r11d1019; SSE4-NEXT: seta %r10b1020; SSE4-NEXT: sbbb $0, %r10b1021; SSE4-NEXT: movzbl %dil, %edi1022; SSE4-NEXT: pshufd {{.*#+}} xmm2 = xmm5[3,3,3,3]1023; SSE4-NEXT: movd %xmm2, %r11d1024; SSE4-NEXT: pshufd {{.*#+}} xmm2 = xmm1[3,3,3,3]1025; SSE4-NEXT: movd %xmm2, %ebx1026; SSE4-NEXT: cmpl %r11d, %ebx1027; SSE4-NEXT: seta %r11b1028; SSE4-NEXT: movzbl %r8b, %r8d1029; SSE4-NEXT: sbbb $0, %r11b1030; SSE4-NEXT: pshufd {{.*#+}} xmm2 = xmm5[2,3,2,3]1031; SSE4-NEXT: movd %xmm2, %ebx1032; SSE4-NEXT: pshufd {{.*#+}} xmm2 = xmm1[2,3,2,3]1033; SSE4-NEXT: movd %xmm2, %ebp1034; SSE4-NEXT: cmpl %ebx, %ebp1035; SSE4-NEXT: seta %bpl1036; SSE4-NEXT: sbbb $0, %bpl1037; SSE4-NEXT: movzbl %r9b, %r9d1038; SSE4-NEXT: movd %xmm5, %ebx1039; SSE4-NEXT: movd %xmm1, %r14d1040; SSE4-NEXT: cmpl %ebx, %r14d1041; SSE4-NEXT: seta %r14b1042; SSE4-NEXT: sbbb $0, %r14b1043; SSE4-NEXT: movzbl %r10b, %r10d1044; SSE4-NEXT: pshufd {{.*#+}} xmm2 = xmm5[1,1,1,1]1045; SSE4-NEXT: movd %xmm2, %ebx1046; SSE4-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,1,1]1047; SSE4-NEXT: movd %xmm1, %r15d1048; SSE4-NEXT: cmpl %ebx, %r15d1049; SSE4-NEXT: seta %bl1050; SSE4-NEXT: movzbl %r11b, %r11d1051; SSE4-NEXT: sbbb $0, %bl1052; SSE4-NEXT: pshufd {{.*#+}} xmm1 = xmm4[3,3,3,3]1053; SSE4-NEXT: movd %xmm1, %r15d1054; SSE4-NEXT: pshufd {{.*#+}} xmm1 = xmm0[3,3,3,3]1055; SSE4-NEXT: movd %xmm1, %r12d1056; SSE4-NEXT: cmpl %r15d, %r12d1057; SSE4-NEXT: seta %r12b1058; SSE4-NEXT: sbbb $0, %r12b1059; SSE4-NEXT: movzbl %bpl, %ebp1060; SSE4-NEXT: pshufd {{.*#+}} xmm1 = xmm4[2,3,2,3]1061; SSE4-NEXT: movd %xmm1, %r15d1062; SSE4-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]1063; SSE4-NEXT: movd %xmm1, %r13d1064; SSE4-NEXT: cmpl %r15d, %r13d1065; SSE4-NEXT: seta %r13b1066; SSE4-NEXT: movzbl %r14b, %r15d1067; SSE4-NEXT: sbbb $0, %r13b1068; SSE4-NEXT: movd %xmm4, %r14d1069; SSE4-NEXT: movd %xmm0, %eax1070; SSE4-NEXT: cmpl %r14d, %eax1071; SSE4-NEXT: seta %r14b1072; SSE4-NEXT: sbbb $0, %r14b1073; SSE4-NEXT: pshufd {{.*#+}} xmm1 = xmm4[1,1,1,1]1074; SSE4-NEXT: movd %xmm1, %eax1075; SSE4-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,1,1]1076; SSE4-NEXT: movd %xmm0, %ecx1077; SSE4-NEXT: cmpl %eax, %ecx1078; SSE4-NEXT: movzbl %bl, %eax1079; SSE4-NEXT: movzbl %r12b, %ecx1080; SSE4-NEXT: movzbl %r13b, %ebx1081; SSE4-NEXT: movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload1082; SSE4-NEXT: # xmm0 = mem[0],zero,zero,zero1083; SSE4-NEXT: movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 4-byte Folded Reload1084; SSE4-NEXT: # xmm2 = mem[0],zero,zero,zero1085; SSE4-NEXT: movd %edx, %xmm31086; SSE4-NEXT: movd %esi, %xmm41087; SSE4-NEXT: movd %edi, %xmm51088; SSE4-NEXT: movd %r8d, %xmm61089; SSE4-NEXT: movd %r9d, %xmm11090; SSE4-NEXT: movd %r10d, %xmm71091; SSE4-NEXT: movd %r11d, %xmm81092; SSE4-NEXT: movd %ebp, %xmm91093; SSE4-NEXT: punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3],xmm2[4],xmm0[4],xmm2[5],xmm0[5],xmm2[6],xmm0[6],xmm2[7],xmm0[7]1094; SSE4-NEXT: movd %r15d, %xmm101095; SSE4-NEXT: punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1],xmm3[2],xmm4[2],xmm3[3],xmm4[3],xmm3[4],xmm4[4],xmm3[5],xmm4[5],xmm3[6],xmm4[6],xmm3[7],xmm4[7]1096; SSE4-NEXT: movd %eax, %xmm01097; SSE4-NEXT: punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3]1098; SSE4-NEXT: movd %ecx, %xmm21099; SSE4-NEXT: punpcklbw {{.*#+}} xmm6 = xmm6[0],xmm5[0],xmm6[1],xmm5[1],xmm6[2],xmm5[2],xmm6[3],xmm5[3],xmm6[4],xmm5[4],xmm6[5],xmm5[5],xmm6[6],xmm5[6],xmm6[7],xmm5[7]1100; SSE4-NEXT: punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm7[0],xmm1[1],xmm7[1],xmm1[2],xmm7[2],xmm1[3],xmm7[3],xmm1[4],xmm7[4],xmm1[5],xmm7[5],xmm1[6],xmm7[6],xmm1[7],xmm7[7]1101; SSE4-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm6[0],xmm1[1],xmm6[1],xmm1[2],xmm6[2],xmm1[3],xmm6[3]1102; SSE4-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]1103; SSE4-NEXT: punpcklbw {{.*#+}} xmm9 = xmm9[0],xmm8[0],xmm9[1],xmm8[1],xmm9[2],xmm8[2],xmm9[3],xmm8[3],xmm9[4],xmm8[4],xmm9[5],xmm8[5],xmm9[6],xmm8[6],xmm9[7],xmm8[7]1104; SSE4-NEXT: punpcklbw {{.*#+}} xmm10 = xmm10[0],xmm0[0],xmm10[1],xmm0[1],xmm10[2],xmm0[2],xmm10[3],xmm0[3],xmm10[4],xmm0[4],xmm10[5],xmm0[5],xmm10[6],xmm0[6],xmm10[7],xmm0[7]1105; SSE4-NEXT: punpcklwd {{.*#+}} xmm10 = xmm10[0],xmm9[0],xmm10[1],xmm9[1],xmm10[2],xmm9[2],xmm10[3],xmm9[3]1106; SSE4-NEXT: movd %ebx, %xmm31107; SSE4-NEXT: punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3],xmm3[4],xmm2[4],xmm3[5],xmm2[5],xmm3[6],xmm2[6],xmm3[7],xmm2[7]1108; SSE4-NEXT: movzbl %r14b, %eax1109; SSE4-NEXT: seta %cl1110; SSE4-NEXT: sbbb $0, %cl1111; SSE4-NEXT: movd %eax, %xmm01112; SSE4-NEXT: movzbl %cl, %eax1113; SSE4-NEXT: movd %eax, %xmm21114; SSE4-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]1115; SSE4-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3]1116; SSE4-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm10[0],xmm0[1],xmm10[1]1117; SSE4-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]1118; SSE4-NEXT: popq %rbx1119; SSE4-NEXT: popq %r121120; SSE4-NEXT: popq %r131121; SSE4-NEXT: popq %r141122; SSE4-NEXT: popq %r151123; SSE4-NEXT: popq %rbp1124; SSE4-NEXT: retq1125;1126; SSE2-LABEL: ucmp_wide_vec_op:1127; SSE2: # %bb.0:1128; SSE2-NEXT: pextrd $1, %xmm4, %eax1129; SSE2-NEXT: movdqa %xmm0, %xmm81130; SSE2-NEXT: pextrd $1, %xmm0, %ecx1131; SSE2-NEXT: cmpl %eax, %ecx1132; SSE2-NEXT: seta %al1133; SSE2-NEXT: sbbb $0, %al1134; SSE2-NEXT: movzbl %al, %eax1135; SSE2-NEXT: movd %xmm4, %ecx1136; SSE2-NEXT: movd %xmm0, %edx1137; SSE2-NEXT: cmpl %ecx, %edx1138; SSE2-NEXT: seta %cl1139; SSE2-NEXT: sbbb $0, %cl1140; SSE2-NEXT: movzbl %cl, %ecx1141; SSE2-NEXT: movd %ecx, %xmm01142; SSE2-NEXT: pinsrb $1, %eax, %xmm01143; SSE2-NEXT: pextrd $2, %xmm4, %eax1144; SSE2-NEXT: pextrd $2, %xmm8, %ecx1145; SSE2-NEXT: cmpl %eax, %ecx1146; SSE2-NEXT: seta %al1147; SSE2-NEXT: sbbb $0, %al1148; SSE2-NEXT: movzbl %al, %eax1149; SSE2-NEXT: pinsrb $2, %eax, %xmm01150; SSE2-NEXT: pextrd $3, %xmm4, %eax1151; SSE2-NEXT: pextrd $3, %xmm8, %ecx1152; SSE2-NEXT: cmpl %eax, %ecx1153; SSE2-NEXT: seta %al1154; SSE2-NEXT: sbbb $0, %al1155; SSE2-NEXT: movzbl %al, %eax1156; SSE2-NEXT: pinsrb $3, %eax, %xmm01157; SSE2-NEXT: movd %xmm5, %eax1158; SSE2-NEXT: movd %xmm1, %ecx1159; SSE2-NEXT: cmpl %eax, %ecx1160; SSE2-NEXT: seta %al1161; SSE2-NEXT: sbbb $0, %al1162; SSE2-NEXT: movzbl %al, %eax1163; SSE2-NEXT: pinsrb $4, %eax, %xmm01164; SSE2-NEXT: pextrd $1, %xmm5, %eax1165; SSE2-NEXT: pextrd $1, %xmm1, %ecx1166; SSE2-NEXT: cmpl %eax, %ecx1167; SSE2-NEXT: seta %al1168; SSE2-NEXT: sbbb $0, %al1169; SSE2-NEXT: movzbl %al, %eax1170; SSE2-NEXT: pinsrb $5, %eax, %xmm01171; SSE2-NEXT: pextrd $2, %xmm5, %eax1172; SSE2-NEXT: pextrd $2, %xmm1, %ecx1173; SSE2-NEXT: cmpl %eax, %ecx1174; SSE2-NEXT: seta %al1175; SSE2-NEXT: sbbb $0, %al1176; SSE2-NEXT: movzbl %al, %eax1177; SSE2-NEXT: pinsrb $6, %eax, %xmm01178; SSE2-NEXT: pextrd $3, %xmm5, %eax1179; SSE2-NEXT: pextrd $3, %xmm1, %ecx1180; SSE2-NEXT: cmpl %eax, %ecx1181; SSE2-NEXT: seta %al1182; SSE2-NEXT: sbbb $0, %al1183; SSE2-NEXT: movzbl %al, %eax1184; SSE2-NEXT: pinsrb $7, %eax, %xmm01185; SSE2-NEXT: movd %xmm6, %eax1186; SSE2-NEXT: movd %xmm2, %ecx1187; SSE2-NEXT: cmpl %eax, %ecx1188; SSE2-NEXT: seta %al1189; SSE2-NEXT: sbbb $0, %al1190; SSE2-NEXT: movzbl %al, %eax1191; SSE2-NEXT: pinsrb $8, %eax, %xmm01192; SSE2-NEXT: pextrd $1, %xmm6, %eax1193; SSE2-NEXT: pextrd $1, %xmm2, %ecx1194; SSE2-NEXT: cmpl %eax, %ecx1195; SSE2-NEXT: seta %al1196; SSE2-NEXT: sbbb $0, %al1197; SSE2-NEXT: movzbl %al, %eax1198; SSE2-NEXT: pinsrb $9, %eax, %xmm01199; SSE2-NEXT: pextrd $2, %xmm6, %eax1200; SSE2-NEXT: pextrd $2, %xmm2, %ecx1201; SSE2-NEXT: cmpl %eax, %ecx1202; SSE2-NEXT: seta %al1203; SSE2-NEXT: sbbb $0, %al1204; SSE2-NEXT: movzbl %al, %eax1205; SSE2-NEXT: pinsrb $10, %eax, %xmm01206; SSE2-NEXT: pextrd $3, %xmm6, %eax1207; SSE2-NEXT: pextrd $3, %xmm2, %ecx1208; SSE2-NEXT: cmpl %eax, %ecx1209; SSE2-NEXT: seta %al1210; SSE2-NEXT: sbbb $0, %al1211; SSE2-NEXT: movzbl %al, %eax1212; SSE2-NEXT: pinsrb $11, %eax, %xmm01213; SSE2-NEXT: movd %xmm7, %eax1214; SSE2-NEXT: movd %xmm3, %ecx1215; SSE2-NEXT: cmpl %eax, %ecx1216; SSE2-NEXT: seta %al1217; SSE2-NEXT: sbbb $0, %al1218; SSE2-NEXT: movzbl %al, %eax1219; SSE2-NEXT: pinsrb $12, %eax, %xmm01220; SSE2-NEXT: pextrd $1, %xmm7, %eax1221; SSE2-NEXT: pextrd $1, %xmm3, %ecx1222; SSE2-NEXT: cmpl %eax, %ecx1223; SSE2-NEXT: seta %al1224; SSE2-NEXT: sbbb $0, %al1225; SSE2-NEXT: movzbl %al, %eax1226; SSE2-NEXT: pinsrb $13, %eax, %xmm01227; SSE2-NEXT: pextrd $2, %xmm7, %eax1228; SSE2-NEXT: pextrd $2, %xmm3, %ecx1229; SSE2-NEXT: cmpl %eax, %ecx1230; SSE2-NEXT: seta %al1231; SSE2-NEXT: sbbb $0, %al1232; SSE2-NEXT: movzbl %al, %eax1233; SSE2-NEXT: pinsrb $14, %eax, %xmm01234; SSE2-NEXT: pextrd $3, %xmm7, %eax1235; SSE2-NEXT: pextrd $3, %xmm3, %ecx1236; SSE2-NEXT: cmpl %eax, %ecx1237; SSE2-NEXT: seta %al1238; SSE2-NEXT: sbbb $0, %al1239; SSE2-NEXT: movzbl %al, %eax1240; SSE2-NEXT: pinsrb $15, %eax, %xmm01241; SSE2-NEXT: retq1242;1243; AVX2-LABEL: ucmp_wide_vec_op:1244; AVX2: # %bb.0:1245; AVX2-NEXT: vpextrd $1, %xmm2, %eax1246; AVX2-NEXT: vpextrd $1, %xmm0, %ecx1247; AVX2-NEXT: cmpl %eax, %ecx1248; AVX2-NEXT: seta %al1249; AVX2-NEXT: sbbb $0, %al1250; AVX2-NEXT: vmovd %xmm2, %ecx1251; AVX2-NEXT: vmovd %xmm0, %edx1252; AVX2-NEXT: cmpl %ecx, %edx1253; AVX2-NEXT: seta %cl1254; AVX2-NEXT: sbbb $0, %cl1255; AVX2-NEXT: vmovd %ecx, %xmm41256; AVX2-NEXT: vpinsrb $1, %eax, %xmm4, %xmm41257; AVX2-NEXT: vpextrd $2, %xmm2, %eax1258; AVX2-NEXT: vpextrd $2, %xmm0, %ecx1259; AVX2-NEXT: cmpl %eax, %ecx1260; AVX2-NEXT: seta %al1261; AVX2-NEXT: sbbb $0, %al1262; AVX2-NEXT: vpinsrb $2, %eax, %xmm4, %xmm41263; AVX2-NEXT: vpextrd $3, %xmm2, %eax1264; AVX2-NEXT: vpextrd $3, %xmm0, %ecx1265; AVX2-NEXT: cmpl %eax, %ecx1266; AVX2-NEXT: seta %al1267; AVX2-NEXT: sbbb $0, %al1268; AVX2-NEXT: vpinsrb $3, %eax, %xmm4, %xmm41269; AVX2-NEXT: vextracti128 $1, %ymm2, %xmm21270; AVX2-NEXT: vmovd %xmm2, %eax1271; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm01272; AVX2-NEXT: vmovd %xmm0, %ecx1273; AVX2-NEXT: cmpl %eax, %ecx1274; AVX2-NEXT: seta %al1275; AVX2-NEXT: sbbb $0, %al1276; AVX2-NEXT: vpinsrb $4, %eax, %xmm4, %xmm41277; AVX2-NEXT: vpextrd $1, %xmm2, %eax1278; AVX2-NEXT: vpextrd $1, %xmm0, %ecx1279; AVX2-NEXT: cmpl %eax, %ecx1280; AVX2-NEXT: seta %al1281; AVX2-NEXT: sbbb $0, %al1282; AVX2-NEXT: vpinsrb $5, %eax, %xmm4, %xmm41283; AVX2-NEXT: vpextrd $2, %xmm2, %eax1284; AVX2-NEXT: vpextrd $2, %xmm0, %ecx1285; AVX2-NEXT: cmpl %eax, %ecx1286; AVX2-NEXT: seta %al1287; AVX2-NEXT: sbbb $0, %al1288; AVX2-NEXT: vpinsrb $6, %eax, %xmm4, %xmm41289; AVX2-NEXT: vpextrd $3, %xmm2, %eax1290; AVX2-NEXT: vpextrd $3, %xmm0, %ecx1291; AVX2-NEXT: cmpl %eax, %ecx1292; AVX2-NEXT: seta %al1293; AVX2-NEXT: sbbb $0, %al1294; AVX2-NEXT: vpinsrb $7, %eax, %xmm4, %xmm01295; AVX2-NEXT: vmovd %xmm3, %eax1296; AVX2-NEXT: vmovd %xmm1, %ecx1297; AVX2-NEXT: cmpl %eax, %ecx1298; AVX2-NEXT: seta %al1299; AVX2-NEXT: sbbb $0, %al1300; AVX2-NEXT: vpinsrb $8, %eax, %xmm0, %xmm01301; AVX2-NEXT: vpextrd $1, %xmm3, %eax1302; AVX2-NEXT: vpextrd $1, %xmm1, %ecx1303; AVX2-NEXT: cmpl %eax, %ecx1304; AVX2-NEXT: seta %al1305; AVX2-NEXT: sbbb $0, %al1306; AVX2-NEXT: vpinsrb $9, %eax, %xmm0, %xmm01307; AVX2-NEXT: vpextrd $2, %xmm3, %eax1308; AVX2-NEXT: vpextrd $2, %xmm1, %ecx1309; AVX2-NEXT: cmpl %eax, %ecx1310; AVX2-NEXT: seta %al1311; AVX2-NEXT: sbbb $0, %al1312; AVX2-NEXT: vpinsrb $10, %eax, %xmm0, %xmm01313; AVX2-NEXT: vpextrd $3, %xmm3, %eax1314; AVX2-NEXT: vpextrd $3, %xmm1, %ecx1315; AVX2-NEXT: cmpl %eax, %ecx1316; AVX2-NEXT: seta %al1317; AVX2-NEXT: sbbb $0, %al1318; AVX2-NEXT: vpinsrb $11, %eax, %xmm0, %xmm01319; AVX2-NEXT: vextracti128 $1, %ymm3, %xmm21320; AVX2-NEXT: vmovd %xmm2, %eax1321; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm11322; AVX2-NEXT: vmovd %xmm1, %ecx1323; AVX2-NEXT: cmpl %eax, %ecx1324; AVX2-NEXT: seta %al1325; AVX2-NEXT: sbbb $0, %al1326; AVX2-NEXT: vpinsrb $12, %eax, %xmm0, %xmm01327; AVX2-NEXT: vpextrd $1, %xmm2, %eax1328; AVX2-NEXT: vpextrd $1, %xmm1, %ecx1329; AVX2-NEXT: cmpl %eax, %ecx1330; AVX2-NEXT: seta %al1331; AVX2-NEXT: sbbb $0, %al1332; AVX2-NEXT: vpinsrb $13, %eax, %xmm0, %xmm01333; AVX2-NEXT: vpextrd $2, %xmm2, %eax1334; AVX2-NEXT: vpextrd $2, %xmm1, %ecx1335; AVX2-NEXT: cmpl %eax, %ecx1336; AVX2-NEXT: seta %al1337; AVX2-NEXT: sbbb $0, %al1338; AVX2-NEXT: vpinsrb $14, %eax, %xmm0, %xmm01339; AVX2-NEXT: vpextrd $3, %xmm2, %eax1340; AVX2-NEXT: vpextrd $3, %xmm1, %ecx1341; AVX2-NEXT: cmpl %eax, %ecx1342; AVX2-NEXT: seta %al1343; AVX2-NEXT: sbbb $0, %al1344; AVX2-NEXT: vpinsrb $15, %eax, %xmm0, %xmm01345; AVX2-NEXT: vzeroupper1346; AVX2-NEXT: retq1347;1348; AVX512-LABEL: ucmp_wide_vec_op:1349; AVX512: # %bb.0:1350; AVX512-NEXT: vpcmpltud %zmm1, %zmm0, %k11351; AVX512-NEXT: vpcmpnleud %zmm1, %zmm0, %k21352; AVX512-NEXT: vmovdqu8 {{.*#+}} xmm0 {%k2} {z} = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]1353; AVX512-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm11354; AVX512-NEXT: vmovdqu8 %xmm1, %xmm0 {%k1}1355; AVX512-NEXT: vzeroupper1356; AVX512-NEXT: retq1357;1358; X86-LABEL: ucmp_wide_vec_op:1359; X86: # %bb.0:1360; X86-NEXT: pushl %ebp1361; X86-NEXT: pushl %ebx1362; X86-NEXT: pushl %edi1363; X86-NEXT: pushl %esi1364; X86-NEXT: subl $12, %esp1365; X86-NEXT: movl {{[0-9]+}}(%esp), %esi1366; X86-NEXT: movl {{[0-9]+}}(%esp), %edi1367; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx1368; X86-NEXT: movl {{[0-9]+}}(%esp), %edx1369; X86-NEXT: movl {{[0-9]+}}(%esp), %ebx1370; X86-NEXT: movl {{[0-9]+}}(%esp), %ebp1371; X86-NEXT: cmpl {{[0-9]+}}(%esp), %ebp1372; X86-NEXT: seta %al1373; X86-NEXT: sbbb $0, %al1374; X86-NEXT: movb %al, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill1375; X86-NEXT: cmpl {{[0-9]+}}(%esp), %ebx1376; X86-NEXT: movl {{[0-9]+}}(%esp), %ebx1377; X86-NEXT: seta %al1378; X86-NEXT: sbbb $0, %al1379; X86-NEXT: movb %al, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill1380; X86-NEXT: cmpl {{[0-9]+}}(%esp), %ebx1381; X86-NEXT: seta %al1382; X86-NEXT: sbbb $0, %al1383; X86-NEXT: movb %al, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill1384; X86-NEXT: cmpl {{[0-9]+}}(%esp), %edx1385; X86-NEXT: movl {{[0-9]+}}(%esp), %edx1386; X86-NEXT: seta %al1387; X86-NEXT: sbbb $0, %al1388; X86-NEXT: movb %al, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill1389; X86-NEXT: cmpl {{[0-9]+}}(%esp), %edx1390; X86-NEXT: seta %al1391; X86-NEXT: sbbb $0, %al1392; X86-NEXT: movb %al, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill1393; X86-NEXT: cmpl {{[0-9]+}}(%esp), %ecx1394; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx1395; X86-NEXT: seta %al1396; X86-NEXT: sbbb $0, %al1397; X86-NEXT: movb %al, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill1398; X86-NEXT: cmpl {{[0-9]+}}(%esp), %ecx1399; X86-NEXT: seta %al1400; X86-NEXT: sbbb $0, %al1401; X86-NEXT: movb %al, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill1402; X86-NEXT: cmpl {{[0-9]+}}(%esp), %edi1403; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx1404; X86-NEXT: seta %al1405; X86-NEXT: sbbb $0, %al1406; X86-NEXT: movb %al, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill1407; X86-NEXT: cmpl {{[0-9]+}}(%esp), %ecx1408; X86-NEXT: seta %al1409; X86-NEXT: sbbb $0, %al1410; X86-NEXT: movb %al, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill1411; X86-NEXT: cmpl {{[0-9]+}}(%esp), %esi1412; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx1413; X86-NEXT: seta %al1414; X86-NEXT: sbbb $0, %al1415; X86-NEXT: movb %al, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill1416; X86-NEXT: cmpl {{[0-9]+}}(%esp), %ecx1417; X86-NEXT: seta %bh1418; X86-NEXT: sbbb $0, %bh1419; X86-NEXT: movl {{[0-9]+}}(%esp), %eax1420; X86-NEXT: cmpl {{[0-9]+}}(%esp), %eax1421; X86-NEXT: movl {{[0-9]+}}(%esp), %eax1422; X86-NEXT: seta %bl1423; X86-NEXT: sbbb $0, %bl1424; X86-NEXT: cmpl {{[0-9]+}}(%esp), %eax1425; X86-NEXT: seta %dh1426; X86-NEXT: sbbb $0, %dh1427; X86-NEXT: movl {{[0-9]+}}(%esp), %eax1428; X86-NEXT: cmpl {{[0-9]+}}(%esp), %eax1429; X86-NEXT: seta %ch1430; X86-NEXT: sbbb $0, %ch1431; X86-NEXT: movl {{[0-9]+}}(%esp), %eax1432; X86-NEXT: cmpl {{[0-9]+}}(%esp), %eax1433; X86-NEXT: seta %dl1434; X86-NEXT: sbbb $0, %dl1435; X86-NEXT: movl {{[0-9]+}}(%esp), %eax1436; X86-NEXT: cmpl {{[0-9]+}}(%esp), %eax1437; X86-NEXT: seta %cl1438; X86-NEXT: sbbb $0, %cl1439; X86-NEXT: movl {{[0-9]+}}(%esp), %eax1440; X86-NEXT: movb %cl, 15(%eax)1441; X86-NEXT: movb %dl, 14(%eax)1442; X86-NEXT: movb %ch, 13(%eax)1443; X86-NEXT: movb %dh, 12(%eax)1444; X86-NEXT: movb %bl, 11(%eax)1445; X86-NEXT: movb %bh, 10(%eax)1446; X86-NEXT: movzbl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 1-byte Folded Reload1447; X86-NEXT: movb %cl, 9(%eax)1448; X86-NEXT: movzbl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 1-byte Folded Reload1449; X86-NEXT: movb %cl, 8(%eax)1450; X86-NEXT: movzbl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 1-byte Folded Reload1451; X86-NEXT: movb %cl, 7(%eax)1452; X86-NEXT: movzbl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 1-byte Folded Reload1453; X86-NEXT: movb %cl, 6(%eax)1454; X86-NEXT: movzbl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 1-byte Folded Reload1455; X86-NEXT: movb %cl, 5(%eax)1456; X86-NEXT: movzbl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 1-byte Folded Reload1457; X86-NEXT: movb %cl, 4(%eax)1458; X86-NEXT: movzbl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 1-byte Folded Reload1459; X86-NEXT: movb %cl, 3(%eax)1460; X86-NEXT: movzbl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 1-byte Folded Reload1461; X86-NEXT: movb %cl, 2(%eax)1462; X86-NEXT: movzbl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 1-byte Folded Reload1463; X86-NEXT: movb %cl, 1(%eax)1464; X86-NEXT: movzbl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 1-byte Folded Reload1465; X86-NEXT: movb %cl, (%eax)1466; X86-NEXT: addl $12, %esp1467; X86-NEXT: popl %esi1468; X86-NEXT: popl %edi1469; X86-NEXT: popl %ebx1470; X86-NEXT: popl %ebp1471; X86-NEXT: retl $41472 %1 = call <16 x i8> @llvm.ucmp(<16 x i32> %x, <16 x i32> %y)1473 ret <16 x i8> %11474}1475 1476define <17 x i2> @ucmp_uncommon_vectors(<17 x i71> %x, <17 x i71> %y) nounwind {1477; SSE4-LABEL: ucmp_uncommon_vectors:1478; SSE4: # %bb.0:1479; SSE4-NEXT: pushq %rbp1480; SSE4-NEXT: pushq %r151481; SSE4-NEXT: pushq %r141482; SSE4-NEXT: pushq %r131483; SSE4-NEXT: pushq %r121484; SSE4-NEXT: pushq %rbx1485; SSE4-NEXT: subq $120, %rsp1486; SSE4-NEXT: movq %rcx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1487; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %rax1488; SSE4-NEXT: andl $127, %eax1489; SSE4-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1490; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %rax1491; SSE4-NEXT: andl $127, %eax1492; SSE4-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1493; SSE4-NEXT: andl $127, %edx1494; SSE4-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1495; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %rax1496; SSE4-NEXT: andl $127, %eax1497; SSE4-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1498; SSE4-NEXT: andl $127, %r8d1499; SSE4-NEXT: movq %r8, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1500; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %rax1501; SSE4-NEXT: andl $127, %eax1502; SSE4-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1503; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %rax1504; SSE4-NEXT: andl $127, %eax1505; SSE4-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1506; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %rax1507; SSE4-NEXT: andl $127, %eax1508; SSE4-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1509; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %rax1510; SSE4-NEXT: andl $127, %eax1511; SSE4-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1512; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %rax1513; SSE4-NEXT: andl $127, %eax1514; SSE4-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1515; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %rax1516; SSE4-NEXT: andl $127, %eax1517; SSE4-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1518; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %rax1519; SSE4-NEXT: andl $127, %eax1520; SSE4-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1521; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %rax1522; SSE4-NEXT: andl $127, %eax1523; SSE4-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1524; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %rax1525; SSE4-NEXT: andl $127, %eax1526; SSE4-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1527; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %rax1528; SSE4-NEXT: andl $127, %eax1529; SSE4-NEXT: movq %rax, (%rsp) # 8-byte Spill1530; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %rax1531; SSE4-NEXT: andl $127, %eax1532; SSE4-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1533; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %rax1534; SSE4-NEXT: andl $127, %eax1535; SSE4-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1536; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %rax1537; SSE4-NEXT: andl $127, %eax1538; SSE4-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1539; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %rax1540; SSE4-NEXT: andl $127, %eax1541; SSE4-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1542; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %rax1543; SSE4-NEXT: andl $127, %eax1544; SSE4-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1545; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %rax1546; SSE4-NEXT: andl $127, %eax1547; SSE4-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1548; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %rax1549; SSE4-NEXT: andl $127, %eax1550; SSE4-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1551; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %rax1552; SSE4-NEXT: andl $127, %eax1553; SSE4-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1554; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %rax1555; SSE4-NEXT: andl $127, %eax1556; SSE4-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1557; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %r101558; SSE4-NEXT: andl $127, %r10d1559; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %rax1560; SSE4-NEXT: andl $127, %eax1561; SSE4-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1562; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %rcx1563; SSE4-NEXT: andl $127, %ecx1564; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %r81565; SSE4-NEXT: andl $127, %r8d1566; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %rbx1567; SSE4-NEXT: andl $127, %ebx1568; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %rdx1569; SSE4-NEXT: andl $127, %edx1570; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %r131571; SSE4-NEXT: andl $127, %r13d1572; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %r111573; SSE4-NEXT: andl $127, %r11d1574; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %r141575; SSE4-NEXT: andl $127, %r14d1576; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %r121577; SSE4-NEXT: andl $127, %r12d1578; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %rax1579; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %rbp1580; SSE4-NEXT: cmpq %rax, %rbp1581; SSE4-NEXT: movq %r12, %r151582; SSE4-NEXT: sbbq %r14, %r151583; SSE4-NEXT: setb %r15b1584; SSE4-NEXT: cmpq %rbp, %rax1585; SSE4-NEXT: sbbq %r12, %r141586; SSE4-NEXT: sbbb $0, %r15b1587; SSE4-NEXT: movb %r15b, {{[-0-9]+}}(%r{{[sb]}}p) # 1-byte Spill1588; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %rax1589; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %r141590; SSE4-NEXT: cmpq %rax, %r141591; SSE4-NEXT: movq %r11, %r151592; SSE4-NEXT: sbbq %r13, %r151593; SSE4-NEXT: setb %bpl1594; SSE4-NEXT: cmpq %r14, %rax1595; SSE4-NEXT: sbbq %r11, %r131596; SSE4-NEXT: sbbb $0, %bpl1597; SSE4-NEXT: movb %bpl, {{[-0-9]+}}(%r{{[sb]}}p) # 1-byte Spill1598; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %rax1599; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %r111600; SSE4-NEXT: cmpq %rax, %r111601; SSE4-NEXT: movq %rdx, %r141602; SSE4-NEXT: sbbq %rbx, %r141603; SSE4-NEXT: setb %bpl1604; SSE4-NEXT: cmpq %r11, %rax1605; SSE4-NEXT: sbbq %rdx, %rbx1606; SSE4-NEXT: sbbb $0, %bpl1607; SSE4-NEXT: movb %bpl, {{[-0-9]+}}(%r{{[sb]}}p) # 1-byte Spill1608; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %rax1609; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %rdx1610; SSE4-NEXT: cmpq %rax, %rdx1611; SSE4-NEXT: movq %r8, %r111612; SSE4-NEXT: sbbq %rcx, %r111613; SSE4-NEXT: setb %r11b1614; SSE4-NEXT: cmpq %rdx, %rax1615; SSE4-NEXT: sbbq %r8, %rcx1616; SSE4-NEXT: sbbb $0, %r11b1617; SSE4-NEXT: movb %r11b, {{[-0-9]+}}(%r{{[sb]}}p) # 1-byte Spill1618; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %rax1619; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %rcx1620; SSE4-NEXT: cmpq %rax, %rcx1621; SSE4-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r8 # 8-byte Reload1622; SSE4-NEXT: movq %r8, %rdx1623; SSE4-NEXT: sbbq %r10, %rdx1624; SSE4-NEXT: setb %dl1625; SSE4-NEXT: cmpq %rcx, %rax1626; SSE4-NEXT: sbbq %r8, %r101627; SSE4-NEXT: sbbb $0, %dl1628; SSE4-NEXT: movb %dl, {{[-0-9]+}}(%r{{[sb]}}p) # 1-byte Spill1629; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %rax1630; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %rcx1631; SSE4-NEXT: cmpq %rax, %rcx1632; SSE4-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r11 # 8-byte Reload1633; SSE4-NEXT: movq %r11, %rdx1634; SSE4-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r8 # 8-byte Reload1635; SSE4-NEXT: sbbq %r8, %rdx1636; SSE4-NEXT: setb %r10b1637; SSE4-NEXT: cmpq %rcx, %rax1638; SSE4-NEXT: sbbq %r11, %r81639; SSE4-NEXT: sbbb $0, %r10b1640; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %rax1641; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %rcx1642; SSE4-NEXT: cmpq %rax, %rcx1643; SSE4-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r11 # 8-byte Reload1644; SSE4-NEXT: movq %r11, %rdx1645; SSE4-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r8 # 8-byte Reload1646; SSE4-NEXT: sbbq %r8, %rdx1647; SSE4-NEXT: setb %dl1648; SSE4-NEXT: cmpq %rcx, %rax1649; SSE4-NEXT: sbbq %r11, %r81650; SSE4-NEXT: sbbb $0, %dl1651; SSE4-NEXT: movb %dl, {{[-0-9]+}}(%r{{[sb]}}p) # 1-byte Spill1652; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %rax1653; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %rcx1654; SSE4-NEXT: cmpq %rax, %rcx1655; SSE4-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r11 # 8-byte Reload1656; SSE4-NEXT: movq %r11, %rdx1657; SSE4-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r8 # 8-byte Reload1658; SSE4-NEXT: sbbq %r8, %rdx1659; SSE4-NEXT: setb %bpl1660; SSE4-NEXT: cmpq %rcx, %rax1661; SSE4-NEXT: sbbq %r11, %r81662; SSE4-NEXT: sbbb $0, %bpl1663; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %rax1664; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %rcx1665; SSE4-NEXT: cmpq %rax, %rcx1666; SSE4-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r11 # 8-byte Reload1667; SSE4-NEXT: movq %r11, %rdx1668; SSE4-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r8 # 8-byte Reload1669; SSE4-NEXT: sbbq %r8, %rdx1670; SSE4-NEXT: setb %dl1671; SSE4-NEXT: cmpq %rcx, %rax1672; SSE4-NEXT: sbbq %r11, %r81673; SSE4-NEXT: sbbb $0, %dl1674; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %rax1675; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %rcx1676; SSE4-NEXT: cmpq %rax, %rcx1677; SSE4-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r14 # 8-byte Reload1678; SSE4-NEXT: movq %r14, %r81679; SSE4-NEXT: movq (%rsp), %rbx # 8-byte Reload1680; SSE4-NEXT: sbbq %rbx, %r81681; SSE4-NEXT: setb %r11b1682; SSE4-NEXT: cmpq %rcx, %rax1683; SSE4-NEXT: sbbq %r14, %rbx1684; SSE4-NEXT: sbbb $0, %r11b1685; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %rax1686; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %rcx1687; SSE4-NEXT: cmpq %rax, %rcx1688; SSE4-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r14 # 8-byte Reload1689; SSE4-NEXT: movq %r14, %rbx1690; SSE4-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r8 # 8-byte Reload1691; SSE4-NEXT: sbbq %r8, %rbx1692; SSE4-NEXT: setb %bl1693; SSE4-NEXT: cmpq %rcx, %rax1694; SSE4-NEXT: sbbq %r14, %r81695; SSE4-NEXT: sbbb $0, %bl1696; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %rax1697; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %r141698; SSE4-NEXT: cmpq %rax, %r141699; SSE4-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r15 # 8-byte Reload1700; SSE4-NEXT: movq %r15, %rcx1701; SSE4-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r8 # 8-byte Reload1702; SSE4-NEXT: sbbq %r8, %rcx1703; SSE4-NEXT: setb %cl1704; SSE4-NEXT: cmpq %r14, %rax1705; SSE4-NEXT: sbbq %r15, %r81706; SSE4-NEXT: sbbb $0, %cl1707; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %rax1708; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %r151709; SSE4-NEXT: cmpq %rax, %r151710; SSE4-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r12 # 8-byte Reload1711; SSE4-NEXT: movq %r12, %r141712; SSE4-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r8 # 8-byte Reload1713; SSE4-NEXT: sbbq %r8, %r141714; SSE4-NEXT: setb %r14b1715; SSE4-NEXT: cmpq %r15, %rax1716; SSE4-NEXT: sbbq %r12, %r81717; SSE4-NEXT: sbbb $0, %r14b1718; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %rax1719; SSE4-NEXT: cmpq %r9, %rax1720; SSE4-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r12 # 8-byte Reload1721; SSE4-NEXT: movq %r12, %r151722; SSE4-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r8 # 8-byte Reload1723; SSE4-NEXT: sbbq %r8, %r151724; SSE4-NEXT: setb %r15b1725; SSE4-NEXT: cmpq %rax, %r91726; SSE4-NEXT: sbbq %r12, %r81727; SSE4-NEXT: sbbb $0, %r15b1728; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %rax1729; SSE4-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r12 # 8-byte Reload1730; SSE4-NEXT: cmpq %r12, %rax1731; SSE4-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r13 # 8-byte Reload1732; SSE4-NEXT: movq %r13, %r91733; SSE4-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r8 # 8-byte Reload1734; SSE4-NEXT: sbbq %r8, %r91735; SSE4-NEXT: setb %r9b1736; SSE4-NEXT: cmpq %rax, %r121737; SSE4-NEXT: sbbq %r13, %r81738; SSE4-NEXT: movq %rdi, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1739; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %r121740; SSE4-NEXT: sbbb $0, %r9b1741; SSE4-NEXT: cmpq %rsi, %r121742; SSE4-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r8 # 8-byte Reload1743; SSE4-NEXT: movq %r8, %rdi1744; SSE4-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload1745; SSE4-NEXT: sbbq %rax, %rdi1746; SSE4-NEXT: setb %dil1747; SSE4-NEXT: cmpq %r12, %rsi1748; SSE4-NEXT: sbbq %r8, %rax1749; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %r121750; SSE4-NEXT: movq {{[0-9]+}}(%rsp), %r131751; SSE4-NEXT: sbbb $0, %dil1752; SSE4-NEXT: cmpq %r12, %r131753; SSE4-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r8 # 8-byte Reload1754; SSE4-NEXT: movq %r8, %rsi1755; SSE4-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload1756; SSE4-NEXT: sbbq %rax, %rsi1757; SSE4-NEXT: setb %sil1758; SSE4-NEXT: cmpq %r13, %r121759; SSE4-NEXT: movzbl {{[-0-9]+}}(%r{{[sb]}}p), %r12d # 1-byte Folded Reload1760; SSE4-NEXT: movd %r12d, %xmm11761; SSE4-NEXT: movzbl {{[-0-9]+}}(%r{{[sb]}}p), %r12d # 1-byte Folded Reload1762; SSE4-NEXT: movd %r12d, %xmm21763; SSE4-NEXT: movzbl {{[-0-9]+}}(%r{{[sb]}}p), %r12d # 1-byte Folded Reload1764; SSE4-NEXT: movd %r12d, %xmm31765; SSE4-NEXT: movzbl {{[-0-9]+}}(%r{{[sb]}}p), %r12d # 1-byte Folded Reload1766; SSE4-NEXT: movd %r12d, %xmm41767; SSE4-NEXT: movzbl {{[-0-9]+}}(%r{{[sb]}}p), %r12d # 1-byte Folded Reload1768; SSE4-NEXT: movd %r12d, %xmm51769; SSE4-NEXT: movzbl %r10b, %r10d1770; SSE4-NEXT: movd %r10d, %xmm61771; SSE4-NEXT: movzbl {{[-0-9]+}}(%r{{[sb]}}p), %r10d # 1-byte Folded Reload1772; SSE4-NEXT: movd %r10d, %xmm71773; SSE4-NEXT: movzbl %bpl, %r10d1774; SSE4-NEXT: movd %r10d, %xmm01775; SSE4-NEXT: movzbl %dl, %edx1776; SSE4-NEXT: movd %edx, %xmm81777; SSE4-NEXT: movzbl %r11b, %edx1778; SSE4-NEXT: movd %edx, %xmm91779; SSE4-NEXT: movzbl %bl, %edx1780; SSE4-NEXT: movd %edx, %xmm101781; SSE4-NEXT: movzbl %cl, %ecx1782; SSE4-NEXT: movd %ecx, %xmm111783; SSE4-NEXT: movzbl %r14b, %ecx1784; SSE4-NEXT: movd %ecx, %xmm121785; SSE4-NEXT: movzbl %r15b, %ecx1786; SSE4-NEXT: movd %ecx, %xmm131787; SSE4-NEXT: movzbl %r9b, %ecx1788; SSE4-NEXT: movd %ecx, %xmm141789; SSE4-NEXT: movzbl %dil, %ecx1790; SSE4-NEXT: movd %ecx, %xmm151791; SSE4-NEXT: punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3],xmm2[4],xmm1[4],xmm2[5],xmm1[5],xmm2[6],xmm1[6],xmm2[7],xmm1[7]1792; SSE4-NEXT: punpcklbw {{.*#+}} xmm4 = xmm4[0],xmm3[0],xmm4[1],xmm3[1],xmm4[2],xmm3[2],xmm4[3],xmm3[3],xmm4[4],xmm3[4],xmm4[5],xmm3[5],xmm4[6],xmm3[6],xmm4[7],xmm3[7]1793; SSE4-NEXT: punpcklwd {{.*#+}} xmm4 = xmm4[0],xmm2[0],xmm4[1],xmm2[1],xmm4[2],xmm2[2],xmm4[3],xmm2[3]1794; SSE4-NEXT: punpcklbw {{.*#+}} xmm6 = xmm6[0],xmm5[0],xmm6[1],xmm5[1],xmm6[2],xmm5[2],xmm6[3],xmm5[3],xmm6[4],xmm5[4],xmm6[5],xmm5[5],xmm6[6],xmm5[6],xmm6[7],xmm5[7]1795; SSE4-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm7[0],xmm0[1],xmm7[1],xmm0[2],xmm7[2],xmm0[3],xmm7[3],xmm0[4],xmm7[4],xmm0[5],xmm7[5],xmm0[6],xmm7[6],xmm0[7],xmm7[7]1796; SSE4-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm6[0],xmm0[1],xmm6[1],xmm0[2],xmm6[2],xmm0[3],xmm6[3]1797; SSE4-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1]1798; SSE4-NEXT: punpcklbw {{.*#+}} xmm9 = xmm9[0],xmm8[0],xmm9[1],xmm8[1],xmm9[2],xmm8[2],xmm9[3],xmm8[3],xmm9[4],xmm8[4],xmm9[5],xmm8[5],xmm9[6],xmm8[6],xmm9[7],xmm8[7]1799; SSE4-NEXT: punpcklbw {{.*#+}} xmm11 = xmm11[0],xmm10[0],xmm11[1],xmm10[1],xmm11[2],xmm10[2],xmm11[3],xmm10[3],xmm11[4],xmm10[4],xmm11[5],xmm10[5],xmm11[6],xmm10[6],xmm11[7],xmm10[7]1800; SSE4-NEXT: punpcklwd {{.*#+}} xmm11 = xmm11[0],xmm9[0],xmm11[1],xmm9[1],xmm11[2],xmm9[2],xmm11[3],xmm9[3]1801; SSE4-NEXT: punpcklbw {{.*#+}} xmm13 = xmm13[0],xmm12[0],xmm13[1],xmm12[1],xmm13[2],xmm12[2],xmm13[3],xmm12[3],xmm13[4],xmm12[4],xmm13[5],xmm12[5],xmm13[6],xmm12[6],xmm13[7],xmm12[7]1802; SSE4-NEXT: punpcklbw {{.*#+}} xmm15 = xmm15[0],xmm14[0],xmm15[1],xmm14[1],xmm15[2],xmm14[2],xmm15[3],xmm14[3],xmm15[4],xmm14[4],xmm15[5],xmm14[5],xmm15[6],xmm14[6],xmm15[7],xmm14[7]1803; SSE4-NEXT: punpcklwd {{.*#+}} xmm15 = xmm15[0],xmm13[0],xmm15[1],xmm13[1],xmm15[2],xmm13[2],xmm15[3],xmm13[3]1804; SSE4-NEXT: punpckldq {{.*#+}} xmm15 = xmm15[0],xmm11[0],xmm15[1],xmm11[1]1805; SSE4-NEXT: sbbq %r8, %rax1806; SSE4-NEXT: sbbb $0, %sil1807; SSE4-NEXT: punpcklqdq {{.*#+}} xmm15 = xmm15[0],xmm0[0]1808; SSE4-NEXT: movzbl %sil, %ecx1809; SSE4-NEXT: andl $3, %ecx1810; SSE4-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload1811; SSE4-NEXT: movb %cl, 4(%rax)1812; SSE4-NEXT: movdqa %xmm15, -{{[0-9]+}}(%rsp)1813; SSE4-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx1814; SSE4-NEXT: andl $3, %ecx1815; SSE4-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx1816; SSE4-NEXT: andl $3, %edx1817; SSE4-NEXT: leaq (%rdx,%rcx,4), %rcx1818; SSE4-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx1819; SSE4-NEXT: andl $3, %edx1820; SSE4-NEXT: shll $4, %edx1821; SSE4-NEXT: orq %rcx, %rdx1822; SSE4-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx1823; SSE4-NEXT: andl $3, %ecx1824; SSE4-NEXT: shll $6, %ecx1825; SSE4-NEXT: orq %rdx, %rcx1826; SSE4-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx1827; SSE4-NEXT: andl $3, %edx1828; SSE4-NEXT: shll $8, %edx1829; SSE4-NEXT: orq %rcx, %rdx1830; SSE4-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx1831; SSE4-NEXT: andl $3, %ecx1832; SSE4-NEXT: shll $10, %ecx1833; SSE4-NEXT: movzbl -{{[0-9]+}}(%rsp), %esi1834; SSE4-NEXT: andl $3, %esi1835; SSE4-NEXT: shll $12, %esi1836; SSE4-NEXT: orq %rcx, %rsi1837; SSE4-NEXT: movzbl -{{[0-9]+}}(%rsp), %edi1838; SSE4-NEXT: andl $3, %edi1839; SSE4-NEXT: shll $14, %edi1840; SSE4-NEXT: orq %rsi, %rdi1841; SSE4-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx1842; SSE4-NEXT: andl $3, %ecx1843; SSE4-NEXT: shll $16, %ecx1844; SSE4-NEXT: orq %rdi, %rcx1845; SSE4-NEXT: orq %rdx, %rcx1846; SSE4-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx1847; SSE4-NEXT: andl $3, %edx1848; SSE4-NEXT: shll $18, %edx1849; SSE4-NEXT: movzbl -{{[0-9]+}}(%rsp), %esi1850; SSE4-NEXT: andl $3, %esi1851; SSE4-NEXT: shll $20, %esi1852; SSE4-NEXT: orq %rdx, %rsi1853; SSE4-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx1854; SSE4-NEXT: andl $3, %edx1855; SSE4-NEXT: shll $22, %edx1856; SSE4-NEXT: orq %rsi, %rdx1857; SSE4-NEXT: movzbl -{{[0-9]+}}(%rsp), %esi1858; SSE4-NEXT: andl $3, %esi1859; SSE4-NEXT: shll $24, %esi1860; SSE4-NEXT: orq %rdx, %rsi1861; SSE4-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx1862; SSE4-NEXT: andl $3, %edx1863; SSE4-NEXT: shlq $26, %rdx1864; SSE4-NEXT: orq %rsi, %rdx1865; SSE4-NEXT: orq %rcx, %rdx1866; SSE4-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx1867; SSE4-NEXT: andl $3, %ecx1868; SSE4-NEXT: shlq $28, %rcx1869; SSE4-NEXT: movzbl -{{[0-9]+}}(%rsp), %esi1870; SSE4-NEXT: andl $3, %esi1871; SSE4-NEXT: shlq $30, %rsi1872; SSE4-NEXT: orq %rcx, %rsi1873; SSE4-NEXT: orq %rdx, %rsi1874; SSE4-NEXT: movl %esi, (%rax)1875; SSE4-NEXT: addq $120, %rsp1876; SSE4-NEXT: popq %rbx1877; SSE4-NEXT: popq %r121878; SSE4-NEXT: popq %r131879; SSE4-NEXT: popq %r141880; SSE4-NEXT: popq %r151881; SSE4-NEXT: popq %rbp1882; SSE4-NEXT: retq1883;1884; SSE2-LABEL: ucmp_uncommon_vectors:1885; SSE2: # %bb.0:1886; SSE2-NEXT: pushq %rbp1887; SSE2-NEXT: pushq %r151888; SSE2-NEXT: pushq %r141889; SSE2-NEXT: pushq %r131890; SSE2-NEXT: pushq %r121891; SSE2-NEXT: pushq %rbx1892; SSE2-NEXT: subq $88, %rsp1893; SSE2-NEXT: movq %rcx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1894; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rax1895; SSE2-NEXT: andl $127, %eax1896; SSE2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1897; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rax1898; SSE2-NEXT: andl $127, %eax1899; SSE2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1900; SSE2-NEXT: andl $127, %r8d1901; SSE2-NEXT: movq %r8, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1902; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rax1903; SSE2-NEXT: andl $127, %eax1904; SSE2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1905; SSE2-NEXT: andl $127, %edx1906; SSE2-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1907; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rax1908; SSE2-NEXT: andl $127, %eax1909; SSE2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1910; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rax1911; SSE2-NEXT: andl $127, %eax1912; SSE2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1913; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rax1914; SSE2-NEXT: andl $127, %eax1915; SSE2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1916; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rax1917; SSE2-NEXT: andl $127, %eax1918; SSE2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1919; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rax1920; SSE2-NEXT: andl $127, %eax1921; SSE2-NEXT: movq %rax, (%rsp) # 8-byte Spill1922; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rax1923; SSE2-NEXT: andl $127, %eax1924; SSE2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1925; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rax1926; SSE2-NEXT: andl $127, %eax1927; SSE2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1928; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rax1929; SSE2-NEXT: andl $127, %eax1930; SSE2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1931; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rax1932; SSE2-NEXT: andl $127, %eax1933; SSE2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1934; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rax1935; SSE2-NEXT: andl $127, %eax1936; SSE2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1937; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rax1938; SSE2-NEXT: andl $127, %eax1939; SSE2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1940; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rax1941; SSE2-NEXT: andl $127, %eax1942; SSE2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1943; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rax1944; SSE2-NEXT: andl $127, %eax1945; SSE2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1946; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rax1947; SSE2-NEXT: andl $127, %eax1948; SSE2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1949; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rax1950; SSE2-NEXT: andl $127, %eax1951; SSE2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1952; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rax1953; SSE2-NEXT: andl $127, %eax1954; SSE2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1955; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rax1956; SSE2-NEXT: andl $127, %eax1957; SSE2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1958; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rax1959; SSE2-NEXT: andl $127, %eax1960; SSE2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1961; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rax1962; SSE2-NEXT: andl $127, %eax1963; SSE2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1964; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rcx1965; SSE2-NEXT: andl $127, %ecx1966; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rax1967; SSE2-NEXT: andl $127, %eax1968; SSE2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1969; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rbx1970; SSE2-NEXT: andl $127, %ebx1971; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rdx1972; SSE2-NEXT: andl $127, %edx1973; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %r101974; SSE2-NEXT: andl $127, %r10d1975; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %r141976; SSE2-NEXT: andl $127, %r14d1977; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rbp1978; SSE2-NEXT: andl $127, %ebp1979; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %r131980; SSE2-NEXT: andl $127, %r13d1981; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %r111982; SSE2-NEXT: andl $127, %r11d1983; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %r151984; SSE2-NEXT: andl $127, %r15d1985; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rax1986; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %r121987; SSE2-NEXT: cmpq %rax, %r121988; SSE2-NEXT: movq %r15, %r81989; SSE2-NEXT: sbbq %r11, %r81990; SSE2-NEXT: setb %r8b1991; SSE2-NEXT: cmpq %r12, %rax1992; SSE2-NEXT: sbbq %r15, %r111993; SSE2-NEXT: sbbb $0, %r8b1994; SSE2-NEXT: movb %r8b, {{[-0-9]+}}(%r{{[sb]}}p) # 1-byte Spill1995; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rax1996; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %r81997; SSE2-NEXT: cmpq %rax, %r81998; SSE2-NEXT: movq %r13, %r111999; SSE2-NEXT: sbbq %rbp, %r112000; SSE2-NEXT: setb %r11b2001; SSE2-NEXT: cmpq %r8, %rax2002; SSE2-NEXT: sbbq %r13, %rbp2003; SSE2-NEXT: sbbb $0, %r11b2004; SSE2-NEXT: movb %r11b, {{[-0-9]+}}(%r{{[sb]}}p) # 1-byte Spill2005; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rax2006; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %r82007; SSE2-NEXT: cmpq %rax, %r82008; SSE2-NEXT: movq %r14, %r112009; SSE2-NEXT: sbbq %r10, %r112010; SSE2-NEXT: setb %r11b2011; SSE2-NEXT: cmpq %r8, %rax2012; SSE2-NEXT: sbbq %r14, %r102013; SSE2-NEXT: sbbb $0, %r11b2014; SSE2-NEXT: movb %r11b, {{[-0-9]+}}(%r{{[sb]}}p) # 1-byte Spill2015; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rax2016; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %r82017; SSE2-NEXT: cmpq %rax, %r82018; SSE2-NEXT: movq %rdx, %r102019; SSE2-NEXT: sbbq %rbx, %r102020; SSE2-NEXT: setb %r10b2021; SSE2-NEXT: cmpq %r8, %rax2022; SSE2-NEXT: sbbq %rdx, %rbx2023; SSE2-NEXT: sbbb $0, %r10b2024; SSE2-NEXT: movb %r10b, {{[-0-9]+}}(%r{{[sb]}}p) # 1-byte Spill2025; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rax2026; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rdx2027; SSE2-NEXT: cmpq %rax, %rdx2028; SSE2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r10 # 8-byte Reload2029; SSE2-NEXT: movq %r10, %r82030; SSE2-NEXT: sbbq %rcx, %r82031; SSE2-NEXT: setb %r8b2032; SSE2-NEXT: cmpq %rdx, %rax2033; SSE2-NEXT: sbbq %r10, %rcx2034; SSE2-NEXT: sbbb $0, %r8b2035; SSE2-NEXT: movb %r8b, {{[-0-9]+}}(%r{{[sb]}}p) # 1-byte Spill2036; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rax2037; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rcx2038; SSE2-NEXT: cmpq %rax, %rcx2039; SSE2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r10 # 8-byte Reload2040; SSE2-NEXT: movq %r10, %rdx2041; SSE2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r8 # 8-byte Reload2042; SSE2-NEXT: sbbq %r8, %rdx2043; SSE2-NEXT: setb %dl2044; SSE2-NEXT: cmpq %rcx, %rax2045; SSE2-NEXT: sbbq %r10, %r82046; SSE2-NEXT: sbbb $0, %dl2047; SSE2-NEXT: movb %dl, {{[-0-9]+}}(%r{{[sb]}}p) # 1-byte Spill2048; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rax2049; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rcx2050; SSE2-NEXT: cmpq %rax, %rcx2051; SSE2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r10 # 8-byte Reload2052; SSE2-NEXT: movq %r10, %rdx2053; SSE2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r8 # 8-byte Reload2054; SSE2-NEXT: sbbq %r8, %rdx2055; SSE2-NEXT: setb %dl2056; SSE2-NEXT: cmpq %rcx, %rax2057; SSE2-NEXT: sbbq %r10, %r82058; SSE2-NEXT: sbbb $0, %dl2059; SSE2-NEXT: movb %dl, {{[-0-9]+}}(%r{{[sb]}}p) # 1-byte Spill2060; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rax2061; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rcx2062; SSE2-NEXT: cmpq %rax, %rcx2063; SSE2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r11 # 8-byte Reload2064; SSE2-NEXT: movq %r11, %rdx2065; SSE2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r10 # 8-byte Reload2066; SSE2-NEXT: sbbq %r10, %rdx2067; SSE2-NEXT: setb %r8b2068; SSE2-NEXT: cmpq %rcx, %rax2069; SSE2-NEXT: sbbq %r11, %r102070; SSE2-NEXT: sbbb $0, %r8b2071; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rax2072; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rcx2073; SSE2-NEXT: cmpq %rax, %rcx2074; SSE2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rbx # 8-byte Reload2075; SSE2-NEXT: movq %rbx, %rdx2076; SSE2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r10 # 8-byte Reload2077; SSE2-NEXT: sbbq %r10, %rdx2078; SSE2-NEXT: setb %r11b2079; SSE2-NEXT: cmpq %rcx, %rax2080; SSE2-NEXT: sbbq %rbx, %r102081; SSE2-NEXT: sbbb $0, %r11b2082; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rax2083; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rcx2084; SSE2-NEXT: cmpq %rax, %rcx2085; SSE2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rbx # 8-byte Reload2086; SSE2-NEXT: movq %rbx, %rdx2087; SSE2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r10 # 8-byte Reload2088; SSE2-NEXT: sbbq %r10, %rdx2089; SSE2-NEXT: setb %dl2090; SSE2-NEXT: cmpq %rcx, %rax2091; SSE2-NEXT: sbbq %rbx, %r102092; SSE2-NEXT: sbbb $0, %dl2093; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rax2094; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rcx2095; SSE2-NEXT: cmpq %rax, %rcx2096; SSE2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r14 # 8-byte Reload2097; SSE2-NEXT: movq %r14, %r102098; SSE2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rbx # 8-byte Reload2099; SSE2-NEXT: sbbq %rbx, %r102100; SSE2-NEXT: setb %r10b2101; SSE2-NEXT: cmpq %rcx, %rax2102; SSE2-NEXT: sbbq %r14, %rbx2103; SSE2-NEXT: sbbb $0, %r10b2104; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rax2105; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rbx2106; SSE2-NEXT: cmpq %rax, %rbx2107; SSE2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r15 # 8-byte Reload2108; SSE2-NEXT: movq %r15, %rcx2109; SSE2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r14 # 8-byte Reload2110; SSE2-NEXT: sbbq %r14, %rcx2111; SSE2-NEXT: setb %cl2112; SSE2-NEXT: cmpq %rbx, %rax2113; SSE2-NEXT: sbbq %r15, %r142114; SSE2-NEXT: sbbb $0, %cl2115; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rax2116; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %r142117; SSE2-NEXT: cmpq %rax, %r142118; SSE2-NEXT: movq (%rsp), %r12 # 8-byte Reload2119; SSE2-NEXT: movq %r12, %rbx2120; SSE2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r15 # 8-byte Reload2121; SSE2-NEXT: sbbq %r15, %rbx2122; SSE2-NEXT: setb %bl2123; SSE2-NEXT: cmpq %r14, %rax2124; SSE2-NEXT: sbbq %r12, %r152125; SSE2-NEXT: sbbb $0, %bl2126; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rax2127; SSE2-NEXT: cmpq %r9, %rax2128; SSE2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r12 # 8-byte Reload2129; SSE2-NEXT: movq %r12, %r142130; SSE2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r15 # 8-byte Reload2131; SSE2-NEXT: sbbq %r15, %r142132; SSE2-NEXT: setb %bpl2133; SSE2-NEXT: cmpq %rax, %r92134; SSE2-NEXT: sbbq %r12, %r152135; SSE2-NEXT: sbbb $0, %bpl2136; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rax2137; SSE2-NEXT: cmpq %rsi, %rax2138; SSE2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r15 # 8-byte Reload2139; SSE2-NEXT: movq %r15, %r92140; SSE2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r14 # 8-byte Reload2141; SSE2-NEXT: sbbq %r14, %r92142; SSE2-NEXT: setb %r9b2143; SSE2-NEXT: cmpq %rax, %rsi2144; SSE2-NEXT: sbbq %r15, %r142145; SSE2-NEXT: movq %rdi, %rax2146; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rsi2147; SSE2-NEXT: sbbb $0, %r9b2148; SSE2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r15 # 8-byte Reload2149; SSE2-NEXT: cmpq %r15, %rsi2150; SSE2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r12 # 8-byte Reload2151; SSE2-NEXT: movq %r12, %rdi2152; SSE2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r14 # 8-byte Reload2153; SSE2-NEXT: sbbq %r14, %rdi2154; SSE2-NEXT: setb %dil2155; SSE2-NEXT: cmpq %rsi, %r152156; SSE2-NEXT: sbbq %r12, %r142157; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rsi2158; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %r142159; SSE2-NEXT: sbbb $0, %dil2160; SSE2-NEXT: cmpq %rsi, %r142161; SSE2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r13 # 8-byte Reload2162; SSE2-NEXT: movq %r13, %r152163; SSE2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r12 # 8-byte Reload2164; SSE2-NEXT: sbbq %r12, %r152165; SSE2-NEXT: setb %r15b2166; SSE2-NEXT: cmpq %r14, %rsi2167; SSE2-NEXT: sbbq %r13, %r122168; SSE2-NEXT: sbbb $0, %r15b2169; SSE2-NEXT: movzbl %r15b, %esi2170; SSE2-NEXT: andl $3, %esi2171; SSE2-NEXT: movb %sil, 4(%rax)2172; SSE2-NEXT: movzbl %dil, %esi2173; SSE2-NEXT: movzbl %r9b, %edi2174; SSE2-NEXT: andl $3, %esi2175; SSE2-NEXT: andl $3, %edi2176; SSE2-NEXT: leaq (%rdi,%rsi,4), %rsi2177; SSE2-NEXT: movzbl %bpl, %edi2178; SSE2-NEXT: andl $3, %edi2179; SSE2-NEXT: shll $4, %edi2180; SSE2-NEXT: orq %rsi, %rdi2181; SSE2-NEXT: movzbl %bl, %r9d2182; SSE2-NEXT: andl $3, %r9d2183; SSE2-NEXT: shll $6, %r9d2184; SSE2-NEXT: orq %rdi, %r92185; SSE2-NEXT: movzbl %cl, %esi2186; SSE2-NEXT: andl $3, %esi2187; SSE2-NEXT: shll $8, %esi2188; SSE2-NEXT: orq %r9, %rsi2189; SSE2-NEXT: movzbl %dl, %ecx2190; SSE2-NEXT: movzbl %r10b, %edx2191; SSE2-NEXT: andl $3, %edx2192; SSE2-NEXT: shll $10, %edx2193; SSE2-NEXT: andl $3, %ecx2194; SSE2-NEXT: shll $12, %ecx2195; SSE2-NEXT: orq %rdx, %rcx2196; SSE2-NEXT: movzbl %r11b, %edx2197; SSE2-NEXT: andl $3, %edx2198; SSE2-NEXT: shll $14, %edx2199; SSE2-NEXT: orq %rcx, %rdx2200; SSE2-NEXT: movzbl %r8b, %ecx2201; SSE2-NEXT: andl $3, %ecx2202; SSE2-NEXT: shll $16, %ecx2203; SSE2-NEXT: orq %rdx, %rcx2204; SSE2-NEXT: orq %rsi, %rcx2205; SSE2-NEXT: movzbl {{[-0-9]+}}(%r{{[sb]}}p), %edx # 1-byte Folded Reload2206; SSE2-NEXT: movzbl {{[-0-9]+}}(%r{{[sb]}}p), %esi # 1-byte Folded Reload2207; SSE2-NEXT: andl $3, %esi2208; SSE2-NEXT: shll $18, %esi2209; SSE2-NEXT: andl $3, %edx2210; SSE2-NEXT: shll $20, %edx2211; SSE2-NEXT: orq %rsi, %rdx2212; SSE2-NEXT: movzbl {{[-0-9]+}}(%r{{[sb]}}p), %esi # 1-byte Folded Reload2213; SSE2-NEXT: andl $3, %esi2214; SSE2-NEXT: shll $22, %esi2215; SSE2-NEXT: orq %rdx, %rsi2216; SSE2-NEXT: movzbl {{[-0-9]+}}(%r{{[sb]}}p), %edx # 1-byte Folded Reload2217; SSE2-NEXT: andl $3, %edx2218; SSE2-NEXT: shll $24, %edx2219; SSE2-NEXT: orq %rsi, %rdx2220; SSE2-NEXT: movzbl {{[-0-9]+}}(%r{{[sb]}}p), %esi # 1-byte Folded Reload2221; SSE2-NEXT: andl $3, %esi2222; SSE2-NEXT: shlq $26, %rsi2223; SSE2-NEXT: orq %rdx, %rsi2224; SSE2-NEXT: orq %rcx, %rsi2225; SSE2-NEXT: movzbl {{[-0-9]+}}(%r{{[sb]}}p), %ecx # 1-byte Folded Reload2226; SSE2-NEXT: movzbl {{[-0-9]+}}(%r{{[sb]}}p), %edx # 1-byte Folded Reload2227; SSE2-NEXT: andl $3, %edx2228; SSE2-NEXT: shlq $28, %rdx2229; SSE2-NEXT: andl $3, %ecx2230; SSE2-NEXT: shlq $30, %rcx2231; SSE2-NEXT: orq %rdx, %rcx2232; SSE2-NEXT: orq %rsi, %rcx2233; SSE2-NEXT: movl %ecx, (%rax)2234; SSE2-NEXT: addq $88, %rsp2235; SSE2-NEXT: popq %rbx2236; SSE2-NEXT: popq %r122237; SSE2-NEXT: popq %r132238; SSE2-NEXT: popq %r142239; SSE2-NEXT: popq %r152240; SSE2-NEXT: popq %rbp2241; SSE2-NEXT: retq2242;2243; AVX2-LABEL: ucmp_uncommon_vectors:2244; AVX2: # %bb.0:2245; AVX2-NEXT: pushq %rbp2246; AVX2-NEXT: pushq %r152247; AVX2-NEXT: pushq %r142248; AVX2-NEXT: pushq %r132249; AVX2-NEXT: pushq %r122250; AVX2-NEXT: pushq %rbx2251; AVX2-NEXT: subq $88, %rsp2252; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %rax2253; AVX2-NEXT: andl $127, %eax2254; AVX2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2255; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %rax2256; AVX2-NEXT: andl $127, %eax2257; AVX2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2258; AVX2-NEXT: andl $127, %r8d2259; AVX2-NEXT: movq %r8, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2260; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %rax2261; AVX2-NEXT: andl $127, %eax2262; AVX2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2263; AVX2-NEXT: andl $127, %edx2264; AVX2-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2265; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %rax2266; AVX2-NEXT: andl $127, %eax2267; AVX2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2268; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %rax2269; AVX2-NEXT: andl $127, %eax2270; AVX2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2271; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %rax2272; AVX2-NEXT: andl $127, %eax2273; AVX2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2274; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %rax2275; AVX2-NEXT: andl $127, %eax2276; AVX2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2277; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %rax2278; AVX2-NEXT: andl $127, %eax2279; AVX2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2280; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %rax2281; AVX2-NEXT: andl $127, %eax2282; AVX2-NEXT: movq %rax, (%rsp) # 8-byte Spill2283; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %rax2284; AVX2-NEXT: andl $127, %eax2285; AVX2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2286; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %rax2287; AVX2-NEXT: andl $127, %eax2288; AVX2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2289; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %rax2290; AVX2-NEXT: andl $127, %eax2291; AVX2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2292; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %rax2293; AVX2-NEXT: andl $127, %eax2294; AVX2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2295; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %rax2296; AVX2-NEXT: andl $127, %eax2297; AVX2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2298; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %rax2299; AVX2-NEXT: andl $127, %eax2300; AVX2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2301; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %rax2302; AVX2-NEXT: andl $127, %eax2303; AVX2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2304; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %rax2305; AVX2-NEXT: andl $127, %eax2306; AVX2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2307; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %rax2308; AVX2-NEXT: andl $127, %eax2309; AVX2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2310; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %rax2311; AVX2-NEXT: andl $127, %eax2312; AVX2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2313; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %rax2314; AVX2-NEXT: andl $127, %eax2315; AVX2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2316; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %rax2317; AVX2-NEXT: andl $127, %eax2318; AVX2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2319; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %rax2320; AVX2-NEXT: andl $127, %eax2321; AVX2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2322; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %rax2323; AVX2-NEXT: andl $127, %eax2324; AVX2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2325; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %rax2326; AVX2-NEXT: andl $127, %eax2327; AVX2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2328; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %r152329; AVX2-NEXT: andl $127, %r15d2330; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %rax2331; AVX2-NEXT: andl $127, %eax2332; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %r142333; AVX2-NEXT: andl $127, %r14d2334; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %rdx2335; AVX2-NEXT: andl $127, %edx2336; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %rbp2337; AVX2-NEXT: andl $127, %ebp2338; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %r82339; AVX2-NEXT: andl $127, %r8d2340; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %r122341; AVX2-NEXT: andl $127, %r12d2342; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %r132343; AVX2-NEXT: andl $127, %r13d2344; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %rbx2345; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %r112346; AVX2-NEXT: cmpq %rbx, %r112347; AVX2-NEXT: movq %r13, %r102348; AVX2-NEXT: sbbq %r12, %r102349; AVX2-NEXT: setb %r10b2350; AVX2-NEXT: cmpq %r11, %rbx2351; AVX2-NEXT: sbbq %r13, %r122352; AVX2-NEXT: sbbb $0, %r10b2353; AVX2-NEXT: movb %r10b, {{[-0-9]+}}(%r{{[sb]}}p) # 1-byte Spill2354; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %r102355; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %r112356; AVX2-NEXT: cmpq %r10, %r112357; AVX2-NEXT: movq %r8, %rbx2358; AVX2-NEXT: sbbq %rbp, %rbx2359; AVX2-NEXT: setb %bl2360; AVX2-NEXT: cmpq %r11, %r102361; AVX2-NEXT: sbbq %r8, %rbp2362; AVX2-NEXT: sbbb $0, %bl2363; AVX2-NEXT: movb %bl, {{[-0-9]+}}(%r{{[sb]}}p) # 1-byte Spill2364; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %r82365; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %r102366; AVX2-NEXT: cmpq %r8, %r102367; AVX2-NEXT: movq %rdx, %r112368; AVX2-NEXT: sbbq %r14, %r112369; AVX2-NEXT: setb %r11b2370; AVX2-NEXT: cmpq %r10, %r82371; AVX2-NEXT: sbbq %rdx, %r142372; AVX2-NEXT: sbbb $0, %r11b2373; AVX2-NEXT: movb %r11b, {{[-0-9]+}}(%r{{[sb]}}p) # 1-byte Spill2374; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %rdx2375; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %r82376; AVX2-NEXT: cmpq %rdx, %r82377; AVX2-NEXT: movq %rax, %r102378; AVX2-NEXT: sbbq %r15, %r102379; AVX2-NEXT: setb %r10b2380; AVX2-NEXT: cmpq %r8, %rdx2381; AVX2-NEXT: sbbq %rax, %r152382; AVX2-NEXT: sbbb $0, %r10b2383; AVX2-NEXT: movb %r10b, {{[-0-9]+}}(%r{{[sb]}}p) # 1-byte Spill2384; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %rax2385; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %rdx2386; AVX2-NEXT: cmpq %rax, %rdx2387; AVX2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r11 # 8-byte Reload2388; AVX2-NEXT: movq %r11, %r82389; AVX2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r10 # 8-byte Reload2390; AVX2-NEXT: sbbq %r10, %r82391; AVX2-NEXT: setb %r8b2392; AVX2-NEXT: cmpq %rdx, %rax2393; AVX2-NEXT: sbbq %r11, %r102394; AVX2-NEXT: sbbb $0, %r8b2395; AVX2-NEXT: movb %r8b, {{[-0-9]+}}(%r{{[sb]}}p) # 1-byte Spill2396; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %rax2397; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %rdx2398; AVX2-NEXT: cmpq %rax, %rdx2399; AVX2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r11 # 8-byte Reload2400; AVX2-NEXT: movq %r11, %r82401; AVX2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r10 # 8-byte Reload2402; AVX2-NEXT: sbbq %r10, %r82403; AVX2-NEXT: setb %r8b2404; AVX2-NEXT: cmpq %rdx, %rax2405; AVX2-NEXT: sbbq %r11, %r102406; AVX2-NEXT: sbbb $0, %r8b2407; AVX2-NEXT: movb %r8b, {{[-0-9]+}}(%r{{[sb]}}p) # 1-byte Spill2408; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %rax2409; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %rdx2410; AVX2-NEXT: cmpq %rax, %rdx2411; AVX2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r11 # 8-byte Reload2412; AVX2-NEXT: movq %r11, %r82413; AVX2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r10 # 8-byte Reload2414; AVX2-NEXT: sbbq %r10, %r82415; AVX2-NEXT: setb %r8b2416; AVX2-NEXT: cmpq %rdx, %rax2417; AVX2-NEXT: sbbq %r11, %r102418; AVX2-NEXT: sbbb $0, %r8b2419; AVX2-NEXT: movb %r8b, {{[-0-9]+}}(%r{{[sb]}}p) # 1-byte Spill2420; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %rax2421; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %rdx2422; AVX2-NEXT: cmpq %rax, %rdx2423; AVX2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r11 # 8-byte Reload2424; AVX2-NEXT: movq %r11, %r82425; AVX2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r10 # 8-byte Reload2426; AVX2-NEXT: sbbq %r10, %r82427; AVX2-NEXT: setb %r12b2428; AVX2-NEXT: cmpq %rdx, %rax2429; AVX2-NEXT: sbbq %r11, %r102430; AVX2-NEXT: sbbb $0, %r12b2431; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %rax2432; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %rdx2433; AVX2-NEXT: cmpq %rax, %rdx2434; AVX2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r11 # 8-byte Reload2435; AVX2-NEXT: movq %r11, %r82436; AVX2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r10 # 8-byte Reload2437; AVX2-NEXT: sbbq %r10, %r82438; AVX2-NEXT: setb %r8b2439; AVX2-NEXT: cmpq %rdx, %rax2440; AVX2-NEXT: sbbq %r11, %r102441; AVX2-NEXT: sbbb $0, %r8b2442; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %rax2443; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %r102444; AVX2-NEXT: cmpq %rax, %r102445; AVX2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rbx # 8-byte Reload2446; AVX2-NEXT: movq %rbx, %rdx2447; AVX2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r11 # 8-byte Reload2448; AVX2-NEXT: sbbq %r11, %rdx2449; AVX2-NEXT: setb %dl2450; AVX2-NEXT: cmpq %r10, %rax2451; AVX2-NEXT: sbbq %rbx, %r112452; AVX2-NEXT: sbbb $0, %dl2453; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %rax2454; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %r112455; AVX2-NEXT: cmpq %rax, %r112456; AVX2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r14 # 8-byte Reload2457; AVX2-NEXT: movq %r14, %r102458; AVX2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rbx # 8-byte Reload2459; AVX2-NEXT: sbbq %rbx, %r102460; AVX2-NEXT: setb %r10b2461; AVX2-NEXT: cmpq %r11, %rax2462; AVX2-NEXT: sbbq %r14, %rbx2463; AVX2-NEXT: sbbb $0, %r10b2464; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %rax2465; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %rbx2466; AVX2-NEXT: cmpq %rax, %rbx2467; AVX2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r15 # 8-byte Reload2468; AVX2-NEXT: movq %r15, %r112469; AVX2-NEXT: movq (%rsp), %r14 # 8-byte Reload2470; AVX2-NEXT: sbbq %r14, %r112471; AVX2-NEXT: setb %r11b2472; AVX2-NEXT: cmpq %rbx, %rax2473; AVX2-NEXT: sbbq %r15, %r142474; AVX2-NEXT: sbbb $0, %r11b2475; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %rax2476; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %r142477; AVX2-NEXT: cmpq %rax, %r142478; AVX2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r13 # 8-byte Reload2479; AVX2-NEXT: movq %r13, %rbx2480; AVX2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r15 # 8-byte Reload2481; AVX2-NEXT: sbbq %r15, %rbx2482; AVX2-NEXT: setb %bl2483; AVX2-NEXT: cmpq %r14, %rax2484; AVX2-NEXT: sbbq %r13, %r152485; AVX2-NEXT: sbbb $0, %bl2486; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %rax2487; AVX2-NEXT: cmpq %r9, %rax2488; AVX2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r13 # 8-byte Reload2489; AVX2-NEXT: movq %r13, %r142490; AVX2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r15 # 8-byte Reload2491; AVX2-NEXT: sbbq %r15, %r142492; AVX2-NEXT: setb %bpl2493; AVX2-NEXT: cmpq %rax, %r92494; AVX2-NEXT: sbbq %r13, %r152495; AVX2-NEXT: sbbb $0, %bpl2496; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %rax2497; AVX2-NEXT: cmpq %rsi, %rax2498; AVX2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r15 # 8-byte Reload2499; AVX2-NEXT: movq %r15, %r92500; AVX2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r14 # 8-byte Reload2501; AVX2-NEXT: sbbq %r14, %r92502; AVX2-NEXT: setb %r9b2503; AVX2-NEXT: cmpq %rax, %rsi2504; AVX2-NEXT: sbbq %r15, %r142505; AVX2-NEXT: sbbb $0, %r9b2506; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %rax2507; AVX2-NEXT: cmpq %rcx, %rax2508; AVX2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r15 # 8-byte Reload2509; AVX2-NEXT: movq %r15, %rsi2510; AVX2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r14 # 8-byte Reload2511; AVX2-NEXT: sbbq %r14, %rsi2512; AVX2-NEXT: setb %sil2513; AVX2-NEXT: cmpq %rax, %rcx2514; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %rax2515; AVX2-NEXT: sbbq %r15, %r142516; AVX2-NEXT: sbbb $0, %sil2517; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %rcx2518; AVX2-NEXT: cmpq %rax, %rcx2519; AVX2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r13 # 8-byte Reload2520; AVX2-NEXT: movq %r13, %r142521; AVX2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r15 # 8-byte Reload2522; AVX2-NEXT: sbbq %r15, %r142523; AVX2-NEXT: setb %r14b2524; AVX2-NEXT: cmpq %rcx, %rax2525; AVX2-NEXT: sbbq %r13, %r152526; AVX2-NEXT: movq %rdi, %rax2527; AVX2-NEXT: sbbb $0, %r14b2528; AVX2-NEXT: movzbl %r14b, %ecx2529; AVX2-NEXT: andl $3, %ecx2530; AVX2-NEXT: movb %cl, 4(%rdi)2531; AVX2-NEXT: movzbl %sil, %ecx2532; AVX2-NEXT: andl $3, %ecx2533; AVX2-NEXT: movzbl %r9b, %esi2534; AVX2-NEXT: andl $3, %esi2535; AVX2-NEXT: leaq (%rsi,%rcx,4), %rcx2536; AVX2-NEXT: movzbl %bpl, %esi2537; AVX2-NEXT: andl $3, %esi2538; AVX2-NEXT: shll $4, %esi2539; AVX2-NEXT: orq %rcx, %rsi2540; AVX2-NEXT: movzbl %bl, %ecx2541; AVX2-NEXT: andl $3, %ecx2542; AVX2-NEXT: shll $6, %ecx2543; AVX2-NEXT: orq %rsi, %rcx2544; AVX2-NEXT: movzbl %r11b, %esi2545; AVX2-NEXT: andl $3, %esi2546; AVX2-NEXT: shll $8, %esi2547; AVX2-NEXT: orq %rcx, %rsi2548; AVX2-NEXT: movzbl %r10b, %ecx2549; AVX2-NEXT: andl $3, %ecx2550; AVX2-NEXT: shll $10, %ecx2551; AVX2-NEXT: movzbl %dl, %edx2552; AVX2-NEXT: andl $3, %edx2553; AVX2-NEXT: shll $12, %edx2554; AVX2-NEXT: orq %rcx, %rdx2555; AVX2-NEXT: movzbl %r8b, %edi2556; AVX2-NEXT: andl $3, %edi2557; AVX2-NEXT: shll $14, %edi2558; AVX2-NEXT: orq %rdx, %rdi2559; AVX2-NEXT: movzbl %r12b, %ecx2560; AVX2-NEXT: andl $3, %ecx2561; AVX2-NEXT: shll $16, %ecx2562; AVX2-NEXT: orq %rdi, %rcx2563; AVX2-NEXT: orq %rsi, %rcx2564; AVX2-NEXT: movzbl {{[-0-9]+}}(%r{{[sb]}}p), %edx # 1-byte Folded Reload2565; AVX2-NEXT: andl $3, %edx2566; AVX2-NEXT: shll $18, %edx2567; AVX2-NEXT: movzbl {{[-0-9]+}}(%r{{[sb]}}p), %esi # 1-byte Folded Reload2568; AVX2-NEXT: andl $3, %esi2569; AVX2-NEXT: shll $20, %esi2570; AVX2-NEXT: orq %rdx, %rsi2571; AVX2-NEXT: movzbl {{[-0-9]+}}(%r{{[sb]}}p), %edx # 1-byte Folded Reload2572; AVX2-NEXT: andl $3, %edx2573; AVX2-NEXT: shll $22, %edx2574; AVX2-NEXT: orq %rsi, %rdx2575; AVX2-NEXT: movzbl {{[-0-9]+}}(%r{{[sb]}}p), %esi # 1-byte Folded Reload2576; AVX2-NEXT: andl $3, %esi2577; AVX2-NEXT: shll $24, %esi2578; AVX2-NEXT: orq %rdx, %rsi2579; AVX2-NEXT: movzbl {{[-0-9]+}}(%r{{[sb]}}p), %edx # 1-byte Folded Reload2580; AVX2-NEXT: andl $3, %edx2581; AVX2-NEXT: shlq $26, %rdx2582; AVX2-NEXT: orq %rsi, %rdx2583; AVX2-NEXT: orq %rcx, %rdx2584; AVX2-NEXT: movzbl {{[-0-9]+}}(%r{{[sb]}}p), %ecx # 1-byte Folded Reload2585; AVX2-NEXT: andl $3, %ecx2586; AVX2-NEXT: shlq $28, %rcx2587; AVX2-NEXT: movzbl {{[-0-9]+}}(%r{{[sb]}}p), %esi # 1-byte Folded Reload2588; AVX2-NEXT: andl $3, %esi2589; AVX2-NEXT: shlq $30, %rsi2590; AVX2-NEXT: orq %rcx, %rsi2591; AVX2-NEXT: orq %rdx, %rsi2592; AVX2-NEXT: movl %esi, (%rax)2593; AVX2-NEXT: addq $88, %rsp2594; AVX2-NEXT: popq %rbx2595; AVX2-NEXT: popq %r122596; AVX2-NEXT: popq %r132597; AVX2-NEXT: popq %r142598; AVX2-NEXT: popq %r152599; AVX2-NEXT: popq %rbp2600; AVX2-NEXT: retq2601;2602; AVX512-LABEL: ucmp_uncommon_vectors:2603; AVX512: # %bb.0:2604; AVX512-NEXT: pushq %rbp2605; AVX512-NEXT: pushq %r152606; AVX512-NEXT: pushq %r142607; AVX512-NEXT: pushq %r132608; AVX512-NEXT: pushq %r122609; AVX512-NEXT: pushq %rbx2610; AVX512-NEXT: subq $88, %rsp2611; AVX512-NEXT: movq %r9, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2612; AVX512-NEXT: movq %rcx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2613; AVX512-NEXT: movq %rsi, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2614; AVX512-NEXT: movq %rdi, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2615; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %rax2616; AVX512-NEXT: andl $127, %eax2617; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2618; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %rax2619; AVX512-NEXT: andl $127, %eax2620; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2621; AVX512-NEXT: andl $127, %r8d2622; AVX512-NEXT: movq %r8, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2623; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %rax2624; AVX512-NEXT: andl $127, %eax2625; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2626; AVX512-NEXT: andl $127, %edx2627; AVX512-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2628; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %rax2629; AVX512-NEXT: andl $127, %eax2630; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2631; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %rax2632; AVX512-NEXT: andl $127, %eax2633; AVX512-NEXT: movq %rax, (%rsp) # 8-byte Spill2634; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %rax2635; AVX512-NEXT: andl $127, %eax2636; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2637; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %rax2638; AVX512-NEXT: andl $127, %eax2639; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2640; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %rax2641; AVX512-NEXT: andl $127, %eax2642; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2643; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %rax2644; AVX512-NEXT: andl $127, %eax2645; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2646; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %rax2647; AVX512-NEXT: andl $127, %eax2648; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2649; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %rax2650; AVX512-NEXT: andl $127, %eax2651; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2652; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %rax2653; AVX512-NEXT: andl $127, %eax2654; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2655; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %rax2656; AVX512-NEXT: andl $127, %eax2657; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2658; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %rax2659; AVX512-NEXT: andl $127, %eax2660; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2661; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %rax2662; AVX512-NEXT: andl $127, %eax2663; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2664; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %rax2665; AVX512-NEXT: andl $127, %eax2666; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2667; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %rax2668; AVX512-NEXT: andl $127, %eax2669; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2670; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %rax2671; AVX512-NEXT: andl $127, %eax2672; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2673; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %rax2674; AVX512-NEXT: andl $127, %eax2675; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2676; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %rax2677; AVX512-NEXT: andl $127, %eax2678; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2679; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %rbp2680; AVX512-NEXT: andl $127, %ebp2681; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %r122682; AVX512-NEXT: andl $127, %r12d2683; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %r132684; AVX512-NEXT: andl $127, %r13d2685; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %r152686; AVX512-NEXT: andl $127, %r15d2687; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %r102688; AVX512-NEXT: andl $127, %r10d2689; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %rbx2690; AVX512-NEXT: andl $127, %ebx2691; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %r82692; AVX512-NEXT: andl $127, %r8d2693; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %r92694; AVX512-NEXT: andl $127, %r9d2695; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %rsi2696; AVX512-NEXT: andl $127, %esi2697; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %rdi2698; AVX512-NEXT: andl $127, %edi2699; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %rax2700; AVX512-NEXT: andl $127, %eax2701; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %rdx2702; AVX512-NEXT: andl $127, %edx2703; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %r142704; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %r112705; AVX512-NEXT: cmpq %r14, %r112706; AVX512-NEXT: movq %rdx, %rcx2707; AVX512-NEXT: sbbq %rax, %rcx2708; AVX512-NEXT: setb %cl2709; AVX512-NEXT: cmpq %r11, %r142710; AVX512-NEXT: sbbq %rdx, %rax2711; AVX512-NEXT: sbbb $0, %cl2712; AVX512-NEXT: movb %cl, {{[-0-9]+}}(%r{{[sb]}}p) # 1-byte Spill2713; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %rax2714; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %rcx2715; AVX512-NEXT: cmpq %rax, %rcx2716; AVX512-NEXT: movq %rdi, %rdx2717; AVX512-NEXT: sbbq %rsi, %rdx2718; AVX512-NEXT: setb %dl2719; AVX512-NEXT: cmpq %rcx, %rax2720; AVX512-NEXT: sbbq %rdi, %rsi2721; AVX512-NEXT: sbbb $0, %dl2722; AVX512-NEXT: movb %dl, {{[-0-9]+}}(%r{{[sb]}}p) # 1-byte Spill2723; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %rax2724; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %rcx2725; AVX512-NEXT: cmpq %rax, %rcx2726; AVX512-NEXT: movq %r9, %rdx2727; AVX512-NEXT: sbbq %r8, %rdx2728; AVX512-NEXT: setb %dl2729; AVX512-NEXT: cmpq %rcx, %rax2730; AVX512-NEXT: sbbq %r9, %r82731; AVX512-NEXT: sbbb $0, %dl2732; AVX512-NEXT: movb %dl, {{[-0-9]+}}(%r{{[sb]}}p) # 1-byte Spill2733; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %rax2734; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %rcx2735; AVX512-NEXT: cmpq %rax, %rcx2736; AVX512-NEXT: movq %rbx, %rdx2737; AVX512-NEXT: sbbq %r10, %rdx2738; AVX512-NEXT: setb %dl2739; AVX512-NEXT: cmpq %rcx, %rax2740; AVX512-NEXT: sbbq %rbx, %r102741; AVX512-NEXT: sbbb $0, %dl2742; AVX512-NEXT: movb %dl, {{[-0-9]+}}(%r{{[sb]}}p) # 1-byte Spill2743; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %rax2744; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %rcx2745; AVX512-NEXT: cmpq %rax, %rcx2746; AVX512-NEXT: movq %r15, %rdx2747; AVX512-NEXT: sbbq %r13, %rdx2748; AVX512-NEXT: setb %dl2749; AVX512-NEXT: cmpq %rcx, %rax2750; AVX512-NEXT: sbbq %r15, %r132751; AVX512-NEXT: sbbb $0, %dl2752; AVX512-NEXT: movb %dl, {{[-0-9]+}}(%r{{[sb]}}p) # 1-byte Spill2753; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %rax2754; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %rcx2755; AVX512-NEXT: cmpq %rax, %rcx2756; AVX512-NEXT: movq %r12, %rdx2757; AVX512-NEXT: sbbq %rbp, %rdx2758; AVX512-NEXT: setb %dl2759; AVX512-NEXT: cmpq %rcx, %rax2760; AVX512-NEXT: sbbq %r12, %rbp2761; AVX512-NEXT: sbbb $0, %dl2762; AVX512-NEXT: movb %dl, {{[-0-9]+}}(%r{{[sb]}}p) # 1-byte Spill2763; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %rax2764; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %rcx2765; AVX512-NEXT: cmpq %rax, %rcx2766; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rdi # 8-byte Reload2767; AVX512-NEXT: movq %rdi, %rdx2768; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rsi # 8-byte Reload2769; AVX512-NEXT: sbbq %rsi, %rdx2770; AVX512-NEXT: setb %r13b2771; AVX512-NEXT: cmpq %rcx, %rax2772; AVX512-NEXT: sbbq %rdi, %rsi2773; AVX512-NEXT: sbbb $0, %r13b2774; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %rax2775; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %rcx2776; AVX512-NEXT: cmpq %rax, %rcx2777; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rdi # 8-byte Reload2778; AVX512-NEXT: movq %rdi, %rdx2779; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rsi # 8-byte Reload2780; AVX512-NEXT: sbbq %rsi, %rdx2781; AVX512-NEXT: setb %bpl2782; AVX512-NEXT: cmpq %rcx, %rax2783; AVX512-NEXT: sbbq %rdi, %rsi2784; AVX512-NEXT: sbbb $0, %bpl2785; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %rcx2786; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %rdx2787; AVX512-NEXT: cmpq %rcx, %rdx2788; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rdi # 8-byte Reload2789; AVX512-NEXT: movq %rdi, %rax2790; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rsi # 8-byte Reload2791; AVX512-NEXT: sbbq %rsi, %rax2792; AVX512-NEXT: setb %r9b2793; AVX512-NEXT: cmpq %rdx, %rcx2794; AVX512-NEXT: sbbq %rdi, %rsi2795; AVX512-NEXT: sbbb $0, %r9b2796; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %rdx2797; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %rsi2798; AVX512-NEXT: cmpq %rdx, %rsi2799; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rdi # 8-byte Reload2800; AVX512-NEXT: movq %rdi, %rcx2801; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload2802; AVX512-NEXT: sbbq %rax, %rcx2803; AVX512-NEXT: setb %cl2804; AVX512-NEXT: cmpq %rsi, %rdx2805; AVX512-NEXT: sbbq %rdi, %rax2806; AVX512-NEXT: sbbb $0, %cl2807; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %rsi2808; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %rdi2809; AVX512-NEXT: cmpq %rsi, %rdi2810; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r8 # 8-byte Reload2811; AVX512-NEXT: movq %r8, %rdx2812; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload2813; AVX512-NEXT: sbbq %rax, %rdx2814; AVX512-NEXT: setb %dl2815; AVX512-NEXT: cmpq %rdi, %rsi2816; AVX512-NEXT: sbbq %r8, %rax2817; AVX512-NEXT: sbbb $0, %dl2818; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %rdi2819; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %r82820; AVX512-NEXT: cmpq %rdi, %r82821; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r10 # 8-byte Reload2822; AVX512-NEXT: movq %r10, %rsi2823; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload2824; AVX512-NEXT: sbbq %rax, %rsi2825; AVX512-NEXT: setb %sil2826; AVX512-NEXT: cmpq %r8, %rdi2827; AVX512-NEXT: sbbq %r10, %rax2828; AVX512-NEXT: sbbb $0, %sil2829; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %r82830; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %r102831; AVX512-NEXT: cmpq %r8, %r102832; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r11 # 8-byte Reload2833; AVX512-NEXT: movq %r11, %rdi2834; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload2835; AVX512-NEXT: sbbq %rax, %rdi2836; AVX512-NEXT: setb %dil2837; AVX512-NEXT: cmpq %r10, %r82838; AVX512-NEXT: sbbq %r11, %rax2839; AVX512-NEXT: sbbb $0, %dil2840; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %r102841; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload2842; AVX512-NEXT: cmpq %rax, %r102843; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rbx # 8-byte Reload2844; AVX512-NEXT: movq %rbx, %r82845; AVX512-NEXT: movq (%rsp), %r11 # 8-byte Reload2846; AVX512-NEXT: sbbq %r11, %r82847; AVX512-NEXT: setb %r8b2848; AVX512-NEXT: cmpq %r10, %rax2849; AVX512-NEXT: sbbq %rbx, %r112850; AVX512-NEXT: sbbb $0, %r8b2851; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %r112852; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rbx # 8-byte Reload2853; AVX512-NEXT: cmpq %rbx, %r112854; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r14 # 8-byte Reload2855; AVX512-NEXT: movq %r14, %r102856; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload2857; AVX512-NEXT: sbbq %rax, %r102858; AVX512-NEXT: setb %r10b2859; AVX512-NEXT: cmpq %r11, %rbx2860; AVX512-NEXT: sbbq %r14, %rax2861; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %r112862; AVX512-NEXT: sbbb $0, %r10b2863; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r15 # 8-byte Reload2864; AVX512-NEXT: cmpq %r15, %r112865; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload2866; AVX512-NEXT: movq %rax, %rbx2867; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r14 # 8-byte Reload2868; AVX512-NEXT: sbbq %r14, %rbx2869; AVX512-NEXT: setb %bl2870; AVX512-NEXT: cmpq %r11, %r152871; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %r112872; AVX512-NEXT: sbbq %rax, %r142873; AVX512-NEXT: movq {{[0-9]+}}(%rsp), %r142874; AVX512-NEXT: sbbb $0, %bl2875; AVX512-NEXT: cmpq %r11, %r142876; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload2877; AVX512-NEXT: movq %rax, %r152878; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r12 # 8-byte Reload2879; AVX512-NEXT: sbbq %r12, %r152880; AVX512-NEXT: setb %r15b2881; AVX512-NEXT: cmpq %r14, %r112882; AVX512-NEXT: sbbq %rax, %r122883; AVX512-NEXT: sbbb $0, %r15b2884; AVX512-NEXT: movzbl %r15b, %r11d2885; AVX512-NEXT: andl $3, %r11d2886; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r14 # 8-byte Reload2887; AVX512-NEXT: movb %r11b, 4(%r14)2888; AVX512-NEXT: movzbl %bl, %r11d2889; AVX512-NEXT: andl $3, %r11d2890; AVX512-NEXT: movzbl %r10b, %r10d2891; AVX512-NEXT: andl $3, %r10d2892; AVX512-NEXT: leaq (%r10,%r11,4), %r102893; AVX512-NEXT: movzbl %r8b, %r8d2894; AVX512-NEXT: andl $3, %r8d2895; AVX512-NEXT: shll $4, %r8d2896; AVX512-NEXT: orq %r10, %r82897; AVX512-NEXT: movzbl %dil, %edi2898; AVX512-NEXT: andl $3, %edi2899; AVX512-NEXT: shll $6, %edi2900; AVX512-NEXT: orq %r8, %rdi2901; AVX512-NEXT: movzbl %sil, %esi2902; AVX512-NEXT: andl $3, %esi2903; AVX512-NEXT: shll $8, %esi2904; AVX512-NEXT: orq %rdi, %rsi2905; AVX512-NEXT: movzbl %dl, %edx2906; AVX512-NEXT: andl $3, %edx2907; AVX512-NEXT: shll $10, %edx2908; AVX512-NEXT: movzbl %cl, %ecx2909; AVX512-NEXT: andl $3, %ecx2910; AVX512-NEXT: shll $12, %ecx2911; AVX512-NEXT: orq %rdx, %rcx2912; AVX512-NEXT: movzbl %r9b, %edx2913; AVX512-NEXT: andl $3, %edx2914; AVX512-NEXT: shll $14, %edx2915; AVX512-NEXT: orq %rcx, %rdx2916; AVX512-NEXT: movzbl %bpl, %eax2917; AVX512-NEXT: andl $3, %eax2918; AVX512-NEXT: shll $16, %eax2919; AVX512-NEXT: orq %rdx, %rax2920; AVX512-NEXT: orq %rsi, %rax2921; AVX512-NEXT: movzbl %r13b, %ecx2922; AVX512-NEXT: andl $3, %ecx2923; AVX512-NEXT: shll $18, %ecx2924; AVX512-NEXT: movzbl {{[-0-9]+}}(%r{{[sb]}}p), %edx # 1-byte Folded Reload2925; AVX512-NEXT: andl $3, %edx2926; AVX512-NEXT: shll $20, %edx2927; AVX512-NEXT: orq %rcx, %rdx2928; AVX512-NEXT: movzbl {{[-0-9]+}}(%r{{[sb]}}p), %ecx # 1-byte Folded Reload2929; AVX512-NEXT: andl $3, %ecx2930; AVX512-NEXT: shll $22, %ecx2931; AVX512-NEXT: orq %rdx, %rcx2932; AVX512-NEXT: movzbl {{[-0-9]+}}(%r{{[sb]}}p), %edx # 1-byte Folded Reload2933; AVX512-NEXT: andl $3, %edx2934; AVX512-NEXT: shll $24, %edx2935; AVX512-NEXT: orq %rcx, %rdx2936; AVX512-NEXT: movzbl {{[-0-9]+}}(%r{{[sb]}}p), %ecx # 1-byte Folded Reload2937; AVX512-NEXT: andl $3, %ecx2938; AVX512-NEXT: shlq $26, %rcx2939; AVX512-NEXT: orq %rdx, %rcx2940; AVX512-NEXT: orq %rax, %rcx2941; AVX512-NEXT: movzbl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 1-byte Folded Reload2942; AVX512-NEXT: andl $3, %eax2943; AVX512-NEXT: shlq $28, %rax2944; AVX512-NEXT: movzbl {{[-0-9]+}}(%r{{[sb]}}p), %edx # 1-byte Folded Reload2945; AVX512-NEXT: andl $3, %edx2946; AVX512-NEXT: shlq $30, %rdx2947; AVX512-NEXT: orq %rax, %rdx2948; AVX512-NEXT: orq %rcx, %rdx2949; AVX512-NEXT: movq %r14, %rax2950; AVX512-NEXT: movl %edx, (%r14)2951; AVX512-NEXT: addq $88, %rsp2952; AVX512-NEXT: popq %rbx2953; AVX512-NEXT: popq %r122954; AVX512-NEXT: popq %r132955; AVX512-NEXT: popq %r142956; AVX512-NEXT: popq %r152957; AVX512-NEXT: popq %rbp2958; AVX512-NEXT: retq2959;2960; X86-LABEL: ucmp_uncommon_vectors:2961; X86: # %bb.0:2962; X86-NEXT: pushl %ebp2963; X86-NEXT: pushl %ebx2964; X86-NEXT: pushl %edi2965; X86-NEXT: pushl %esi2966; X86-NEXT: subl $132, %esp2967; X86-NEXT: movl {{[0-9]+}}(%esp), %eax2968; X86-NEXT: andl $127, %eax2969; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2970; X86-NEXT: movl {{[0-9]+}}(%esp), %eax2971; X86-NEXT: andl $127, %eax2972; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2973; X86-NEXT: movl {{[0-9]+}}(%esp), %eax2974; X86-NEXT: andl $127, %eax2975; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2976; X86-NEXT: movl {{[0-9]+}}(%esp), %eax2977; X86-NEXT: andl $127, %eax2978; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2979; X86-NEXT: movl {{[0-9]+}}(%esp), %eax2980; X86-NEXT: andl $127, %eax2981; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2982; X86-NEXT: movl {{[0-9]+}}(%esp), %eax2983; X86-NEXT: andl $127, %eax2984; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2985; X86-NEXT: movl {{[0-9]+}}(%esp), %eax2986; X86-NEXT: andl $127, %eax2987; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2988; X86-NEXT: movl {{[0-9]+}}(%esp), %eax2989; X86-NEXT: andl $127, %eax2990; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2991; X86-NEXT: movl {{[0-9]+}}(%esp), %eax2992; X86-NEXT: andl $127, %eax2993; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2994; X86-NEXT: movl {{[0-9]+}}(%esp), %eax2995; X86-NEXT: andl $127, %eax2996; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2997; X86-NEXT: movl {{[0-9]+}}(%esp), %eax2998; X86-NEXT: andl $127, %eax2999; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3000; X86-NEXT: movl {{[0-9]+}}(%esp), %eax3001; X86-NEXT: andl $127, %eax3002; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3003; X86-NEXT: movl {{[0-9]+}}(%esp), %eax3004; X86-NEXT: andl $127, %eax3005; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3006; X86-NEXT: movl {{[0-9]+}}(%esp), %eax3007; X86-NEXT: andl $127, %eax3008; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3009; X86-NEXT: movl {{[0-9]+}}(%esp), %eax3010; X86-NEXT: andl $127, %eax3011; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3012; X86-NEXT: movl {{[0-9]+}}(%esp), %eax3013; X86-NEXT: andl $127, %eax3014; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3015; X86-NEXT: movl {{[0-9]+}}(%esp), %eax3016; X86-NEXT: andl $127, %eax3017; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3018; X86-NEXT: movl {{[0-9]+}}(%esp), %eax3019; X86-NEXT: andl $127, %eax3020; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3021; X86-NEXT: movl {{[0-9]+}}(%esp), %eax3022; X86-NEXT: andl $127, %eax3023; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3024; X86-NEXT: movl {{[0-9]+}}(%esp), %eax3025; X86-NEXT: andl $127, %eax3026; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3027; X86-NEXT: movl {{[0-9]+}}(%esp), %eax3028; X86-NEXT: andl $127, %eax3029; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3030; X86-NEXT: movl {{[0-9]+}}(%esp), %eax3031; X86-NEXT: andl $127, %eax3032; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3033; X86-NEXT: movl {{[0-9]+}}(%esp), %eax3034; X86-NEXT: andl $127, %eax3035; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3036; X86-NEXT: movl {{[0-9]+}}(%esp), %eax3037; X86-NEXT: andl $127, %eax3038; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3039; X86-NEXT: movl {{[0-9]+}}(%esp), %eax3040; X86-NEXT: andl $127, %eax3041; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3042; X86-NEXT: movl {{[0-9]+}}(%esp), %eax3043; X86-NEXT: andl $127, %eax3044; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3045; X86-NEXT: movl {{[0-9]+}}(%esp), %eax3046; X86-NEXT: andl $127, %eax3047; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3048; X86-NEXT: movl {{[0-9]+}}(%esp), %eax3049; X86-NEXT: andl $127, %eax3050; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3051; X86-NEXT: movl {{[0-9]+}}(%esp), %eax3052; X86-NEXT: andl $127, %eax3053; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3054; X86-NEXT: movl {{[0-9]+}}(%esp), %eax3055; X86-NEXT: andl $127, %eax3056; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3057; X86-NEXT: movl {{[0-9]+}}(%esp), %ebp3058; X86-NEXT: andl $127, %ebp3059; X86-NEXT: movl {{[0-9]+}}(%esp), %eax3060; X86-NEXT: andl $127, %eax3061; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3062; X86-NEXT: movl {{[0-9]+}}(%esp), %edx3063; X86-NEXT: andl $127, %edx3064; X86-NEXT: movl {{[0-9]+}}(%esp), %edi3065; X86-NEXT: andl $127, %edi3066; X86-NEXT: movl {{[0-9]+}}(%esp), %eax3067; X86-NEXT: movl $0, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill3068; X86-NEXT: cmpl %eax, {{[0-9]+}}(%esp)3069; X86-NEXT: movl {{[0-9]+}}(%esp), %eax3070; X86-NEXT: movl {{[0-9]+}}(%esp), %ebx3071; X86-NEXT: movl %ebx, %esi3072; X86-NEXT: sbbl %eax, %esi3073; X86-NEXT: movl %edi, %esi3074; X86-NEXT: sbbl %edx, %esi3075; X86-NEXT: movl $0, %esi3076; X86-NEXT: sbbl %esi, %esi3077; X86-NEXT: setb %cl3078; X86-NEXT: movl {{[0-9]+}}(%esp), %esi3079; X86-NEXT: cmpl {{[0-9]+}}(%esp), %esi3080; X86-NEXT: sbbl %ebx, %eax3081; X86-NEXT: sbbl %edi, %edx3082; X86-NEXT: movl $0, %eax3083; X86-NEXT: sbbl %eax, %eax3084; X86-NEXT: sbbb $0, %cl3085; X86-NEXT: movb %cl, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill3086; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx3087; X86-NEXT: cmpl {{[0-9]+}}(%esp), %ecx3088; X86-NEXT: movl {{[0-9]+}}(%esp), %edx3089; X86-NEXT: movl {{[0-9]+}}(%esp), %esi3090; X86-NEXT: movl %esi, %edi3091; X86-NEXT: sbbl %edx, %edi3092; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload3093; X86-NEXT: movl %eax, %edi3094; X86-NEXT: sbbl %ebp, %edi3095; X86-NEXT: movl $0, %edi3096; X86-NEXT: sbbl %edi, %edi3097; X86-NEXT: setb %bl3098; X86-NEXT: cmpl %ecx, {{[0-9]+}}(%esp)3099; X86-NEXT: sbbl %esi, %edx3100; X86-NEXT: sbbl %eax, %ebp3101; X86-NEXT: movl $0, %eax3102; X86-NEXT: sbbl %eax, %eax3103; X86-NEXT: sbbb $0, %bl3104; X86-NEXT: movb %bl, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill3105; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx3106; X86-NEXT: cmpl {{[0-9]+}}(%esp), %ecx3107; X86-NEXT: movl {{[0-9]+}}(%esp), %edx3108; X86-NEXT: movl {{[0-9]+}}(%esp), %esi3109; X86-NEXT: movl %esi, %edi3110; X86-NEXT: sbbl %edx, %edi3111; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload3112; X86-NEXT: movl %eax, %edi3113; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload3114; X86-NEXT: sbbl %ebp, %edi3115; X86-NEXT: movl $0, %edi3116; X86-NEXT: sbbl %edi, %edi3117; X86-NEXT: setb %bl3118; X86-NEXT: cmpl %ecx, {{[0-9]+}}(%esp)3119; X86-NEXT: sbbl %esi, %edx3120; X86-NEXT: sbbl %eax, %ebp3121; X86-NEXT: movl $0, %eax3122; X86-NEXT: sbbl %eax, %eax3123; X86-NEXT: sbbb $0, %bl3124; X86-NEXT: movb %bl, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill3125; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx3126; X86-NEXT: cmpl {{[0-9]+}}(%esp), %ecx3127; X86-NEXT: movl {{[0-9]+}}(%esp), %edx3128; X86-NEXT: movl {{[0-9]+}}(%esp), %esi3129; X86-NEXT: movl %esi, %edi3130; X86-NEXT: sbbl %edx, %edi3131; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload3132; X86-NEXT: movl %eax, %edi3133; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload3134; X86-NEXT: sbbl %ebp, %edi3135; X86-NEXT: movl $0, %edi3136; X86-NEXT: sbbl %edi, %edi3137; X86-NEXT: setb %bl3138; X86-NEXT: cmpl %ecx, {{[0-9]+}}(%esp)3139; X86-NEXT: sbbl %esi, %edx3140; X86-NEXT: sbbl %eax, %ebp3141; X86-NEXT: movl $0, %eax3142; X86-NEXT: sbbl %eax, %eax3143; X86-NEXT: sbbb $0, %bl3144; X86-NEXT: movb %bl, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill3145; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx3146; X86-NEXT: cmpl {{[0-9]+}}(%esp), %ecx3147; X86-NEXT: movl {{[0-9]+}}(%esp), %edx3148; X86-NEXT: movl {{[0-9]+}}(%esp), %esi3149; X86-NEXT: movl %esi, %edi3150; X86-NEXT: sbbl %edx, %edi3151; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload3152; X86-NEXT: movl %eax, %edi3153; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload3154; X86-NEXT: sbbl %ebp, %edi3155; X86-NEXT: movl $0, %edi3156; X86-NEXT: sbbl %edi, %edi3157; X86-NEXT: setb %bl3158; X86-NEXT: cmpl %ecx, {{[0-9]+}}(%esp)3159; X86-NEXT: sbbl %esi, %edx3160; X86-NEXT: sbbl %eax, %ebp3161; X86-NEXT: movl $0, %eax3162; X86-NEXT: sbbl %eax, %eax3163; X86-NEXT: sbbb $0, %bl3164; X86-NEXT: movb %bl, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill3165; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx3166; X86-NEXT: cmpl {{[0-9]+}}(%esp), %ecx3167; X86-NEXT: movl {{[0-9]+}}(%esp), %edx3168; X86-NEXT: movl {{[0-9]+}}(%esp), %esi3169; X86-NEXT: movl %esi, %edi3170; X86-NEXT: sbbl %edx, %edi3171; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload3172; X86-NEXT: movl %eax, %edi3173; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload3174; X86-NEXT: sbbl %ebp, %edi3175; X86-NEXT: movl $0, %edi3176; X86-NEXT: sbbl %edi, %edi3177; X86-NEXT: setb %bl3178; X86-NEXT: cmpl %ecx, {{[0-9]+}}(%esp)3179; X86-NEXT: sbbl %esi, %edx3180; X86-NEXT: sbbl %eax, %ebp3181; X86-NEXT: movl $0, %eax3182; X86-NEXT: sbbl %eax, %eax3183; X86-NEXT: sbbb $0, %bl3184; X86-NEXT: movb %bl, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill3185; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx3186; X86-NEXT: cmpl {{[0-9]+}}(%esp), %ecx3187; X86-NEXT: movl {{[0-9]+}}(%esp), %edx3188; X86-NEXT: movl {{[0-9]+}}(%esp), %esi3189; X86-NEXT: movl %esi, %edi3190; X86-NEXT: sbbl %edx, %edi3191; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload3192; X86-NEXT: movl %eax, %edi3193; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload3194; X86-NEXT: sbbl %ebp, %edi3195; X86-NEXT: movl $0, %edi3196; X86-NEXT: sbbl %edi, %edi3197; X86-NEXT: setb %bl3198; X86-NEXT: cmpl %ecx, {{[0-9]+}}(%esp)3199; X86-NEXT: sbbl %esi, %edx3200; X86-NEXT: sbbl %eax, %ebp3201; X86-NEXT: movl $0, %eax3202; X86-NEXT: sbbl %eax, %eax3203; X86-NEXT: sbbb $0, %bl3204; X86-NEXT: movb %bl, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill3205; X86-NEXT: movl {{[0-9]+}}(%esp), %eax3206; X86-NEXT: cmpl {{[0-9]+}}(%esp), %eax3207; X86-NEXT: movl {{[0-9]+}}(%esp), %edx3208; X86-NEXT: movl {{[0-9]+}}(%esp), %esi3209; X86-NEXT: movl %esi, %edi3210; X86-NEXT: sbbl %edx, %edi3211; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload3212; X86-NEXT: movl %ebp, %edi3213; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload3214; X86-NEXT: sbbl %ebx, %edi3215; X86-NEXT: movl $0, %edi3216; X86-NEXT: sbbl %edi, %edi3217; X86-NEXT: setb %cl3218; X86-NEXT: cmpl %eax, {{[0-9]+}}(%esp)3219; X86-NEXT: sbbl %esi, %edx3220; X86-NEXT: sbbl %ebp, %ebx3221; X86-NEXT: movl $0, %eax3222; X86-NEXT: sbbl %eax, %eax3223; X86-NEXT: sbbb $0, %cl3224; X86-NEXT: movb %cl, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill3225; X86-NEXT: movl {{[0-9]+}}(%esp), %eax3226; X86-NEXT: cmpl {{[0-9]+}}(%esp), %eax3227; X86-NEXT: movl {{[0-9]+}}(%esp), %edx3228; X86-NEXT: movl {{[0-9]+}}(%esp), %esi3229; X86-NEXT: movl %esi, %edi3230; X86-NEXT: sbbl %edx, %edi3231; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload3232; X86-NEXT: movl %ebp, %edi3233; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload3234; X86-NEXT: sbbl %ebx, %edi3235; X86-NEXT: movl $0, %edi3236; X86-NEXT: sbbl %edi, %edi3237; X86-NEXT: setb %cl3238; X86-NEXT: cmpl %eax, {{[0-9]+}}(%esp)3239; X86-NEXT: sbbl %esi, %edx3240; X86-NEXT: sbbl %ebp, %ebx3241; X86-NEXT: movl $0, %eax3242; X86-NEXT: sbbl %eax, %eax3243; X86-NEXT: sbbb $0, %cl3244; X86-NEXT: movb %cl, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill3245; X86-NEXT: movl {{[0-9]+}}(%esp), %eax3246; X86-NEXT: cmpl {{[0-9]+}}(%esp), %eax3247; X86-NEXT: movl {{[0-9]+}}(%esp), %edx3248; X86-NEXT: movl {{[0-9]+}}(%esp), %esi3249; X86-NEXT: movl %esi, %edi3250; X86-NEXT: sbbl %edx, %edi3251; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload3252; X86-NEXT: movl %ebp, %edi3253; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload3254; X86-NEXT: sbbl %ebx, %edi3255; X86-NEXT: movl $0, %edi3256; X86-NEXT: sbbl %edi, %edi3257; X86-NEXT: setb %cl3258; X86-NEXT: cmpl %eax, {{[0-9]+}}(%esp)3259; X86-NEXT: sbbl %esi, %edx3260; X86-NEXT: sbbl %ebp, %ebx3261; X86-NEXT: movl $0, %eax3262; X86-NEXT: sbbl %eax, %eax3263; X86-NEXT: sbbb $0, %cl3264; X86-NEXT: movb %cl, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill3265; X86-NEXT: movl {{[0-9]+}}(%esp), %eax3266; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx3267; X86-NEXT: cmpl %eax, %ecx3268; X86-NEXT: movl {{[0-9]+}}(%esp), %esi3269; X86-NEXT: movl {{[0-9]+}}(%esp), %edi3270; X86-NEXT: movl %edi, %edx3271; X86-NEXT: sbbl %esi, %edx3272; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload3273; X86-NEXT: movl %ebp, %edx3274; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload3275; X86-NEXT: sbbl %ebx, %edx3276; X86-NEXT: movl $0, %edx3277; X86-NEXT: sbbl %edx, %edx3278; X86-NEXT: setb %dl3279; X86-NEXT: cmpl %ecx, %eax3280; X86-NEXT: sbbl %edi, %esi3281; X86-NEXT: sbbl %ebp, %ebx3282; X86-NEXT: movl $0, %eax3283; X86-NEXT: sbbl %eax, %eax3284; X86-NEXT: sbbb $0, %dl3285; X86-NEXT: movb %dl, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill3286; X86-NEXT: movl {{[0-9]+}}(%esp), %eax3287; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx3288; X86-NEXT: cmpl %eax, %ecx3289; X86-NEXT: movl {{[0-9]+}}(%esp), %esi3290; X86-NEXT: movl {{[0-9]+}}(%esp), %edi3291; X86-NEXT: movl %edi, %ebx3292; X86-NEXT: sbbl %esi, %ebx3293; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload3294; X86-NEXT: movl %ebp, %ebx3295; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload3296; X86-NEXT: sbbl %edx, %ebx3297; X86-NEXT: movl $0, %ebx3298; X86-NEXT: sbbl %ebx, %ebx3299; X86-NEXT: setb %bl3300; X86-NEXT: cmpl %ecx, %eax3301; X86-NEXT: sbbl %edi, %esi3302; X86-NEXT: sbbl %ebp, %edx3303; X86-NEXT: movl $0, %eax3304; X86-NEXT: sbbl %eax, %eax3305; X86-NEXT: sbbb $0, %bl3306; X86-NEXT: movb %bl, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill3307; X86-NEXT: movl {{[0-9]+}}(%esp), %eax3308; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx3309; X86-NEXT: cmpl %eax, %ecx3310; X86-NEXT: movl {{[0-9]+}}(%esp), %esi3311; X86-NEXT: movl {{[0-9]+}}(%esp), %edi3312; X86-NEXT: movl %edi, %ebx3313; X86-NEXT: sbbl %esi, %ebx3314; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload3315; X86-NEXT: movl %ebp, %ebx3316; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload3317; X86-NEXT: sbbl %edx, %ebx3318; X86-NEXT: movl $0, %ebx3319; X86-NEXT: sbbl %ebx, %ebx3320; X86-NEXT: setb %bl3321; X86-NEXT: cmpl %ecx, %eax3322; X86-NEXT: sbbl %edi, %esi3323; X86-NEXT: sbbl %ebp, %edx3324; X86-NEXT: movl $0, %eax3325; X86-NEXT: sbbl %eax, %eax3326; X86-NEXT: sbbb $0, %bl3327; X86-NEXT: movb %bl, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill3328; X86-NEXT: movl {{[0-9]+}}(%esp), %eax3329; X86-NEXT: cmpl {{[0-9]+}}(%esp), %eax3330; X86-NEXT: movl {{[0-9]+}}(%esp), %esi3331; X86-NEXT: movl {{[0-9]+}}(%esp), %edi3332; X86-NEXT: movl %edi, %ebp3333; X86-NEXT: sbbl %esi, %ebp3334; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload3335; X86-NEXT: movl %ebx, %ebp3336; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload3337; X86-NEXT: sbbl %edx, %ebp3338; X86-NEXT: movl $0, %ebp3339; X86-NEXT: sbbl %ebp, %ebp3340; X86-NEXT: setb %cl3341; X86-NEXT: cmpl %eax, {{[0-9]+}}(%esp)3342; X86-NEXT: sbbl %edi, %esi3343; X86-NEXT: sbbl %ebx, %edx3344; X86-NEXT: movl $0, %eax3345; X86-NEXT: sbbl %eax, %eax3346; X86-NEXT: sbbb $0, %cl3347; X86-NEXT: movb %cl, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill3348; X86-NEXT: movl {{[0-9]+}}(%esp), %esi3349; X86-NEXT: cmpl {{[0-9]+}}(%esp), %esi3350; X86-NEXT: movl {{[0-9]+}}(%esp), %edi3351; X86-NEXT: movl {{[0-9]+}}(%esp), %ebp3352; X86-NEXT: movl %ebp, %eax3353; X86-NEXT: sbbl %edi, %eax3354; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload3355; X86-NEXT: movl %ecx, %eax3356; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload3357; X86-NEXT: sbbl %edx, %eax3358; X86-NEXT: movl $0, %eax3359; X86-NEXT: sbbl %eax, %eax3360; X86-NEXT: setb %bl3361; X86-NEXT: cmpl %esi, {{[0-9]+}}(%esp)3362; X86-NEXT: sbbl %ebp, %edi3363; X86-NEXT: sbbl %ecx, %edx3364; X86-NEXT: movl $0, %ecx3365; X86-NEXT: sbbl %ecx, %ecx3366; X86-NEXT: sbbb $0, %bl3367; X86-NEXT: movl {{[0-9]+}}(%esp), %esi3368; X86-NEXT: cmpl {{[0-9]+}}(%esp), %esi3369; X86-NEXT: movl {{[0-9]+}}(%esp), %edi3370; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx3371; X86-NEXT: movl %ecx, %ebp3372; X86-NEXT: sbbl %edi, %ebp3373; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload3374; X86-NEXT: movl %eax, %ebp3375; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload3376; X86-NEXT: sbbl %edx, %ebp3377; X86-NEXT: movl $0, %ebp3378; X86-NEXT: sbbl %ebp, %ebp3379; X86-NEXT: setb %bh3380; X86-NEXT: cmpl %esi, {{[0-9]+}}(%esp)3381; X86-NEXT: sbbl %ecx, %edi3382; X86-NEXT: sbbl %eax, %edx3383; X86-NEXT: movl $0, %ecx3384; X86-NEXT: sbbl %ecx, %ecx3385; X86-NEXT: sbbb $0, %bh3386; X86-NEXT: movl {{[0-9]+}}(%esp), %eax3387; X86-NEXT: cmpl %eax, {{[0-9]+}}(%esp)3388; X86-NEXT: movl {{[0-9]+}}(%esp), %esi3389; X86-NEXT: movl {{[0-9]+}}(%esp), %edi3390; X86-NEXT: movl %esi, %ebp3391; X86-NEXT: sbbl %edi, %ebp3392; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload3393; X86-NEXT: movl %edx, %ebp3394; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload3395; X86-NEXT: sbbl %eax, %ebp3396; X86-NEXT: movl $0, %ebp3397; X86-NEXT: sbbl %ebp, %ebp3398; X86-NEXT: setb %cl3399; X86-NEXT: movl {{[0-9]+}}(%esp), %ebp3400; X86-NEXT: cmpl {{[0-9]+}}(%esp), %ebp3401; X86-NEXT: sbbl %esi, %edi3402; X86-NEXT: sbbl %edx, %eax3403; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload3404; X86-NEXT: sbbl %eax, %eax3405; X86-NEXT: sbbb $0, %cl3406; X86-NEXT: movzbl %cl, %ecx3407; X86-NEXT: andl $3, %ecx3408; X86-NEXT: movl {{[0-9]+}}(%esp), %edi3409; X86-NEXT: movb %cl, 4(%edi)3410; X86-NEXT: movzbl %bh, %ebp3411; X86-NEXT: movzbl %bl, %ecx3412; X86-NEXT: movzbl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 1-byte Folded Reload3413; X86-NEXT: movzbl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 1-byte Folded Reload3414; X86-NEXT: movzbl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 1-byte Folded Reload3415; X86-NEXT: movzbl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 1-byte Folded Reload3416; X86-NEXT: andl $3, %ebp3417; X86-NEXT: andl $3, %ecx3418; X86-NEXT: leal (%ecx,%ebp,4), %ecx3419; X86-NEXT: andl $3, %eax3420; X86-NEXT: shll $4, %eax3421; X86-NEXT: orl %ecx, %eax3422; X86-NEXT: andl $3, %ebx3423; X86-NEXT: shll $6, %ebx3424; X86-NEXT: orl %eax, %ebx3425; X86-NEXT: andl $3, %esi3426; X86-NEXT: shll $8, %esi3427; X86-NEXT: orl %ebx, %esi3428; X86-NEXT: andl $3, %edx3429; X86-NEXT: shll $10, %edx3430; X86-NEXT: orl %esi, %edx3431; X86-NEXT: movzbl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 1-byte Folded Reload3432; X86-NEXT: andl $3, %eax3433; X86-NEXT: shll $12, %eax3434; X86-NEXT: movzbl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 1-byte Folded Reload3435; X86-NEXT: andl $3, %ecx3436; X86-NEXT: shll $14, %ecx3437; X86-NEXT: orl %eax, %ecx3438; X86-NEXT: movzbl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 1-byte Folded Reload3439; X86-NEXT: andl $3, %eax3440; X86-NEXT: shll $16, %eax3441; X86-NEXT: orl %ecx, %eax3442; X86-NEXT: movzbl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 1-byte Folded Reload3443; X86-NEXT: andl $3, %esi3444; X86-NEXT: shll $18, %esi3445; X86-NEXT: orl %eax, %esi3446; X86-NEXT: movzbl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 1-byte Folded Reload3447; X86-NEXT: movzbl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 1-byte Folded Reload3448; X86-NEXT: andl $3, %eax3449; X86-NEXT: shll $20, %eax3450; X86-NEXT: orl %esi, %eax3451; X86-NEXT: movzbl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 1-byte Folded Reload3452; X86-NEXT: movzbl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 1-byte Folded Reload3453; X86-NEXT: orl %edx, %eax3454; X86-NEXT: andl $3, %ecx3455; X86-NEXT: shll $22, %ecx3456; X86-NEXT: andl $3, %esi3457; X86-NEXT: shll $24, %esi3458; X86-NEXT: orl %ecx, %esi3459; X86-NEXT: andl $3, %ebx3460; X86-NEXT: shll $26, %ebx3461; X86-NEXT: orl %esi, %ebx3462; X86-NEXT: movzbl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 1-byte Folded Reload3463; X86-NEXT: andl $3, %ecx3464; X86-NEXT: shll $28, %ecx3465; X86-NEXT: orl %ebx, %ecx3466; X86-NEXT: movzbl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 1-byte Folded Reload3467; X86-NEXT: shll $30, %edx3468; X86-NEXT: orl %ecx, %edx3469; X86-NEXT: orl %eax, %edx3470; X86-NEXT: movl %edx, (%edi)3471; X86-NEXT: movl %edi, %eax3472; X86-NEXT: addl $132, %esp3473; X86-NEXT: popl %esi3474; X86-NEXT: popl %edi3475; X86-NEXT: popl %ebx3476; X86-NEXT: popl %ebp3477; X86-NEXT: retl $43478 %1 = call <17 x i2> @llvm.ucmp(<17 x i71> %x, <17 x i71> %y)3479 ret <17 x i2> %13480}3481