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

            Bug ID: 27734
           Summary: [InstSimplify] missing vector icmp with constant edge
                    case patterns
           Product: libraries
           Version: trunk
          Hardware: PC
                OS: All
            Status: NEW
          Severity: normal
          Priority: P
         Component: Scalar Optimizations
          Assignee: unassignedb...@nondot.org
          Reporter: spatel+l...@rotateright.com
                CC: llvm-bugs@lists.llvm.org
    Classification: Unclassified

This was noted in http://reviews.llvm.org/D17859 where we semi-canonicalized
vector integer LE/GE comparisons: we're missing 3 out 4 of the vector
transforms when doing an icmp against an edge case constant:

define i1 @scalar_uge_true(i4 %x) {
  %cmp = icmp uge i4 %x, 0
  ret i1 %cmp
}

define i1 @scalar_ule_true(i4 %x) {
  %cmp = icmp ule i4 %x, 15
  ret i1 %cmp
}

define i1 @scalar_sge_true(i4 %x) {
  %cmp = icmp sge i4 %x, -8
  ret i1 %cmp
}

define i1 @scalar_sle_true(i4 %x) {
  %cmp = icmp sle i4 %x, 7
  ret i1 %cmp
}

define <4 x i1> @vector_uge_true(<4 x i4> %x) {
  %cmp = icmp uge <4 x i4> %x, zeroinitializer
  ret <4 x i1> %cmp
}

define <4 x i1> @vector_ule_true(<4 x i4> %x) {
  %cmp = icmp ule <4 x i4> %x, <i4 15, i4 15, i4 15, i4 15>
  ret <4 x i1> %cmp
}

define <4 x i1> @vector_sge_true(<4 x i4> %x) {
  %cmp = icmp sge <4 x i4> %x, <i4 -8, i4 -8, i4 -8, i4 -8>
  ret <4 x i1> %cmp
}

define <4 x i1> @vector_sle_true(<4 x i4> %x) {
  %cmp = icmp sle <4 x i4> %x, <i4 7, i4 7, i4 7, i4 7>
  ret <4 x i1> %cmp
}

------------------------------------------------------------------------

$ ./opt -instsimplify vec_icmp.ll -S
...

define i1 @scalar_uge_true(i4 %x) {
  ret i1 true
}

define i1 @scalar_ule_true(i4 %x) {
  ret i1 true
}

define i1 @scalar_sge_true(i4 %x) {
  ret i1 true
}

define i1 @scalar_sle_true(i4 %x) {
  ret i1 true
}

define <4 x i1> @vector_uge_true(<4 x i4> %x) {
  ret <4 x i1> <i1 true, i1 true, i1 true, i1 true>
}

define <4 x i1> @vector_ule_true(<4 x i4> %x) {
  %cmp = icmp ule <4 x i4> %x, <i4 -1, i4 -1, i4 -1, i4 -1>
  ret <4 x i1> %cmp
}

define <4 x i1> @vector_sge_true(<4 x i4> %x) {
  %cmp = icmp sge <4 x i4> %x, <i4 -8, i4 -8, i4 -8, i4 -8>
  ret <4 x i1> %cmp
}

define <4 x i1> @vector_sle_true(<4 x i4> %x) {
  %cmp = icmp sle <4 x i4> %x, <i4 7, i4 7, i4 7, i4 7>
  ret <4 x i1> %cmp
}

-- 
You are receiving this mail because:
You are on the CC list for the bug.
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to