From 074cf036a9944863551c3ad2fd531e8f3d78c878 Mon Sep 17 00:00:00 2001 From: Andrea Shepard <andrea@special-circumstanc.es> Date: Sat, 16 Nov 2019 01:14:07 +0000 Subject: [PATCH] Use LLVM name/label macros in end.c --- src/parsers/end.c | 133 +++++++++++----------------------------------- 1 file changed, 30 insertions(+), 103 deletions(-) diff --git a/src/parsers/end.c b/src/parsers/end.c index f2f655e0..26cba931 100644 --- a/src/parsers/end.c +++ b/src/parsers/end.c @@ -34,26 +34,16 @@ static bool end_llvm(HLLVMParserCompileContext *ctxt, /* Allocator */ HAllocator *mm__ = NULL; /* Names */ - char *end_entry_name = NULL; - int end_entry_name_len = 0; - char *end_success_name = NULL; - int end_success_name_len = 0; - char *end_end_name = NULL; - int end_end_name_len = 0; - char *end_index_name = NULL; - int end_index_name_len = 0; - char *end_index_ptr_name = NULL; - int end_index_ptr_name_len = 0; - char *end_length_name = NULL; - int end_length_name_len = 0; - char *end_length_ptr_name = NULL; - int end_length_ptr_name_len = 0; - char *end_icmp_name = NULL; - int end_icmp_name_len = 0; - char *end_result_ptr_name = NULL; - int end_result_ptr_name_len = 0; - char *end_rv_name = NULL; - int end_rv_name_len = 0; + H_LLVM_DECLARE_NAME(end_entry); + H_LLVM_DECLARE_NAME(end_success); + H_LLVM_DECLARE_NAME(end_end); + H_LLVM_DECLARE_NAME(end_index); + H_LLVM_DECLARE_NAME(end_index_ptr); + H_LLVM_DECLARE_NAME(end_length); + H_LLVM_DECLARE_NAME(end_length_ptr); + H_LLVM_DECLARE_NAME(end_icmp); + H_LLVM_DECLARE_NAME(end_result_ptr); + H_LLVM_DECLARE_NAME(end_rv); /* Basic blocks for parsing end */ LLVMBasicBlockRef entry, success, end; /* Indices for GEP */ @@ -77,17 +67,11 @@ static bool end_llvm(HLLVMParserCompileContext *ctxt, mm__ = ctxt->mm__; /* Set up some basic blocks */ - end_entry_name_len = snprintf(NULL, 0, "end_entry_%p", p); - end_entry_name = h_new(char, end_entry_name_len + 1); - snprintf(end_entry_name, end_entry_name_len + 1, "end_entry_%p", p); + H_LLVM_COMPUTE_NAME(end_entry, p); entry = LLVMAppendBasicBlock(ctxt->func, end_entry_name); - end_success_name_len = snprintf(NULL, 0, "end_success_%p", p); - end_success_name = h_new(char, end_success_name_len + 1); - snprintf(end_success_name, end_success_name_len + 1, "end_success_%p", p); + H_LLVM_COMPUTE_NAME(end_success, p); success = LLVMAppendBasicBlock(ctxt->func, end_success_name); - end_end_name_len = snprintf(NULL, 0, "end_end_%p", p); - end_end_name = h_new(char, end_end_name_len + 1); - snprintf(end_end_name, end_end_name_len + 1, "end_end_%p", p); + H_LLVM_COMPUTE_NAME(end_end, p); end = LLVMAppendBasicBlock(ctxt->func, end_end_name); /* Basic block: entry */ @@ -105,39 +89,27 @@ static bool end_llvm(HLLVMParserCompileContext *ctxt, /* The index field (see HInputStream in internal.h */ gep_indices[1] = LLVMConstInt(LLVMInt32Type(), 2, 0); /* GEP */ - end_index_ptr_name_len = snprintf(NULL, 0, "end_index_ptr_%p", p); - end_index_ptr_name = h_new(char, end_index_ptr_name_len + 1); - snprintf(end_index_ptr_name, end_index_ptr_name_len + 1, - "end_index_ptr_%p", p); + H_LLVM_COMPUTE_NAME(end_index_ptr, p); LLVMValueRef index_ptr = LLVMBuildGEP(ctxt->builder, ctxt->stream, gep_indices, 2, end_index_ptr_name); /* The length field (see HInputStream in internal.h */ gep_indices[1] = LLVMConstInt(LLVMInt32Type(), 3, 0); /* GEP */ - end_length_ptr_name_len = snprintf(NULL, 0, "end_length_ptr_%p", p); - end_length_ptr_name = h_new(char, end_length_ptr_name_len + 1); - snprintf(end_length_ptr_name, end_length_ptr_name_len + 1, - "end_length_ptr_%p", p); + H_LLVM_COMPUTE_NAME(end_length_ptr, p); LLVMValueRef length_ptr = LLVMBuildGEP(ctxt->builder, ctxt->stream, gep_indices, 2, end_length_ptr_name); /* Now load them */ - end_index_name_len = snprintf(NULL, 0, "end_index_%p", p); - end_index_name = h_new(char, end_index_name_len + 1); - snprintf(end_index_name, end_index_name_len + 1, "end_index_%p", p); + H_LLVM_COMPUTE_NAME(end_index, p); LLVMValueRef index = LLVMBuildLoad(ctxt->builder, index_ptr, end_index_name); - end_length_name_len = snprintf(NULL, 0, "end_length_%p", p); - end_length_name = h_new(char, end_length_name_len + 1); - snprintf(end_length_name, end_length_name_len + 1, "end_length_%p", p); + H_LLVM_COMPUTE_NAME(end_length, p); LLVMValueRef length = LLVMBuildLoad(ctxt->builder, length_ptr, end_length_name); /* Compare */ - end_icmp_name_len = snprintf(NULL, 0, "end_icmp_%p", p); - end_icmp_name = h_new(char, end_icmp_name_len + 1); - snprintf(end_icmp_name, end_icmp_name_len + 1, "end_icmp_%p", p); + H_LLVM_COMPUTE_NAME(end_icmp, p); LLVMValueRef icmp = LLVMBuildICmp(ctxt->builder, LLVMIntEQ, index, length, end_icmp_name); /* Branch on comparison */ @@ -146,10 +118,7 @@ static bool end_llvm(HLLVMParserCompileContext *ctxt, /* Basic block: success */ LLVMPositionBuilderAtEnd(ctxt->builder, success); /* Set up a call to h_arena_malloc() to get an HParseResult */ - end_result_ptr_name_len = snprintf(NULL, 0, "end_result_ptr_%p", p); - end_result_ptr_name = h_new(char, end_result_ptr_name_len + 1); - snprintf(end_result_ptr_name, end_result_ptr_name_len + 1, - "end_result_ptr_%p", p); + H_LLVM_COMPUTE_NAME(end_result_ptr, p); make_result_args[0] = ctxt->arena; make_result_args[1] = LLVMConstNull(ctxt->llvm_parsedtokenptr); result_ptr = LLVMBuildCall(ctxt->builder, @@ -162,9 +131,7 @@ static bool end_llvm(HLLVMParserCompileContext *ctxt, /* Basic block: end */ LLVMPositionBuilderAtEnd(ctxt->builder, end); /* Set up a phi depending on whether we have a token or not */ - end_rv_name_len = snprintf(NULL, 0, "end_rv_%p", p); - end_rv_name = h_new(char, end_rv_name_len + 1); - snprintf(end_rv_name, end_rv_name_len + 1, "end_rv_%p", p); + H_LLVM_COMPUTE_NAME(end_rv, p); rv = LLVMBuildPhi(ctxt->builder, ctxt->llvm_parseresultptr, end_rv_name); rv_phi_incoming_blocks[0] = success; rv_phi_incoming_values[0] = result_ptr; @@ -176,56 +143,16 @@ static bool end_llvm(HLLVMParserCompileContext *ctxt, *res = rv; /* Free names */ - - if (end_entry_name) { - h_free(end_entry_name); - end_entry_name = NULL; - } - - if (end_success_name) { - h_free(end_entry_name); - end_entry_name = NULL; - } - - if (end_end_name) { - h_free(end_entry_name); - end_entry_name = NULL; - } - - if (end_index_name) { - h_free(end_index_name); - end_index_name = NULL; - } - - if (end_index_ptr_name) { - h_free(end_index_ptr_name); - end_index_ptr_name = NULL; - } - - if (end_length_name) { - h_free(end_length_name); - end_length_name = NULL; - } - - if (end_length_ptr_name) { - h_free(end_length_ptr_name); - end_length_ptr_name = NULL; - } - - if (end_icmp_name) { - h_free(end_icmp_name); - end_icmp_name = NULL; - } - - if (end_result_ptr_name) { - h_free(end_result_ptr_name); - end_result_ptr_name = NULL; - } - - if (end_rv_name) { - h_free(end_rv_name); - end_rv_name = NULL; - } + H_LLVM_FREE_NAME(end_entry); + H_LLVM_FREE_NAME(end_success); + H_LLVM_FREE_NAME(end_end); + H_LLVM_FREE_NAME(end_index); + H_LLVM_FREE_NAME(end_index_ptr); + H_LLVM_FREE_NAME(end_length); + H_LLVM_FREE_NAME(end_length_ptr); + H_LLVM_FREE_NAME(end_icmp); + H_LLVM_FREE_NAME(end_result_ptr); + H_LLVM_FREE_NAME(end_rv); return true; } -- GitLab