diff --git a/loopy/target/pyopencl.py b/loopy/target/pyopencl.py
index f24b115fd5a35af94e4a6d437550bccf86b5bee0..9955705a2fbca26d12dad95b45d2f547ad778568 100644
--- a/loopy/target/pyopencl.py
+++ b/loopy/target/pyopencl.py
@@ -441,7 +441,9 @@ def generate_value_arg_setup(kernel, devices, implemented_data_info):
         warn("{knl_name}: device not supplied to PyOpenCLTarget--"
                 "workarounds for broken OpenCL implementations "
                 "(such as those relating to complex numbers) "
-                "may not be enabled when needed"
+                "may not be enabled when needed. To avoid this, "
+                "pass target=lp.PyOpenCLTarget(dev) when creating "
+                "the kernel."
                 .format(knl_name=kernel.name))
 
     if any(count_bug_per_dev):
diff --git a/loopy/transform/iname.py b/loopy/transform/iname.py
index d3285a417f4f0bde9b5d023d4ca1816a5fa2f0f3..2347cef3c04d2a44cef91782700e097a20e19712 100644
--- a/loopy/transform/iname.py
+++ b/loopy/transform/iname.py
@@ -910,7 +910,7 @@ def _get_iname_duplication_options(insn_iname_sets, old_common_inames=frozenset(
             iname_insns = frozenset(
                     insn
                     for insn in insn_iname_sets
-                    if frozenset([iname]).issubset(insn))
+                    if frozenset([iname]) <= insn)
 
             import itertools as it
             # For a given iname, the set of instructions containing this iname
@@ -921,7 +921,7 @@ def _get_iname_duplication_options(insn_iname_sets, old_common_inames=frozenset(
                     for l in range(1, len(iname_insns))):
                 yield (
                     iname,
-                    tuple(insn.union(old_common_inames) for insn in insns_to_dup))
+                    tuple(insn | old_common_inames for insn in insns_to_dup))
 
     # If partitioning was empty, we have recursed successfully and yield nothing