[llvm-bugs] [Bug 25763] New: Vector constant folding of comparisons does not follow the vector boolean format

via llvm-bugs llvm-bugs at lists.llvm.org
Mon Dec 7 05:59:09 PST 2015


https://llvm.org/bugs/show_bug.cgi?id=25763

            Bug ID: 25763
           Summary: Vector constant folding of comparisons does not follow
                    the vector boolean format
           Product: libraries
           Version: trunk
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P
         Component: Common Code Generator Code
          Assignee: unassignedbugs at nondot.org
          Reporter: silviu.baranga at arm.com
                CC: llvm-bugs at lists.llvm.org
    Classification: Unclassified

r253504 introduced constant folding for vector setcc operations:

r253504 | rksimon | 2015-11-18 21:17:19 +0000 (Wed, 18 Nov 2015) | 7 lines

[DAGCombiner] Vector constant folding for comparisons

This patch adds support for vector constant folding of integer/float
comparisons.

This requires FoldConstantVectorArithmetic to support scalar constant operands
(in this case ISD::CONDCASE). In future we should be able to support other
scalar constant types as necessary (and possibly start calling
FoldConstantVectorArithmetic for all node creations)

Differential Revision: http://reviews.llvm.org/D14683



This folds vector comparisons by using scalar logic per-lane. However, boolean
output format can differ between scalar and vector operations (it can be either
one or negative one for true). On targets where there is a difference between
the scalar and vector boolean formats, this will cause a miscompile.

Reproducer:

target datalayout = "e-m:e-i64:64-i128:128-n32:64-S128"
target triple = "aarch64--linux-gnu"

declare <8 x i8> @llvm.ctlz.v8i8(<8 x i8>, i1)

define <8 x i16> @dotests_458() {
entry:
  %vclz_v.i = call <8 x i8> @llvm.ctlz.v8i8(<8 x i8> <i8 127, i8 38, i8 -1, i8
-128, i8 127, i8 0, i8 0, i8 0>, i1 false) #6
  %vsra_n = lshr <8 x i8> %vclz_v.i, <i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5,
i8 5>
  %name_6 = or <8 x i8> %vsra_n, <i8 127, i8 -128, i8 -1, i8 67, i8 84, i8 127,
i8 -1, i8 0>
  %cmp.i603 = icmp slt <8 x i8> %name_6, <i8 -57, i8 -128, i8 127, i8 -128, i8
-1, i8 0, i8 -1, i8 -1>
  %vmovl.i4.i = sext <8 x i1> %cmp.i603 to <8 x i16>
  ret <8 x i16> %vmovl.i4.i
}

Compiled with:
llc -O3 test.ll -o -

Produces:

    .text
    .file    "test.ll"
    .section    .rodata.cst8,"aM", at progbits,8
    .align    3
.LCPI0_0:
    .byte    0                       // 0x0
    .byte    0                       // 0x0
    .byte    1                       // 0x1 ; This should be 0xff!
    .byte    0                       // 0x0
    .byte    0                       // 0x0
    .byte    0                       // 0x0
    .byte    0                       // 0x0
    .byte    0                       // 0x0
    .text
    .globl    dotests_458
    .align    2
    .type    dotests_458, at function
dotests_458:                            // @dotests_458
    .cfi_startproc
// BB#0:                                // %entry
    adrp    x8, .LCPI0_0
    ldr    d0, [x8, :lo12:.LCPI0_0]
    sshll    v0.8h, v0.8b, #0
    ret
.Lfunc_end0:
    .size    dotests_458, .Lfunc_end0-dotests_458
    .cfi_endproc

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20151207/182065d6/attachment.html>


More information about the llvm-bugs mailing list