message: [mlir] Remove duplicated operand accessors
  The Instruction subclasses just need getInstOperands() and getNumOperands(). Operand iterators and the other accessors are provided by Instruction for free; why would we not just use those?
diff: @@ -314,51 +314,9 @@ public:
  unsigned getNumOperands() const { return operands.size(); }
  - CFGValue *getOperand(unsigned idx) { return getInstOperand(idx).get(); }
  - const CFGValue *getOperand(unsigned idx) const {
  - return getInstOperand(idx).get();
  - }
  - void setOperand(unsigned idx, CFGValue *value) {
  - return getInstOperand(idx).set(value);
  - }
  -
  - // Support non-const operand iteration.
  - using operand_iterator = OperandIterator<BranchInst, CFGValue>;
  -
  - operand_iterator operand_begin() { return operand_iterator(this, 0); }
  -
  - operand_iterator operand_end() {
  - return operand_iterator(this, getNumOperands());
  - }
  -
  - llvm::iterator_range<operand_iterator> getOperands() {
  - return {operand_begin(), operand_end()};
  - }
  -
  - // Support const operand iteration.
  - typedef OperandIterator<const BranchInst, const CFGValue>
  - const_operand_iterator;
  -
  - const_operand_iterator operand_begin() const {
  - return const_operand_iterator(this, 0);
  - }
  -
  - const_operand_iterator operand_end() const {
  - return const_operand_iterator(this, getNumOperands());
  - }
  -
  - llvm::iterator_range<const_operand_iterator> getOperands() const {
  - return {operand_begin(), operand_end()};
  - }
  -
  ArrayRef<InstOperand> getInstOperands() const { return operands; }
  MutableArrayRef<InstOperand> getInstOperands() { return operands; }
  - InstOperand &getInstOperand(unsigned idx) { return operands[idx]; }
  - const InstOperand &getInstOperand(unsigned idx) const {
  - return operands[idx];
  - }
  -
  /// Add one value to the operand list.
  void addOperand(CFGValue *value);
  @@ -408,44 +366,9 @@ public:
  typedef OperandIterator<const CondBranchInst, const CFGValue>
  const_operand_iterator;
  - //
  - // Accessors for the entire operand list. This includes operands to both true
  - // and false blocks.
  - //
  -
  - CFGValue *getOperand(unsigned idx) { return getInstOperand(idx).get(); }
  - const CFGValue *getOperand(unsigned idx) const {
  - return getInstOperand(idx).get();
  - }
  - void setOperand(unsigned idx, CFGValue *value) {
  - return getInstOperand(idx).set(value);
  - }
  -
  - operand_iterator operand_begin() { return operand_iterator(this, 0); }
  - operand_iterator operand_end() {
  - return operand_iterator(this, getNumOperands());
  - }
  - llvm::iterator_range<operand_iterator> getOperands() {
  - return {operand_begin(), operand_end()};
  - }
  -
  - const_operand_iterator operand_begin() const {
  - return const_operand_iterator(this, 0);
  - }
  - const_operand_iterator operand_end() const {
  - return const_operand_iterator(this, getNumOperands());
  - }
  - llvm::iterator_range<const_operand_iterator> getOperands() const {
  - return {operand_begin(), operand_end()};
  - }
  -
  ArrayRef<InstOperand> getInstOperands() const { return operands; }
  MutableArrayRef<InstOperand> getInstOperands() { return operands; }
  - InstOperand &getInstOperand(unsigned idx) { return operands[idx]; }
  - const InstOperand &getInstOperand(unsigned idx) const {
  - return operands[idx];
  - }
  unsigned getNumOperands() const { return operands.size(); }
  //
  