brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.9 KiB · 02078c3 Raw
270 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=i686-unknown-linux-gnu < %s | FileCheck %s --check-prefixes=X863; RUN: llc -mtriple=x86_64-unknown-linux-gnu < %s | FileCheck %s --check-prefixes=X644 5declare i64 @llvm.abs.i64(i64, i1)6declare <2 x i64> @llvm.abs.2xi64(<2 x i64>, i1)7declare i32 @llvm.abs.i32(i32, i1)8declare i16 @llvm.abs.i16(i16, i1)9declare i8 @llvm.abs.i8(i8, i1)10 11define i1 @eq_pow_or(i32 %0) nounwind {12; X86-LABEL: eq_pow_or:13; X86:       # %bb.0:14; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax15; X86-NEXT:    addl $32, %eax16; X86-NEXT:    testl $-65, %eax17; X86-NEXT:    sete %al18; X86-NEXT:    retl19;20; X64-LABEL: eq_pow_or:21; X64:       # %bb.0:22; X64-NEXT:    addl $32, %edi23; X64-NEXT:    testl $-65, %edi24; X64-NEXT:    sete %al25; X64-NEXT:    retq26  %2 = icmp eq i32 %0, 3227  %3 = icmp eq i32 %0, -3228  %4 = or i1 %2, %329  ret i1 %430}31 32define i1 @ne_pow_and(i8 %0) nounwind {33; X86-LABEL: ne_pow_and:34; X86:       # %bb.0:35; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax36; X86-NEXT:    addb $16, %al37; X86-NEXT:    testb $-33, %al38; X86-NEXT:    setne %al39; X86-NEXT:    retl40;41; X64-LABEL: ne_pow_and:42; X64:       # %bb.0:43; X64-NEXT:    addb $16, %dil44; X64-NEXT:    testb $-33, %dil45; X64-NEXT:    setne %al46; X64-NEXT:    retq47  %2 = icmp ne i8 %0, 1648  %3 = icmp ne i8 %0, -1649  %4 = and i1 %2, %350  ret i1 %451}52 53define i1 @eq_pow_mismatch_or(i32 %0) nounwind {54; X86-LABEL: eq_pow_mismatch_or:55; X86:       # %bb.0:56; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax57; X86-NEXT:    cmpl $16, %eax58; X86-NEXT:    sete %cl59; X86-NEXT:    cmpl $-32, %eax60; X86-NEXT:    sete %al61; X86-NEXT:    orb %cl, %al62; X86-NEXT:    retl63;64; X64-LABEL: eq_pow_mismatch_or:65; X64:       # %bb.0:66; X64-NEXT:    cmpl $16, %edi67; X64-NEXT:    sete %cl68; X64-NEXT:    cmpl $-32, %edi69; X64-NEXT:    sete %al70; X64-NEXT:    orb %cl, %al71; X64-NEXT:    retq72  %2 = icmp eq i32 %0, 1673  %3 = icmp eq i32 %0, -3274  %4 = or i1 %2, %375  ret i1 %476}77 78define i1 @ne_non_pow_and(i8 %0) nounwind {79; X86-LABEL: ne_non_pow_and:80; X86:       # %bb.0:81; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax82; X86-NEXT:    cmpb $17, %al83; X86-NEXT:    setne %cl84; X86-NEXT:    cmpb $-17, %al85; X86-NEXT:    setne %al86; X86-NEXT:    andb %cl, %al87; X86-NEXT:    retl88;89; X64-LABEL: ne_non_pow_and:90; X64:       # %bb.0:91; X64-NEXT:    cmpb $17, %dil92; X64-NEXT:    setne %cl93; X64-NEXT:    cmpb $-17, %dil94; X64-NEXT:    setne %al95; X64-NEXT:    andb %cl, %al96; X64-NEXT:    retq97  %2 = icmp ne i8 %0, 1798  %3 = icmp ne i8 %0, -1799  %4 = and i1 %2, %3100  ret i1 %4101}102 103define i1 @ne_pow_or(i32 %0) nounwind {104; X86-LABEL: ne_pow_or:105; X86:       # %bb.0:106; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax107; X86-NEXT:    movl %eax, %ecx108; X86-NEXT:    xorl $32, %ecx109; X86-NEXT:    xorl $-32, %eax110; X86-NEXT:    orl %ecx, %eax111; X86-NEXT:    setne %al112; X86-NEXT:    retl113;114; X64-LABEL: ne_pow_or:115; X64:       # %bb.0:116; X64-NEXT:    movl %edi, %eax117; X64-NEXT:    xorl $32, %eax118; X64-NEXT:    xorl $-32, %edi119; X64-NEXT:    orl %eax, %edi120; X64-NEXT:    setne %al121; X64-NEXT:    retq122  %2 = icmp ne i32 %0, 32123  %3 = icmp ne i32 %0, -32124  %4 = or i1 %2, %3125  ret i1 %4126}127 128define i1 @eq_pow_and(i8 %0) nounwind {129; X86-LABEL: eq_pow_and:130; X86:       # %bb.0:131; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax132; X86-NEXT:    movl %eax, %ecx133; X86-NEXT:    xorb $16, %cl134; X86-NEXT:    xorb $-16, %al135; X86-NEXT:    orb %cl, %al136; X86-NEXT:    sete %al137; X86-NEXT:    retl138;139; X64-LABEL: eq_pow_and:140; X64:       # %bb.0:141; X64-NEXT:    movl %edi, %eax142; X64-NEXT:    xorb $16, %al143; X64-NEXT:    xorb $-16, %dil144; X64-NEXT:    orb %al, %dil145; X64-NEXT:    sete %al146; X64-NEXT:    retq147  %2 = icmp eq i8 %0, 16148  %3 = icmp eq i8 %0, -16149  %4 = and i1 %2, %3150  ret i1 %4151}152 153define i1 @abs_eq_pow2(i32 %0) nounwind {154; X86-LABEL: abs_eq_pow2:155; X86:       # %bb.0:156; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax157; X86-NEXT:    addl $4, %eax158; X86-NEXT:    testl $-9, %eax159; X86-NEXT:    sete %al160; X86-NEXT:    retl161;162; X64-LABEL: abs_eq_pow2:163; X64:       # %bb.0:164; X64-NEXT:    addl $4, %edi165; X64-NEXT:    testl $-9, %edi166; X64-NEXT:    sete %al167; X64-NEXT:    retq168  %2 = tail call i32 @llvm.abs.i32(i32 %0, i1 true)169  %3 = icmp eq i32 %2, 4170  ret i1 %3171}172 173define i1 @abs_ne_pow2(i64 %0) nounwind {174; X86-LABEL: abs_ne_pow2:175; X86:       # %bb.0:176; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax177; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx178; X86-NEXT:    addl $2, %eax179; X86-NEXT:    adcl $0, %ecx180; X86-NEXT:    andl $-5, %eax181; X86-NEXT:    orl %ecx, %eax182; X86-NEXT:    setne %al183; X86-NEXT:    retl184;185; X64-LABEL: abs_ne_pow2:186; X64:       # %bb.0:187; X64-NEXT:    addq $2, %rdi188; X64-NEXT:    testq $-5, %rdi189; X64-NEXT:    setne %al190; X64-NEXT:    retq191  %2 = tail call i64 @llvm.abs.i64(i64 %0, i1 true)192  %3 = icmp ne i64 %2, 2193  ret i1 %3194}195 196define i1 @abs_ne_nonpow2(i16 %0) nounwind {197; X86-LABEL: abs_ne_nonpow2:198; X86:       # %bb.0:199; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax200; X86-NEXT:    movswl %ax, %ecx201; X86-NEXT:    sarl $15, %ecx202; X86-NEXT:    xorl %ecx, %eax203; X86-NEXT:    subl %ecx, %eax204; X86-NEXT:    movzwl %ax, %eax205; X86-NEXT:    cmpl $57344, %eax # imm = 0xE000206; X86-NEXT:    setne %al207; X86-NEXT:    retl208;209; X64-LABEL: abs_ne_nonpow2:210; X64:       # %bb.0:211; X64-NEXT:    movl %edi, %eax212; X64-NEXT:    negw %ax213; X64-NEXT:    cmovsw %di, %ax214; X64-NEXT:    movzwl %ax, %eax215; X64-NEXT:    cmpl $57344, %eax # imm = 0xE000216; X64-NEXT:    setne %al217; X64-NEXT:    retq218  %2 = tail call i16 @llvm.abs.i16(i16 %0, i1 true)219  %3 = icmp ne i16 %2, -8192220  ret i1 %3221}222 223define <2 x i1> @abs_ne_vec(<2 x i64> %0) nounwind {224; X86-LABEL: abs_ne_vec:225; X86:       # %bb.0:226; X86-NEXT:    pushl %edi227; X86-NEXT:    pushl %esi228; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax229; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx230; X86-NEXT:    movl %ecx, %esi231; X86-NEXT:    sarl $31, %esi232; X86-NEXT:    xorl %esi, %ecx233; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx234; X86-NEXT:    xorl %esi, %edx235; X86-NEXT:    subl %esi, %edx236; X86-NEXT:    sbbl %esi, %ecx237; X86-NEXT:    movl %eax, %esi238; X86-NEXT:    sarl $31, %esi239; X86-NEXT:    xorl %esi, %eax240; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi241; X86-NEXT:    xorl %esi, %edi242; X86-NEXT:    subl %esi, %edi243; X86-NEXT:    sbbl %esi, %eax244; X86-NEXT:    xorl $8, %edi245; X86-NEXT:    orl %eax, %edi246; X86-NEXT:    setne %al247; X86-NEXT:    xorl $8, %edx248; X86-NEXT:    orl %ecx, %edx249; X86-NEXT:    setne %dl250; X86-NEXT:    popl %esi251; X86-NEXT:    popl %edi252; X86-NEXT:    retl253;254; X64-LABEL: abs_ne_vec:255; X64:       # %bb.0:256; X64-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,3,3]257; X64-NEXT:    psrad $31, %xmm1258; X64-NEXT:    pxor %xmm1, %xmm0259; X64-NEXT:    psubq %xmm1, %xmm0260; X64-NEXT:    pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0261; X64-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,0,3,2]262; X64-NEXT:    pand %xmm1, %xmm0263; X64-NEXT:    pcmpeqd %xmm1, %xmm1264; X64-NEXT:    pxor %xmm1, %xmm0265; X64-NEXT:    retq266  %2 = tail call <2 x i64> @llvm.abs.2xi64(<2 x i64> %0, i1 true)267  %3 = icmp ne <2 x i64> %2, <i64 8, i64 8>268  ret <2 x i1> %3269}270