diff --git a/openfpga/test_vpr_arch/k6_frac_N10_tileable_adder_register_scan_chain_40nm.xml b/openfpga/test_vpr_arch/k6_frac_N10_tileable_adder_register_scan_chain_40nm.xml
index 3b79b1df0..0bce05d74 100644
--- a/openfpga/test_vpr_arch/k6_frac_N10_tileable_adder_register_scan_chain_40nm.xml
+++ b/openfpga/test_vpr_arch/k6_frac_N10_tileable_adder_register_scan_chain_40nm.xml
@@ -720,13 +720,10 @@
-
-
-
diff --git a/vpr/src/pack/prepack.cpp b/vpr/src/pack/prepack.cpp
index cf9ccdd6d..dd9d1da3f 100644
--- a/vpr/src/pack/prepack.cpp
+++ b/vpr/src/pack/prepack.cpp
@@ -1557,6 +1557,13 @@ static t_pb_graph_pin* get_connected_primitive_pin(const t_pb_graph_pin* cluster
* will be only one pin connected to the very first adder in the cluster.
*/
static void get_all_connected_primitive_pins(const t_pb_graph_pin* cluster_input_pin, std::vector& connected_primitive_pins) {
+
+ /* Xifan Tang: Skip pins belong to unpackable modes */
+ if ( (nullptr != cluster_input_pin->parent_node->pb_type->parent_mode)
+ && (false == cluster_input_pin->parent_node->pb_type->parent_mode->packable) ) {
+ return;
+ }
+
for (int iedge = 0; iedge < cluster_input_pin->num_output_edges; iedge++) {
const auto& output_edge = cluster_input_pin->output_edges[iedge];
for (int ipin = 0; ipin < output_edge->num_output_pins; ipin++) {