diff --git a/llvm/projects/keras/frontend/hpvm_dfg_translator.py b/llvm/projects/keras/frontend/hpvm_dfg_translator.py
index 3ddb675c7b01e94c102d4e37d116729953cf0287..e66ed64dff3aa5d0b0c512406c7b7e4e90a6eb31 100644
--- a/llvm/projects/keras/frontend/hpvm_dfg_translator.py
+++ b/llvm/projects/keras/frontend/hpvm_dfg_translator.py
@@ -187,7 +187,31 @@ class HPVMTranslator:
     return node_footer_str
 
 
+  # NOTE: genHpvmNodeEdges is replaced by genHpvmEdges 
+  def genHpvmNodeEdges2(self, hpvm_node_id, input_vars):
+
+    hpvm_edge_str = "\n  void* " + hpvm_node_id + " = "
+    hpvm_edge_str += "__visc__createNodeND(0, " + hpvm_node_id + "_node); \n\n"
+
+    it = 0
+    for input_var_name in input_vars:
+      if input_var_name in self.filter_names:
+        input_index = self.filter_names[input_var_name]
+        index1 = input_index * 2
+        index2 = index1 + 1      
+        hpvm_edge_str += "  __visc__bindIn(" + hpvm_node_id + ", " + str(index1) + ", " + str(it*2) + ", 0); \n"
+        hpvm_edge_str += "  __visc__bindIn(" + hpvm_node_id + ", " + str(index2) + ", " + str(it*2+1) + ", 0); \n"
+
+      elif input_var_name in self.hpvm_node_names:
+        hpvm_edge_str += "  __visc__edge(" + input_var_name + ", " + hpvm_node_id + ", 1, 0, " + str(it*2) + ", 0); \n"
+        hpvm_edge_str += "  __visc__edge(" + input_var_name + ", " + hpvm_node_id + ", 1, 1, " + str(it*2+1) + ", 0); \n"
+
+      it += 1
+      
+    return hpvm_edge_str
 
+  
+  # Fix: replace deprecated  genHpvmNodeEdges with  genHpvmEdges
   def genHpvmNodeEdges(self, out_var_name, input_var_name, input_var_name2):
 
     print ("input_var_name2 = ", input_var_name2)
@@ -331,6 +355,40 @@ class HPVMTranslator:
     
 
 
+  def genBatchNormNode(self, cur_node):
+    #input_var_name = self.getSingleInputName(cur_node)
+    out_var_name = self.getVariableName(cur_node)
+    
+    header_str = self.genNodeHeader(out_var_name, 5)
+    inst_str = header_str 
+
+    inst_str += "  void *r = __visc__tensor_batchnorm(t1, t2, t3, t4, t5, "
+    inst_str += str(cur_node.epsilon) + "); \n"
+
+    footer_str = self.genNodeFooter(5)
+    inst_str += footer_str
+        
+    self.node_str += inst_str
+
+    layer_name = cur_node.layer_name
+    input_id = self.getSingleInputName(cur_node)
+    gamma_id = layer_name + "_gamma"
+    beta_id = layer_name + "_beta"
+    mean_id = layer_name + "_mean"
+    variance_id = layer_name + "_variance"
+    
+    input_vars = []
+    input_vars.append(input_id)
+    input_vars.append(gamma_id)
+    input_vars.append(beta_id)
+    input_vars.append(mean_id)
+    input_vars.append(variance_id)
+
+    self.root_str +=  self.genHpvmNodeEdges2(out_var_name, input_vars)
+
+
+    
+
   def genBiasNode(self, cur_node):
     input_var_name = self.output_map[cur_node.layer_name]
     out_var_name = self.getVariableName(cur_node)    
@@ -431,7 +489,10 @@ class HPVMTranslator:
 
     if layer_type == "DepthwiseConv2D":
       self.genDepthwiseConvNode(cur_node)
-      
+
+    if layer_type == "BatchNormalization":
+      self.genBatchNormNode(cur_node)
+
     if layer_type == "Dense":
       self.genDenseNode(cur_node)