10b57cec5SDimitry Andric //===-- Use.cpp - Implement the Use class ---------------------------------===// 20b57cec5SDimitry Andric // 30b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 40b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 50b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 60b57cec5SDimitry Andric // 70b57cec5SDimitry Andric //===----------------------------------------------------------------------===// 80b57cec5SDimitry Andric 90b57cec5SDimitry Andric #include "llvm/IR/Use.h" 100b57cec5SDimitry Andric #include "llvm/IR/User.h" 110b57cec5SDimitry Andric #include "llvm/IR/Value.h" 120b57cec5SDimitry Andric #include <new> 130b57cec5SDimitry Andric 140b57cec5SDimitry Andric namespace llvm { 150b57cec5SDimitry Andric 160b57cec5SDimitry Andric void Use::swap(Use &RHS) { 170b57cec5SDimitry Andric if (Val == RHS.Val) 180b57cec5SDimitry Andric return; 190b57cec5SDimitry Andric 200b57cec5SDimitry Andric if (Val) 210b57cec5SDimitry Andric removeFromList(); 220b57cec5SDimitry Andric 230b57cec5SDimitry Andric Value *OldVal = Val; 240b57cec5SDimitry Andric if (RHS.Val) { 250b57cec5SDimitry Andric RHS.removeFromList(); 260b57cec5SDimitry Andric Val = RHS.Val; 270b57cec5SDimitry Andric Val->addUse(*this); 280b57cec5SDimitry Andric } else { 290b57cec5SDimitry Andric Val = nullptr; 300b57cec5SDimitry Andric } 310b57cec5SDimitry Andric 320b57cec5SDimitry Andric if (OldVal) { 330b57cec5SDimitry Andric RHS.Val = OldVal; 340b57cec5SDimitry Andric RHS.Val->addUse(RHS); 350b57cec5SDimitry Andric } else { 360b57cec5SDimitry Andric RHS.Val = nullptr; 370b57cec5SDimitry Andric } 380b57cec5SDimitry Andric } 390b57cec5SDimitry Andric 400b57cec5SDimitry Andric unsigned Use::getOperandNo() const { 410b57cec5SDimitry Andric return this - getUser()->op_begin(); 420b57cec5SDimitry Andric } 430b57cec5SDimitry Andric 440b57cec5SDimitry Andric void Use::zap(Use *Start, const Use *Stop, bool del) { 450b57cec5SDimitry Andric while (Start != Stop) 460b57cec5SDimitry Andric (--Stop)->~Use(); 470b57cec5SDimitry Andric if (del) 480b57cec5SDimitry Andric ::operator delete(Start); 490b57cec5SDimitry Andric } 500b57cec5SDimitry Andric 51*5ffd83dbSDimitry Andric } // namespace llvm 52