[llvm] r304545 - [OrderedBasicBlock] Return false for comesBefore(A, A)
Benjamin Kramer via llvm-commits
llvm-commits at lists.llvm.org
Fri Jun 2 06:10:31 PDT 2017
Author: d0k
Date: Fri Jun 2 08:10:31 2017
New Revision: 304545
URL: http://llvm.org/viewvc/llvm-project?rev=304545&view=rev
Log:
[OrderedBasicBlock] Return false for comesBefore(A, A)
So far it would return true for the first uncached query, then cached
queries return false.
Added:
llvm/trunk/unittests/Analysis/OrderedBasicBlockTest.cpp
Modified:
llvm/trunk/include/llvm/Analysis/OrderedBasicBlock.h
llvm/trunk/lib/Analysis/OrderedBasicBlock.cpp
llvm/trunk/unittests/Analysis/CMakeLists.txt
Modified: llvm/trunk/include/llvm/Analysis/OrderedBasicBlock.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/OrderedBasicBlock.h?rev=304545&r1=304544&r2=304545&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Analysis/OrderedBasicBlock.h (original)
+++ llvm/trunk/include/llvm/Analysis/OrderedBasicBlock.h Fri Jun 2 08:10:31 2017
@@ -58,6 +58,7 @@ public:
/// comes before \p B in \p BB. This is a simplification that considers
/// cached instruction positions and ignores other basic blocks, being
/// only relevant to compare relative instructions positions inside \p BB.
+ /// Returns false for A == B.
bool dominates(const Instruction *A, const Instruction *B);
};
Modified: llvm/trunk/lib/Analysis/OrderedBasicBlock.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/OrderedBasicBlock.cpp?rev=304545&r1=304544&r2=304545&view=diff
==============================================================================
--- llvm/trunk/lib/Analysis/OrderedBasicBlock.cpp (original)
+++ llvm/trunk/lib/Analysis/OrderedBasicBlock.cpp Fri Jun 2 08:10:31 2017
@@ -55,7 +55,7 @@ bool OrderedBasicBlock::comesBefore(cons
assert(II != IE && "Instruction not found?");
assert((Inst == A || Inst == B) && "Should find A or B");
LastInstFound = II;
- return Inst == A;
+ return Inst != B;
}
/// \brief Find out whether \p A dominates \p B, meaning whether \p A
Modified: llvm/trunk/unittests/Analysis/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Analysis/CMakeLists.txt?rev=304545&r1=304544&r2=304545&view=diff
==============================================================================
--- llvm/trunk/unittests/Analysis/CMakeLists.txt (original)
+++ llvm/trunk/unittests/Analysis/CMakeLists.txt Fri Jun 2 08:10:31 2017
@@ -9,17 +9,18 @@ add_llvm_unittest(AnalysisTests
AliasAnalysisTest.cpp
BlockFrequencyInfoTest.cpp
BranchProbabilityInfoTest.cpp
+ CallGraphTest.cpp
CFGTest.cpp
CGSCCPassManagerTest.cpp
- CallGraphTest.cpp
LazyCallGraphTest.cpp
LoopInfoTest.cpp
MemoryBuiltinsTest.cpp
MemorySSA.cpp
+ OrderedBasicBlockTest.cpp
ProfileSummaryInfoTest.cpp
ScalarEvolutionTest.cpp
- TBAATest.cpp
TargetLibraryInfoTest.cpp
+ TBAATest.cpp
UnrollAnalyzer.cpp
ValueTrackingTest.cpp
)
Added: llvm/trunk/unittests/Analysis/OrderedBasicBlockTest.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Analysis/OrderedBasicBlockTest.cpp?rev=304545&view=auto
==============================================================================
--- llvm/trunk/unittests/Analysis/OrderedBasicBlockTest.cpp (added)
+++ llvm/trunk/unittests/Analysis/OrderedBasicBlockTest.cpp Fri Jun 2 08:10:31 2017
@@ -0,0 +1,58 @@
+//===- OrderedBasicBlockTest.cpp - OrderedBasicBlock unit tests -----------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/Analysis/OrderedBasicBlock.h"
+#include "llvm/AsmParser/Parser.h"
+#include "llvm/IR/BasicBlock.h"
+#include "llvm/IR/Function.h"
+#include "llvm/IR/LLVMContext.h"
+#include "llvm/IR/Module.h"
+#include "llvm/Support/DataTypes.h"
+#include "llvm/Support/SourceMgr.h"
+#include "gtest/gtest.h"
+
+namespace llvm {
+namespace {
+
+class OrderedBasicBlockTest : public testing::Test {
+protected:
+ LLVMContext C;
+
+ std::unique_ptr<Module> makeLLVMModule() {
+ const char *ModuleString = R"(define i32 @f(i32 %x) {
+ %add = add i32 %x, 42
+ ret i32 %add
+ })";
+ SMDiagnostic Err;
+ auto foo = parseAssemblyString(ModuleString, Err, C);
+ return foo;
+ }
+};
+
+TEST_F(OrderedBasicBlockTest, Basic) {
+ auto M = makeLLVMModule();
+ Function *F = M->getFunction("f");
+ BasicBlock::iterator I = F->front().begin();
+ Instruction *Add = &*I++;
+ Instruction *Ret = &*I++;
+
+ OrderedBasicBlock OBB(&F->front());
+ // Intentionally duplicated to verify cached and uncached are the same.
+ EXPECT_FALSE(OBB.dominates(Add, Add));
+ EXPECT_FALSE(OBB.dominates(Add, Add));
+ EXPECT_TRUE(OBB.dominates(Add, Ret));
+ EXPECT_TRUE(OBB.dominates(Add, Ret));
+ EXPECT_FALSE(OBB.dominates(Ret, Add));
+ EXPECT_FALSE(OBB.dominates(Ret, Add));
+ EXPECT_FALSE(OBB.dominates(Ret, Ret));
+ EXPECT_FALSE(OBB.dominates(Ret, Ret));
+}
+
+} // end anonymous namespace
+} // end namespace llvm
More information about the llvm-commits
mailing list