[PATCH] D23174: GVN-hoist: fix early exit logic
Sebastian Pop via llvm-commits
llvm-commits at lists.llvm.org
Thu Aug 4 16:56:51 PDT 2016
This revision was automatically updated to reflect the committed changes.
Closed by commit rL277785: GVN-hoist: fix early exit logic (authored by spop).
Changed prior to commit:
https://reviews.llvm.org/D23174?vs=66845&id=66882#toc
Repository:
rL LLVM
https://reviews.llvm.org/D23174
Files:
llvm/trunk/lib/Transforms/Scalar/GVNHoist.cpp
llvm/trunk/test/Transforms/GVN/hoist-call.ll
llvm/trunk/test/Transforms/GVN/hoist-recursive-geps.ll
llvm/trunk/test/Transforms/GVN/hoist.ll
Index: llvm/trunk/test/Transforms/GVN/hoist.ll
===================================================================
--- llvm/trunk/test/Transforms/GVN/hoist.ll
+++ llvm/trunk/test/Transforms/GVN/hoist.ll
@@ -223,10 +223,10 @@
; Check that all independent expressions are hoisted.
; CHECK-LABEL: @independentScalarsHoisting
-; CHECK: fadd
; CHECK: fsub
; CHECK: fdiv
; CHECK: fmul
+; CHECK: fadd
; CHECK-NOT: fsub
; CHECK-NOT: fdiv
; CHECK-NOT: fmul
Index: llvm/trunk/test/Transforms/GVN/hoist-call.ll
===================================================================
--- llvm/trunk/test/Transforms/GVN/hoist-call.ll
+++ llvm/trunk/test/Transforms/GVN/hoist-call.ll
@@ -0,0 +1,28 @@
+; RUN: opt -S -gvn-hoist < %s | FileCheck %s
+
+; Check that the call and fcmp are hoisted.
+; CHECK-LABEL: define void @fun(
+; CHECK: call float
+; CHECK: fcmp oeq
+; CHECK-NOT: call float
+; CHECK-NOT: fcmp oeq
+
+define void @fun(float %__b) minsize {
+entry:
+ br label %if.then
+
+if.then: ; preds = %entry
+ br i1 undef, label %if.then8, label %lor.lhs.false
+
+lor.lhs.false: ; preds = %if.then
+ %0 = call float @llvm.fabs.f32(float %__b) #2
+ %cmpinf7 = fcmp oeq float %0, 0x7FF0000000000000
+ unreachable
+
+if.then8: ; preds = %if.then
+ %1 = call float @llvm.fabs.f32(float %__b) #2
+ %cmpinf10 = fcmp oeq float %1, 0x7FF0000000000000
+ ret void
+}
+
+declare float @llvm.fabs.f32(float)
Index: llvm/trunk/test/Transforms/GVN/hoist-recursive-geps.ll
===================================================================
--- llvm/trunk/test/Transforms/GVN/hoist-recursive-geps.ll
+++ llvm/trunk/test/Transforms/GVN/hoist-recursive-geps.ll
@@ -100,4 +100,4 @@
%53 = load double, double* %9, align 8
%54 = fcmp olt double %52, %53
ret i1 %54
-}
\ No newline at end of file
+}
Index: llvm/trunk/lib/Transforms/Scalar/GVNHoist.cpp
===================================================================
--- llvm/trunk/lib/Transforms/Scalar/GVNHoist.cpp
+++ llvm/trunk/lib/Transforms/Scalar/GVNHoist.cpp
@@ -750,12 +750,19 @@
Repl = InstructionsToHoist.front();
// We can move Repl in HoistPt only when all operands are available.
- // When not HoistingGeps we need to copy the GEPs now.
// The order in which hoistings are done may influence the availability
// of operands.
- if (!allOperandsAvailable(Repl, HoistPt) && !HoistingGeps &&
- !makeGepOperandsAvailable(Repl, HoistPt, InstructionsToHoist))
- continue;
+ if (!allOperandsAvailable(Repl, HoistPt)) {
+
+ // When HoistingGeps there is nothing more we can do to make the
+ // operands available: just continue.
+ if (HoistingGeps)
+ continue;
+
+ // When not HoistingGeps we need to copy the GEPs.
+ if (!makeGepOperandsAvailable(Repl, HoistPt, InstructionsToHoist))
+ continue;
+ }
// Move the instruction at the end of HoistPt.
Instruction *Last = HoistPt->getTerminator();
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D23174.66882.patch
Type: text/x-patch
Size: 3137 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160804/d558ee16/attachment.bin>
More information about the llvm-commits
mailing list