[PATCH] D47576: [InstCombine] Fix div handling
Serguei Katkov via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Sun Jun 3 19:58:04 PDT 2018
This revision was automatically updated to reflect the committed changes.
Closed by commit rL333864: [InstCombine] Fix div handling (authored by skatkov, committed by ).
Changed prior to commit:
https://reviews.llvm.org/D47576?vs=149388&id=149666#toc
Repository:
rL LLVM
https://reviews.llvm.org/D47576
Files:
llvm/trunk/lib/Transforms/InstCombine/InstCombineMulDivRem.cpp
llvm/trunk/test/Transforms/InstCombine/sdiv-guard.ll
Index: llvm/trunk/test/Transforms/InstCombine/sdiv-guard.ll
===================================================================
--- llvm/trunk/test/Transforms/InstCombine/sdiv-guard.ll
+++ llvm/trunk/test/Transforms/InstCombine/sdiv-guard.ll
@@ -3,11 +3,11 @@
declare void @llvm.experimental.guard(i1, ...)
-; FIXME: If %flag is false then %s == 0 and guard should be triggered.
-
+; Regression test. If %flag is false then %s == 0 and guard should be triggered.
define i32 @a(i1 %flag, i32 %X) nounwind readnone {
; CHECK-LABEL: @a(
-; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[X:%.*]], 0
+; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i32 [[X:%.*]], 0
+; CHECK-NEXT: [[CMP:%.*]] = and i1 [[CMP1]], [[FLAG:%.*]]
; CHECK-NEXT: call void (i1, ...) @llvm.experimental.guard(i1 [[CMP]]) #1 [ "deopt"() ]
; CHECK-NEXT: [[R:%.*]] = sdiv i32 100, [[X]]
; CHECK-NEXT: ret i32 [[R]]
@@ -18,4 +18,3 @@
%r = sdiv i32 100, %s
ret i32 %r
}
-
Index: llvm/trunk/lib/Transforms/InstCombine/InstCombineMulDivRem.cpp
===================================================================
--- llvm/trunk/lib/Transforms/InstCombine/InstCombineMulDivRem.cpp
+++ llvm/trunk/lib/Transforms/InstCombine/InstCombineMulDivRem.cpp
@@ -581,9 +581,9 @@
Type *CondTy = SelectCond->getType();
while (BBI != BBFront) {
--BBI;
- // If we found a call to a function, we can't assume it will return, so
+ // If we found an instruction that we can't assume will return, so
// information from below it cannot be propagated above it.
- if (isa<CallInst>(BBI) && !isa<IntrinsicInst>(BBI))
+ if (!isGuaranteedToTransferExecutionToSuccessor(&*BBI))
break;
// Replace uses of the select or its condition with the known values.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D47576.149666.patch
Type: text/x-patch
Size: 1750 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180604/86ec257f/attachment.bin>
More information about the llvm-commits
mailing list