From dd4106d22ef6ce51bfac666584b76dd43e98acf6 Mon Sep 17 00:00:00 2001 From: Chuanqi Xu Date: Wed, 29 Jul 2020 10:02:04 +0800 Subject: [PATCH] [NFC] Edit the comment in User::replaceUsesOfWith --- llvm/lib/IR/User.cpp | 2 +- llvm/unittests/IR/UserTest.cpp | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/llvm/lib/IR/User.cpp b/llvm/lib/IR/User.cpp index 7da592f401273..9105c6fbd230d 100644 --- a/llvm/lib/IR/User.cpp +++ b/llvm/lib/IR/User.cpp @@ -29,7 +29,7 @@ void User::replaceUsesOfWith(Value *From, Value *To) { // The side effects of this setOperand call include linking to // "To", adding "this" to the uses list of To, and // most importantly, removing "this" from the use list of "From". - setOperand(i, To); // Fix it now... + setOperand(i, To); } } diff --git a/llvm/unittests/IR/UserTest.cpp b/llvm/unittests/IR/UserTest.cpp index e495735aec653..8fd435ecbc2b6 100644 --- a/llvm/unittests/IR/UserTest.cpp +++ b/llvm/unittests/IR/UserTest.cpp @@ -117,6 +117,38 @@ TEST(UserTest, ValueOpIteration) { EXPECT_EQ(IP->value_op_end(), (CI - 2) + 8); } +TEST(UserTest, replaceUseOfWith) { + LLVMContext C; + + const char *ModuleString = "define void @f(i32 %x) {\n" + "entry:\n" + " %v0 = add i32 1, 1\n" + " %v1 = add i32 %x, 2\n" + " ret void\n" + "}\n"; + SMDiagnostic Err; + std::unique_ptr M = parseAssemblyString(ModuleString, Err, C); + Function *F = M->getFunction("f"); + EXPECT_TRUE(F); + EXPECT_TRUE(F->arg_begin() != F->arg_end()); + BasicBlock& entryBB = F->front(); + Instruction& I0 = *(entryBB.begin()); + Instruction& I1 = *(++(entryBB.begin())); + + Argument &X = *F->arg_begin(); + EXPECT_EQ("x", X.getName()); + EXPECT_NE(X.user_begin() ,X.user_end()); + EXPECT_EQ(I0.user_begin() ,I0.user_end()); + + + auto XUser = find(X.users(), &(I1)); + EXPECT_NE(XUser, X.user_end()); + + XUser->replaceUsesOfWith(&X, &I0); + EXPECT_EQ(X.user_begin() ,X.user_end()); + EXPECT_NE(I0.user_begin() ,I0.user_end()); +} + TEST(UserTest, PersonalityUser) { LLVMContext Context; Module M("", Context);