diff --git a/src/parsers/bits.c b/src/parsers/bits.c
index 91669726d4129c3e803dbc2f3cd577c5cd227bb7..4663fe2a20a45e7a93163f97699d7062f4eb240a 100644
--- a/src/parsers/bits.c
+++ b/src/parsers/bits.c
@@ -29,7 +29,23 @@ static HParseResult* parse_bits(void* env, HParseState *state) {
 static bool bits_llvm(HLLVMParserCompileContext *ctxt,
                       HParser *p,
                       LLVMValueRef *res) {
-  /* Emit LLVM IR to parse ((struct bits_env *)env)->length bits */
+  /* Emit LLVM IR to parse ((struct bits_env *)(p->env))->length bits */
+
+  /* Allocator */
+  HAllocator *mm__ = NULL;
+  /* Names */
+  char *bits_bb_name = NULL;
+  int bits_bb_name_len = 0;
+  char *read_bits_name = NULL;
+  int read_bits_name_len;
+  /* Basic blocks */
+  LLVMBasicBlockRef bits_bb;
+  /* Arguments for call to h_read_bits() */
+  LLVMValueRef bits_args[3];
+  /* Result of call to h_read_bits() */
+  LLVMValueRef bits;
+  /* HParseResult */
+  LLVMValueRef mr;
 
   if (!res) return false;
   if (!p) return false;
@@ -37,34 +53,58 @@ static bool bits_llvm(HLLVMParserCompileContext *ctxt,
   *res = NULL;
   if (!ctxt) return false;
 
+  /* Unpack the allocator */
+  mm__ = ctxt->mm__;
+
+  /* Unpack the bits_env struct */
   struct bits_env *env = (struct bits_env *)(p->env);
+  if (!env) return false;
+
   /* Error out on unsupported length */
   if (env->length > 64 || env->length == 0) return false;
   /* Set up params for call to h_read_bits */
-  LLVMValueRef bits_args[3];
   bits_args[0] = ctxt->stream;
   bits_args[1] = LLVMConstInt(LLVMInt32Type(), env->length, 0);
   bits_args[2] = LLVMConstInt(LLVMInt8Type(), env->signedp ? 1 : 0, 0);
 
   /* Set up basic blocks: entry, success and failure branches, then exit */
-  LLVMBasicBlockRef bits_bb = LLVMAppendBasicBlock(ctxt->func, "bits");
-
-  /* Basic block: entry */
+  bits_bb_name_len = snprintf(NULL, 0, "bits_%p", p);
+  bits_bb_name = h_new(char, bits_bb_name_len + 1);
+  snprintf(bits_bb_name, bits_bb_name_len + 1, "bits_%p", p);
+  bits_bb = LLVMAppendBasicBlock(ctxt->func, bits_bb_name);
   LLVMBuildBr(ctxt->builder, bits_bb);
   LLVMPositionBuilderAtEnd(ctxt->builder, bits_bb);
 
-  /* Call to h_read_bits() */
-  // %read_bits = call i64 @h_read_bits(%struct.HInputStream_* %8, i32 env_->length, i8 signext env_->signedp)
-  LLVMValueRef bits = LLVMBuildCall(ctxt->builder,
-      LLVMGetNamedFunction(ctxt->mod, "h_read_bits"), bits_args, 3, "read_bits");
+  /*
+   * Call to h_read_bits()
+   *
+   * %read_bits = call i64 @h_read_bits(%struct.HInputStream_* %8,
+   *                                    i32 env_->length,
+   *                                    i8 signext env_->signedp)
+   */
+  read_bits_name_len = snprintf(NULL, 0, "read_bits_%p", p);
+  read_bits_name = h_new(char, read_bits_name_len + 1);
+  snprintf(read_bits_name, read_bits_name_len + 1, "read_bits_%p", p);
+  bits = LLVMBuildCall(ctxt->builder,
+                       LLVMGetNamedFunction(ctxt->mod, "h_read_bits"),
+                       bits_args, 3, read_bits_name);
 
   /* Make an HParseResult out of it */
-  LLVMValueRef mr;
   h_llvm_make_tt_suint(ctxt, env->length, env->signedp, bits, &mr);
 
   /* Return mr */
   *res = mr;
 
+  if (bits_bb_name) {
+    h_free(bits_bb_name);
+    bits_bb_name = NULL;
+  }
+
+  if (read_bits_name) {
+    h_free(read_bits_name);
+    read_bits_name = NULL;
+  }
+
   return true;
 }