33 using LLVMTranslationDialectInterface::LLVMTranslationDialectInterface;
35 void annotateActivity(StringRef key,
36 ArrayRef<llvm::Instruction *> instructions)
const {
37 if (instructions.empty())
40 LLVMContext &llvmCtx = instructions.front()->getContext();
41 MDNode *md = MDNode::get(llvmCtx, {});
42 for (llvm::Instruction *inst : instructions) {
43 inst->setMetadata(key, md);
48 amendOperation(Operation *op, ArrayRef<llvm::Instruction *> instructions,
49 NamedAttribute attribute,
50 LLVM::ModuleTranslation &moduleTranslation)
const override {
51 if (
auto funcOp = dyn_cast<FunctionOpInterface>(op))
54 auto iciAttr = op->getAttrOfType<BoolAttr>(
"enzyme.ici");
55 auto icvAttr = op->getAttrOfType<BoolAttr>(
"enzyme.icv");
58 if (!(iciAttr && icvAttr))
62 if (iciAttr.getValue() && icvAttr.getValue()) {
63 annotateActivity(
"enzyme_inactive", instructions);
64 }
else if (!iciAttr.getValue() && !icvAttr.getValue()) {
65 annotateActivity(
"enzyme_active", instructions);
67 StringRef instActivity =
68 iciAttr.getValue() ?
"enzyme_inactive_inst" :
"enzyme_active_inst";
69 StringRef valActivity =
70 icvAttr.getValue() ?
"enzyme_inactive_val" :
"enzyme_active_val";
71 annotateActivity(instActivity, instructions);
72 annotateActivity(valActivity, instructions);
75 op->removeAttr(
"enzyme.ici");
76 op->removeAttr(
"enzyme.icv");
81int main(
int argc,
char **argv) {
82 mlir::registerAllTranslations();
84 mlir::TranslateFromMLIRRegistration withdescription(
85 "activity-to-llvm",
"different from option",
86 [](mlir::Operation *op, llvm::raw_ostream &output) {
87 llvm::LLVMContext llvmContext;
88 auto llvmModule = translateModuleToLLVMIR(op, llvmContext);
92 llvmModule->print(output,
nullptr);
95 [](mlir::DialectRegistry ®istry) {
97 .insert<DLTIDialect, func::FuncDialect, enzyme::EnzymeDialect>();
98 registerAllToLLVMIRTranslations(registry);
99 registry.addExtension(
100 +[](MLIRContext *ctx, enzyme::EnzymeDialect *dialect) {
105 return failed(mlir::mlirTranslateMain(
106 argc, argv,
"Enzyme MLIR Translation Testing Tool"));