diff --git a/ethosu/vela/supported_operators.py b/ethosu/vela/supported_operators.py
index ddfb8ed..04cda1d 100644
--- a/ethosu/vela/supported_operators.py
+++ b/ethosu/vela/supported_operators.py
@@ -25,6 +25,7 @@
 from .operation import get_slice_offsets
 from .operation import Op
 from .tensor import check_quantized_tens_scaling_equal
+from .tflite_mapping import optype_to_builtintype
 
 
 # Custom decorator function to allow formatting docstrings containing "{}"
@@ -36,10 +37,6 @@
     return docstring
 
 
-def warn_cpu(op, msg):
-    print("Warning: {} {}, placing on CPU".format(op.type, msg))
-
-
 class SupportedOperators:
     # Categorised lists of supported operators
     npu_pre_ops = set((Op.SplitSliceRead,))
@@ -232,15 +229,16 @@
         self.specific_constraints[Op.LeakyRelu].append(SupportedOperators.constraint_alpha_valid)
 
     def is_operator_supported(self, op):
+        ext_type = optype_to_builtintype(op.type)
         if op.type not in SupportedOperators.supported_operators:
             if op.type not in (Op.Placeholder, Op.SubgraphInput, Op.Const):
-                print(f"Info: {op.type} '{op.name}' is not supported on the NPU. Placing on CPU instead")
+                print(f"Info: {ext_type} '{op.name}' is a CPU only op")
             return False
 
         for constraint in self.generic_constraints + self.specific_constraints[op.type]:
             valid, extra = constraint(op)
             if not valid:
-                print(f"Warning: {op.type} '{op.name}' is not supported on the NPU. Placing on CPU instead")
+                print(f"Warning: {ext_type} '{op.name}' is not supported on the NPU. Placing on CPU instead")
                 print(f" - {constraint.__doc__}")
                 if extra:
                     print(f"   {extra}")
diff --git a/ethosu/vela/tflite_mapping.py b/ethosu/vela/tflite_mapping.py
index 8a53039..bbd44b0 100644
--- a/ethosu/vela/tflite_mapping.py
+++ b/ethosu/vela/tflite_mapping.py
@@ -689,3 +689,11 @@
 builtin_operator_inv_map = {v[0]: (k, v[1]) for k, v in builtin_operator_map.items()}
 
 builtin_operator_inv_map[Op.CustomNpuOp] = (BuiltinOperator.CUSTOM, CustomOptionsSerializer())
+
+
+def optype_to_builtintype(op_type):
+    if op_type in builtin_operator_inv_map:
+        builtin_type = builtin_operator_inv_map[op_type][0]
+        return next(k for k, v in vars(BuiltinOperator).items() if v == builtin_type)
+    else:
+        return "UNKNOWN"
