[MLBEDSW-2335] SoftMax int16

Added graph rewrite of Softmax for int16.

Change-Id: Id7885af6056a23e8b8362fb61ae94283251eb398
Signed-off-by: Fredrik Svedberg <fredrik.svedberg@arm.com>
diff --git a/ethosu/vela/pass_packing.py b/ethosu/vela/pass_packing.py
index c14a70b..8fb95f0 100644
--- a/ethosu/vela/pass_packing.py
+++ b/ethosu/vela/pass_packing.py
@@ -66,6 +66,7 @@
         "MaxPool",
         "AvgPoolAct",
         "MaxPoolAct",
+        "ReduceSum",
         # deconvolution
         "ResizeBilinear",
     )
@@ -85,10 +86,12 @@
         "Sub",
         "Minimum",
         "Maximum",
+        "SHL",
+        "SHR",
     )
 )
 
-unary_elem_wise_main_ops = set(("LeakyRelu", "Abs"))  # Unary element-wise operations
+unary_elem_wise_main_ops = set(("LeakyRelu", "Abs", "CLZ",))  # Unary element-wise operations
 
 elem_wise_main_ops = binary_elem_wise_main_ops | unary_elem_wise_main_ops
 
@@ -417,13 +420,12 @@
             # Swap broadcast input if applicable
             broadcast_input_check(ps)
 
+            # If only 1 input, IFM and IFM2 will be the same tensor
             ps.ifm_tensor = ps.inputs[0]
+            ps.ifm2_tensor = ps.inputs[-1]
 
-            if len(ps.inputs) == 1:
-                # Only 1 input, IFM and IFM2 are the same tensor
-                ps.ifm2_tensor = ps.inputs[0]
-            else:
-                ps.ifm2_tensor = ps.inputs[1]
+            if len(ps.inputs) > 2:
+                ps.ifm_tensor = ps.inputs[-2]
         else:
             ps.ifm_tensor = ifm_tensor
             ps.ifm2_tensor = None
@@ -432,6 +434,7 @@
         assert ps.placement != PassPlacement.Npu or ps.ofm_tensor is not None
         ps.weight_tensor = ps.get_primary_op_ifm_weights()[1]
         ps.scale_tensor = ps.get_primary_op_ifm_weights_biases_ofm()[2]
+        ps.lut_tensor = ps.get_primary_op_lut()
 
         for op in ps.ops:
             op.scheduled_pass = ps