brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.0 KiB · 5e030de Raw
120 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.2 | FileCheck %s3 4define i1 @cmp_allbits_concat_i8(i8 %x, i8 %y) {5; CHECK-LABEL: cmp_allbits_concat_i8:6; CHECK:       # %bb.0:7; CHECK-NEXT:    andl %esi, %edi8; CHECK-NEXT:    cmpb $-1, %dil9; CHECK-NEXT:    sete %al10; CHECK-NEXT:    retq11  %zx = zext i8 %x to i1612  %zy = zext i8 %y to i1613  %sh = shl i16 %zx, 814  %or = or i16 %zy, %sh15  %r = icmp eq i16 %or, -116  ret i1 %r17}18 19define i1 @cmp_anybits_concat_i32(i32 %x, i32 %y) {20; CHECK-LABEL: cmp_anybits_concat_i32:21; CHECK:       # %bb.0:22; CHECK-NEXT:    orl %esi, %edi23; CHECK-NEXT:    setne %al24; CHECK-NEXT:    retq25  %zx = zext i32 %x to i6426  %zy = zext i32 %y to i6427  %sh = shl i64 %zx, 3228  %or = or i64 %zy, %sh29  %r = icmp ne i64 %or, 030  ret i1 %r31}32 33define i1 @cmp_anybits_concat_shl_shl_i16(i16 %x, i16 %y) {34; CHECK-LABEL: cmp_anybits_concat_shl_shl_i16:35; CHECK:       # %bb.0:36; CHECK-NEXT:    movzwl %di, %eax37; CHECK-NEXT:    movzwl %si, %ecx38; CHECK-NEXT:    shll $8, %ecx39; CHECK-NEXT:    orl %eax, %ecx40; CHECK-NEXT:    sete %al41; CHECK-NEXT:    retq42  %zx = zext i16 %x to i6443  %zy = zext i16 %y to i6444  %sx = shl i64 %zx, 3245  %sy = shl i64 %zy, 846  %or = or i64 %sx, %sy47  %r = icmp eq i64 %or, 048  ret i1 %r49}50 51define i1 @cmp_anybits_concat_shl_shl_i16_commute(i16 %x, i16 %y) {52; CHECK-LABEL: cmp_anybits_concat_shl_shl_i16_commute:53; CHECK:       # %bb.0:54; CHECK-NEXT:    movzwl %di, %eax55; CHECK-NEXT:    movzwl %si, %ecx56; CHECK-NEXT:    shll $8, %ecx57; CHECK-NEXT:    orl %eax, %ecx58; CHECK-NEXT:    sete %al59; CHECK-NEXT:    retq60  %zx = zext i16 %x to i6461  %zy = zext i16 %y to i6462  %sx = shl i64 %zx, 3263  %sy = shl i64 %zy, 864  %or = or i64 %sy, %sx65  %r = icmp eq i64 %or, 066  ret i1 %r67}68 69; FIXME: Add vector support, but its only worth it if we can freely truncate the70; concat'd vectors.71 72define <16 x i8> @cmp_allbits_concat_v16i8(<16 x i8> %x, <16 x i8> %y) {73; CHECK-LABEL: cmp_allbits_concat_v16i8:74; CHECK:       # %bb.0:75; CHECK-NEXT:    movdqa %xmm1, %xmm276; CHECK-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3],xmm2[4],xmm0[4],xmm2[5],xmm0[5],xmm2[6],xmm0[6],xmm2[7],xmm0[7]77; CHECK-NEXT:    punpckhbw {{.*#+}} xmm1 = xmm1[8],xmm0[8],xmm1[9],xmm0[9],xmm1[10],xmm0[10],xmm1[11],xmm0[11],xmm1[12],xmm0[12],xmm1[13],xmm0[13],xmm1[14],xmm0[14],xmm1[15],xmm0[15]78; CHECK-NEXT:    pcmpeqd %xmm0, %xmm079; CHECK-NEXT:    pcmpeqw %xmm0, %xmm180; CHECK-NEXT:    pcmpeqw %xmm0, %xmm281; CHECK-NEXT:    packsswb %xmm1, %xmm282; CHECK-NEXT:    movdqa %xmm2, %xmm083; CHECK-NEXT:    retq84  %zx = zext <16 x i8> %x to <16 x i16>85  %zy = zext <16 x i8> %y to <16 x i16>86  %sh = shl <16 x i16> %zx, <i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8>87  %or = or <16 x i16> %zy, %sh88  %r = icmp eq <16 x i16> %or, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>89  %s = sext <16 x i1> %r to <16 x i8>90  ret <16 x i8> %s91}92 93define <2 x i64> @cmp_nobits_concat_v2i64(<2 x i64> %x, <2 x i64> %y) {94; CHECK-LABEL: cmp_nobits_concat_v2i64:95; CHECK:       # %bb.0:96; CHECK-NEXT:    movq %xmm0, %rax97; CHECK-NEXT:    pextrq $1, %xmm0, %rcx98; CHECK-NEXT:    movq %xmm1, %rdx99; CHECK-NEXT:    pextrq $1, %xmm1, %rsi100; CHECK-NEXT:    xorl %edi, %edi101; CHECK-NEXT:    orq %rcx, %rsi102; CHECK-NEXT:    sete %dil103; CHECK-NEXT:    negq %rdi104; CHECK-NEXT:    movq %rdi, %xmm1105; CHECK-NEXT:    xorl %ecx, %ecx106; CHECK-NEXT:    orq %rax, %rdx107; CHECK-NEXT:    sete %cl108; CHECK-NEXT:    negq %rcx109; CHECK-NEXT:    movq %rcx, %xmm0110; CHECK-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]111; CHECK-NEXT:    retq112  %zx = zext <2 x i64> %x to <2 x i128>113  %zy = zext <2 x i64> %y to <2 x i128>114  %sh = shl <2 x i128> %zx, <i128 64, i128 64>115  %or = or <2 x i128> %zy, %sh116  %r = icmp eq <2 x i128> %or, zeroinitializer117  %s = sext <2 x i1> %r to <2 x i64>118  ret <2 x i64> %s119}120