brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.0 KiB · b5b8051 Raw
174 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefixes=SSE3; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefixes=AVX14; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefixes=AVX25; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64-v4 | FileCheck %s --check-prefixes=AVX5126 7define i32 @PR63108() {8; SSE-LABEL: PR63108:9; SSE:       # %bb.0: # %entry10; SSE-NEXT:    testb %al, %al11; SSE-NEXT:    je .LBB0_212; SSE-NEXT:  # %bb.1:13; SSE-NEXT:    movd {{.*#+}} xmm0 = [57339,0,0,0]14; SSE-NEXT:    jmp .LBB0_515; SSE-NEXT:  .LBB0_2: # %vector.body.preheader16; SSE-NEXT:    pxor %xmm0, %xmm017; SSE-NEXT:    movd {{.*#+}} xmm1 = [57339,0,0,0]18; SSE-NEXT:    xorl %eax, %eax19; SSE-NEXT:    .p2align 420; SSE-NEXT:  .LBB0_3: # %vector.body21; SSE-NEXT:    # =>This Inner Loop Header: Depth=122; SSE-NEXT:    movdqa %xmm1, %xmm223; SSE-NEXT:    testb %al, %al24; SSE-NEXT:    pxor %xmm1, %xmm125; SSE-NEXT:    jne .LBB0_326; SSE-NEXT:  # %bb.4: # %middle.block27; SSE-NEXT:    pxor %xmm2, %xmm028; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]29; SSE-NEXT:    pxor %xmm0, %xmm130; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm1[1,1,1,1]31; SSE-NEXT:    pxor %xmm1, %xmm232; SSE-NEXT:    movdqa %xmm2, %xmm033; SSE-NEXT:    psrld $16, %xmm034; SSE-NEXT:    pxor %xmm2, %xmm035; SSE-NEXT:  .LBB0_5: # %for.cond.cleanup36; SSE-NEXT:    movd %xmm0, %eax37; SSE-NEXT:    movsbl %al, %ecx38; SSE-NEXT:    shrl $8, %eax39; SSE-NEXT:    movsbl %al, %eax40; SSE-NEXT:    addl %ecx, %eax41; SSE-NEXT:    retq42;43; AVX1-LABEL: PR63108:44; AVX1:       # %bb.0: # %entry45; AVX1-NEXT:    testb %al, %al46; AVX1-NEXT:    je .LBB0_247; AVX1-NEXT:  # %bb.1:48; AVX1-NEXT:    vmovd {{.*#+}} xmm0 = [57339,0,0,0]49; AVX1-NEXT:    jmp .LBB0_550; AVX1-NEXT:  .LBB0_2: # %vector.body.preheader51; AVX1-NEXT:    vmovss {{.*#+}} xmm0 = [57339,0,0,0]52; AVX1-NEXT:    xorl %eax, %eax53; AVX1-NEXT:    .p2align 454; AVX1-NEXT:  .LBB0_3: # %vector.body55; AVX1-NEXT:    # =>This Inner Loop Header: Depth=156; AVX1-NEXT:    vmovaps %ymm0, %ymm157; AVX1-NEXT:    vxorps %xmm0, %xmm0, %xmm058; AVX1-NEXT:    testb %al, %al59; AVX1-NEXT:    jne .LBB0_360; AVX1-NEXT:  # %bb.4: # %middle.block61; AVX1-NEXT:    vxorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm062; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm163; AVX1-NEXT:    vxorps %xmm1, %xmm0, %xmm064; AVX1-NEXT:    vshufps {{.*#+}} xmm1 = xmm0[2,3,2,3]65; AVX1-NEXT:    vxorps %xmm1, %xmm0, %xmm066; AVX1-NEXT:    vshufps {{.*#+}} xmm1 = xmm0[1,1,1,1]67; AVX1-NEXT:    vxorps %xmm1, %xmm0, %xmm068; AVX1-NEXT:    vpsrld $16, %xmm0, %xmm169; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm070; AVX1-NEXT:  .LBB0_5: # %for.cond.cleanup71; AVX1-NEXT:    vmovd %xmm0, %eax72; AVX1-NEXT:    vpextrb $1, %xmm0, %ecx73; AVX1-NEXT:    movsbl %al, %edx74; AVX1-NEXT:    movsbl %cl, %eax75; AVX1-NEXT:    addl %edx, %eax76; AVX1-NEXT:    vzeroupper77; AVX1-NEXT:    retq78;79; AVX2-LABEL: PR63108:80; AVX2:       # %bb.0: # %entry81; AVX2-NEXT:    testb %al, %al82; AVX2-NEXT:    je .LBB0_283; AVX2-NEXT:  # %bb.1:84; AVX2-NEXT:    vpbroadcastw {{.*#+}} xmm0 = [251,223,251,223,251,223,251,223,251,223,251,223,251,223,251,223]85; AVX2-NEXT:    jmp .LBB0_586; AVX2-NEXT:  .LBB0_2: # %vector.body.preheader87; AVX2-NEXT:    vmovd {{.*#+}} xmm0 = [57339,0,0,0]88; AVX2-NEXT:    xorl %eax, %eax89; AVX2-NEXT:    .p2align 490; AVX2-NEXT:  .LBB0_3: # %vector.body91; AVX2-NEXT:    # =>This Inner Loop Header: Depth=192; AVX2-NEXT:    vmovdqa %ymm0, %ymm193; AVX2-NEXT:    vpxor %xmm0, %xmm0, %xmm094; AVX2-NEXT:    testb %al, %al95; AVX2-NEXT:    jne .LBB0_396; AVX2-NEXT:  # %bb.4: # %middle.block97; AVX2-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm098; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm199; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm0100; AVX2-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]101; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm0102; AVX2-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]103; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm0104; AVX2-NEXT:    vpsrld $16, %xmm0, %xmm1105; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm0106; AVX2-NEXT:  .LBB0_5: # %for.cond.cleanup107; AVX2-NEXT:    vmovd %xmm0, %eax108; AVX2-NEXT:    vpextrb $1, %xmm0, %ecx109; AVX2-NEXT:    movsbl %al, %edx110; AVX2-NEXT:    movsbl %cl, %eax111; AVX2-NEXT:    addl %edx, %eax112; AVX2-NEXT:    vzeroupper113; AVX2-NEXT:    retq114;115; AVX512-LABEL: PR63108:116; AVX512:       # %bb.0: # %entry117; AVX512-NEXT:    testb %al, %al118; AVX512-NEXT:    je .LBB0_2119; AVX512-NEXT:  # %bb.1:120; AVX512-NEXT:    vmovd {{.*#+}} xmm0 = [57339,0,0,0]121; AVX512-NEXT:    jmp .LBB0_5122; AVX512-NEXT:  .LBB0_2: # %vector.body.preheader123; AVX512-NEXT:    vmovd {{.*#+}} xmm0 = [57339,0,0,0]124; AVX512-NEXT:    xorl %eax, %eax125; AVX512-NEXT:    .p2align 4126; AVX512-NEXT:  .LBB0_3: # %vector.body127; AVX512-NEXT:    # =>This Inner Loop Header: Depth=1128; AVX512-NEXT:    vmovdqa %ymm0, %ymm1129; AVX512-NEXT:    vpxor %xmm0, %xmm0, %xmm0130; AVX512-NEXT:    testb %al, %al131; AVX512-NEXT:    jne .LBB0_3132; AVX512-NEXT:  # %bb.4: # %middle.block133; AVX512-NEXT:    vpxord {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm1, %ymm0134; AVX512-NEXT:    vextracti128 $1, %ymm0, %xmm1135; AVX512-NEXT:    vpxor %xmm1, %xmm0, %xmm0136; AVX512-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]137; AVX512-NEXT:    vpxor %xmm1, %xmm0, %xmm0138; AVX512-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]139; AVX512-NEXT:    vpxor %xmm1, %xmm0, %xmm0140; AVX512-NEXT:    vpsrld $16, %xmm0, %xmm1141; AVX512-NEXT:    vpxor %xmm1, %xmm0, %xmm0142; AVX512-NEXT:  .LBB0_5: # %for.cond.cleanup143; AVX512-NEXT:    vmovd %xmm0, %eax144; AVX512-NEXT:    vpextrb $1, %xmm0, %ecx145; AVX512-NEXT:    movsbl %al, %edx146; AVX512-NEXT:    movsbl %cl, %eax147; AVX512-NEXT:    addl %edx, %eax148; AVX512-NEXT:    vzeroupper149; AVX512-NEXT:    retq150entry:151  br i1 poison, label %for.cond.cleanup, label %vector.body152 153vector.body:                                      ; preds = %vector.body, %entry154  %vec.phi = phi <16 x i16> [ zeroinitializer, %vector.body ], [ <i16 -8197, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, %entry ]155  %0 = icmp eq i32 poison, poison156  br i1 %0, label %middle.block, label %vector.body157 158middle.block:                                     ; preds = %vector.body159  %bin.rdx22 = xor <16 x i16> %vec.phi, <i16 256, i16 256, i16 256, i16 256, i16 256, i16 256, i16 256, i16 256, i16 256, i16 256, i16 256, i16 256, i16 256, i16 256, i16 256, i16 256>160  %1 = tail call i16 @llvm.vector.reduce.xor.v16i16(<16 x i16> %bin.rdx22)161  %2 = bitcast i16 %1 to <2 x i8>162  br label %for.cond.cleanup163 164for.cond.cleanup:                                 ; preds = %middle.block, %entry165  %id15142.0.lcssa = phi <2 x i8> [ <i8 -5, i8 -33>, %entry ], [ %2, %middle.block ]166  %vecext = extractelement <2 x i8> %id15142.0.lcssa, i64 0167  %vecext8 = extractelement <2 x i8> %id15142.0.lcssa, i64 1168  %conv7 = sext i8 %vecext to i32169  %conv9 = sext i8 %vecext8 to i32170  %res = add i32 %conv7, %conv9171  ret i32 %res172}173declare i16 @llvm.vector.reduce.xor.v16i16(<16 x i16>)174