diff --git a/loopy/target/c/codegen/expression.py b/loopy/target/c/codegen/expression.py
index 55c8b8eeceb77f8fb0e4162ea15b665aee35b8ba..ce6e039fa3f60feae72458308915f87babab2867 100644
--- a/loopy/target/c/codegen/expression.py
+++ b/loopy/target/c/codegen/expression.py
@@ -666,24 +666,24 @@ class LoopyCCodeMapper(RecursiveMapper):
             return base_impl(expr, enclosing_prec, type_context)
 
         tgt_dtype = self.infer_type(expr)
-        if 'c' == tgt_dtype.kind:
+        if tgt_dtype.is_complex():
             if expr.exponent in [2, 3, 4]:
                 value = expr.base
                 for i in range(expr.exponent-1):
                     value = value * expr.base
                 return self.rec(value, enclosing_prec, type_context)
             else:
-                b_complex = 'c' == self.infer_type(expr.base).kind
-                e_complex = 'c' == self.infer_type(expr.exponent).kind
+                b_complex = self.infer_type(expr.base).is_complex()
+                e_complex = self.infer_type(expr.exponent).is_complex()
 
                 if b_complex and not e_complex:
                     return "%s_powr(%s, %s)" % (
-                            self.complex_type_name(tgt_dtype),
+                            self.complex_type_name(tgt_dtype.numpy_dtype),
                             self.rec(expr.base, PREC_NONE, type_context, tgt_dtype),
                             self.rec(expr.exponent, PREC_NONE, type_context))
                 else:
                     return "%s_pow(%s, %s)" % (
-                            self.complex_type_name(tgt_dtype),
+                            self.complex_type_name(tgt_dtype.numpy_dtype),
                             self.rec(expr.base, PREC_NONE, type_context, tgt_dtype),
                             self.rec(expr.exponent, PREC_NONE,
                                 type_context, tgt_dtype))