[PATCH] D49471: [SCEV] Fix buggy behavior in getAddExpr with truncs
Max Kazantsev via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Jul 18 18:51:38 PDT 2018
This revision was automatically updated to reflect the committed changes.
Closed by commit rL337435: [SCEV] Fix buggy behavior in getAddExpr with truncs (authored by mkazantsev, committed by ).
Changed prior to commit:
https://reviews.llvm.org/D49471?vs=156044&id=156202#toc
Repository:
rL LLVM
https://reviews.llvm.org/D49471
Files:
llvm/trunk/lib/Analysis/ScalarEvolution.cpp
llvm/trunk/test/Analysis/ScalarEvolution/truncate.ll
Index: llvm/trunk/lib/Analysis/ScalarEvolution.cpp
===================================================================
--- llvm/trunk/lib/Analysis/ScalarEvolution.cpp
+++ llvm/trunk/lib/Analysis/ScalarEvolution.cpp
@@ -2413,7 +2413,7 @@
}
if (Ok) {
// Evaluate the expression in the larger type.
- const SCEV *Fold = getAddExpr(LargeOps, Flags, Depth + 1);
+ const SCEV *Fold = getAddExpr(LargeOps, SCEV::FlagAnyWrap, Depth + 1);
// If it folds to something simple, use it. Otherwise, don't.
if (isa<SCEVConstant>(Fold) || isa<SCEVUnknown>(Fold))
return getTruncateExpr(Fold, Ty);
Index: llvm/trunk/test/Analysis/ScalarEvolution/truncate.ll
===================================================================
--- llvm/trunk/test/Analysis/ScalarEvolution/truncate.ll
+++ llvm/trunk/test/Analysis/ScalarEvolution/truncate.ll
@@ -73,3 +73,37 @@
%tmp36 = icmp ugt i32 %tmp16, 52
br i1 %tmp36, label %bb3, label %bb13
}
+
+; Make sure that no nuw flag is assigned to %tmp27, otherwise we will have a
+; poisoned value.
+define void @no_nuw(i64 %param) {
+
+; CHECK-LABEL: Classifying expressions for: @no_nuw
+; CHECK: %tmp27 = add i64 %tmp20, -1
+; CHECK-NOT: (-1 + %tmp20)<nuw>
+; CHECK-NEXT: --> (-1 + %tmp20) U:
+
+bb:
+ %shift = shl i64 %param, 58
+ br label %bb18
+
+bb18: ; preds = %bb36, %bb
+ %tmp20 = phi i64 [ %shift, %bb ], [ 0, %bb36 ]
+ %tmp21 = phi i64 [ 0, %bb ], [ %tmp24, %bb36 ]
+ %tmp22 = phi i32 [ -6, %bb ], [ %tmp46, %bb36 ]
+ %tmp25 = add i32 %tmp22, 1
+ %tmp26 = sext i32 %tmp25 to i64
+ %tmp27 = add i64 %tmp20, -1
+ %tmp28 = mul i64 %tmp27, %tmp26
+ %tmp29 = icmp ult i64 %tmp21, 1048576
+ br i1 %tmp29, label %bb36, label %bb30
+
+bb30: ; preds = %bb18
+ ret void
+
+bb36: ; preds = %bb18
+ %tmp24 = add nuw i64 %tmp21, 1
+ %tmp45 = trunc i64 %tmp28 to i32
+ %tmp46 = sub i32 %tmp22, %tmp45
+ br label %bb18
+}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D49471.156202.patch
Type: text/x-patch
Size: 2055 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180719/d610c181/attachment.bin>
More information about the llvm-commits
mailing list