[llvm] 0a838ad - [GuardWidening] Add test showing incorrect behavior with nuw/nsw flags
Serguei Katkov via llvm-commits
llvm-commits at lists.llvm.org
Wed May 25 23:05:37 PDT 2022
Author: Serguei Katkov
Date: 2022-05-26T12:54:42+07:00
New Revision: 0a838ad517073e0c866a91661a0c2eb0ad0f77a8
URL: https://github.com/llvm/llvm-project/commit/0a838ad517073e0c866a91661a0c2eb0ad0f77a8
DIFF: https://github.com/llvm/llvm-project/commit/0a838ad517073e0c866a91661a0c2eb0ad0f77a8.diff
LOG: [GuardWidening] Add test showing incorrect behavior with nuw/nsw flags
when we move instruction over the guard we must clear nuw/nsw flags
but we do not.
Added:
Modified:
llvm/test/Transforms/GuardWidening/range-check-merging.ll
Removed:
################################################################################
diff --git a/llvm/test/Transforms/GuardWidening/range-check-merging.ll b/llvm/test/Transforms/GuardWidening/range-check-merging.ll
index a6756ed38c2c..b4ab9b32ff48 100644
--- a/llvm/test/Transforms/GuardWidening/range-check-merging.ll
+++ b/llvm/test/Transforms/GuardWidening/range-check-merging.ll
@@ -334,5 +334,29 @@ entry:
ret void
}
+define void @f_8(i32 %x, i32* %length_buf) {
+; Check that we clean nuw nsw flags
+; CHECK-LABEL: @f_8(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[LENGTH:%.*]] = load i32, i32* [[LENGTH_BUF:%.*]], align 4, !range [[RNG0]]
+; CHECK-NEXT: [[CHK0:%.*]] = icmp ult i32 [[X:%.*]], [[LENGTH]]
+; CHECK-NEXT: [[X_INC1:%.*]] = add nuw nsw i32 [[X]], 1
+; CHECK-NEXT: [[CHK1:%.*]] = icmp ult i32 [[X_INC1]], [[LENGTH]]
+; CHECK-NEXT: [[WIDE_CHK:%.*]] = and i1 [[CHK0]], [[CHK1]]
+; CHECK-NEXT: call void (i1, ...) @llvm.experimental.guard(i1 [[WIDE_CHK]]) [ "deopt"() ]
+; CHECK-NEXT: ret void
+;
+entry:
+ %length = load i32, i32* %length_buf, !range !0
+ %chk0 = icmp ult i32 %x, %length
+ call void(i1, ...) @llvm.experimental.guard(i1 %chk0) [ "deopt"() ]
+
+ %x.inc1 = add nuw nsw i32 %x, 1
+ %chk1 = icmp ult i32 %x.inc1, %length
+ call void(i1, ...) @llvm.experimental.guard(i1 %chk1) [ "deopt"() ]
+ ret void
+}
+
+
!0 = !{i32 0, i32 2147483648}
More information about the llvm-commits
mailing list