brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.0 KiB · 5d22302 Raw
230 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-prefix=X863; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+cmov | FileCheck %s --check-prefix=X644 5;6; PR48768 - 'xor' clears the overflow flag, so we don't need a separate 'test'.7;8 9define i8 @xor_i8_ri(i8 zeroext %0, i8 zeroext %1) {10; X86-LABEL: xor_i8_ri:11; X86:       # %bb.0:12; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax13; X86-NEXT:    movl %eax, %ecx14; X86-NEXT:    xorb $-17, %cl15; X86-NEXT:    je .LBB0_216; X86-NEXT:  # %bb.1:17; X86-NEXT:    movl %ecx, %eax18; X86-NEXT:  .LBB0_2:19; X86-NEXT:    retl20;21; X64-LABEL: xor_i8_ri:22; X64:       # %bb.0:23; X64-NEXT:    movl %edi, %eax24; X64-NEXT:    xorb $-17, %al25; X64-NEXT:    movzbl %al, %eax26; X64-NEXT:    cmovel %edi, %eax27; X64-NEXT:    # kill: def $al killed $al killed $eax28; X64-NEXT:    retq29  %3 = xor i8 %0, -1730  %4 = icmp eq i8 %3, 031  %5 = select i1 %4, i8 %0, i8 %332  ret i8 %533}34 35define i8 @xor_i8_rr(i8 zeroext %0, i8 zeroext %1) {36; X86-LABEL: xor_i8_rr:37; X86:       # %bb.0:38; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax39; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx40; X86-NEXT:    xorb %al, %cl41; X86-NEXT:    je .LBB1_242; X86-NEXT:  # %bb.1:43; X86-NEXT:    movl %ecx, %eax44; X86-NEXT:  .LBB1_2:45; X86-NEXT:    retl46;47; X64-LABEL: xor_i8_rr:48; X64:       # %bb.0:49; X64-NEXT:    movl %esi, %eax50; X64-NEXT:    xorl %edi, %eax51; X64-NEXT:    cmovel %edi, %eax52; X64-NEXT:    # kill: def $al killed $al killed $eax53; X64-NEXT:    retq54  %3 = xor i8 %1, %055  %4 = icmp eq i8 %3, 056  %5 = select i1 %4, i8 %0, i8 %357  ret i8 %558}59 60define i16 @xor_i16_ri(i16 zeroext %0, i16 zeroext %1) {61; X86-LABEL: xor_i16_ri:62; X86:       # %bb.0:63; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax64; X86-NEXT:    movl %eax, %ecx65; X86-NEXT:    xorl $65519, %ecx # imm = 0xFFEF66; X86-NEXT:    testw %cx, %cx67; X86-NEXT:    je .LBB2_268; X86-NEXT:  # %bb.1:69; X86-NEXT:    movl %ecx, %eax70; X86-NEXT:  .LBB2_2:71; X86-NEXT:    # kill: def $ax killed $ax killed $eax72; X86-NEXT:    retl73;74; X64-LABEL: xor_i16_ri:75; X64:       # %bb.0:76; X64-NEXT:    movl %edi, %eax77; X64-NEXT:    xorl $65519, %eax # imm = 0xFFEF78; X64-NEXT:    cmovel %edi, %eax79; X64-NEXT:    # kill: def $ax killed $ax killed $eax80; X64-NEXT:    retq81  %3 = xor i16 %0, -1782  %4 = icmp eq i16 %3, 083  %5 = select i1 %4, i16 %0, i16 %384  ret i16 %585}86 87define i16 @xor_i16_rr(i16 zeroext %0, i16 zeroext %1) {88; X86-LABEL: xor_i16_rr:89; X86:       # %bb.0:90; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax91; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx92; X86-NEXT:    xorw %ax, %cx93; X86-NEXT:    je .LBB3_294; X86-NEXT:  # %bb.1:95; X86-NEXT:    movl %ecx, %eax96; X86-NEXT:  .LBB3_2:97; X86-NEXT:    # kill: def $ax killed $ax killed $eax98; X86-NEXT:    retl99;100; X64-LABEL: xor_i16_rr:101; X64:       # %bb.0:102; X64-NEXT:    movl %esi, %eax103; X64-NEXT:    xorl %edi, %eax104; X64-NEXT:    cmovel %edi, %eax105; X64-NEXT:    # kill: def $ax killed $ax killed $eax106; X64-NEXT:    retq107  %3 = xor i16 %1, %0108  %4 = icmp eq i16 %3, 0109  %5 = select i1 %4, i16 %0, i16 %3110  ret i16 %5111}112 113define i32 @xor_i32_ri(i32 %0, i32 %1) {114; X86-LABEL: xor_i32_ri:115; X86:       # %bb.0:116; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax117; X86-NEXT:    movl %eax, %ecx118; X86-NEXT:    xorl $-17, %ecx119; X86-NEXT:    jle .LBB4_2120; X86-NEXT:  # %bb.1:121; X86-NEXT:    movl %ecx, %eax122; X86-NEXT:  .LBB4_2:123; X86-NEXT:    retl124;125; X64-LABEL: xor_i32_ri:126; X64:       # %bb.0:127; X64-NEXT:    movl %edi, %eax128; X64-NEXT:    xorl $-17, %eax129; X64-NEXT:    cmovlel %edi, %eax130; X64-NEXT:    retq131  %3 = xor i32 %0, -17132  %4 = icmp slt i32 %3, 1133  %5 = select i1 %4, i32 %0, i32 %3134  ret i32 %5135}136 137define i32 @xor_i32_rr(i32 %0, i32 %1) {138; X86-LABEL: xor_i32_rr:139; X86:       # %bb.0:140; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax141; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx142; X86-NEXT:    xorl %eax, %ecx143; X86-NEXT:    jle .LBB5_2144; X86-NEXT:  # %bb.1:145; X86-NEXT:    movl %ecx, %eax146; X86-NEXT:  .LBB5_2:147; X86-NEXT:    retl148;149; X64-LABEL: xor_i32_rr:150; X64:       # %bb.0:151; X64-NEXT:    movl %esi, %eax152; X64-NEXT:    xorl %edi, %eax153; X64-NEXT:    cmovlel %edi, %eax154; X64-NEXT:    retq155  %3 = xor i32 %1, %0156  %4 = icmp slt i32 %3, 1157  %5 = select i1 %4, i32 %0, i32 %3158  ret i32 %5159}160 161define i64 @xor_i64_ri(i64 %0, i64 %1) nounwind {162; X86-LABEL: xor_i64_ri:163; X86:       # %bb.0:164; X86-NEXT:    pushl %edi165; X86-NEXT:    pushl %esi166; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax167; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx168; X86-NEXT:    movl %edx, %ecx169; X86-NEXT:    notl %ecx170; X86-NEXT:    movl %eax, %esi171; X86-NEXT:    xorl $-17, %esi172; X86-NEXT:    cmpl $1, %esi173; X86-NEXT:    movl %ecx, %edi174; X86-NEXT:    sbbl $0, %edi175; X86-NEXT:    jl .LBB6_2176; X86-NEXT:  # %bb.1:177; X86-NEXT:    movl %esi, %eax178; X86-NEXT:    movl %ecx, %edx179; X86-NEXT:  .LBB6_2:180; X86-NEXT:    popl %esi181; X86-NEXT:    popl %edi182; X86-NEXT:    retl183;184; X64-LABEL: xor_i64_ri:185; X64:       # %bb.0:186; X64-NEXT:    movq %rdi, %rax187; X64-NEXT:    xorq $-17, %rax188; X64-NEXT:    cmovleq %rdi, %rax189; X64-NEXT:    retq190  %3 = xor i64 %0, -17191  %4 = icmp slt i64 %3, 1192  %5 = select i1 %4, i64 %0, i64 %3193  ret i64 %5194}195 196define i64 @xor_i64_rr(i64 %0, i64 %1) nounwind {197; X86-LABEL: xor_i64_rr:198; X86:       # %bb.0:199; X86-NEXT:    pushl %edi200; X86-NEXT:    pushl %esi201; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax202; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx203; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx204; X86-NEXT:    xorl %edx, %ecx205; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi206; X86-NEXT:    xorl %eax, %esi207; X86-NEXT:    cmpl $1, %esi208; X86-NEXT:    movl %ecx, %edi209; X86-NEXT:    sbbl $0, %edi210; X86-NEXT:    jl .LBB7_2211; X86-NEXT:  # %bb.1:212; X86-NEXT:    movl %esi, %eax213; X86-NEXT:    movl %ecx, %edx214; X86-NEXT:  .LBB7_2:215; X86-NEXT:    popl %esi216; X86-NEXT:    popl %edi217; X86-NEXT:    retl218;219; X64-LABEL: xor_i64_rr:220; X64:       # %bb.0:221; X64-NEXT:    movq %rsi, %rax222; X64-NEXT:    xorq %rdi, %rax223; X64-NEXT:    cmovleq %rdi, %rax224; X64-NEXT:    retq225  %3 = xor i64 %1, %0226  %4 = icmp slt i64 %3, 1227  %5 = select i1 %4, i64 %0, i64 %3228  ret i64 %5229}230