brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.4 KiB · 1eb43db Raw
135 lines · plain
1; RUN: llc -mtriple=x86_64-unknown-unknown < %s | FileCheck %s2 3define i8 @ctz_v8i16(<8 x i16> %a) {4; CHECK-LABEL: .LCPI0_0:5; CHECK-NEXT:   .byte 86; CHECK-NEXT:   .byte 77; CHECK-NEXT:   .byte 68; CHECK-NEXT:   .byte 59; CHECK-NEXT:   .byte 410; CHECK-NEXT:   .byte 311; CHECK-NEXT:   .byte 212; CHECK-NEXT:   .byte 113; CHECK-LABEL: ctz_v8i16:14; CHECK:       # %bb.0:15; CHECK-NEXT:    pxor %xmm1, %xmm116; CHECK-NEXT:    pcmpeqw %xmm0, %xmm117; CHECK-NEXT:    packsswb %xmm1, %xmm118; CHECK-NEXT:    pandn {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm119; CHECK-NEXT:    movdqa %xmm1, -{{[0-9]+}}(%rsp)20; CHECK-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx21; CHECK-NEXT:    movl -{{[0-9]+}}(%rsp), %eax22; CHECK-NEXT:    movl -{{[0-9]+}}(%rsp), %edx23; CHECK-NEXT:    cmpb %cl, %al24; CHECK-NEXT:    cmoval %eax, %ecx25; CHECK-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax26; CHECK-NEXT:    cmpb %al, %cl27; CHECK-NEXT:    cmovbel %eax, %ecx28; CHECK-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax29; CHECK-NEXT:    cmpb %al, %cl30; CHECK-NEXT:    cmovbel %eax, %ecx31; CHECK-NEXT:    cmpb %dl, %cl32; CHECK-NEXT:    cmovbel %edx, %ecx33; CHECK-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax34; CHECK-NEXT:    cmpb %al, %cl35; CHECK-NEXT:    cmovbel %eax, %ecx36; CHECK-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax37; CHECK-NEXT:    cmpb %al, %cl38; CHECK-NEXT:    cmovbel %eax, %ecx39; CHECK-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax40; CHECK-NEXT:    cmpb %al, %cl41; CHECK-NEXT:    cmovbel %eax, %ecx42; CHECK-NEXT:    movb $8, %al43; CHECK-NEXT:    subb %cl, %al44; CHECK-NEXT:    retq45  %res = call i8 @llvm.experimental.cttz.elts.i8.v8i16(<8 x i16> %a, i1 0)46  ret i8 %res47}48 49define i16 @ctz_v4i32(<4 x i32> %a) {50; CHECK-LABEL: .LCPI1_0:51; CHECK-NEXT:   .byte 452; CHECK-NEXT:   .byte 353; CHECK-NEXT:   .byte 254; CHECK-NEXT:   .byte 155; CHECK-LABEL: ctz_v4i32:56; CHECK:       # %bb.0:57; CHECK-NEXT:    pxor %xmm1, %xmm158; CHECK-NEXT:    pcmpeqd %xmm0, %xmm159; CHECK-NEXT:    packssdw %xmm1, %xmm160; CHECK-NEXT:    pcmpeqd %xmm0, %xmm061; CHECK-NEXT:    pxor %xmm1, %xmm062; CHECK-NEXT:    packsswb %xmm0, %xmm063; CHECK-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm064; CHECK-NEXT:    movd %xmm0, %eax65; CHECK-NEXT:    movl %eax, %ecx66; CHECK-NEXT:    shrl $8, %ecx67; CHECK-NEXT:    cmpb %cl, %al68; CHECK-NEXT:    cmoval %eax, %ecx69; CHECK-NEXT:    movl %eax, %edx70; CHECK-NEXT:    shrl $16, %edx71; CHECK-NEXT:    cmpb %dl, %cl72; CHECK-NEXT:    cmoval %ecx, %edx73; CHECK-NEXT:    shrl $24, %eax74; CHECK-NEXT:    cmpb %al, %dl75; CHECK-NEXT:    cmoval %edx, %eax76; CHECK-NEXT:    movb $4, %cl77; CHECK-NEXT:    subb %al, %cl78; CHECK-NEXT:    movzbl %cl, %eax79; CHECK-NEXT:    # kill: def $ax killed $ax killed $eax80; CHECK-NEXT:    retq81  %res = call i16 @llvm.experimental.cttz.elts.i16.v4i32(<4 x i32> %a, i1 0)82  ret i16 %res83}84 85; ZERO IS POISON86 87define i8 @ctz_v8i16_poison(<8 x i16> %a) {88; CHECK-LABEL: .LCPI2_0:89; CHECK-NEXT:   .byte 890; CHECK-NEXT:   .byte 791; CHECK-NEXT:   .byte 692; CHECK-NEXT:   .byte 593; CHECK-NEXT:   .byte 494; CHECK-NEXT:   .byte 395; CHECK-NEXT:   .byte 296; CHECK-NEXT:   .byte 197; CHECK-LABEL: ctz_v8i16_poison:98; CHECK:       # %bb.0:99; CHECK-NEXT:    pxor %xmm1, %xmm1100; CHECK-NEXT:    pcmpeqw %xmm0, %xmm1101; CHECK-NEXT:    packsswb %xmm1, %xmm1102; CHECK-NEXT:    pandn {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1103; CHECK-NEXT:    movdqa %xmm1, -{{[0-9]+}}(%rsp)104; CHECK-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx105; CHECK-NEXT:    movl -{{[0-9]+}}(%rsp), %eax106; CHECK-NEXT:    movl -{{[0-9]+}}(%rsp), %edx107; CHECK-NEXT:    cmpb %cl, %al108; CHECK-NEXT:    cmoval %eax, %ecx109; CHECK-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax110; CHECK-NEXT:    cmpb %al, %cl111; CHECK-NEXT:    cmovbel %eax, %ecx112; CHECK-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax113; CHECK-NEXT:    cmpb %al, %cl114; CHECK-NEXT:    cmovbel %eax, %ecx115; CHECK-NEXT:    cmpb %dl, %cl116; CHECK-NEXT:    cmovbel %edx, %ecx117; CHECK-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax118; CHECK-NEXT:    cmpb %al, %cl119; CHECK-NEXT:    cmovbel %eax, %ecx120; CHECK-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax121; CHECK-NEXT:    cmpb %al, %cl122; CHECK-NEXT:    cmovbel %eax, %ecx123; CHECK-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax124; CHECK-NEXT:    cmpb %al, %cl125; CHECK-NEXT:    cmovbel %eax, %ecx126; CHECK-NEXT:    movb $8, %al127; CHECK-NEXT:    subb %cl, %al128; CHECK-NEXT:    retq129  %res = call i8 @llvm.experimental.cttz.elts.i8.v8i16(<8 x i16> %a, i1 1)130  ret i8 %res131}132 133declare i8 @llvm.experimental.cttz.elts.i8.v8i16(<8 x i16>, i1)134declare i16 @llvm.experimental.cttz.elts.i16.v4i32(<4 x i32>, i1)135