119 lines · cpp
1// RUN: %check_clang_tidy %s llvm-use-new-mlir-op-builder %t2 3namespace mlir {4class Location {};5class Value {};6class OpBuilder {7public:8 template <typename OpTy, typename... Args>9 OpTy create(Location location, Args &&...args) {10 return OpTy(args...);11 }12 Location getUnknownLoc() { return Location(); }13};14class ImplicitLocOpBuilder : public OpBuilder {15public:16 template <typename OpTy, typename... Args>17 OpTy create(Args &&...args) {18 return OpTy(args...);19 }20};21struct ModuleOp {22 ModuleOp() {}23 static ModuleOp create(OpBuilder &builder, Location location) {24 return ModuleOp();25 }26};27struct NamedOp {28 NamedOp(const char* name) {}29 static NamedOp create(OpBuilder &builder, Location location, const char* name) {30 return NamedOp(name);31 }32 Value getResult() { return Value(); }33};34struct OperandOp {35 OperandOp(Value val) {}36 static OperandOp create(OpBuilder &builder, Location location, Value val) {37 return OperandOp(val);38 }39};40} // namespace mlir41 42#define ASSIGN(A, B, C, D) C A = B.create<C>(B.getUnknownLoc(), D)43 44template <typename T>45void g(mlir::OpBuilder &b) {46 // CHECK-MESSAGES: :[[@LINE+2]]:3: warning: use 'OpType::create(builder, ...)' instead of 'builder.create<OpType>(...)' [llvm-use-new-mlir-op-builder]47 // CHECK-FIXES: T::create(b, b.getUnknownLoc(), "gaz");48 b.create<T>(b.getUnknownLoc(), "gaz");49}50 51class CustomBuilder : public mlir::ImplicitLocOpBuilder {52public:53 mlir::NamedOp f(const char *name) {54 // CHECK-MESSAGES: :[[@LINE+2]]:12: warning: use 'OpType::create(builder, ...)'55 // CHECK-FIXES: return mlir::NamedOp::create(*this, name);56 return create<mlir::NamedOp>(name);57 }58 59 mlir::NamedOp g(const char *name) {60 using mlir::NamedOp;61 // CHECK-MESSAGES: :[[@LINE+2]]:12: warning: use 'OpType::create(builder, ...)'62 // CHECK-FIXES: return NamedOp::create(*this, name);63 return create<NamedOp>(name);64 }65};66 67void f() {68 mlir::OpBuilder builder;69 // CHECK-MESSAGES: :[[@LINE+2]]:3: warning: use 'OpType::create(builder, ...)' instead of 'builder.create<OpType>(...)' [llvm-use-new-mlir-op-builder]70 // CHECK-FIXES: mlir:: ModuleOp::create(builder, builder.getUnknownLoc());71 builder.create<mlir:: ModuleOp>(builder.getUnknownLoc());72 73 using mlir::NamedOp;74 using mlir::OperandOp;75 76 // CHECK-MESSAGES: :[[@LINE+2]]:3: warning: use 'OpType::create(builder, ...)' instead of 'builder.create<OpType>(...)' [llvm-use-new-mlir-op-builder]77 // CHECK-FIXES: NamedOp::create(builder, builder.getUnknownLoc(), "baz");78 builder.create<NamedOp>(builder.getUnknownLoc(), "baz");79 80 // CHECK-MESSAGES: :[[@LINE+4]]:3: warning: use 'OpType::create(builder, ...)' instead of 'builder.create<OpType>(...)' [llvm-use-new-mlir-op-builder]81 // CHECK-FIXES: NamedOp::create(builder,82 // CHECK-FIXES: builder.getUnknownLoc(),83 // CHECK-FIXES: "caz");84 builder.85 create<NamedOp> (86 builder.getUnknownLoc(),87 "caz");88 89 // CHECK-MESSAGES: :[[@LINE+1]]:3: warning: use 'OpType::create(builder, ...)' instead of 'builder.create<OpType>(...)' [llvm-use-new-mlir-op-builder]90 ASSIGN(op, builder, NamedOp, "daz");91 92 g<NamedOp>(builder);93 94 mlir::ImplicitLocOpBuilder ib;95 // CHECK-MESSAGES: :[[@LINE+2]]:3: warning: use 'OpType::create(builder, ...)' instead of 'builder.create<OpType>(...)' [llvm-use-new-mlir-op-builder]96 // CHECK-FIXES: mlir::ModuleOp::create(ib );97 ib.create<mlir::ModuleOp>( );98 99 // CHECK-MESSAGES: :[[@LINE+2]]:3: warning: use 'OpType::create(builder, ...)' instead of 'builder.create<OpType>(...)' [llvm-use-new-mlir-op-builder]100 // CHECK-FIXES: mlir::OpBuilder().create<mlir::ModuleOp>(builder.getUnknownLoc());101 mlir::OpBuilder().create<mlir::ModuleOp>(builder.getUnknownLoc());102 103 auto *p = &builder;104 // CHECK-MESSAGES: :[[@LINE+2]]:3: warning: use 'OpType::create(builder, ...)'105 // CHECK-FIXES: NamedOp::create(*p, builder.getUnknownLoc(), "eaz");106 p->create<NamedOp>(builder.getUnknownLoc(), "eaz");107 108 CustomBuilder cb;109 cb.f("faz");110 cb.g("gaz");111 112 // CHECK-FIXES: OperandOp::create(builder, builder.getUnknownLoc(),113 // CHECK-FIXES-NEXT: NamedOp::create(builder, builder.getUnknownLoc(), "haz").getResult());114 // CHECK-MESSAGES: :[[@LINE+2]]:3: warning: use 'OpType::create(builder, ...)' instead of 'builder.create<OpType>(...)' [llvm-use-new-mlir-op-builder]115 // CHECK-MESSAGES: :[[@LINE+2]]:5: warning: use 'OpType::create(builder, ...)' instead of 'builder.create<OpType>(...)' [llvm-use-new-mlir-op-builder]116 builder.create<OperandOp>(builder.getUnknownLoc(),117 builder.create<NamedOp>(builder.getUnknownLoc(), "haz").getResult());118}119