[llvm] r371629 - [NFC][InstSimplify] Add extra test for D67411 with @llvm.assume

Roman Lebedev via llvm-commits llvm-commits at lists.llvm.org
Wed Sep 11 08:28:04 PDT 2019


Author: lebedevri
Date: Wed Sep 11 08:28:03 2019
New Revision: 371629

URL: http://llvm.org/viewvc/llvm-project?rev=371629&view=rev
Log:
[NFC][InstSimplify] Add extra test for D67411 with @llvm.assume

Modified:
    llvm/trunk/test/Transforms/InstSimplify/redundant-null-check-in-uadd_with_overflow-of-nonnull-ptr.ll

Modified: llvm/trunk/test/Transforms/InstSimplify/redundant-null-check-in-uadd_with_overflow-of-nonnull-ptr.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstSimplify/redundant-null-check-in-uadd_with_overflow-of-nonnull-ptr.ll?rev=371629&r1=371628&r2=371629&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/InstSimplify/redundant-null-check-in-uadd_with_overflow-of-nonnull-ptr.ll (original)
+++ llvm/trunk/test/Transforms/InstSimplify/redundant-null-check-in-uadd_with_overflow-of-nonnull-ptr.ll Wed Sep 11 08:28:03 2019
@@ -244,3 +244,24 @@ define i1 @t15(i8* nonnull %base, i64 %o
   %res = and i1 %no_overflow_during_adjustment, %non_null_after_adjustment ; swapped
   ret i1 %res
 }
+
+declare void @llvm.assume(i1)
+define i1 @t16(i64 %base, i64 %offset) {
+; CHECK-LABEL: @t16(
+; CHECK-NEXT:    [[CMP:%.*]] = icmp slt i64 [[BASE:%.*]], 0
+; CHECK-NEXT:    call void @llvm.assume(i1 [[CMP]])
+; CHECK-NEXT:    [[ADJUSTED:%.*]] = add i64 [[BASE]], [[OFFSET:%.*]]
+; CHECK-NEXT:    [[NON_NULL_AFTER_ADJUSTMENT:%.*]] = icmp ne i64 [[ADJUSTED]], 0
+; CHECK-NEXT:    [[NO_OVERFLOW_DURING_ADJUSTMENT:%.*]] = icmp uge i64 [[ADJUSTED]], [[BASE]]
+; CHECK-NEXT:    [[RES:%.*]] = and i1 [[NON_NULL_AFTER_ADJUSTMENT]], [[NO_OVERFLOW_DURING_ADJUSTMENT]]
+; CHECK-NEXT:    ret i1 [[RES]]
+;
+  %cmp = icmp slt i64 %base, 0
+  call void @llvm.assume(i1 %cmp)
+
+  %adjusted = add i64 %base, %offset
+  %non_null_after_adjustment = icmp ne i64 %adjusted, 0
+  %no_overflow_during_adjustment = icmp uge i64 %adjusted, %base
+  %res = and i1 %non_null_after_adjustment, %no_overflow_during_adjustment
+  ret i1 %res
+}




More information about the llvm-commits mailing list