[llvm] r368656 - [NFC][InstCombine] Non-canonical clamp pattern: non-canonical predicate tests

Roman Lebedev via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 13 01:14:13 PDT 2019


Author: lebedevri
Date: Tue Aug 13 01:14:13 2019
New Revision: 368656

URL: http://llvm.org/viewvc/llvm-project?rev=368656&view=rev
Log:
[NFC][InstCombine] Non-canonical clamp pattern: non-canonical predicate tests

We can't handle 'uge' case because we can't ever get it,
there needs to be extra use on that compare or else it will be
canonicalized, but because of extra use we can't handle it.

'sge' case we can have.

Modified:
    llvm/trunk/test/Transforms/InstCombine/canonicalize-clamp-like-pattern-between-negative-and-positive-thresholds.ll

Modified: llvm/trunk/test/Transforms/InstCombine/canonicalize-clamp-like-pattern-between-negative-and-positive-thresholds.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/canonicalize-clamp-like-pattern-between-negative-and-positive-thresholds.ll?rev=368656&r1=368655&r2=368656&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/InstCombine/canonicalize-clamp-like-pattern-between-negative-and-positive-thresholds.ll (original)
+++ llvm/trunk/test/Transforms/InstCombine/canonicalize-clamp-like-pattern-between-negative-and-positive-thresholds.ll Tue Aug 13 01:14:13 2019
@@ -444,3 +444,46 @@ define <2 x i32> @t21_ult_slt_vec_nonspl
   %r = select <2 x i1> %t3, <2 x i32> %x, <2 x i32> %t1
   ret <2 x i32> %r
 }
+
+; Non-canonical predicates
+
+declare void @use2xi1(<2 x i1>)
+
+declare void @use(<2 x i1>)
+define <2 x i32> @t22_uge_slt(<2 x i32> %x, <2 x i32> %replacement_low, <2 x i32> %replacement_high) {
+; CHECK-LABEL: @t22_uge_slt(
+; CHECK-NEXT:    [[T0:%.*]] = icmp slt <2 x i32> [[X:%.*]], <i32 128, i32 128>
+; CHECK-NEXT:    [[T1:%.*]] = select <2 x i1> [[T0]], <2 x i32> [[REPLACEMENT_LOW:%.*]], <2 x i32> [[REPLACEMENT_HIGH:%.*]]
+; CHECK-NEXT:    [[T2:%.*]] = add <2 x i32> [[X]], <i32 16, i32 16>
+; CHECK-NEXT:    [[T3:%.*]] = icmp uge <2 x i32> [[T2]], <i32 144, i32 0>
+; CHECK-NEXT:    call void @use2xi1(<2 x i1> [[T3]])
+; CHECK-NEXT:    [[R:%.*]] = select <2 x i1> [[T3]], <2 x i32> [[T1]], <2 x i32> [[X]]
+; CHECK-NEXT:    ret <2 x i32> [[R]]
+;
+  %t0 = icmp slt <2 x i32> %x, <i32 128, i32 128>
+  %t1 = select <2 x i1> %t0, <2 x i32> %replacement_low, <2 x i32> %replacement_high
+  %t2 = add <2 x i32> %x, <i32 16, i32 16>
+  %t3 = icmp uge <2 x i32> %t2, <i32 144, i32 0>
+  call void @use2xi1(<2 x i1> %t3)
+  %r = select <2 x i1> %t3, <2 x i32> %t1, <2 x i32> %x
+  ret <2 x i32> %r
+}
+
+define <2 x i32> @t23_ult_sge(<2 x i32> %x, <2 x i32> %replacement_low, <2 x i32> %replacement_high) {
+; CHECK-LABEL: @t23_ult_sge(
+; CHECK-NEXT:    [[T0:%.*]] = icmp sge <2 x i32> [[X:%.*]], <i32 128, i32 -2147483648>
+; CHECK-NEXT:    call void @use2xi1(<2 x i1> [[T0]])
+; CHECK-NEXT:    [[T1:%.*]] = select <2 x i1> [[T0]], <2 x i32> [[REPLACEMENT_HIGH:%.*]], <2 x i32> [[REPLACEMENT_LOW:%.*]]
+; CHECK-NEXT:    [[T2:%.*]] = add <2 x i32> [[X]], <i32 16, i32 -2147483648>
+; CHECK-NEXT:    [[T3:%.*]] = icmp ult <2 x i32> [[T2]], <i32 144, i32 -1>
+; CHECK-NEXT:    [[R:%.*]] = select <2 x i1> [[T3]], <2 x i32> [[X]], <2 x i32> [[T1]]
+; CHECK-NEXT:    ret <2 x i32> [[R]]
+;
+  %t0 = icmp sge <2 x i32> %x, <i32 128, i32 -2147483648>
+  call void @use2xi1(<2 x i1> %t0)
+  %t1 = select <2 x i1> %t0, <2 x i32> %replacement_high, <2 x i32> %replacement_low
+  %t2 = add <2 x i32> %x, <i32 16, i32 -2147483648>
+  %t3 = icmp ult <2 x i32> %t2, <i32 144, i32 -1>
+  %r = select <2 x i1> %t3, <2 x i32> %x, <2 x i32> %t1
+  ret <2 x i32> %r
+}




More information about the llvm-commits mailing list