diff --git a/doc/make_constants.py b/doc/make_constants.py
index a88e40b7058f036b5e175398bf3bb84101ee28c1..c9de4cd87fef509b0bbd5c6ef7e2036af77eb6c4 100644
--- a/doc/make_constants.py
+++ b/doc/make_constants.py
@@ -32,6 +32,7 @@ cl_11 = ("CL_1.1", "0.92")
 cl_12 = ("CL_1.2", "2011.2")
 cl_12_2015 = ("CL_1.2", "2015.2")
 cl_20 = ("CL_2.0", "2015.2")
+cl_21 = ("CL_2.1", "2016.2")
 amd_devattr = ("cl_amd_device_attribute_query", "2013.2")
 qcom_hp_devattr = ("cl_qcom_ext_host_ptr", "2016.2")
 intel_me_devattr = ("cl_intel_advanced_motion_estimation", "2016.2")
@@ -182,6 +183,9 @@ const_ext_lookup = {
             "PREFERRED_PLATFORM_ATOMIC_ALIGNMENT": cl_20,
             "PREFERRED_GLOBAL_ATOMIC_ALIGNMENT": cl_20,
             "PREFERRED_LOCAL_ATOMIC_ALIGNMENT": cl_20,
+            "IL_VERSION": cl_21,
+            "MAX_NUM_SUB_GROUPS": cl_21,
+            "SUB_GROUP_INDEPENDENT_FORWARD_PROGRESS": cl_21,
             },
 
         cl.mem_object_type: {
diff --git a/src/c_wrapper/device.cpp b/src/c_wrapper/device.cpp
index 3e0525cdd3c2d7daeeefb8bd018a267a39b0e8e1..7bc7fd5a690b6a092bce17f5b28f15cb436a5c49 100644
--- a/src/c_wrapper/device.cpp
+++ b/src/c_wrapper/device.cpp
@@ -238,6 +238,14 @@ device::get_info(cl_uint param_name) const
     case CL_DEVICE_PREFERRED_LOCAL_ATOMIC_ALIGNMENT:
         return DEV_GET_INT_INF(cl_uint);
 #endif
+#if PYOPENCL_CL_VERSION >= 0x2010
+    case CL_DEVICE_IL_VERSION:
+        return pyopencl_get_str_info(Device, PYOPENCL_CL_CASTABLE_THIS, param_name);
+    case CL_DEVICE_MAX_NUM_SUB_GROUPS:
+        return DEV_GET_INT_INF(cl_uint);
+    case CL_DEVICE_SUB_GROUP_INDEPENDENT_FORWARD_PROGRESS:
+        return DEV_GET_INT_INF(cl_bool);
+#endif
 
 
         // {{{ AMD dev attrs
diff --git a/src/c_wrapper/wrap_constants.cpp b/src/c_wrapper/wrap_constants.cpp
index bfa882a63dac7b00c1a79393fc28d0b7660509ce..701638b98b9eb415bd7da4cfe50ea45707d23b90 100644
--- a/src/c_wrapper/wrap_constants.cpp
+++ b/src/c_wrapper/wrap_constants.cpp
@@ -302,6 +302,11 @@ void populate_constants(void(*add)(const char*, const char*, int64_t value))
     ADD_ATTR("device_info", DEVICE_, PREFERRED_PLATFORM_ATOMIC_ALIGNMENT);
     ADD_ATTR("device_info", DEVICE_, PREFERRED_GLOBAL_ATOMIC_ALIGNMENT);
     ADD_ATTR("device_info", DEVICE_, PREFERRED_LOCAL_ATOMIC_ALIGNMENT);
+#endif
+#if PYOPENCL_CL_VERSION >= 0x2010
+    ADD_ATTR("device_info", DEVICE_, IL_VERSION);
+    ADD_ATTR("device_info", DEVICE_, MAX_NUM_SUB_GROUPS);
+    ADD_ATTR("device_info", DEVICE_, SUB_GROUP_INDEPENDENT_FORWARD_PROGRESS);
 #endif
     /* cl_intel_advanced_motion_estimation */
 #ifdef CL_DEVICE_ME_VERSION_INTEL