270 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc < %s -mtriple=x86_64-linux-gnu | FileCheck %s --check-prefixes=X64,DAG-X643; RUN: llc < %s -mtriple=x86_64-linux-gnu -fast-isel | FileCheck %s --check-prefixes=X64,FASTISEL-X644; RUN: llc < %s -mtriple=x86_64-linux-gnu -global-isel -global-isel-abort=1 | FileCheck %s --check-prefixes=GISEL-X645; RUN: llc < %s -mtriple=i686-linux-gnu | FileCheck %s --check-prefixes=X86,DAG-X866; RUN: llc < %s -mtriple=i686-linux-gnu -fast-isel | FileCheck %s --check-prefixes=X86,FASTISEL-X867; RUN: llc < %s -mtriple=i686-linux-gnu -global-isel -global-isel-abort=1 | FileCheck %s --check-prefixes=GISEL-X868 9define i8 @smin_i8(i8 %a, i8 %b) nounwind readnone {10; DAG-X64-LABEL: smin_i8:11; DAG-X64: # %bb.0:12; DAG-X64-NEXT: movl %esi, %eax13; DAG-X64-NEXT: cmpb %al, %dil14; DAG-X64-NEXT: cmovll %edi, %eax15; DAG-X64-NEXT: # kill: def $al killed $al killed $eax16; DAG-X64-NEXT: retq17;18; FASTISEL-X64-LABEL: smin_i8:19; FASTISEL-X64: # %bb.0:20; FASTISEL-X64-NEXT: movzbl %dil, %ecx21; FASTISEL-X64-NEXT: movzbl %sil, %eax22; FASTISEL-X64-NEXT: cmpb %al, %cl23; FASTISEL-X64-NEXT: cmovll %ecx, %eax24; FASTISEL-X64-NEXT: # kill: def $al killed $al killed $eax25; FASTISEL-X64-NEXT: retq26;27; GISEL-X64-LABEL: smin_i8:28; GISEL-X64: # %bb.0:29; GISEL-X64-NEXT: movl %esi, %eax30; GISEL-X64-NEXT: xorl %ecx, %ecx31; GISEL-X64-NEXT: cmpb %al, %dil32; GISEL-X64-NEXT: setl %cl33; GISEL-X64-NEXT: andl $1, %ecx34; GISEL-X64-NEXT: cmovnew %di, %ax35; GISEL-X64-NEXT: # kill: def $al killed $al killed $eax36; GISEL-X64-NEXT: retq37;38; X86-LABEL: smin_i8:39; X86: # %bb.0:40; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx41; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax42; X86-NEXT: cmpb %cl, %al43; X86-NEXT: jl .LBB0_244; X86-NEXT: # %bb.1:45; X86-NEXT: movl %ecx, %eax46; X86-NEXT: .LBB0_2:47; X86-NEXT: retl48;49; GISEL-X86-LABEL: smin_i8:50; GISEL-X86: # %bb.0:51; GISEL-X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx52; GISEL-X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax53; GISEL-X86-NEXT: xorl %edx, %edx54; GISEL-X86-NEXT: cmpb %al, %cl55; GISEL-X86-NEXT: setl %dl56; GISEL-X86-NEXT: andl $1, %edx57; GISEL-X86-NEXT: je .LBB0_258; GISEL-X86-NEXT: # %bb.1:59; GISEL-X86-NEXT: movl %ecx, %eax60; GISEL-X86-NEXT: .LBB0_2:61; GISEL-X86-NEXT: # kill: def $al killed $al killed $eax62; GISEL-X86-NEXT: retl63 %ret = call i8 @llvm.smin.i8(i8 %a, i8 %b)64 ret i8 %ret65}66define i16 @smin_i16(i16 %a, i16 %b) nounwind readnone {67; X64-LABEL: smin_i16:68; X64: # %bb.0:69; X64-NEXT: movl %esi, %eax70; X64-NEXT: cmpw %ax, %di71; X64-NEXT: cmovll %edi, %eax72; X64-NEXT: # kill: def $ax killed $ax killed $eax73; X64-NEXT: retq74;75; GISEL-X64-LABEL: smin_i16:76; GISEL-X64: # %bb.0:77; GISEL-X64-NEXT: movl %edi, %eax78; GISEL-X64-NEXT: xorl %ecx, %ecx79; GISEL-X64-NEXT: cmpw %si, %ax80; GISEL-X64-NEXT: setl %cl81; GISEL-X64-NEXT: andl $1, %ecx82; GISEL-X64-NEXT: cmovew %si, %ax83; GISEL-X64-NEXT: # kill: def $ax killed $ax killed $eax84; GISEL-X64-NEXT: retq85;86; DAG-X86-LABEL: smin_i16:87; DAG-X86: # %bb.0:88; DAG-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx89; DAG-X86-NEXT: movl {{[0-9]+}}(%esp), %eax90; DAG-X86-NEXT: cmpw %cx, %ax91; DAG-X86-NEXT: jl .LBB1_292; DAG-X86-NEXT: # %bb.1:93; DAG-X86-NEXT: movl %ecx, %eax94; DAG-X86-NEXT: .LBB1_2:95; DAG-X86-NEXT: # kill: def $ax killed $ax killed $eax96; DAG-X86-NEXT: retl97;98; FASTISEL-X86-LABEL: smin_i16:99; FASTISEL-X86: # %bb.0:100; FASTISEL-X86-NEXT: movzwl {{[0-9]+}}(%esp), %ecx101; FASTISEL-X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax102; FASTISEL-X86-NEXT: cmpw %cx, %ax103; FASTISEL-X86-NEXT: jl .LBB1_2104; FASTISEL-X86-NEXT: # %bb.1:105; FASTISEL-X86-NEXT: movl %ecx, %eax106; FASTISEL-X86-NEXT: .LBB1_2:107; FASTISEL-X86-NEXT: # kill: def $ax killed $ax killed $eax108; FASTISEL-X86-NEXT: retl109;110; GISEL-X86-LABEL: smin_i16:111; GISEL-X86: # %bb.0:112; GISEL-X86-NEXT: movzwl {{[0-9]+}}(%esp), %ecx113; GISEL-X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax114; GISEL-X86-NEXT: xorl %edx, %edx115; GISEL-X86-NEXT: cmpw %ax, %cx116; GISEL-X86-NEXT: setl %dl117; GISEL-X86-NEXT: andl $1, %edx118; GISEL-X86-NEXT: je .LBB1_2119; GISEL-X86-NEXT: # %bb.1:120; GISEL-X86-NEXT: movl %ecx, %eax121; GISEL-X86-NEXT: .LBB1_2:122; GISEL-X86-NEXT: # kill: def $ax killed $ax killed $eax123; GISEL-X86-NEXT: retl124 %ret = call i16 @llvm.smin.i16(i16 %a, i16 %b)125 ret i16 %ret126}127define i32 @smin_i32(i32 %a, i32 %b) nounwind readnone {128; X64-LABEL: smin_i32:129; X64: # %bb.0:130; X64-NEXT: movl %esi, %eax131; X64-NEXT: cmpl %esi, %edi132; X64-NEXT: cmovll %edi, %eax133; X64-NEXT: retq134;135; GISEL-X64-LABEL: smin_i32:136; GISEL-X64: # %bb.0:137; GISEL-X64-NEXT: movl %edi, %eax138; GISEL-X64-NEXT: xorl %ecx, %ecx139; GISEL-X64-NEXT: cmpl %esi, %edi140; GISEL-X64-NEXT: setl %cl141; GISEL-X64-NEXT: andl $1, %ecx142; GISEL-X64-NEXT: cmovel %esi, %eax143; GISEL-X64-NEXT: retq144;145; X86-LABEL: smin_i32:146; X86: # %bb.0:147; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx148; X86-NEXT: movl {{[0-9]+}}(%esp), %eax149; X86-NEXT: cmpl %ecx, %eax150; X86-NEXT: jl .LBB2_2151; X86-NEXT: # %bb.1:152; X86-NEXT: movl %ecx, %eax153; X86-NEXT: .LBB2_2:154; X86-NEXT: retl155;156; GISEL-X86-LABEL: smin_i32:157; GISEL-X86: # %bb.0:158; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx159; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %eax160; GISEL-X86-NEXT: xorl %edx, %edx161; GISEL-X86-NEXT: cmpl %eax, %ecx162; GISEL-X86-NEXT: setl %dl163; GISEL-X86-NEXT: andl $1, %edx164; GISEL-X86-NEXT: je .LBB2_2165; GISEL-X86-NEXT: # %bb.1:166; GISEL-X86-NEXT: movl %ecx, %eax167; GISEL-X86-NEXT: .LBB2_2:168; GISEL-X86-NEXT: retl169 %ret = call i32 @llvm.smin.i32(i32 %a, i32 %b)170 ret i32 %ret171}172define i64 @smin_i64(i64 %a, i64 %b) nounwind readnone {173; X64-LABEL: smin_i64:174; X64: # %bb.0:175; X64-NEXT: movq %rsi, %rax176; X64-NEXT: cmpq %rsi, %rdi177; X64-NEXT: cmovlq %rdi, %rax178; X64-NEXT: retq179;180; GISEL-X64-LABEL: smin_i64:181; GISEL-X64: # %bb.0:182; GISEL-X64-NEXT: movq %rdi, %rax183; GISEL-X64-NEXT: xorl %ecx, %ecx184; GISEL-X64-NEXT: cmpq %rsi, %rdi185; GISEL-X64-NEXT: setl %cl186; GISEL-X64-NEXT: andl $1, %ecx187; GISEL-X64-NEXT: cmoveq %rsi, %rax188; GISEL-X64-NEXT: retq189;190; DAG-X86-LABEL: smin_i64:191; DAG-X86: # %bb.0:192; DAG-X86-NEXT: pushl %edi193; DAG-X86-NEXT: pushl %esi194; DAG-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx195; DAG-X86-NEXT: movl {{[0-9]+}}(%esp), %esi196; DAG-X86-NEXT: movl {{[0-9]+}}(%esp), %eax197; DAG-X86-NEXT: movl {{[0-9]+}}(%esp), %edx198; DAG-X86-NEXT: cmpl %ecx, %eax199; DAG-X86-NEXT: movl %edx, %edi200; DAG-X86-NEXT: sbbl %esi, %edi201; DAG-X86-NEXT: jl .LBB3_2202; DAG-X86-NEXT: # %bb.1:203; DAG-X86-NEXT: movl %ecx, %eax204; DAG-X86-NEXT: movl %esi, %edx205; DAG-X86-NEXT: .LBB3_2:206; DAG-X86-NEXT: popl %esi207; DAG-X86-NEXT: popl %edi208; DAG-X86-NEXT: retl209;210; FASTISEL-X86-LABEL: smin_i64:211; FASTISEL-X86: # %bb.0:212; FASTISEL-X86-NEXT: pushl %edi213; FASTISEL-X86-NEXT: pushl %esi214; FASTISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx215; FASTISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %esi216; FASTISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %edx217; FASTISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %eax218; FASTISEL-X86-NEXT: cmpl %esi, %eax219; FASTISEL-X86-NEXT: movl %edx, %edi220; FASTISEL-X86-NEXT: sbbl %ecx, %edi221; FASTISEL-X86-NEXT: jl .LBB3_2222; FASTISEL-X86-NEXT: # %bb.1:223; FASTISEL-X86-NEXT: movl %esi, %eax224; FASTISEL-X86-NEXT: movl %ecx, %edx225; FASTISEL-X86-NEXT: .LBB3_2:226; FASTISEL-X86-NEXT: popl %esi227; FASTISEL-X86-NEXT: popl %edi228; FASTISEL-X86-NEXT: retl229;230; GISEL-X86-LABEL: smin_i64:231; GISEL-X86: # %bb.0:232; GISEL-X86-NEXT: pushl %ebp233; GISEL-X86-NEXT: pushl %ebx234; GISEL-X86-NEXT: pushl %edi235; GISEL-X86-NEXT: pushl %esi236; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %esi237; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %ebp238; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %eax239; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %edx240; GISEL-X86-NEXT: cmpl %eax, %esi241; GISEL-X86-NEXT: setb %bl242; GISEL-X86-NEXT: xorl %ecx, %ecx243; GISEL-X86-NEXT: cmpl %edx, %ebp244; GISEL-X86-NEXT: setl %bh245; GISEL-X86-NEXT: sete %cl246; GISEL-X86-NEXT: testl %ecx, %ecx247; GISEL-X86-NEXT: je .LBB3_2248; GISEL-X86-NEXT: # %bb.1:249; GISEL-X86-NEXT: movb %bl, %bh250; GISEL-X86-NEXT: .LBB3_2:251; GISEL-X86-NEXT: movzbl %bh, %edi252; GISEL-X86-NEXT: andl $1, %edi253; GISEL-X86-NEXT: je .LBB3_4254; GISEL-X86-NEXT: # %bb.3:255; GISEL-X86-NEXT: movl %esi, %eax256; GISEL-X86-NEXT: .LBB3_4:257; GISEL-X86-NEXT: testl %edi, %edi258; GISEL-X86-NEXT: je .LBB3_6259; GISEL-X86-NEXT: # %bb.5:260; GISEL-X86-NEXT: movl %ebp, %edx261; GISEL-X86-NEXT: .LBB3_6:262; GISEL-X86-NEXT: popl %esi263; GISEL-X86-NEXT: popl %edi264; GISEL-X86-NEXT: popl %ebx265; GISEL-X86-NEXT: popl %ebp266; GISEL-X86-NEXT: retl267 %ret = call i64 @llvm.smin.i64(i64 %a, i64 %b)268 ret i64 %ret269}270