brintos

brintos / llvm-project-archived public Read only

0
0
Text · 42.7 KiB · 7ef8599 Raw
1353 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-linux | FileCheck %s --check-prefixes=X64,SSE3; RUN: llc < %s -mtriple=x86_64-linux -mattr=avx | FileCheck %s --check-prefixes=X64,AVX,AVX14; RUN: llc < %s -mtriple=x86_64-linux -mattr=avx2 | FileCheck %s --check-prefixes=X64,AVX,AVX25; RUN: llc < %s -mtriple=i686 -mattr=cmov | FileCheck %s --check-prefix=X866 7declare i8 @llvm.umax.i8(i8, i8)8declare i16 @llvm.umax.i16(i16, i16)9declare i24 @llvm.umax.i24(i24, i24)10declare i32 @llvm.umax.i32(i32, i32)11declare i64 @llvm.umax.i64(i64, i64)12declare i128 @llvm.umax.i128(i128, i128)13 14declare <1 x i32> @llvm.umax.v1i32(<1 x i32>, <1 x i32>)15declare <2 x i32> @llvm.umax.v2i32(<2 x i32>, <2 x i32>)16declare <3 x i32> @llvm.umax.v3i32(<3 x i32>, <3 x i32>)17declare <4 x i32> @llvm.umax.v4i32(<4 x i32>, <4 x i32>)18declare <8 x i32> @llvm.umax.v8i32(<8 x i32>, <8 x i32>)19 20declare <2 x i64> @llvm.umax.v2i64(<2 x i64>, <2 x i64>)21declare <8 x i16> @llvm.umax.v8i16(<8 x i16>, <8 x i16>)22declare <16 x i8> @llvm.umax.v16i8(<16 x i8>, <16 x i8>)23 24define i8 @test_i8(i8 %a, i8 %b) nounwind {25; X64-LABEL: test_i8:26; X64:       # %bb.0:27; X64-NEXT:    movl %esi, %eax28; X64-NEXT:    cmpb %al, %dil29; X64-NEXT:    cmoval %edi, %eax30; X64-NEXT:    # kill: def $al killed $al killed $eax31; X64-NEXT:    retq32;33; X86-LABEL: test_i8:34; X86:       # %bb.0:35; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax36; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx37; X86-NEXT:    cmpb %al, %cl38; X86-NEXT:    cmoval %ecx, %eax39; X86-NEXT:    # kill: def $al killed $al killed $eax40; X86-NEXT:    retl41  %r = call i8 @llvm.umax.i8(i8 %a, i8 %b)42  ret i8 %r43}44 45define i8 @test_i8_1(i8 %a) nounwind {46; X64-LABEL: test_i8_1:47; X64:       # %bb.0:48; X64-NEXT:    movl %edi, %eax49; X64-NEXT:    cmpb $1, %al50; X64-NEXT:    adcl $0, %eax51; X64-NEXT:    # kill: def $al killed $al killed $eax52; X64-NEXT:    retq53;54; X86-LABEL: test_i8_1:55; X86:       # %bb.0:56; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax57; X86-NEXT:    cmpb $1, %al58; X86-NEXT:    adcl $0, %eax59; X86-NEXT:    # kill: def $al killed $al killed $eax60; X86-NEXT:    retl61  %r = call i8 @llvm.umax.i8(i8 %a, i8 1)62  ret i8 %r63}64 65define i16 @test_i16(i16 %a, i16 %b) nounwind {66; X64-LABEL: test_i16:67; X64:       # %bb.0:68; X64-NEXT:    movl %esi, %eax69; X64-NEXT:    cmpw %ax, %di70; X64-NEXT:    cmoval %edi, %eax71; X64-NEXT:    # kill: def $ax killed $ax killed $eax72; X64-NEXT:    retq73;74; X86-LABEL: test_i16:75; X86:       # %bb.0:76; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax77; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx78; X86-NEXT:    cmpw %ax, %cx79; X86-NEXT:    cmoval %ecx, %eax80; X86-NEXT:    # kill: def $ax killed $ax killed $eax81; X86-NEXT:    retl82  %r = call i16 @llvm.umax.i16(i16 %a, i16 %b)83  ret i16 %r84}85 86define i16 @test_i16_1(i16 %a) nounwind {87; X64-LABEL: test_i16_1:88; X64:       # %bb.0:89; X64-NEXT:    movl %edi, %eax90; X64-NEXT:    cmpw $1, %ax91; X64-NEXT:    adcl $0, %eax92; X64-NEXT:    # kill: def $ax killed $ax killed $eax93; X64-NEXT:    retq94;95; X86-LABEL: test_i16_1:96; X86:       # %bb.0:97; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax98; X86-NEXT:    cmpw $1, %ax99; X86-NEXT:    adcl $0, %eax100; X86-NEXT:    # kill: def $ax killed $ax killed $eax101; X86-NEXT:    retl102  %r = call i16 @llvm.umax.i16(i16 %a, i16 1)103  ret i16 %r104}105 106define i24 @test_i24(i24 %a, i24 %b) nounwind {107; X64-LABEL: test_i24:108; X64:       # %bb.0:109; X64-NEXT:    movl %edi, %eax110; X64-NEXT:    andl $16777215, %esi # imm = 0xFFFFFF111; X64-NEXT:    andl $16777215, %eax # imm = 0xFFFFFF112; X64-NEXT:    cmpl %esi, %eax113; X64-NEXT:    cmovbel %esi, %eax114; X64-NEXT:    retq115;116; X86-LABEL: test_i24:117; X86:       # %bb.0:118; X86-NEXT:    movl $16777215, %eax # imm = 0xFFFFFF119; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx120; X86-NEXT:    andl %eax, %ecx121; X86-NEXT:    andl {{[0-9]+}}(%esp), %eax122; X86-NEXT:    cmpl %ecx, %eax123; X86-NEXT:    cmovbel %ecx, %eax124; X86-NEXT:    retl125  %r = call i24 @llvm.umax.i24(i24 %a, i24 %b)126  ret i24 %r127}128 129define i32 @test_i32(i32 %a, i32 %b) nounwind {130; X64-LABEL: test_i32:131; X64:       # %bb.0:132; X64-NEXT:    movl %esi, %eax133; X64-NEXT:    cmpl %esi, %edi134; X64-NEXT:    cmoval %edi, %eax135; X64-NEXT:    retq136;137; X86-LABEL: test_i32:138; X86:       # %bb.0:139; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax140; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx141; X86-NEXT:    cmpl %eax, %ecx142; X86-NEXT:    cmoval %ecx, %eax143; X86-NEXT:    retl144  %r = call i32 @llvm.umax.i32(i32 %a, i32 %b)145  ret i32 %r146}147 148define i32 @test_i32_1(i32 %a) nounwind {149; X64-LABEL: test_i32_1:150; X64:       # %bb.0:151; X64-NEXT:    movl %edi, %eax152; X64-NEXT:    cmpl $1, %edi153; X64-NEXT:    adcl $0, %eax154; X64-NEXT:    retq155;156; X86-LABEL: test_i32_1:157; X86:       # %bb.0:158; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax159; X86-NEXT:    cmpl $1, %eax160; X86-NEXT:    adcl $0, %eax161; X86-NEXT:    retl162  %r = call i32 @llvm.umax.i32(i32 %a, i32 1)163  ret i32 %r164}165 166define i64 @test_i64(i64 %a, i64 %b) nounwind {167; X64-LABEL: test_i64:168; X64:       # %bb.0:169; X64-NEXT:    movq %rsi, %rax170; X64-NEXT:    cmpq %rsi, %rdi171; X64-NEXT:    cmovaq %rdi, %rax172; X64-NEXT:    retq173;174; X86-LABEL: test_i64:175; X86:       # %bb.0:176; X86-NEXT:    pushl %edi177; X86-NEXT:    pushl %esi178; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx179; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi180; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax181; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx182; X86-NEXT:    cmpl %ecx, %eax183; X86-NEXT:    movl %edx, %edi184; X86-NEXT:    sbbl %esi, %edi185; X86-NEXT:    cmovbl %ecx, %eax186; X86-NEXT:    cmovbl %esi, %edx187; X86-NEXT:    popl %esi188; X86-NEXT:    popl %edi189; X86-NEXT:    retl190  %r = call i64 @llvm.umax.i64(i64 %a, i64 %b)191  ret i64 %r192}193 194define i64 @test_i64_1(i64 %a) nounwind {195; X64-LABEL: test_i64_1:196; X64:       # %bb.0:197; X64-NEXT:    movq %rdi, %rax198; X64-NEXT:    cmpq $1, %rdi199; X64-NEXT:    adcq $0, %rax200; X64-NEXT:    retq201;202; X86-LABEL: test_i64_1:203; X86:       # %bb.0:204; X86-NEXT:    pushl %esi205; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx206; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx207; X86-NEXT:    cmpl $1, %ecx208; X86-NEXT:    movl %ecx, %esi209; X86-NEXT:    adcl $0, %esi210; X86-NEXT:    testl %edx, %edx211; X86-NEXT:    movl $1, %eax212; X86-NEXT:    cmovnel %ecx, %eax213; X86-NEXT:    cmovel %esi, %eax214; X86-NEXT:    popl %esi215; X86-NEXT:    retl216  %r = call i64 @llvm.umax.i64(i64 %a, i64 1)217  ret i64 %r218}219 220define i128 @test_i128(i128 %a, i128 %b) nounwind {221; X64-LABEL: test_i128:222; X64:       # %bb.0:223; X64-NEXT:    movq %rdx, %rax224; X64-NEXT:    cmpq %rdi, %rdx225; X64-NEXT:    movq %rcx, %rdx226; X64-NEXT:    sbbq %rsi, %rdx227; X64-NEXT:    cmovbq %rdi, %rax228; X64-NEXT:    cmovbq %rsi, %rcx229; X64-NEXT:    movq %rcx, %rdx230; X64-NEXT:    retq231;232; X86-LABEL: test_i128:233; X86:       # %bb.0:234; X86-NEXT:    pushl %ebp235; X86-NEXT:    movl %esp, %ebp236; X86-NEXT:    pushl %ebx237; X86-NEXT:    pushl %edi238; X86-NEXT:    pushl %esi239; X86-NEXT:    andl $-16, %esp240; X86-NEXT:    subl $16, %esp241; X86-NEXT:    movl 40(%ebp), %ebx242; X86-NEXT:    movl 44(%ebp), %edi243; X86-NEXT:    cmpl 24(%ebp), %ebx244; X86-NEXT:    movl %edi, %esi245; X86-NEXT:    sbbl 28(%ebp), %esi246; X86-NEXT:    movl 48(%ebp), %edx247; X86-NEXT:    movl %edx, %esi248; X86-NEXT:    sbbl 32(%ebp), %esi249; X86-NEXT:    movl 36(%ebp), %esi250; X86-NEXT:    movl 52(%ebp), %ecx251; X86-NEXT:    movl %ecx, %eax252; X86-NEXT:    sbbl %esi, %eax253; X86-NEXT:    cmovbl 24(%ebp), %ebx254; X86-NEXT:    cmovbl 28(%ebp), %edi255; X86-NEXT:    cmovbl 32(%ebp), %edx256; X86-NEXT:    cmovbl %esi, %ecx257; X86-NEXT:    movl 8(%ebp), %eax258; X86-NEXT:    movl %ecx, 12(%eax)259; X86-NEXT:    movl %edx, 8(%eax)260; X86-NEXT:    movl %edi, 4(%eax)261; X86-NEXT:    movl %ebx, (%eax)262; X86-NEXT:    leal -12(%ebp), %esp263; X86-NEXT:    popl %esi264; X86-NEXT:    popl %edi265; X86-NEXT:    popl %ebx266; X86-NEXT:    popl %ebp267; X86-NEXT:    retl $4268  %r = call i128 @llvm.umax.i128(i128 %a, i128 %b)269  ret i128 %r270}271 272define i128 @test_i128_1(i128 %a) nounwind {273; X64-LABEL: test_i128_1:274; X64:       # %bb.0:275; X64-NEXT:    movq %rsi, %rdx276; X64-NEXT:    cmpq $1, %rdi277; X64-NEXT:    movq %rdi, %rcx278; X64-NEXT:    adcq $0, %rcx279; X64-NEXT:    testq %rsi, %rsi280; X64-NEXT:    movl $1, %eax281; X64-NEXT:    cmovneq %rdi, %rax282; X64-NEXT:    cmoveq %rcx, %rax283; X64-NEXT:    retq284;285; X86-LABEL: test_i128_1:286; X86:       # %bb.0:287; X86-NEXT:    pushl %ebp288; X86-NEXT:    movl %esp, %ebp289; X86-NEXT:    pushl %ebx290; X86-NEXT:    pushl %edi291; X86-NEXT:    pushl %esi292; X86-NEXT:    andl $-16, %esp293; X86-NEXT:    subl $16, %esp294; X86-NEXT:    movl 32(%ebp), %edx295; X86-NEXT:    movl 24(%ebp), %eax296; X86-NEXT:    cmpl $1, %eax297; X86-NEXT:    movl %eax, %ecx298; X86-NEXT:    adcl $0, %ecx299; X86-NEXT:    cmpl $0, 28(%ebp)300; X86-NEXT:    movl $1, %esi301; X86-NEXT:    cmovnel %eax, %esi302; X86-NEXT:    cmovel %ecx, %esi303; X86-NEXT:    xorl %edi, %edi304; X86-NEXT:    movl %edx, %ecx305; X86-NEXT:    negl %ecx306; X86-NEXT:    movl 36(%ebp), %ecx307; X86-NEXT:    movl $0, %ebx308; X86-NEXT:    sbbl %ecx, %ebx309; X86-NEXT:    movl $1, %ebx310; X86-NEXT:    cmovbl %eax, %ebx311; X86-NEXT:    cmovbl 28(%ebp), %edi312; X86-NEXT:    movl %edx, %eax313; X86-NEXT:    orl %ecx, %eax314; X86-NEXT:    movl 8(%ebp), %eax315; X86-NEXT:    movl %ecx, 12(%eax)316; X86-NEXT:    movl %edx, 8(%eax)317; X86-NEXT:    cmovel %esi, %ebx318; X86-NEXT:    cmovel 28(%ebp), %edi319; X86-NEXT:    movl %edi, 4(%eax)320; X86-NEXT:    movl %ebx, (%eax)321; X86-NEXT:    leal -12(%ebp), %esp322; X86-NEXT:    popl %esi323; X86-NEXT:    popl %edi324; X86-NEXT:    popl %ebx325; X86-NEXT:    popl %ebp326; X86-NEXT:    retl $4327  %r = call i128 @llvm.umax.i128(i128 %a, i128 1)328  ret i128 %r329}330 331define <2 x i64> @test_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {332; SSE-LABEL: test_v2i64:333; SSE:       # %bb.0:334; SSE-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]335; SSE-NEXT:    movdqa %xmm1, %xmm3336; SSE-NEXT:    pxor %xmm2, %xmm3337; SSE-NEXT:    pxor %xmm0, %xmm2338; SSE-NEXT:    movdqa %xmm2, %xmm4339; SSE-NEXT:    pcmpgtd %xmm3, %xmm4340; SSE-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]341; SSE-NEXT:    pcmpeqd %xmm3, %xmm2342; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]343; SSE-NEXT:    pand %xmm5, %xmm2344; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]345; SSE-NEXT:    por %xmm2, %xmm3346; SSE-NEXT:    pand %xmm3, %xmm0347; SSE-NEXT:    pandn %xmm1, %xmm3348; SSE-NEXT:    por %xmm3, %xmm0349; SSE-NEXT:    retq350;351; AVX1-LABEL: test_v2i64:352; AVX1:       # %bb.0:353; AVX1-NEXT:    vmovddup {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]354; AVX1-NEXT:    # xmm2 = mem[0,0]355; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm3356; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm2357; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2358; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0359; AVX1-NEXT:    retq360;361; AVX2-LABEL: test_v2i64:362; AVX2:       # %bb.0:363; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]364; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm3365; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm2366; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2367; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0368; AVX2-NEXT:    retq369;370; X86-LABEL: test_v2i64:371; X86:       # %bb.0:372; X86-NEXT:    pushl %ebp373; X86-NEXT:    pushl %ebx374; X86-NEXT:    pushl %edi375; X86-NEXT:    pushl %esi376; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx377; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax378; X86-NEXT:    movl {{[0-9]+}}(%esp), %ebx379; X86-NEXT:    movl {{[0-9]+}}(%esp), %ebp380; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx381; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi382; X86-NEXT:    cmpl %ebx, %ecx383; X86-NEXT:    movl %esi, %edi384; X86-NEXT:    sbbl %ebp, %edi385; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi386; X86-NEXT:    cmovbl %ebx, %ecx387; X86-NEXT:    movl {{[0-9]+}}(%esp), %ebx388; X86-NEXT:    cmovbl %ebp, %esi389; X86-NEXT:    cmpl %edx, %edi390; X86-NEXT:    movl %ebx, %ebp391; X86-NEXT:    sbbl %eax, %ebp392; X86-NEXT:    cmovbl %edx, %edi393; X86-NEXT:    cmovbl %eax, %ebx394; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax395; X86-NEXT:    movl %ebx, 12(%eax)396; X86-NEXT:    movl %edi, 8(%eax)397; X86-NEXT:    movl %esi, 4(%eax)398; X86-NEXT:    movl %ecx, (%eax)399; X86-NEXT:    popl %esi400; X86-NEXT:    popl %edi401; X86-NEXT:    popl %ebx402; X86-NEXT:    popl %ebp403; X86-NEXT:    retl $4404  %r = call <2 x i64> @llvm.umax.v2i64(<2 x i64> %a, <2 x i64> %b)405  ret <2 x i64> %r406}407 408define <2 x i64> @test_v2i64_1(<2 x i64> %a) nounwind {409; SSE-LABEL: test_v2i64_1:410; SSE:       # %bb.0:411; SSE-NEXT:    pxor %xmm1, %xmm1412; SSE-NEXT:    pcmpeqd %xmm0, %xmm1413; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm1[1,0,3,2]414; SSE-NEXT:    pand %xmm1, %xmm2415; SSE-NEXT:    psubq %xmm2, %xmm0416; SSE-NEXT:    retq417;418; AVX-LABEL: test_v2i64_1:419; AVX:       # %bb.0:420; AVX-NEXT:    vpxor %xmm1, %xmm1, %xmm1421; AVX-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm1422; AVX-NEXT:    vpsubq %xmm1, %xmm0, %xmm0423; AVX-NEXT:    retq424;425; X86-LABEL: test_v2i64_1:426; X86:       # %bb.0:427; X86-NEXT:    pushl %ebp428; X86-NEXT:    pushl %ebx429; X86-NEXT:    pushl %edi430; X86-NEXT:    pushl %esi431; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax432; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi433; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx434; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx435; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi436; X86-NEXT:    cmpl $1, %ecx437; X86-NEXT:    movl %ecx, %ebx438; X86-NEXT:    adcl $0, %ebx439; X86-NEXT:    testl %esi, %esi440; X86-NEXT:    movl $1, %ebp441; X86-NEXT:    cmovel %ebp, %ecx442; X86-NEXT:    cmovel %ebx, %ecx443; X86-NEXT:    cmpl $1, %edi444; X86-NEXT:    movl %edi, %ebx445; X86-NEXT:    adcl $0, %ebx446; X86-NEXT:    testl %edx, %edx447; X86-NEXT:    cmovnel %edi, %ebp448; X86-NEXT:    cmovel %ebx, %ebp449; X86-NEXT:    movl %edx, 12(%eax)450; X86-NEXT:    movl %ebp, 8(%eax)451; X86-NEXT:    movl %esi, 4(%eax)452; X86-NEXT:    movl %ecx, (%eax)453; X86-NEXT:    popl %esi454; X86-NEXT:    popl %edi455; X86-NEXT:    popl %ebx456; X86-NEXT:    popl %ebp457; X86-NEXT:    retl $4458  %r = call <2 x i64> @llvm.umax.v2i64(<2 x i64> %a, <2 x i64> <i64 1, i64 1>)459  ret <2 x i64> %r460}461 462define <1 x i32> @test_v1i32(<1 x i32> %a, <1 x i32> %b) nounwind {463; X64-LABEL: test_v1i32:464; X64:       # %bb.0:465; X64-NEXT:    movl %esi, %eax466; X64-NEXT:    cmpl %esi, %edi467; X64-NEXT:    cmoval %edi, %eax468; X64-NEXT:    retq469;470; X86-LABEL: test_v1i32:471; X86:       # %bb.0:472; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax473; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx474; X86-NEXT:    cmpl %eax, %ecx475; X86-NEXT:    cmoval %ecx, %eax476; X86-NEXT:    retl477  %r = call <1 x i32> @llvm.umax.v1i32(<1 x i32> %a, <1 x i32> %b)478  ret <1 x i32> %r479}480 481define <2 x i32> @test_v2i32(<2 x i32> %a, <2 x i32> %b) nounwind {482; SSE-LABEL: test_v2i32:483; SSE:       # %bb.0:484; SSE-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]485; SSE-NEXT:    movdqa %xmm1, %xmm3486; SSE-NEXT:    pxor %xmm2, %xmm3487; SSE-NEXT:    pxor %xmm0, %xmm2488; SSE-NEXT:    pcmpgtd %xmm3, %xmm2489; SSE-NEXT:    pand %xmm2, %xmm0490; SSE-NEXT:    pandn %xmm1, %xmm2491; SSE-NEXT:    por %xmm2, %xmm0492; SSE-NEXT:    retq493;494; AVX-LABEL: test_v2i32:495; AVX:       # %bb.0:496; AVX-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0497; AVX-NEXT:    retq498;499; X86-LABEL: test_v2i32:500; X86:       # %bb.0:501; X86-NEXT:    pushl %esi502; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx503; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx504; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax505; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi506; X86-NEXT:    cmpl %eax, %esi507; X86-NEXT:    cmoval %esi, %eax508; X86-NEXT:    cmpl %edx, %ecx509; X86-NEXT:    cmoval %ecx, %edx510; X86-NEXT:    popl %esi511; X86-NEXT:    retl512  %r = call <2 x i32> @llvm.umax.v2i32(<2 x i32> %a, <2 x i32> %b)513  ret <2 x i32> %r514}515 516define <3 x i32> @test_v3i32(<3 x i32> %a, <3 x i32> %b) nounwind {517; SSE-LABEL: test_v3i32:518; SSE:       # %bb.0:519; SSE-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]520; SSE-NEXT:    movdqa %xmm1, %xmm3521; SSE-NEXT:    pxor %xmm2, %xmm3522; SSE-NEXT:    pxor %xmm0, %xmm2523; SSE-NEXT:    pcmpgtd %xmm3, %xmm2524; SSE-NEXT:    pand %xmm2, %xmm0525; SSE-NEXT:    pandn %xmm1, %xmm2526; SSE-NEXT:    por %xmm2, %xmm0527; SSE-NEXT:    retq528;529; AVX-LABEL: test_v3i32:530; AVX:       # %bb.0:531; AVX-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0532; AVX-NEXT:    retq533;534; X86-LABEL: test_v3i32:535; X86:       # %bb.0:536; X86-NEXT:    pushl %ebx537; X86-NEXT:    pushl %edi538; X86-NEXT:    pushl %esi539; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx540; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi541; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx542; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi543; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax544; X86-NEXT:    movl {{[0-9]+}}(%esp), %ebx545; X86-NEXT:    cmpl %eax, %ebx546; X86-NEXT:    cmoval %ebx, %eax547; X86-NEXT:    cmpl %edx, %edi548; X86-NEXT:    cmoval %edi, %edx549; X86-NEXT:    cmpl %ecx, %esi550; X86-NEXT:    cmoval %esi, %ecx551; X86-NEXT:    popl %esi552; X86-NEXT:    popl %edi553; X86-NEXT:    popl %ebx554; X86-NEXT:    retl555  %r = call <3 x i32> @llvm.umax.v3i32(<3 x i32> %a, <3 x i32> %b)556  ret <3 x i32> %r557}558 559define <4 x i32> @test_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {560; SSE-LABEL: test_v4i32:561; SSE:       # %bb.0:562; SSE-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]563; SSE-NEXT:    movdqa %xmm1, %xmm3564; SSE-NEXT:    pxor %xmm2, %xmm3565; SSE-NEXT:    pxor %xmm0, %xmm2566; SSE-NEXT:    pcmpgtd %xmm3, %xmm2567; SSE-NEXT:    pand %xmm2, %xmm0568; SSE-NEXT:    pandn %xmm1, %xmm2569; SSE-NEXT:    por %xmm2, %xmm0570; SSE-NEXT:    retq571;572; AVX-LABEL: test_v4i32:573; AVX:       # %bb.0:574; AVX-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0575; AVX-NEXT:    retq576;577; X86-LABEL: test_v4i32:578; X86:       # %bb.0:579; X86-NEXT:    pushl %edi580; X86-NEXT:    pushl %esi581; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx582; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx583; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi584; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi585; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax586; X86-NEXT:    cmpl %edi, %eax587; X86-NEXT:    cmoval %eax, %edi588; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax589; X86-NEXT:    cmpl %esi, %eax590; X86-NEXT:    cmoval %eax, %esi591; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax592; X86-NEXT:    cmpl %edx, %eax593; X86-NEXT:    cmoval %eax, %edx594; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax595; X86-NEXT:    cmpl %ecx, %eax596; X86-NEXT:    cmoval %eax, %ecx597; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax598; X86-NEXT:    movl %ecx, 12(%eax)599; X86-NEXT:    movl %edx, 8(%eax)600; X86-NEXT:    movl %esi, 4(%eax)601; X86-NEXT:    movl %edi, (%eax)602; X86-NEXT:    popl %esi603; X86-NEXT:    popl %edi604; X86-NEXT:    retl $4605  %r = call <4 x i32> @llvm.umax.v4i32(<4 x i32> %a, <4 x i32> %b)606  ret <4 x i32> %r607}608 609define <4 x i32> @test_v4i32_1(<4 x i32> %a) nounwind {610; SSE-LABEL: test_v4i32_1:611; SSE:       # %bb.0:612; SSE-NEXT:    pxor %xmm1, %xmm1613; SSE-NEXT:    pcmpeqd %xmm0, %xmm1614; SSE-NEXT:    psubd %xmm1, %xmm0615; SSE-NEXT:    retq616;617; AVX1-LABEL: test_v4i32_1:618; AVX1:       # %bb.0:619; AVX1-NEXT:    vpmaxud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0620; AVX1-NEXT:    retq621;622; AVX2-LABEL: test_v4i32_1:623; AVX2:       # %bb.0:624; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [1,1,1,1]625; AVX2-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0626; AVX2-NEXT:    retq627;628; X86-LABEL: test_v4i32_1:629; X86:       # %bb.0:630; X86-NEXT:    pushl %edi631; X86-NEXT:    pushl %esi632; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax633; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi634; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi635; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx636; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx637; X86-NEXT:    cmpl $1, %ecx638; X86-NEXT:    adcl $0, %ecx639; X86-NEXT:    cmpl $1, %edx640; X86-NEXT:    adcl $0, %edx641; X86-NEXT:    cmpl $1, %esi642; X86-NEXT:    adcl $0, %esi643; X86-NEXT:    cmpl $1, %edi644; X86-NEXT:    adcl $0, %edi645; X86-NEXT:    movl %edi, 12(%eax)646; X86-NEXT:    movl %esi, 8(%eax)647; X86-NEXT:    movl %edx, 4(%eax)648; X86-NEXT:    movl %ecx, (%eax)649; X86-NEXT:    popl %esi650; X86-NEXT:    popl %edi651; X86-NEXT:    retl $4652  %r = call <4 x i32> @llvm.umax.v4i32(<4 x i32> %a, <4 x i32> <i32 1, i32 1, i32 1, i32 1>)653  ret <4 x i32> %r654}655 656define <8 x i32> @test_v8i32(<8 x i32> %a, <8 x i32> %b) nounwind {657; SSE-LABEL: test_v8i32:658; SSE:       # %bb.0:659; SSE-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]660; SSE-NEXT:    movdqa %xmm2, %xmm5661; SSE-NEXT:    pxor %xmm4, %xmm5662; SSE-NEXT:    movdqa %xmm0, %xmm6663; SSE-NEXT:    pxor %xmm4, %xmm6664; SSE-NEXT:    pcmpgtd %xmm5, %xmm6665; SSE-NEXT:    pand %xmm6, %xmm0666; SSE-NEXT:    pandn %xmm2, %xmm6667; SSE-NEXT:    por %xmm6, %xmm0668; SSE-NEXT:    movdqa %xmm3, %xmm2669; SSE-NEXT:    pxor %xmm4, %xmm2670; SSE-NEXT:    pxor %xmm1, %xmm4671; SSE-NEXT:    pcmpgtd %xmm2, %xmm4672; SSE-NEXT:    pand %xmm4, %xmm1673; SSE-NEXT:    pandn %xmm3, %xmm4674; SSE-NEXT:    por %xmm4, %xmm1675; SSE-NEXT:    retq676;677; AVX1-LABEL: test_v8i32:678; AVX1:       # %bb.0:679; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2680; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3681; AVX1-NEXT:    vpmaxud %xmm2, %xmm3, %xmm2682; AVX1-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0683; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0684; AVX1-NEXT:    retq685;686; AVX2-LABEL: test_v8i32:687; AVX2:       # %bb.0:688; AVX2-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0689; AVX2-NEXT:    retq690;691; X86-LABEL: test_v8i32:692; X86:       # %bb.0:693; X86-NEXT:    pushl %ebp694; X86-NEXT:    pushl %ebx695; X86-NEXT:    pushl %edi696; X86-NEXT:    pushl %esi697; X86-NEXT:    subl $8, %esp698; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx699; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx700; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi701; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi702; X86-NEXT:    movl {{[0-9]+}}(%esp), %ebx703; X86-NEXT:    movl {{[0-9]+}}(%esp), %ebp704; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax705; X86-NEXT:    cmpl %ebp, %eax706; X86-NEXT:    cmoval %eax, %ebp707; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax708; X86-NEXT:    cmpl %ebx, %eax709; X86-NEXT:    cmoval %eax, %ebx710; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax711; X86-NEXT:    cmpl %edi, %eax712; X86-NEXT:    cmoval %eax, %edi713; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax714; X86-NEXT:    cmpl %esi, %eax715; X86-NEXT:    cmoval %eax, %esi716; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax717; X86-NEXT:    cmpl %edx, %eax718; X86-NEXT:    cmoval %eax, %edx719; X86-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill720; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax721; X86-NEXT:    cmpl %ecx, %eax722; X86-NEXT:    cmoval %eax, %ecx723; X86-NEXT:    movl %ecx, (%esp) # 4-byte Spill724; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx725; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax726; X86-NEXT:    cmpl %edx, %eax727; X86-NEXT:    cmoval %eax, %edx728; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax729; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx730; X86-NEXT:    cmpl %eax, %ecx731; X86-NEXT:    cmoval %ecx, %eax732; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx733; X86-NEXT:    movl %eax, 28(%ecx)734; X86-NEXT:    movl %edx, 24(%ecx)735; X86-NEXT:    movl (%esp), %eax # 4-byte Reload736; X86-NEXT:    movl %eax, 20(%ecx)737; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload738; X86-NEXT:    movl %eax, 16(%ecx)739; X86-NEXT:    movl %esi, 12(%ecx)740; X86-NEXT:    movl %edi, 8(%ecx)741; X86-NEXT:    movl %ebx, 4(%ecx)742; X86-NEXT:    movl %ebp, (%ecx)743; X86-NEXT:    movl %ecx, %eax744; X86-NEXT:    addl $8, %esp745; X86-NEXT:    popl %esi746; X86-NEXT:    popl %edi747; X86-NEXT:    popl %ebx748; X86-NEXT:    popl %ebp749; X86-NEXT:    retl $4750  %r = call <8 x i32> @llvm.umax.v8i32(<8 x i32> %a, <8 x i32> %b)751  ret <8 x i32> %r752}753 754define <8 x i32> @test_v8i32_1(<8 x i32> %a) nounwind {755; SSE-LABEL: test_v8i32_1:756; SSE:       # %bb.0:757; SSE-NEXT:    pxor %xmm2, %xmm2758; SSE-NEXT:    movdqa %xmm0, %xmm3759; SSE-NEXT:    pcmpeqd %xmm2, %xmm3760; SSE-NEXT:    psubd %xmm3, %xmm0761; SSE-NEXT:    pcmpeqd %xmm1, %xmm2762; SSE-NEXT:    psubd %xmm2, %xmm1763; SSE-NEXT:    retq764;765; AVX1-LABEL: test_v8i32_1:766; AVX1:       # %bb.0:767; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1768; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm2 = [1,1,1,1]769; AVX1-NEXT:    vpmaxud %xmm2, %xmm1, %xmm1770; AVX1-NEXT:    vpmaxud %xmm2, %xmm0, %xmm0771; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0772; AVX1-NEXT:    retq773;774; AVX2-LABEL: test_v8i32_1:775; AVX2:       # %bb.0:776; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [1,1,1,1,1,1,1,1]777; AVX2-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0778; AVX2-NEXT:    retq779;780; X86-LABEL: test_v8i32_1:781; X86:       # %bb.0:782; X86-NEXT:    pushl %ebp783; X86-NEXT:    pushl %ebx784; X86-NEXT:    pushl %edi785; X86-NEXT:    pushl %esi786; X86-NEXT:    subl $8, %esp787; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx788; X86-NEXT:    movl {{[0-9]+}}(%esp), %ebp789; X86-NEXT:    movl {{[0-9]+}}(%esp), %ebx790; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi791; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi792; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx793; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax794; X86-NEXT:    cmpl $1, %eax795; X86-NEXT:    adcl $0, %eax796; X86-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill797; X86-NEXT:    cmpl $1, %edx798; X86-NEXT:    adcl $0, %edx799; X86-NEXT:    cmpl $1, %esi800; X86-NEXT:    adcl $0, %esi801; X86-NEXT:    cmpl $1, %edi802; X86-NEXT:    adcl $0, %edi803; X86-NEXT:    cmpl $1, %ebx804; X86-NEXT:    adcl $0, %ebx805; X86-NEXT:    cmpl $1, %ebp806; X86-NEXT:    adcl $0, %ebp807; X86-NEXT:    cmpl $1, %ecx808; X86-NEXT:    adcl $0, %ecx809; X86-NEXT:    movl %ecx, (%esp) # 4-byte Spill810; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax811; X86-NEXT:    cmpl $1, %eax812; X86-NEXT:    adcl $0, %eax813; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx814; X86-NEXT:    movl %eax, 28(%ecx)815; X86-NEXT:    movl (%esp), %eax # 4-byte Reload816; X86-NEXT:    movl %eax, 24(%ecx)817; X86-NEXT:    movl %ebp, 20(%ecx)818; X86-NEXT:    movl %ebx, 16(%ecx)819; X86-NEXT:    movl %edi, 12(%ecx)820; X86-NEXT:    movl %esi, 8(%ecx)821; X86-NEXT:    movl %edx, 4(%ecx)822; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload823; X86-NEXT:    movl %eax, (%ecx)824; X86-NEXT:    movl %ecx, %eax825; X86-NEXT:    addl $8, %esp826; X86-NEXT:    popl %esi827; X86-NEXT:    popl %edi828; X86-NEXT:    popl %ebx829; X86-NEXT:    popl %ebp830; X86-NEXT:    retl $4831  %r = call <8 x i32> @llvm.umax.v8i32(<8 x i32> %a, <8 x i32> <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>)832  ret <8 x i32> %r833}834 835define <8 x i16> @test_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {836; SSE-LABEL: test_v8i16:837; SSE:       # %bb.0:838; SSE-NEXT:    psubusw %xmm0, %xmm1839; SSE-NEXT:    paddw %xmm1, %xmm0840; SSE-NEXT:    retq841;842; AVX-LABEL: test_v8i16:843; AVX:       # %bb.0:844; AVX-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0845; AVX-NEXT:    retq846;847; X86-LABEL: test_v8i16:848; X86:       # %bb.0:849; X86-NEXT:    pushl %ebp850; X86-NEXT:    pushl %ebx851; X86-NEXT:    pushl %edi852; X86-NEXT:    pushl %esi853; X86-NEXT:    subl $8, %esp854; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx855; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx856; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi857; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi858; X86-NEXT:    movl {{[0-9]+}}(%esp), %ebx859; X86-NEXT:    movl {{[0-9]+}}(%esp), %ebp860; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax861; X86-NEXT:    cmpw %bp, %ax862; X86-NEXT:    cmoval %eax, %ebp863; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax864; X86-NEXT:    cmpw %bx, %ax865; X86-NEXT:    cmoval %eax, %ebx866; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax867; X86-NEXT:    cmpw %di, %ax868; X86-NEXT:    cmoval %eax, %edi869; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax870; X86-NEXT:    cmpw %si, %ax871; X86-NEXT:    cmoval %eax, %esi872; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax873; X86-NEXT:    cmpw %dx, %ax874; X86-NEXT:    cmoval %eax, %edx875; X86-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill876; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax877; X86-NEXT:    cmpw %cx, %ax878; X86-NEXT:    cmoval %eax, %ecx879; X86-NEXT:    movl %ecx, (%esp) # 4-byte Spill880; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx881; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax882; X86-NEXT:    cmpw %dx, %ax883; X86-NEXT:    cmoval %eax, %edx884; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax885; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx886; X86-NEXT:    cmpw %ax, %cx887; X86-NEXT:    cmoval %ecx, %eax888; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx889; X86-NEXT:    movw %ax, 14(%ecx)890; X86-NEXT:    movw %dx, 12(%ecx)891; X86-NEXT:    movl (%esp), %eax # 4-byte Reload892; X86-NEXT:    movw %ax, 10(%ecx)893; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload894; X86-NEXT:    movw %ax, 8(%ecx)895; X86-NEXT:    movw %si, 6(%ecx)896; X86-NEXT:    movw %di, 4(%ecx)897; X86-NEXT:    movw %bx, 2(%ecx)898; X86-NEXT:    movw %bp, (%ecx)899; X86-NEXT:    movl %ecx, %eax900; X86-NEXT:    addl $8, %esp901; X86-NEXT:    popl %esi902; X86-NEXT:    popl %edi903; X86-NEXT:    popl %ebx904; X86-NEXT:    popl %ebp905; X86-NEXT:    retl $4906  %r = call <8 x i16> @llvm.umax.v8i16(<8 x i16> %a, <8 x i16> %b)907  ret <8 x i16> %r908}909 910define <8 x i16> @test_v8i16_1(<8 x i16> %a) nounwind {911; SSE-LABEL: test_v8i16_1:912; SSE:       # %bb.0:913; SSE-NEXT:    pxor %xmm1, %xmm1914; SSE-NEXT:    pcmpeqw %xmm0, %xmm1915; SSE-NEXT:    psubw %xmm1, %xmm0916; SSE-NEXT:    retq917;918; AVX-LABEL: test_v8i16_1:919; AVX:       # %bb.0:920; AVX-NEXT:    vpmaxuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0921; AVX-NEXT:    retq922;923; X86-LABEL: test_v8i16_1:924; X86:       # %bb.0:925; X86-NEXT:    pushl %ebp926; X86-NEXT:    pushl %ebx927; X86-NEXT:    pushl %edi928; X86-NEXT:    pushl %esi929; X86-NEXT:    subl $8, %esp930; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax931; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx932; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi933; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi934; X86-NEXT:    movl {{[0-9]+}}(%esp), %ebx935; X86-NEXT:    movl {{[0-9]+}}(%esp), %ebp936; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx937; X86-NEXT:    cmpw $1, %dx938; X86-NEXT:    adcl $0, %edx939; X86-NEXT:    cmpw $1, %bp940; X86-NEXT:    adcl $0, %ebp941; X86-NEXT:    cmpw $1, %bx942; X86-NEXT:    adcl $0, %ebx943; X86-NEXT:    cmpw $1, %di944; X86-NEXT:    adcl $0, %edi945; X86-NEXT:    cmpw $1, %si946; X86-NEXT:    adcl $0, %esi947; X86-NEXT:    cmpw $1, %cx948; X86-NEXT:    adcl $0, %ecx949; X86-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill950; X86-NEXT:    cmpw $1, %ax951; X86-NEXT:    adcl $0, %eax952; X86-NEXT:    movl %eax, (%esp) # 4-byte Spill953; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax954; X86-NEXT:    cmpw $1, %ax955; X86-NEXT:    adcl $0, %eax956; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx957; X86-NEXT:    movw %ax, 14(%ecx)958; X86-NEXT:    movl (%esp), %eax # 4-byte Reload959; X86-NEXT:    movw %ax, 12(%ecx)960; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload961; X86-NEXT:    movw %ax, 10(%ecx)962; X86-NEXT:    movw %si, 8(%ecx)963; X86-NEXT:    movw %di, 6(%ecx)964; X86-NEXT:    movw %bx, 4(%ecx)965; X86-NEXT:    movw %bp, 2(%ecx)966; X86-NEXT:    movw %dx, (%ecx)967; X86-NEXT:    movl %ecx, %eax968; X86-NEXT:    addl $8, %esp969; X86-NEXT:    popl %esi970; X86-NEXT:    popl %edi971; X86-NEXT:    popl %ebx972; X86-NEXT:    popl %ebp973; X86-NEXT:    retl $4974  %r = call <8 x i16> @llvm.umax.v8i16(<8 x i16> %a, <8 x i16> <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>)975  ret <8 x i16> %r976}977 978define <16 x i8> @test_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {979; SSE-LABEL: test_v16i8:980; SSE:       # %bb.0:981; SSE-NEXT:    pmaxub %xmm1, %xmm0982; SSE-NEXT:    retq983;984; AVX-LABEL: test_v16i8:985; AVX:       # %bb.0:986; AVX-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0987; AVX-NEXT:    retq988;989; X86-LABEL: test_v16i8:990; X86:       # %bb.0:991; X86-NEXT:    pushl %ebp992; X86-NEXT:    pushl %ebx993; X86-NEXT:    pushl %edi994; X86-NEXT:    pushl %esi995; X86-NEXT:    subl $40, %esp996; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx997; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx998; X86-NEXT:    movl {{[0-9]+}}(%esp), %ebx999; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1000; X86-NEXT:    cmpb %bl, %al1001; X86-NEXT:    cmoval %eax, %ebx1002; X86-NEXT:    movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1003; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1004; X86-NEXT:    cmpb %dl, %al1005; X86-NEXT:    cmoval %eax, %edx1006; X86-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1007; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1008; X86-NEXT:    cmpb %cl, %al1009; X86-NEXT:    cmoval %eax, %ecx1010; X86-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1011; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx1012; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1013; X86-NEXT:    cmpb %cl, %al1014; X86-NEXT:    cmoval %eax, %ecx1015; X86-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1016; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx1017; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1018; X86-NEXT:    cmpb %cl, %al1019; X86-NEXT:    cmoval %eax, %ecx1020; X86-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1021; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx1022; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1023; X86-NEXT:    cmpb %cl, %al1024; X86-NEXT:    cmoval %eax, %ecx1025; X86-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1026; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx1027; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1028; X86-NEXT:    cmpb %cl, %al1029; X86-NEXT:    cmoval %eax, %ecx1030; X86-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1031; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx1032; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1033; X86-NEXT:    cmpb %cl, %al1034; X86-NEXT:    cmoval %eax, %ecx1035; X86-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1036; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx1037; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1038; X86-NEXT:    cmpb %cl, %al1039; X86-NEXT:    cmoval %eax, %ecx1040; X86-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1041; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx1042; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1043; X86-NEXT:    cmpb %cl, %al1044; X86-NEXT:    cmoval %eax, %ecx1045; X86-NEXT:    movl %ecx, (%esp) # 4-byte Spill1046; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx1047; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1048; X86-NEXT:    cmpb %cl, %al1049; X86-NEXT:    cmoval %eax, %ecx1050; X86-NEXT:    movl %ecx, %ebp1051; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx1052; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1053; X86-NEXT:    cmpb %cl, %al1054; X86-NEXT:    cmoval %eax, %ecx1055; X86-NEXT:    movl %ecx, %edi1056; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx1057; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1058; X86-NEXT:    cmpb %cl, %al1059; X86-NEXT:    cmoval %eax, %ecx1060; X86-NEXT:    movl %ecx, %esi1061; X86-NEXT:    movl {{[0-9]+}}(%esp), %ebx1062; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1063; X86-NEXT:    cmpb %bl, %al1064; X86-NEXT:    cmoval %eax, %ebx1065; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx1066; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1067; X86-NEXT:    cmpb %dl, %al1068; X86-NEXT:    cmoval %eax, %edx1069; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx1070; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1071; X86-NEXT:    cmpb %cl, %al1072; X86-NEXT:    cmoval %eax, %ecx1073; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1074; X86-NEXT:    movb %cl, 15(%eax)1075; X86-NEXT:    movb %dl, 14(%eax)1076; X86-NEXT:    movb %bl, 13(%eax)1077; X86-NEXT:    movl %esi, %ecx1078; X86-NEXT:    movb %cl, 12(%eax)1079; X86-NEXT:    movl %edi, %ecx1080; X86-NEXT:    movb %cl, 11(%eax)1081; X86-NEXT:    movl %ebp, %ecx1082; X86-NEXT:    movb %cl, 10(%eax)1083; X86-NEXT:    movl (%esp), %ecx # 4-byte Reload1084; X86-NEXT:    movb %cl, 9(%eax)1085; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1086; X86-NEXT:    movb %cl, 8(%eax)1087; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1088; X86-NEXT:    movb %cl, 7(%eax)1089; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1090; X86-NEXT:    movb %cl, 6(%eax)1091; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1092; X86-NEXT:    movb %cl, 5(%eax)1093; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1094; X86-NEXT:    movb %cl, 4(%eax)1095; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1096; X86-NEXT:    movb %cl, 3(%eax)1097; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1098; X86-NEXT:    movb %cl, 2(%eax)1099; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1100; X86-NEXT:    movb %cl, 1(%eax)1101; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1102; X86-NEXT:    movb %cl, (%eax)1103; X86-NEXT:    addl $40, %esp1104; X86-NEXT:    popl %esi1105; X86-NEXT:    popl %edi1106; X86-NEXT:    popl %ebx1107; X86-NEXT:    popl %ebp1108; X86-NEXT:    retl $41109  %r = call <16 x i8> @llvm.umax.v16i8(<16 x i8> %a, <16 x i8> %b)1110  ret <16 x i8> %r1111}1112 1113define <16 x i8> @test_v16i8_1(<16 x i8> %a) nounwind {1114; SSE-LABEL: test_v16i8_1:1115; SSE:       # %bb.0:1116; SSE-NEXT:    pmaxub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01117; SSE-NEXT:    retq1118;1119; AVX-LABEL: test_v16i8_1:1120; AVX:       # %bb.0:1121; AVX-NEXT:    vpmaxub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01122; AVX-NEXT:    retq1123;1124; X86-LABEL: test_v16i8_1:1125; X86:       # %bb.0:1126; X86-NEXT:    pushl %ebp1127; X86-NEXT:    pushl %ebx1128; X86-NEXT:    pushl %edi1129; X86-NEXT:    pushl %esi1130; X86-NEXT:    subl $40, %esp1131; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1132; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx1133; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx1134; X86-NEXT:    movl {{[0-9]+}}(%esp), %ebx1135; X86-NEXT:    cmpb $1, %bl1136; X86-NEXT:    adcl $0, %ebx1137; X86-NEXT:    movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1138; X86-NEXT:    cmpb $1, %dl1139; X86-NEXT:    adcl $0, %edx1140; X86-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1141; X86-NEXT:    cmpb $1, %cl1142; X86-NEXT:    adcl $0, %ecx1143; X86-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1144; X86-NEXT:    cmpb $1, %al1145; X86-NEXT:    adcl $0, %eax1146; X86-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1147; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1148; X86-NEXT:    cmpb $1, %al1149; X86-NEXT:    adcl $0, %eax1150; X86-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1151; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1152; X86-NEXT:    cmpb $1, %al1153; X86-NEXT:    adcl $0, %eax1154; X86-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1155; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1156; X86-NEXT:    cmpb $1, %al1157; X86-NEXT:    adcl $0, %eax1158; X86-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1159; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1160; X86-NEXT:    cmpb $1, %al1161; X86-NEXT:    adcl $0, %eax1162; X86-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1163; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1164; X86-NEXT:    cmpb $1, %al1165; X86-NEXT:    adcl $0, %eax1166; X86-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1167; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1168; X86-NEXT:    cmpb $1, %al1169; X86-NEXT:    adcl $0, %eax1170; X86-NEXT:    movl %eax, (%esp) # 4-byte Spill1171; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1172; X86-NEXT:    cmpb $1, %al1173; X86-NEXT:    adcl $0, %eax1174; X86-NEXT:    movl %eax, %ebp1175; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1176; X86-NEXT:    cmpb $1, %al1177; X86-NEXT:    adcl $0, %eax1178; X86-NEXT:    movl %eax, %edi1179; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1180; X86-NEXT:    cmpb $1, %al1181; X86-NEXT:    adcl $0, %eax1182; X86-NEXT:    movl %eax, %esi1183; X86-NEXT:    movl {{[0-9]+}}(%esp), %ebx1184; X86-NEXT:    cmpb $1, %bl1185; X86-NEXT:    adcl $0, %ebx1186; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx1187; X86-NEXT:    cmpb $1, %dl1188; X86-NEXT:    adcl $0, %edx1189; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx1190; X86-NEXT:    cmpb $1, %cl1191; X86-NEXT:    adcl $0, %ecx1192; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1193; X86-NEXT:    movb %cl, 15(%eax)1194; X86-NEXT:    movb %dl, 14(%eax)1195; X86-NEXT:    movb %bl, 13(%eax)1196; X86-NEXT:    movl %esi, %ecx1197; X86-NEXT:    movb %cl, 12(%eax)1198; X86-NEXT:    movl %edi, %ecx1199; X86-NEXT:    movb %cl, 11(%eax)1200; X86-NEXT:    movl %ebp, %ecx1201; X86-NEXT:    movb %cl, 10(%eax)1202; X86-NEXT:    movl (%esp), %ecx # 4-byte Reload1203; X86-NEXT:    movb %cl, 9(%eax)1204; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1205; X86-NEXT:    movb %cl, 8(%eax)1206; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1207; X86-NEXT:    movb %cl, 7(%eax)1208; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1209; X86-NEXT:    movb %cl, 6(%eax)1210; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1211; X86-NEXT:    movb %cl, 5(%eax)1212; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1213; X86-NEXT:    movb %cl, 4(%eax)1214; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1215; X86-NEXT:    movb %cl, 3(%eax)1216; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1217; X86-NEXT:    movb %cl, 2(%eax)1218; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1219; X86-NEXT:    movb %cl, 1(%eax)1220; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1221; X86-NEXT:    movb %cl, (%eax)1222; X86-NEXT:    addl $40, %esp1223; X86-NEXT:    popl %esi1224; X86-NEXT:    popl %edi1225; X86-NEXT:    popl %ebx1226; X86-NEXT:    popl %ebp1227; X86-NEXT:    retl $41228  %r = call <16 x i8> @llvm.umax.v16i8(<16 x i8> %a, <16 x i8> <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>)1229  ret <16 x i8> %r1230}1231 1232define i16 @test_signbits_i16(i16 %a, i16 %b) nounwind {1233; X64-LABEL: test_signbits_i16:1234; X64:       # %bb.0:1235; X64-NEXT:    movswl %si, %eax1236; X64-NEXT:    movswl %di, %ecx1237; X64-NEXT:    shrl $15, %ecx1238; X64-NEXT:    shrl $8, %eax1239; X64-NEXT:    cmpw %ax, %cx1240; X64-NEXT:    cmoval %ecx, %eax1241; X64-NEXT:    # kill: def $ax killed $ax killed $eax1242; X64-NEXT:    retq1243;1244; X86-LABEL: test_signbits_i16:1245; X86:       # %bb.0:1246; X86-NEXT:    movsbl {{[0-9]+}}(%esp), %eax1247; X86-NEXT:    movswl {{[0-9]+}}(%esp), %ecx1248; X86-NEXT:    shrl $15, %ecx1249; X86-NEXT:    cmpw %ax, %cx1250; X86-NEXT:    cmoval %ecx, %eax1251; X86-NEXT:    # kill: def $ax killed $ax killed $eax1252; X86-NEXT:    retl1253  %ax = ashr i16 %a, 151254  %bx = ashr i16 %b, 81255  %r = call i16 @llvm.umax.i16(i16 %ax, i16 %bx)1256  ret i16 %r1257}1258 1259define i32 @test_signbits_i32(i32 %a, i32 %b) nounwind {1260; X64-LABEL: test_signbits_i32:1261; X64:       # %bb.0:1262; X64-NEXT:    movl %esi, %eax1263; X64-NEXT:    sarl $16, %edi1264; X64-NEXT:    sarl $17, %eax1265; X64-NEXT:    cmpl %eax, %edi1266; X64-NEXT:    cmoval %edi, %eax1267; X64-NEXT:    retq1268;1269; X86-LABEL: test_signbits_i32:1270; X86:       # %bb.0:1271; X86-NEXT:    movswl {{[0-9]+}}(%esp), %ecx1272; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1273; X86-NEXT:    sarl $17, %eax1274; X86-NEXT:    cmpl %eax, %ecx1275; X86-NEXT:    cmoval %ecx, %eax1276; X86-NEXT:    retl1277  %ax = ashr i32 %a, 161278  %bx = ashr i32 %b, 171279  %r = call i32 @llvm.umax.i32(i32 %ax, i32 %bx)1280  ret i32 %r1281}1282 1283define i64 @test_signbits_i64(i64 %a, i64 %b) nounwind {1284; X64-LABEL: test_signbits_i64:1285; X64:       # %bb.0:1286; X64-NEXT:    movq %rsi, %rax1287; X64-NEXT:    sarq $32, %rdi1288; X64-NEXT:    sarq $32, %rax1289; X64-NEXT:    cmpq %rax, %rdi1290; X64-NEXT:    cmovaq %rdi, %rax1291; X64-NEXT:    retq1292;1293; X86-LABEL: test_signbits_i64:1294; X86:       # %bb.0:1295; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1296; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx1297; X86-NEXT:    cmpl %eax, %ecx1298; X86-NEXT:    cmoval %ecx, %eax1299; X86-NEXT:    movl %eax, %edx1300; X86-NEXT:    sarl $31, %edx1301; X86-NEXT:    retl1302  %ax = ashr i64 %a, 321303  %bx = ashr i64 %b, 321304  %r = call i64 @llvm.umax.i64(i64 %ax, i64 %bx)1305  ret i64 %r1306}1307 1308define i128 @test_signbits_i128(i128 %a, i128 %b) nounwind {1309; X64-LABEL: test_signbits_i128:1310; X64:       # %bb.0:1311; X64-NEXT:    movq %rcx, %rax1312; X64-NEXT:    sarq $28, %rax1313; X64-NEXT:    cmpq %rax, %rsi1314; X64-NEXT:    cmovaq %rsi, %rax1315; X64-NEXT:    movq %rax, %rdx1316; X64-NEXT:    sarq $63, %rdx1317; X64-NEXT:    retq1318;1319; X86-LABEL: test_signbits_i128:1320; X86:       # %bb.0:1321; X86-NEXT:    pushl %ebp1322; X86-NEXT:    movl %esp, %ebp1323; X86-NEXT:    pushl %edi1324; X86-NEXT:    pushl %esi1325; X86-NEXT:    andl $-16, %esp1326; X86-NEXT:    movl 32(%ebp), %esi1327; X86-NEXT:    movl 36(%ebp), %eax1328; X86-NEXT:    movl 48(%ebp), %ecx1329; X86-NEXT:    movl 52(%ebp), %edx1330; X86-NEXT:    shrdl $28, %edx, %ecx1331; X86-NEXT:    sarl $28, %edx1332; X86-NEXT:    cmpl %esi, %ecx1333; X86-NEXT:    movl %edx, %edi1334; X86-NEXT:    sbbl %eax, %edi1335; X86-NEXT:    cmovbl %esi, %ecx1336; X86-NEXT:    cmovbl %eax, %edx1337; X86-NEXT:    movl 8(%ebp), %eax1338; X86-NEXT:    movl %edx, 4(%eax)1339; X86-NEXT:    movl %ecx, (%eax)1340; X86-NEXT:    sarl $31, %edx1341; X86-NEXT:    movl %edx, 12(%eax)1342; X86-NEXT:    movl %edx, 8(%eax)1343; X86-NEXT:    leal -8(%ebp), %esp1344; X86-NEXT:    popl %esi1345; X86-NEXT:    popl %edi1346; X86-NEXT:    popl %ebp1347; X86-NEXT:    retl $41348  %ax = ashr i128 %a, 641349  %bx = ashr i128 %b, 921350  %r = call i128 @llvm.umax.i128(i128 %ax, i128 %bx)1351  ret i128 %r1352}1353