diff options
author | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2014-08-01 23:28:49 +0000 |
---|---|---|
committer | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2014-08-01 23:28:49 +0000 |
commit | 3441ffe98dc12bad0b779c292a55670d70c277d7 (patch) | |
tree | 31544a1bb2b450af9245ef852a8a0464fb5577ad /llvm/unittests/IR/UseTest.cpp | |
parent | e52646cd802fa38471bfed3740ab3377d9da0687 (diff) | |
download | llvm-3441ffe98dc12bad0b779c292a55670d70c277d7.zip llvm-3441ffe98dc12bad0b779c292a55670d70c277d7.tar.gz llvm-3441ffe98dc12bad0b779c292a55670d70c277d7.tar.bz2 |
IR: Add Value::reverseUseList()
I'm going to use this to improve `verify-uselistorder`. Part of PR5680.
llvm-svn: 214594
Diffstat (limited to 'llvm/unittests/IR/UseTest.cpp')
-rw-r--r-- | llvm/unittests/IR/UseTest.cpp | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/llvm/unittests/IR/UseTest.cpp b/llvm/unittests/IR/UseTest.cpp index 980175c..fa73fe7 100644 --- a/llvm/unittests/IR/UseTest.cpp +++ b/llvm/unittests/IR/UseTest.cpp @@ -66,4 +66,47 @@ TEST(UseTest, sort) { ASSERT_EQ(8u, I); } +TEST(UseTest, reverse) { + LLVMContext C; + + const char *ModuleString = "define void @f(i32 %x) {\n" + "entry:\n" + " %v0 = add i32 %x, 0\n" + " %v2 = add i32 %x, 2\n" + " %v5 = add i32 %x, 5\n" + " %v1 = add i32 %x, 1\n" + " %v3 = add i32 %x, 3\n" + " %v7 = add i32 %x, 7\n" + " %v6 = add i32 %x, 6\n" + " %v4 = add i32 %x, 4\n" + " ret void\n" + "}\n"; + SMDiagnostic Err; + char vnbuf[8]; + Module *M = ParseAssemblyString(ModuleString, nullptr, Err, C); + Function *F = M->getFunction("f"); + ASSERT_TRUE(F); + ASSERT_TRUE(F->arg_begin() != F->arg_end()); + Argument &X = *F->arg_begin(); + ASSERT_EQ("x", X.getName()); + + X.sortUseList([](const Use &L, const Use &R) { + return L.getUser()->getName() < R.getUser()->getName(); + }); + unsigned I = 0; + for (User *U : X.users()) { + snprintf(vnbuf, sizeof(vnbuf), "v%u", I++); + EXPECT_EQ(vnbuf, U->getName()); + } + ASSERT_EQ(8u, I); + + X.reverseUseList(); + I = 0; + for (User *U : X.users()) { + snprintf(vnbuf, sizeof(vnbuf), "v%u", (7 - I++)); + EXPECT_EQ(vnbuf, U->getName()); + } + ASSERT_EQ(8u, I); +} + } // end anonymous namespace |