diff --git a/llvm/include/llvm/SandboxIR/SandboxIR.h b/llvm/include/llvm/SandboxIR/SandboxIR.h index 667aeba1bda1f0..3b5a17ccc9522e 100644 --- a/llvm/include/llvm/SandboxIR/SandboxIR.h +++ b/llvm/include/llvm/SandboxIR/SandboxIR.h @@ -772,10 +772,17 @@ class LoadInst final : public Instruction { unsigned getNumOfIRInstrs() const final { return 1u; } static LoadInst *create(Type *Ty, Value *Ptr, MaybeAlign Align, Instruction *InsertBefore, Context &Ctx, - bool IsVolatile = false, const Twine &Name = ""); + const Twine &Name = ""); + static LoadInst *create(Type *Ty, Value *Ptr, MaybeAlign Align, + Instruction *InsertBefore, bool IsVolatile, + Context &Ctx, const Twine &Name = ""); static LoadInst *create(Type *Ty, Value *Ptr, MaybeAlign Align, BasicBlock *InsertAtEnd, Context &Ctx, - bool IsVolatile = false, const Twine &Name = ""); + const Twine &Name = ""); + static LoadInst *create(Type *Ty, Value *Ptr, MaybeAlign Align, + BasicBlock *InsertAtEnd, bool IsVolatile, + Context &Ctx, const Twine &Name = ""); + /// For isa/dyn_cast. static bool classof(const Value *From); Value *getPointerOperand() const; diff --git a/llvm/lib/SandboxIR/SandboxIR.cpp b/llvm/lib/SandboxIR/SandboxIR.cpp index d2b4fb207ba3ac..9c52927c167352 100644 --- a/llvm/lib/SandboxIR/SandboxIR.cpp +++ b/llvm/lib/SandboxIR/SandboxIR.cpp @@ -612,7 +612,13 @@ void BranchInst::dump() const { LoadInst *LoadInst::create(Type *Ty, Value *Ptr, MaybeAlign Align, Instruction *InsertBefore, Context &Ctx, - bool IsVolatile, const Twine &Name) { + const Twine &Name) { + return create(Ty, Ptr, Align, InsertBefore, /*IsVolatile=*/false, Ctx, Name); +} + +LoadInst *LoadInst::create(Type *Ty, Value *Ptr, MaybeAlign Align, + Instruction *InsertBefore, bool IsVolatile, + Context &Ctx, const Twine &Name) { llvm::Instruction *BeforeIR = InsertBefore->getTopmostLLVMInstruction(); auto &Builder = Ctx.getLLVMIRBuilder(); Builder.SetInsertPoint(BeforeIR); @@ -624,7 +630,13 @@ LoadInst *LoadInst::create(Type *Ty, Value *Ptr, MaybeAlign Align, LoadInst *LoadInst::create(Type *Ty, Value *Ptr, MaybeAlign Align, BasicBlock *InsertAtEnd, Context &Ctx, - bool IsVolatile, const Twine &Name) { + const Twine &Name) { + return create(Ty, Ptr, Align, InsertAtEnd, /*IsVolatile=*/false, Ctx, Name); +} + +LoadInst *LoadInst::create(Type *Ty, Value *Ptr, MaybeAlign Align, + BasicBlock *InsertAtEnd, bool IsVolatile, + Context &Ctx, const Twine &Name) { auto &Builder = Ctx.getLLVMIRBuilder(); Builder.SetInsertPoint(cast(InsertAtEnd->Val)); auto *NewLI = diff --git a/llvm/unittests/SandboxIR/SandboxIRTest.cpp b/llvm/unittests/SandboxIR/SandboxIRTest.cpp index 122508d15194f4..b32715340e4f8c 100644 --- a/llvm/unittests/SandboxIR/SandboxIRTest.cpp +++ b/llvm/unittests/SandboxIR/SandboxIRTest.cpp @@ -750,13 +750,13 @@ define void @foo(ptr %arg0, ptr %arg1) { auto *BB = &*F->begin(); auto It = BB->begin(); auto *Ld = cast(&*It++); - auto *Vld = cast(&*It++); + auto *VLd = cast(&*It++); auto *Ret = cast(&*It++); // Check isVolatile() EXPECT_FALSE(Ld->isVolatile()); // Check isVolatile() - EXPECT_TRUE(Vld->isVolatile()); + EXPECT_TRUE(VLd->isVolatile()); // Check getPointerOperand() EXPECT_EQ(Ld->getPointerOperand(), Arg0); // Check getAlign() @@ -764,23 +764,45 @@ define void @foo(ptr %arg0, ptr %arg1) { // Check create(InsertBefore) sandboxir::LoadInst *NewLd = sandboxir::LoadInst::create(Ld->getType(), Arg1, Align(8), - /*InsertBefore=*/Ret, Ctx, - /*IsVolatile=*/false, "NewLd"); + /*InsertBefore=*/Ret, Ctx, "NewLd"); // Checking if create() was volatile EXPECT_FALSE(NewLd->isVolatile()); EXPECT_EQ(NewLd->getType(), Ld->getType()); EXPECT_EQ(NewLd->getPointerOperand(), Arg1); EXPECT_EQ(NewLd->getAlign(), 8); EXPECT_EQ(NewLd->getName(), "NewLd"); - + // Check create(InsertBefore, IsVolatile=true) sandboxir::LoadInst *NewVLd = - sandboxir::LoadInst::create(Vld->getType(), Arg1, Align(8), - /*InsertBefore=*/Ret, Ctx, - /*IsVolatile=*/true, "NewVLd"); + sandboxir::LoadInst::create(VLd->getType(), Arg1, Align(8), + /*InsertBefore=*/Ret, + /*IsVolatile=*/true, Ctx, "NewVLd"); // Checking if create() was volatile EXPECT_TRUE(NewVLd->isVolatile()); EXPECT_EQ(NewVLd->getName(), "NewVLd"); + // Check create(InsertAtEnd) + sandboxir::LoadInst *NewLdEnd = + sandboxir::LoadInst::create(Ld->getType(), Arg1, Align(8), + /*InsertAtEnd=*/BB, Ctx, "NewLdEnd"); + EXPECT_FALSE(NewLdEnd->isVolatile()); + EXPECT_EQ(NewLdEnd->getName(), "NewLdEnd"); + EXPECT_EQ(NewLdEnd->getType(), Ld->getType()); + EXPECT_EQ(NewLdEnd->getPointerOperand(), Arg1); + EXPECT_EQ(NewLdEnd->getAlign(), 8); + EXPECT_EQ(NewLdEnd->getParent(), BB); + EXPECT_EQ(NewLdEnd->getNextNode(), nullptr); + // Check create(InsertAtEnd, IsVolatile=true) + sandboxir::LoadInst *NewVLdEnd = + sandboxir::LoadInst::create(VLd->getType(), Arg1, Align(8), + /*InsertAtEnd=*/BB, + /*IsVolatile=*/true, Ctx, "NewVLdEnd"); + EXPECT_TRUE(NewVLdEnd->isVolatile()); + EXPECT_EQ(NewVLdEnd->getName(), "NewVLdEnd"); + EXPECT_EQ(NewVLdEnd->getType(), VLd->getType()); + EXPECT_EQ(NewVLdEnd->getPointerOperand(), Arg1); + EXPECT_EQ(NewVLdEnd->getAlign(), 8); + EXPECT_EQ(NewVLdEnd->getParent(), BB); + EXPECT_EQ(NewVLdEnd->getNextNode(), nullptr); } TEST_F(SandboxIRTest, StoreInst) {