brintos

brintos / llvm-project-archived public Read only

0
0
Text · 13.7 KiB · 143e10e Raw
465 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-unknown-unknown | FileCheck %s --check-prefixes=X863; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s --check-prefixes=X644 5define i8 @cmov_bsf8(i8 %x, i8 %y) nounwind {6; X86-LABEL: cmov_bsf8:7; X86:       # %bb.0:8; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax9; X86-NEXT:    testb %al, %al10; X86-NEXT:    je .LBB0_111; X86-NEXT:  # %bb.2:12; X86-NEXT:    orl $256, %eax # imm = 0x10013; X86-NEXT:    rep bsfl %eax, %eax14; X86-NEXT:    # kill: def $al killed $al killed $eax15; X86-NEXT:    retl16; X86-NEXT:  .LBB0_1:17; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax18; X86-NEXT:    # kill: def $al killed $al killed $eax19; X86-NEXT:    retl20;21; X64-LABEL: cmov_bsf8:22; X64:       # %bb.0:23; X64-NEXT:    movl %edi, %eax24; X64-NEXT:    orl $256, %eax # imm = 0x10025; X64-NEXT:    rep bsfl %eax, %eax26; X64-NEXT:    testb %dil, %dil27; X64-NEXT:    cmovel %esi, %eax28; X64-NEXT:    # kill: def $al killed $al killed $eax29; X64-NEXT:    retq30  %1 = tail call i8 @llvm.cttz.i8(i8 %x, i1 false)31  %2 = icmp eq i8 %x, 032  %3 = select i1 %2, i8 %y, i8 %133  ret i8 %334}35 36define i8 @cmov_bsf8_undef(i8 %x, i8 %y) nounwind {37; X86-LABEL: cmov_bsf8_undef:38; X86:       # %bb.0:39; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax40; X86-NEXT:    testb %al, %al41; X86-NEXT:    jne .LBB1_142; X86-NEXT:  # %bb.2:43; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax44; X86-NEXT:    # kill: def $al killed $al killed $eax45; X86-NEXT:    retl46; X86-NEXT:  .LBB1_1:47; X86-NEXT:    rep bsfl %eax, %eax48; X86-NEXT:    # kill: def $al killed $al killed $eax49; X86-NEXT:    retl50;51; X64-LABEL: cmov_bsf8_undef:52; X64:       # %bb.0:53; X64-NEXT:    rep bsfl %edi, %eax54; X64-NEXT:    testb %dil, %dil55; X64-NEXT:    cmovel %esi, %eax56; X64-NEXT:    # kill: def $al killed $al killed $eax57; X64-NEXT:    retq58  %1 = tail call i8 @llvm.cttz.i8(i8 %x, i1 true)59  %2 = icmp ne i8 %x, 060  %3 = select i1 %2, i8 %1, i8 %y61  ret i8 %362}63 64define i16 @cmov_bsf16(i16 %x, i16 %y) nounwind {65; X86-LABEL: cmov_bsf16:66; X86:       # %bb.0:67; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax68; X86-NEXT:    testw %ax, %ax69; X86-NEXT:    jne .LBB2_170; X86-NEXT:  # %bb.2:71; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax72; X86-NEXT:    # kill: def $ax killed $ax killed $eax73; X86-NEXT:    retl74; X86-NEXT:  .LBB2_1:75; X86-NEXT:    orl $65536, %eax # imm = 0x1000076; X86-NEXT:    rep bsfl %eax, %eax77; X86-NEXT:    # kill: def $ax killed $ax killed $eax78; X86-NEXT:    retl79;80; X64-LABEL: cmov_bsf16:81; X64:       # %bb.0:82; X64-NEXT:    movl %edi, %eax83; X64-NEXT:    orl $65536, %eax # imm = 0x1000084; X64-NEXT:    rep bsfl %eax, %eax85; X64-NEXT:    testw %di, %di86; X64-NEXT:    cmovel %esi, %eax87; X64-NEXT:    # kill: def $ax killed $ax killed $eax88; X64-NEXT:    retq89  %1 = tail call i16 @llvm.cttz.i16(i16 %x, i1 false)90  %2 = icmp ne i16 %x, 091  %3 = select i1 %2, i16 %1, i16 %y92  ret i16 %393}94 95define i16 @cmov_bsf16_undef(i16 %x, i16 %y) nounwind {96; X86-LABEL: cmov_bsf16_undef:97; X86:       # %bb.0:98; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax99; X86-NEXT:    testw %ax, %ax100; X86-NEXT:    je .LBB3_1101; X86-NEXT:  # %bb.2:102; X86-NEXT:    rep bsfl %eax, %eax103; X86-NEXT:    # kill: def $ax killed $ax killed $eax104; X86-NEXT:    retl105; X86-NEXT:  .LBB3_1:106; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax107; X86-NEXT:    # kill: def $ax killed $ax killed $eax108; X86-NEXT:    retl109;110; X64-LABEL: cmov_bsf16_undef:111; X64:       # %bb.0:112; X64-NEXT:    rep bsfl %edi, %eax113; X64-NEXT:    testw %di, %di114; X64-NEXT:    cmovel %esi, %eax115; X64-NEXT:    # kill: def $ax killed $ax killed $eax116; X64-NEXT:    retq117  %1 = tail call i16 @llvm.cttz.i16(i16 %x, i1 true)118  %2 = icmp eq i16 %x, 0119  %3 = select i1 %2, i16 %y, i16 %1120  ret i16 %3121}122 123define i32 @cmov_bsf32(i32 %x, i32 %y) nounwind {124; X86-LABEL: cmov_bsf32:125; X86:       # %bb.0:126; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx127; X86-NEXT:    testl %ecx, %ecx128; X86-NEXT:    je .LBB4_1129; X86-NEXT:  # %bb.2: # %cond.false130; X86-NEXT:    rep bsfl %ecx, %eax131; X86-NEXT:    testl %ecx, %ecx132; X86-NEXT:    jne .LBB4_5133; X86-NEXT:  .LBB4_4:134; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax135; X86-NEXT:  .LBB4_5: # %cond.end136; X86-NEXT:    retl137; X86-NEXT:  .LBB4_1:138; X86-NEXT:    movl $32, %eax139; X86-NEXT:    testl %ecx, %ecx140; X86-NEXT:    je .LBB4_4141; X86-NEXT:    jmp .LBB4_5142;143; X64-LABEL: cmov_bsf32:144; X64:       # %bb.0:145; X64-NEXT:    movl $32, %eax146; X64-NEXT:    bsfl %edi, %eax147; X64-NEXT:    cmovel %esi, %eax148; X64-NEXT:    retq149  %1 = tail call i32 @llvm.cttz.i32(i32 %x, i1 false)150  %2 = icmp eq i32 %x, 0151  %3 = select i1 %2, i32 %y, i32 %1152  ret i32 %3153}154 155define i32 @cmov_bsf32_undef(i32 %x, i32 %y) nounwind {156; X86-LABEL: cmov_bsf32_undef:157; X86:       # %bb.0:158; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax159; X86-NEXT:    testl %eax, %eax160; X86-NEXT:    jne .LBB5_1161; X86-NEXT:  # %bb.2:162; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax163; X86-NEXT:    retl164; X86-NEXT:  .LBB5_1:165; X86-NEXT:    rep bsfl %eax, %eax166; X86-NEXT:    retl167;168; X64-LABEL: cmov_bsf32_undef:169; X64:       # %bb.0:170; X64-NEXT:    bsfl %edi, %eax171; X64-NEXT:    cmovel %esi, %eax172; X64-NEXT:    retq173  %1 = tail call i32 @llvm.cttz.i32(i32 %x, i1 true)174  %2 = icmp ne i32 %x, 0175  %3 = select i1 %2, i32 %1, i32 %y176  ret i32 %3177}178 179define i64 @cmov_bsf64(i64 %x, i64 %y) nounwind {180; X86-LABEL: cmov_bsf64:181; X86:       # %bb.0:182; X86-NEXT:    pushl %esi183; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx184; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi185; X86-NEXT:    xorl %edx, %edx186; X86-NEXT:    movl %esi, %eax187; X86-NEXT:    orl %ecx, %eax188; X86-NEXT:    je .LBB6_1189; X86-NEXT:  # %bb.2: # %cond.false190; X86-NEXT:    testl %esi, %esi191; X86-NEXT:    jne .LBB6_3192; X86-NEXT:  # %bb.4: # %cond.false193; X86-NEXT:    rep bsfl %ecx, %eax194; X86-NEXT:    addl $32, %eax195; X86-NEXT:    orl %ecx, %esi196; X86-NEXT:    je .LBB6_6197; X86-NEXT:    jmp .LBB6_7198; X86-NEXT:  .LBB6_1:199; X86-NEXT:    movl $64, %eax200; X86-NEXT:    orl %ecx, %esi201; X86-NEXT:    jne .LBB6_7202; X86-NEXT:  .LBB6_6: # %cond.end203; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx204; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax205; X86-NEXT:  .LBB6_7: # %cond.end206; X86-NEXT:    popl %esi207; X86-NEXT:    retl208; X86-NEXT:  .LBB6_3:209; X86-NEXT:    rep bsfl %esi, %eax210; X86-NEXT:    orl %ecx, %esi211; X86-NEXT:    je .LBB6_6212; X86-NEXT:    jmp .LBB6_7213;214; X64-LABEL: cmov_bsf64:215; X64:       # %bb.0:216; X64-NEXT:    movl $64, %eax217; X64-NEXT:    bsfq %rdi, %rax218; X64-NEXT:    cmoveq %rsi, %rax219; X64-NEXT:    retq220  %1 = tail call i64 @llvm.cttz.i64(i64 %x, i1 false)221  %2 = icmp ne i64 %x, 0222  %3 = select i1 %2, i64 %1, i64 %y223  ret i64 %3224}225 226define i64 @cmov_bsf64_undef(i64 %x, i64 %y) nounwind {227; X86-LABEL: cmov_bsf64_undef:228; X86:       # %bb.0:229; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax230; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx231; X86-NEXT:    movl %ecx, %edx232; X86-NEXT:    orl %eax, %edx233; X86-NEXT:    je .LBB7_5234; X86-NEXT:  # %bb.1: # %select.false.sink235; X86-NEXT:    testl %ecx, %ecx236; X86-NEXT:    jne .LBB7_2237; X86-NEXT:  # %bb.3: # %select.false.sink238; X86-NEXT:    rep bsfl %eax, %eax239; X86-NEXT:    addl $32, %eax240; X86-NEXT:    xorl %edx, %edx241; X86-NEXT:    retl242; X86-NEXT:  .LBB7_5: # %select.end243; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx244; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax245; X86-NEXT:    retl246; X86-NEXT:  .LBB7_2:247; X86-NEXT:    rep bsfl %ecx, %eax248; X86-NEXT:    xorl %edx, %edx249; X86-NEXT:    retl250;251; X64-LABEL: cmov_bsf64_undef:252; X64:       # %bb.0:253; X64-NEXT:    bsfq %rdi, %rax254; X64-NEXT:    cmoveq %rsi, %rax255; X64-NEXT:    retq256  %1 = tail call i64 @llvm.cttz.i64(i64 %x, i1 true)257  %2 = icmp eq i64 %x, 0258  %3 = select i1 %2, i64 %y, i64 %1259  ret i64 %3260}261 262define i128 @cmov_bsf128(i128 %x, i128 %y) nounwind {263; X86-LABEL: cmov_bsf128:264; X86:       # %bb.0:265; X86-NEXT:    pushl %ebp266; X86-NEXT:    movl %esp, %ebp267; X86-NEXT:    pushl %ebx268; X86-NEXT:    pushl %edi269; X86-NEXT:    pushl %esi270; X86-NEXT:    andl $-16, %esp271; X86-NEXT:    subl $16, %esp272; X86-NEXT:    movl 32(%ebp), %edi273; X86-NEXT:    movl 24(%ebp), %ecx274; X86-NEXT:    movl 36(%ebp), %ebx275; X86-NEXT:    movl 28(%ebp), %esi276; X86-NEXT:    movl %esi, %eax277; X86-NEXT:    orl %ebx, %eax278; X86-NEXT:    movl %ecx, %edx279; X86-NEXT:    orl %edi, %edx280; X86-NEXT:    orl %eax, %edx281; X86-NEXT:    je .LBB8_1282; X86-NEXT:  # %bb.2: # %cond.false283; X86-NEXT:    testl %ecx, %ecx284; X86-NEXT:    jne .LBB8_3285; X86-NEXT:  # %bb.4: # %cond.false286; X86-NEXT:    rep bsfl %esi, %eax287; X86-NEXT:    addl $32, %eax288; X86-NEXT:    jmp .LBB8_5289; X86-NEXT:  .LBB8_1:290; X86-NEXT:    movl %ebx, %eax291; X86-NEXT:    xorl %edi, %edi292; X86-NEXT:    movl $128, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill293; X86-NEXT:    jmp .LBB8_11294; X86-NEXT:  .LBB8_3:295; X86-NEXT:    rep bsfl %ecx, %eax296; X86-NEXT:  .LBB8_5: # %cond.false297; X86-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill298; X86-NEXT:    testl %edi, %edi299; X86-NEXT:    jne .LBB8_6300; X86-NEXT:  # %bb.7: # %cond.false301; X86-NEXT:    rep bsfl %ebx, %edx302; X86-NEXT:    addl $32, %edx303; X86-NEXT:    jmp .LBB8_8304; X86-NEXT:  .LBB8_6:305; X86-NEXT:    rep bsfl %edi, %edx306; X86-NEXT:  .LBB8_8: # %cond.false307; X86-NEXT:    movl %ebx, %eax308; X86-NEXT:    movl %ecx, %edi309; X86-NEXT:    orl %esi, %edi310; X86-NEXT:    jne .LBB8_10311; X86-NEXT:  # %bb.9: # %cond.false312; X86-NEXT:    addl $64, %edx313; X86-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill314; X86-NEXT:  .LBB8_10: # %cond.false315; X86-NEXT:    xorl %edi, %edi316; X86-NEXT:  .LBB8_11: # %cond.end317; X86-NEXT:    xorl %edx, %edx318; X86-NEXT:    xorl %ebx, %ebx319; X86-NEXT:    orl 32(%ebp), %ecx320; X86-NEXT:    orl %eax, %esi321; X86-NEXT:    orl %ecx, %esi322; X86-NEXT:    je .LBB8_12323; X86-NEXT:  # %bb.13: # %cond.end324; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload325; X86-NEXT:    jmp .LBB8_14326; X86-NEXT:  .LBB8_12:327; X86-NEXT:    movl 52(%ebp), %ebx328; X86-NEXT:    movl 48(%ebp), %edx329; X86-NEXT:    movl 44(%ebp), %edi330; X86-NEXT:    movl 40(%ebp), %ecx331; X86-NEXT:  .LBB8_14: # %cond.end332; X86-NEXT:    movl 8(%ebp), %eax333; X86-NEXT:    movl %ebx, 12(%eax)334; X86-NEXT:    movl %edx, 8(%eax)335; X86-NEXT:    movl %edi, 4(%eax)336; X86-NEXT:    movl %ecx, (%eax)337; X86-NEXT:    leal -12(%ebp), %esp338; X86-NEXT:    popl %esi339; X86-NEXT:    popl %edi340; X86-NEXT:    popl %ebx341; X86-NEXT:    popl %ebp342; X86-NEXT:    retl $4343;344; X64-LABEL: cmov_bsf128:345; X64:       # %bb.0:346; X64-NEXT:    movq %rdi, %rax347; X64-NEXT:    orq %rsi, %rax348; X64-NEXT:    je .LBB8_2349; X64-NEXT:  # %bb.1: # %select.false.sink350; X64-NEXT:    rep bsfq %rdi, %rcx351; X64-NEXT:    movl $64, %eax352; X64-NEXT:    rep bsfq %rsi, %rax353; X64-NEXT:    addq $64, %rax354; X64-NEXT:    testq %rdi, %rdi355; X64-NEXT:    cmovneq %rcx, %rax356; X64-NEXT:    xorl %edx, %edx357; X64-NEXT:    retq358; X64-NEXT:  .LBB8_2: # %select.end359; X64-NEXT:    movq %rdx, %rax360; X64-NEXT:    movq %rcx, %rdx361; X64-NEXT:    retq362  %1 = tail call i128 @llvm.cttz.i128(i128 %x, i1 false)363  %2 = icmp eq i128 %x, 0364  %3 = select i1 %2, i128 %y, i128 %1365  ret i128 %3366}367 368define i128 @cmov_bsf128_undef(i128 %x, i128 %y) nounwind {369; X86-LABEL: cmov_bsf128_undef:370; X86:       # %bb.0:371; X86-NEXT:    pushl %ebp372; X86-NEXT:    movl %esp, %ebp373; X86-NEXT:    pushl %ebx374; X86-NEXT:    pushl %edi375; X86-NEXT:    pushl %esi376; X86-NEXT:    andl $-16, %esp377; X86-NEXT:    subl $16, %esp378; X86-NEXT:    movl 36(%ebp), %esi379; X86-NEXT:    movl 32(%ebp), %edi380; X86-NEXT:    movl 28(%ebp), %ecx381; X86-NEXT:    movl 24(%ebp), %edx382; X86-NEXT:    movl %ecx, %eax383; X86-NEXT:    orl %esi, %eax384; X86-NEXT:    movl %edx, %ebx385; X86-NEXT:    orl %edi, %ebx386; X86-NEXT:    orl %eax, %ebx387; X86-NEXT:    movl 8(%ebp), %eax388; X86-NEXT:    je .LBB9_11389; X86-NEXT:  # %bb.1: # %select.true.sink390; X86-NEXT:    testl %edx, %edx391; X86-NEXT:    jne .LBB9_2392; X86-NEXT:  # %bb.3: # %select.true.sink393; X86-NEXT:    rep bsfl %ecx, %ebx394; X86-NEXT:    addl $32, %ebx395; X86-NEXT:    testl %edi, %edi396; X86-NEXT:    je .LBB9_6397; X86-NEXT:  .LBB9_5:398; X86-NEXT:    rep bsfl %edi, %esi399; X86-NEXT:    orl %ecx, %edx400; X86-NEXT:    je .LBB9_8401; X86-NEXT:    jmp .LBB9_9402; X86-NEXT:  .LBB9_11: # %select.end403; X86-NEXT:    movl 52(%ebp), %ecx404; X86-NEXT:    movl 48(%ebp), %edx405; X86-NEXT:    movl 44(%ebp), %esi406; X86-NEXT:    movl 40(%ebp), %edi407; X86-NEXT:    movl %edi, (%eax)408; X86-NEXT:    movl %esi, 4(%eax)409; X86-NEXT:    movl %edx, 8(%eax)410; X86-NEXT:    movl %ecx, 12(%eax)411; X86-NEXT:    jmp .LBB9_10412; X86-NEXT:  .LBB9_2:413; X86-NEXT:    rep bsfl %edx, %ebx414; X86-NEXT:    testl %edi, %edi415; X86-NEXT:    jne .LBB9_5416; X86-NEXT:  .LBB9_6: # %select.true.sink417; X86-NEXT:    rep bsfl %esi, %esi418; X86-NEXT:    addl $32, %esi419; X86-NEXT:    orl %ecx, %edx420; X86-NEXT:    jne .LBB9_9421; X86-NEXT:  .LBB9_8: # %select.true.sink422; X86-NEXT:    addl $64, %esi423; X86-NEXT:    movl %esi, %ebx424; X86-NEXT:  .LBB9_9: # %select.true.sink425; X86-NEXT:    movl %ebx, (%eax)426; X86-NEXT:    movl $0, 12(%eax)427; X86-NEXT:    movl $0, 8(%eax)428; X86-NEXT:    movl $0, 4(%eax)429; X86-NEXT:  .LBB9_10: # %select.true.sink430; X86-NEXT:    leal -12(%ebp), %esp431; X86-NEXT:    popl %esi432; X86-NEXT:    popl %edi433; X86-NEXT:    popl %ebx434; X86-NEXT:    popl %ebp435; X86-NEXT:    retl $4436;437; X64-LABEL: cmov_bsf128_undef:438; X64:       # %bb.0:439; X64-NEXT:    movq %rdi, %rax440; X64-NEXT:    orq %rsi, %rax441; X64-NEXT:    je .LBB9_2442; X64-NEXT:  # %bb.1: # %select.true.sink443; X64-NEXT:    rep bsfq %rdi, %rcx444; X64-NEXT:    rep bsfq %rsi, %rax445; X64-NEXT:    addq $64, %rax446; X64-NEXT:    testq %rdi, %rdi447; X64-NEXT:    cmovneq %rcx, %rax448; X64-NEXT:    xorl %edx, %edx449; X64-NEXT:    retq450; X64-NEXT:  .LBB9_2: # %select.end451; X64-NEXT:    movq %rdx, %rax452; X64-NEXT:    movq %rcx, %rdx453; X64-NEXT:    retq454  %1 = tail call i128 @llvm.cttz.i128(i128 %x, i1 true)455  %2 = icmp ne i128 %x, 0456  %3 = select i1 %2, i128 %1, i128 %y457  ret i128 %3458}459 460declare i8 @llvm.cttz.i8(i8, i1)461declare i16 @llvm.cttz.i16(i16, i1)462declare i32 @llvm.cttz.i32(i32, i1)463declare i64 @llvm.cttz.i64(i64, i1)464declare i128 @llvm.cttz.i128(i128, i1)465