From 25d03a717689c661024ac2ee33b53ac2a9f33019 Mon Sep 17 00:00:00 2001
From: Andrea Shepard <andrea@special-circumstanc.es>
Date: Sat, 16 Nov 2019 01:48:03 +0000
Subject: [PATCH] Use LLVM name/label macros in token.c

---
 src/backends/llvm/llvm.h |   5 +
 src/parsers/token.c      | 325 +++++++++------------------------------
 2 files changed, 79 insertions(+), 251 deletions(-)

diff --git a/src/backends/llvm/llvm.h b/src/backends/llvm/llvm.h
index 368a4b0e..4cd8a015 100644
--- a/src/backends/llvm/llvm.h
+++ b/src/backends/llvm/llvm.h
@@ -21,6 +21,11 @@
   s##_name = h_new(char, s##_name_len + 1); \
   snprintf( s##_name, s##_name_len + 1, #s "_%p", (p));
 
+#define H_LLVM_COMPUTE_NAME_X(s, f, ...) \
+  s##_name_len = snprintf(NULL, 0, #s "_" f "_%p", __VA_ARGS__); \
+  s##_name = h_new(char, s##_name_len + 1); \
+  snprintf( s##_name, s##_name_len + 1, #s "_" f "_%p", __VA_ARGS__);
+
 #define H_LLVM_FREE_NAME(s) \
   if ( s##_name ) { \
     h_free( s##_name); \
diff --git a/src/parsers/token.c b/src/parsers/token.c
index 3c2c6a88..81623569 100644
--- a/src/parsers/token.c
+++ b/src/parsers/token.c
@@ -88,38 +88,22 @@ static bool token_llvm_with_global(
   /* Allocator*/
   HAllocator *mm__ = NULL;
   /* Names */
-  char *tok_glob_entry_name = NULL;
-  int tok_glob_entry_name_len = 0;
-  char *tok_glob_loop_start_name = NULL;
-  int tok_glob_loop_start_name_len = 0;
-  char *tok_glob_loop_middle_name = NULL;
-  int tok_glob_loop_middle_name_len = 0;
-  char *tok_glob_loop_incr_name = NULL;
-  int tok_glob_loop_incr_name_len = 0;
-  char *tok_glob_success_name = NULL;
-  int tok_glob_success_name_len = 0;
-  char *tok_glob_end_name = NULL;
-  int tok_glob_end_name_len = 0;
-  char *tok_glob_str_name = NULL;
-  int tok_glob_str_name_len = 0;
-  char *tok_glob_i_name = NULL;
-  int tok_glob_i_name_len = 0;
-  char *tok_glob_icmp_i_len_name = NULL;
-  int tok_glob_icmp_i_len_name_len = 0;
-  char *tok_glob_cptr_name = NULL;
-  int tok_glob_cptr_name_len = 0;
-  char *tok_glob_c_name = NULL;
-  int tok_glob_c_name_len = 0;
-  char *tok_glob_read_bits_name = NULL;
-  int tok_glob_read_bits_name_len = 0;
-  char *tok_glob_r_name = NULL;
-  int tok_glob_r_name_len = 0;
-  char *tok_glob_icmp_c_r_name = NULL;
-  int tok_glob_icmp_c_r_name_len = 0;
-  char *tok_glob_i_incr_name = NULL;
-  int tok_glob_i_incr_name_len = 0;
-  char *tok_glob_rv_name = NULL;
-  int tok_glob_rv_name_len = 0;
+  H_LLVM_DECLARE_NAME(tok_glob_entry);
+  H_LLVM_DECLARE_NAME(tok_glob_loop_start);
+  H_LLVM_DECLARE_NAME(tok_glob_loop_middle);
+  H_LLVM_DECLARE_NAME(tok_glob_loop_incr);
+  H_LLVM_DECLARE_NAME(tok_glob_success);
+  H_LLVM_DECLARE_NAME(tok_glob_end);
+  H_LLVM_DECLARE_NAME(tok_glob_str);
+  H_LLVM_DECLARE_NAME(tok_glob_i);
+  H_LLVM_DECLARE_NAME(tok_glob_icmp_i_len);
+  H_LLVM_DECLARE_NAME(tok_glob_cptr);
+  H_LLVM_DECLARE_NAME(tok_glob_c);
+  H_LLVM_DECLARE_NAME(tok_glob_read_bits);
+  H_LLVM_DECLARE_NAME(tok_glob_r);
+  H_LLVM_DECLARE_NAME(tok_glob_icmp_c_r);
+  H_LLVM_DECLARE_NAME(tok_glob_i_incr);
+  H_LLVM_DECLARE_NAME(tok_glob_rv);
   /* Basic blocks */
   LLVMBasicBlockRef entry, loop_start, loop_middle, loop_incr, success, end;
   /* Values */
@@ -131,38 +115,17 @@ static bool token_llvm_with_global(
   mm__ = ctxt->mm__;
 
   /* Set up basic blocks: entry, success and exit branches */
-  tok_glob_entry_name_len = snprintf(NULL, 0, "tok_glob_entry_%p", p);
-  tok_glob_entry_name = h_new(char, tok_glob_entry_name_len + 1);
-  snprintf(tok_glob_entry_name, tok_glob_entry_name_len + 1,
-           "tok_glob_entry_%p", p);
+  H_LLVM_COMPUTE_NAME(tok_glob_entry, p);
   entry = LLVMAppendBasicBlock(ctxt->func, tok_glob_entry_name);
-  tok_glob_loop_start_name_len =
-    snprintf(NULL, 0, "tok_glob_loop_start_%p", p);
-  tok_glob_loop_start_name = h_new(char, tok_glob_loop_start_name_len + 1);
-  snprintf(tok_glob_loop_start_name, tok_glob_loop_start_name_len + 1,
-           "tok_glob_loop_start_%p", p);
+  H_LLVM_COMPUTE_NAME(tok_glob_loop_start, p);
   loop_start = LLVMAppendBasicBlock(ctxt->func, tok_glob_loop_start_name);
-  tok_glob_loop_middle_name_len =
-    snprintf(NULL, 0, "tok_glob_loop_middle_%p", p);
-  tok_glob_loop_middle_name = h_new(char, tok_glob_loop_middle_name_len + 1);
-  snprintf(tok_glob_loop_middle_name, tok_glob_loop_middle_name_len + 1,
-           "tok_glob_loop_middle_%p", p);
+  H_LLVM_COMPUTE_NAME(tok_glob_loop_middle, p);
   loop_middle = LLVMAppendBasicBlock(ctxt->func, tok_glob_loop_middle_name);
-  tok_glob_loop_incr_name_len =
-    snprintf(NULL, 0, "tok_glob_loop_incr_%p", p);
-  tok_glob_loop_incr_name = h_new(char, tok_glob_loop_incr_name_len + 1);
-  snprintf(tok_glob_loop_incr_name, tok_glob_loop_incr_name_len + 1,
-           "tok_glob_loop_incr_%p", p);
+  H_LLVM_COMPUTE_NAME(tok_glob_loop_incr, p);
   loop_incr = LLVMAppendBasicBlock(ctxt->func, tok_glob_loop_incr_name);
-  tok_glob_success_name_len = snprintf(NULL, 0, "tok_glob_success_%p", p);
-  tok_glob_success_name = h_new(char, tok_glob_success_name_len + 1);
-  snprintf(tok_glob_success_name, tok_glob_success_name_len + 1,
-           "tok_glob_success_%p", p);
+  H_LLVM_COMPUTE_NAME(tok_glob_success, p);
   success = LLVMAppendBasicBlock(ctxt->func, tok_glob_success_name);
-  tok_glob_end_name_len = snprintf(NULL, 0, "tok_glob_end_%p", p);
-  tok_glob_end_name = h_new(char, tok_glob_end_name_len + 1);
-  snprintf(tok_glob_end_name, tok_glob_end_name_len + 1,
-           "tok_glob_end_%p", p);
+  H_LLVM_COMPUTE_NAME(tok_glob_end, p);
   end = LLVMAppendBasicBlock(ctxt->func, tok_glob_end_name);
 
   /* Branch to entry block */
@@ -173,10 +136,7 @@ static bool token_llvm_with_global(
    * Get our string into the globals as a constant; skip the null termination
    * and save a byte since we can compare to length in the loop.
    */
-  tok_glob_str_name_len = snprintf(NULL, 0, "tok_glob_str_%p", p);
-  tok_glob_str_name = h_new(char, tok_glob_str_name_len + 1);
-  snprintf(tok_glob_str_name, tok_glob_str_name_len + 1,
-           "tok_glob_str_%p", p);
+  H_LLVM_COMPUTE_NAME(tok_glob_str, p);
   str_const = LLVMConstString((const char *)(t->str), t->len, 1);
   str = LLVMAddGlobal(ctxt->mod, LLVMArrayType(LLVMInt8Type(), t->len), tok_glob_str_name);
   LLVMSetLinkage(str, LLVMInternalLinkage);
@@ -196,10 +156,7 @@ static bool token_llvm_with_global(
   LLVMPositionBuilderAtEnd(ctxt->builder, loop_start);
 
   /* Keep an index counter */
-  tok_glob_i_name_len = snprintf(NULL, 0, "tok_glob_i_%p", p);
-  tok_glob_i_name = h_new(char, tok_glob_i_name_len + 1);
-  snprintf(tok_glob_i_name, tok_glob_i_name_len + 1,
-           "tok_glob_i_%p", p);
+  H_LLVM_COMPUTE_NAME(tok_glob_i, p);
   i = LLVMBuildPhi(ctxt->builder, ctxt->llvm_size_t, tok_glob_i_name);
   i_init = LLVMConstInt(ctxt->llvm_size_t, 0, 0);
   /*
@@ -212,11 +169,7 @@ static bool token_llvm_with_global(
    * Compare i to token string length (i.e., have we hit the end of the
    * token?); if ==, branch to success, if <, continue loop.
    */
-  tok_glob_icmp_i_len_name_len =
-    snprintf(NULL, 0, "tok_glob_icmp_i_len_%p", p);
-  tok_glob_icmp_i_len_name = h_new(char, tok_glob_icmp_i_len_name_len + 1);
-  snprintf(tok_glob_icmp_i_len_name, tok_glob_icmp_i_len_name_len + 1,
-           "tok_glob_icmp_i_len_%p", p);
+  H_LLVM_COMPUTE_NAME(tok_glob_icmp_i_len, p);
   icmp_i_len = LLVMBuildICmp(ctxt->builder, LLVMIntULT, i, len,
                              tok_glob_icmp_i_len_name);
   LLVMBuildCondBr(ctxt->builder, icmp_i_len, loop_middle, success);
@@ -225,34 +178,21 @@ static bool token_llvm_with_global(
   LLVMPositionBuilderAtEnd(ctxt->builder, loop_middle);
 
   /* Get a char from the token string */
-  tok_glob_cptr_name_len = snprintf(NULL, 0, "tok_glob_cptr_%p", p);
-  tok_glob_cptr_name = h_new(char, tok_glob_cptr_name_len + 1);
-  snprintf(tok_glob_cptr_name, tok_glob_cptr_name_len + 1,
-           "tok_glob_cptr_%p", p);
+  H_LLVM_COMPUTE_NAME(tok_glob_cptr, p);
   c_gep_indices[0] = LLVMConstInt(LLVMInt32Type(), 0, 0);
   c_gep_indices[1] = i;
   c_gep = LLVMBuildInBoundsGEP(ctxt->builder, str, c_gep_indices, 2,
                                tok_glob_cptr_name);
-  tok_glob_c_name_len = snprintf(NULL, 0, "tok_glob_c_%p", p);
-  tok_glob_c_name = h_new(char, tok_glob_c_name_len + 1);
-  snprintf(tok_glob_c_name, tok_glob_c_name_len + 1,
-           "tok_glob_c_%p", p);
+  H_LLVM_COMPUTE_NAME(tok_glob_c, p);
   c = LLVMBuildLoad(ctxt->builder, c_gep, tok_glob_c_name);
 
   /* Read one char from input */
-  tok_glob_read_bits_name_len =
-    snprintf(NULL, 0, "tok_glob_read_bits_%p", p);
-  tok_glob_read_bits_name = h_new(char, tok_glob_read_bits_name_len + 1);
-  snprintf(tok_glob_read_bits_name, tok_glob_read_bits_name_len + 1,
-           "tok_glob_read_bits_%p", p);
+  H_LLVM_COMPUTE_NAME(tok_glob_read_bits, p);
   bits = LLVMBuildCall(ctxt->builder,
       LLVMGetNamedFunction(ctxt->mod, "h_read_bits"),
       bits_args, 3, tok_glob_read_bits_name);
   /* Clamp to i8 */
-  tok_glob_r_name_len = snprintf(NULL, 0, "tok_glob_r_%p", p);
-  tok_glob_r_name = h_new(char, tok_glob_r_name_len + 1);
-  snprintf(tok_glob_r_name, tok_glob_r_name_len + 1,
-           "tok_glob_r_%p", p);
+  H_LLVM_COMPUTE_NAME(tok_glob_r, p);
   r = LLVMBuildTrunc(ctxt->builder, bits, LLVMInt8Type(),
                      tok_glob_r_name);
 
@@ -260,11 +200,7 @@ static bool token_llvm_with_global(
    * Compare c and r; if !=, token mismatches, break out of loop and
    * fail.  If ==, increment counter and go to next iteration.
    */
-  tok_glob_icmp_c_r_name_len =
-    snprintf(NULL, 0, "tok_glob_icmp_c_r_%p", p);
-  tok_glob_icmp_c_r_name = h_new(char, tok_glob_icmp_c_r_name_len + 1);
-  snprintf(tok_glob_icmp_c_r_name, tok_glob_icmp_c_r_name_len + 1,
-           "tok_glob_icmp_c_r_%p", p);
+  H_LLVM_COMPUTE_NAME(tok_glob_icmp_c_r, p);
   icmp_c_r = LLVMBuildICmp(ctxt->builder, LLVMIntEQ, c, r,
                            tok_glob_icmp_c_r_name);
   LLVMBuildCondBr(ctxt->builder, icmp_c_r, loop_incr, end);
@@ -272,10 +208,7 @@ static bool token_llvm_with_global(
   /* Basic block loop_incr */
   LLVMPositionBuilderAtEnd(ctxt->builder, loop_incr);
   /* End of loop, 2nd LLVMAddIncoming() for i */
-  tok_glob_i_incr_name_len = snprintf(NULL, 0, "tok_glob_i_incr_%p", p);
-  tok_glob_i_incr_name = h_new(char, tok_glob_i_incr_name_len + 1);
-  snprintf(tok_glob_i_incr_name, tok_glob_i_incr_name_len + 1,
-           "tok_glob_i_incr_%p", p);
+  H_LLVM_COMPUTE_NAME(tok_glob_i_incr, p);
   i_incr = LLVMBuildAdd(ctxt->builder, i,
       LLVMConstInt(ctxt->llvm_size_t, 1, 0), tok_glob_i_incr_name);
   LLVMAddIncoming(i, &i_incr, &loop_incr, 1);
@@ -291,10 +224,7 @@ static bool token_llvm_with_global(
   /* Basic block: end */
   LLVMPositionBuilderAtEnd(ctxt->builder, end);
   /* phi the token or a null depending on where we came from */
-  tok_glob_rv_name_len = snprintf(NULL, 0, "tok_glob_rv_%p", p);
-  tok_glob_rv_name = h_new(char, tok_glob_rv_name_len + 1);
-  snprintf(tok_glob_rv_name, tok_glob_rv_name_len + 1,
-           "tok_glob_rv_%p", p);
+  H_LLVM_COMPUTE_NAME(tok_glob_rv, p);
   rv = LLVMBuildPhi(ctxt->builder, ctxt->llvm_parseresultptr, tok_glob_rv_name);
   LLVMBasicBlockRef rv_phi_incoming_blocks[] = {
     success,
@@ -310,85 +240,22 @@ static bool token_llvm_with_global(
   *res = rv;
 
   /* Free names */
-  if (tok_glob_entry_name) {
-    h_free(tok_glob_entry_name);
-    tok_glob_entry_name = NULL;
-  }
-
-  if (tok_glob_loop_start_name) {
-    h_free(tok_glob_loop_start_name);
-    tok_glob_loop_start_name = NULL;
-  }
-
-  if (tok_glob_loop_middle_name) {
-    h_free(tok_glob_loop_middle_name);
-    tok_glob_loop_middle_name = NULL;
-  }
-
-  if (tok_glob_loop_incr_name) {
-    h_free(tok_glob_loop_incr_name);
-    tok_glob_loop_incr_name = NULL;
-  }
-
-  if (tok_glob_success_name) {
-    h_free(tok_glob_success_name);
-    tok_glob_success_name = NULL;
-  }
-
-  if (tok_glob_end_name) {
-    h_free(tok_glob_end_name);
-    tok_glob_end_name = NULL;
-  }
-
-  if (tok_glob_str_name) {
-    h_free(tok_glob_str_name);
-    tok_glob_str_name = NULL;
-  }
-
-  if (tok_glob_i_name) {
-    h_free(tok_glob_i_name);
-    tok_glob_i_name = NULL;
-  }
-
-  if (tok_glob_icmp_i_len_name) {
-    h_free(tok_glob_icmp_i_len_name);
-    tok_glob_icmp_i_len_name = NULL;
-  }
-
-  if (tok_glob_cptr_name) {
-    h_free(tok_glob_cptr_name);
-    tok_glob_cptr_name = NULL;
-  }
-
-  if (tok_glob_c_name) {
-    h_free(tok_glob_c_name);
-    tok_glob_c_name = NULL;
-  }
-
-  if (tok_glob_read_bits_name) {
-    h_free(tok_glob_read_bits_name);
-    tok_glob_read_bits_name = NULL;
-  }
-
-  if (tok_glob_r_name) {
-    h_free(tok_glob_r_name);
-    tok_glob_r_name = NULL;
-  }
-
-  if (tok_glob_icmp_c_r_name) {
-    h_free(tok_glob_icmp_c_r_name);
-    tok_glob_icmp_c_r_name = NULL;
-  }
-
-  if (tok_glob_i_incr_name) {
-    h_free(tok_glob_i_incr_name);
-    tok_glob_i_incr_name = NULL;
-  }
-
-  if (tok_glob_rv_name) {
-    h_free(tok_glob_rv_name);
-    tok_glob_rv_name = NULL;
-  }
+  H_LLVM_FREE_NAME(tok_glob_entry);
+  H_LLVM_FREE_NAME(tok_glob_loop_start);
+  H_LLVM_FREE_NAME(tok_glob_loop_middle);
+  H_LLVM_FREE_NAME(tok_glob_loop_incr);
+  H_LLVM_FREE_NAME(tok_glob_success);
+  H_LLVM_FREE_NAME(tok_glob_end);
+  H_LLVM_FREE_NAME(tok_glob_str);
+  H_LLVM_FREE_NAME(tok_glob_i);
+  H_LLVM_FREE_NAME(tok_glob_icmp_i_len);
+  H_LLVM_FREE_NAME(tok_glob_cptr);
+  H_LLVM_FREE_NAME(tok_glob_c);
+  H_LLVM_FREE_NAME(tok_glob_read_bits);
+  H_LLVM_FREE_NAME(tok_glob_r);
+  H_LLVM_FREE_NAME(tok_glob_icmp_c_r);
+  H_LLVM_FREE_NAME(tok_glob_i_incr);
+  H_LLVM_FREE_NAME(tok_glob_rv);
 
   return true;
 }
@@ -406,22 +273,14 @@ static bool token_llvm_with_sequential_comparisons(
   /* Allocator */
   HAllocator *mm__;
   /* Names */
-  char *tok_seq_entry_name = NULL;
-  int tok_seq_entry_name_len = 0;
-  char *tok_seq_success_name = NULL;
-  int tok_seq_success_name_len = 0;
-  char *tok_seq_end_name = NULL;
-  int tok_seq_end_name_len = 0;
-  char *tok_seq_read_bits_name = NULL;
-  int tok_seq_read_bits_name_len = 0;
-  char *tok_seq_r_name = NULL;
-  int tok_seq_r_name_len = 0;
-  char *tok_seq_icmp_name = NULL;
-  int tok_seq_icmp_name_len = 0;
-  char *tok_seq_matched_name = NULL;
-  int tok_seq_matched_name_len = 0;
-  char *tok_seq_rv_name = NULL;
-  int tok_seq_rv_name_len = 0;
+  H_LLVM_DECLARE_NAME(tok_seq_entry);
+  H_LLVM_DECLARE_NAME(tok_seq_success);
+  H_LLVM_DECLARE_NAME(tok_seq_end);
+  H_LLVM_DECLARE_NAME(tok_seq_read_bits);
+  H_LLVM_DECLARE_NAME(tok_seq_r);
+  H_LLVM_DECLARE_NAME(tok_seq_icmp);
+  H_LLVM_DECLARE_NAME(tok_seq_matched);
+  H_LLVM_DECLARE_NAME(tok_seq_rv);
   /* Basic blocks */
   LLVMBasicBlockRef entry, success, end, next_char;
   /* Values */
@@ -434,20 +293,11 @@ static bool token_llvm_with_sequential_comparisons(
   mm__ = ctxt->mm__;
 
   /* Set up basic blocks: entry, success and exit branches */
-  tok_seq_entry_name_len = snprintf(NULL, 0, "tok_seq_entry_%p", p);
-  tok_seq_entry_name = h_new(char, tok_seq_entry_name_len + 1);
-  snprintf(tok_seq_entry_name, tok_seq_entry_name_len + 1,
-           "tok_seq_entry_%p", p);
+  H_LLVM_COMPUTE_NAME(tok_seq_entry, p);
   entry = LLVMAppendBasicBlock(ctxt->func, tok_seq_entry_name);
-  tok_seq_success_name_len = snprintf(NULL, 0, "tok_seq_success_%p", p);
-  tok_seq_success_name = h_new(char, tok_seq_success_name_len + 1);
-  snprintf(tok_seq_success_name, tok_seq_success_name_len + 1,
-           "tok_seq_success_%p", p);
+  H_LLVM_COMPUTE_NAME(tok_seq_success, p);
   success = LLVMAppendBasicBlock(ctxt->func, tok_seq_success_name);
-  tok_seq_end_name_len = snprintf(NULL, 0, "tok_seq_end_%p", p);
-  tok_seq_end_name = h_new(char, tok_seq_end_name_len + 1);
-  snprintf(tok_seq_end_name, tok_seq_end_name_len + 1,
-           "tok_seq_end_%p", p);
+  H_LLVM_COMPUTE_NAME(tok_seq_end, p);
   end = LLVMAppendBasicBlock(ctxt->func, tok_seq_end_name);
 
   /* Branch to entry block */
@@ -466,40 +316,30 @@ static bool token_llvm_with_sequential_comparisons(
   LLVMBasicBlockRef curr_char = entry;
   for (i = 0; i < t->len; ++i) {
     /* Read a char */
+    H_LLVM_COMPUTE_NAME_X(tok_seq_read_bits, "%d", i, p);
+#if 0
     tok_seq_read_bits_name_len =
       snprintf(NULL, 0, "tok_seq_read_bits_%d_%p", i, p);
     tok_seq_read_bits_name = h_new(char, tok_seq_read_bits_name_len + 1);
     snprintf(tok_seq_read_bits_name, tok_seq_read_bits_name_len + 1,
              "tok_seq_read_bits_%d_%p", i, p);
+#endif
     bits = LLVMBuildCall(ctxt->builder,
         LLVMGetNamedFunction(ctxt->mod, "h_read_bits"), bits_args, 3, tok_seq_read_bits_name);
-    h_free(tok_seq_read_bits_name);
-    tok_seq_read_bits_name = NULL;
+    H_LLVM_FREE_NAME(tok_seq_read_bits);
     /* Clamp to i8 */
-    tok_seq_r_name_len = snprintf(NULL, 0, "tok_seq_r_%d_%p", i, p);
-    tok_seq_r_name = h_new(char, tok_seq_r_name_len + 1);
-    snprintf(tok_seq_r_name, tok_seq_r_name_len + 1, "tok_seq_r_%d_%p", i, p);
+    H_LLVM_COMPUTE_NAME_X(tok_seq_r, "%d", i, p);
     r = LLVMBuildTrunc(ctxt->builder, bits, LLVMInt8Type(), tok_seq_r_name);
-    h_free(tok_seq_r_name);
-    tok_seq_r_name = NULL;
+    H_LLVM_FREE_NAME(tok_seq_r);
     /* Comparison */
-    tok_seq_icmp_name_len = snprintf(NULL, 0, "tok_seq_icmp_%d_%p", i, p);
-    tok_seq_icmp_name = h_new(char, tok_seq_icmp_name_len + 1);
-    snprintf(tok_seq_icmp_name, tok_seq_icmp_name_len + 1,
-             "tok_seq_icmp_%d_%p", i, p);
+    H_LLVM_COMPUTE_NAME_X(tok_seq_icmp, "%d", i, p);
     c = LLVMConstInt(LLVMInt8Type(), t->str[i], 0);
     icmp = LLVMBuildICmp(ctxt->builder, LLVMIntEQ, c, r, tok_seq_icmp_name);
-    h_free(tok_seq_icmp_name);
-    tok_seq_icmp_name = NULL;
+    H_LLVM_FREE_NAME(tok_seq_icmp);
     /* Next basic block */
-    tok_seq_matched_name_len =
-      snprintf(NULL, 0, "tok_seq_matched_%d_%p", i, p);
-    tok_seq_matched_name = h_new(char, tok_seq_matched_name_len + 1);
-    snprintf(tok_seq_matched_name, tok_seq_matched_name_len + 1,
-             "tok_seq_matched_%d_%p", i, p);
+    H_LLVM_COMPUTE_NAME_X(tok_seq_matched, "%d", i, p);
     next_char = LLVMAppendBasicBlock(ctxt->func, tok_seq_matched_name);
-    h_free(tok_seq_matched_name);
-    tok_seq_matched_name = NULL;
+    H_LLVM_FREE_NAME(tok_seq_matched);
     /* Conditional branch */
     LLVMBuildCondBr(ctxt->builder, icmp, next_char, end);
     /* Fill in our row in the phi tables */
@@ -526,9 +366,7 @@ static bool token_llvm_with_sequential_comparisons(
   /* End block: return a token if we made one */
   LLVMPositionBuilderAtEnd(ctxt->builder, end);
   /* phi the token or a null depending on where we came from */
-  tok_seq_rv_name_len = snprintf(NULL, 0, "tok_seq_rv_%p", p);
-  tok_seq_rv_name = h_new(char, tok_seq_rv_name_len + 1);
-  snprintf(tok_seq_rv_name, tok_seq_rv_name_len + 1, "tok_seq_rv_%p", p);
+  H_LLVM_COMPUTE_NAME(tok_seq_rv, p);
   rv = LLVMBuildPhi(ctxt->builder, ctxt->llvm_parseresultptr,
                     tok_seq_rv_name);
   LLVMAddIncoming(rv, values_into_phi, bbs_into_phi, 1 + t->len);
@@ -541,25 +379,10 @@ static bool token_llvm_with_sequential_comparisons(
   *res = rv;
 
   /* Free names */
-  if (tok_seq_entry_name) {
-    h_free(tok_seq_entry_name);
-    tok_seq_entry_name = NULL;
-  }
-
-  if (tok_seq_success_name) {
-    h_free(tok_seq_success_name);
-    tok_seq_success_name = NULL;
-  }
-
-  if (tok_seq_end_name) {
-    h_free(tok_seq_end_name);
-    tok_seq_end_name = NULL;
-  }
-
-  if (tok_seq_rv_name) {
-    h_free(tok_seq_rv_name);
-    tok_seq_rv_name = NULL;
-  }
+  H_LLVM_FREE_NAME(tok_seq_entry);
+  H_LLVM_FREE_NAME(tok_seq_success);
+  H_LLVM_FREE_NAME(tok_seq_end);
+  H_LLVM_FREE_NAME(tok_seq_rv);
 
   return true;
 }
-- 
GitLab