#include "core/modelIR/operations/GemmOp.h"
#include "core/modelIR/operations/InputOp.h"
#include "core/modelIR/operations/LeakyReluOp.h"
+#include "core/modelIR/operations/PadOp.h"
#include "core/modelIR/operations/PoolOp.h"
#include "core/modelIR/operations/ReduceFOp.h"
#include "core/modelIR/operations/ReluOp.h"
throw AclCppException("EluOp not supported by the ACL library yet.");
}
-void AclCppOpGenerator::visit(ops::PadOp&) {
- throw AclCppException("PadOp not supported by the ACL library yet.");
+void AclCppOpGenerator::visit(ops::PadOp& op) {
+ // Get the id of the input tensor.
+ auto in_op = op.getPrevNodes()[0].op;
+ auto input = AF::id(tensorName(in_op));
+
+ // Create the output tensor in the DOM
+ auto out = genTensor(op, op.getOutputShape(0));
+ addToPersistentTensors(out);
+
+ // Generate PadLayer params
+ auto prefix = out->name() + "_pad_layer";
+ auto pad_list_decl = _constrBlock->var("arm_compute::PaddingList", prefix + "_pads");
+ auto pad_list = pad_list_decl->use();
+ for (int i = 0; i < op.getNumDim(); ++i) {
+ auto pad_var = _constrBlock->var("arm_compute::PaddingInfo", prefix + "_pad_" + to_string(i),
+ {},
+ {AF::lit(to_string(op.getPaddingForDim(i).first)),
+ AF::lit(to_string(op.getPaddingForDim(i).second))});
+ auto pad = pad_var->use();
+ _constrBlock->call("push_back", {pad}, pad_list);
+ }
+
+ // Generate PadLayer
+ auto layer = genLayer("arm_compute::CLPadLayer", prefix,
+ {AF::ref(input), AF::ref(out), pad_list});
+ genLayerExecution(layer);
}
template <typename Op>