Skip to content

Commit 0e52f3f

Browse files
captain5050acmel
authored andcommitted
perf llvm: Reduce LLVM initialization
Move the 3 LLVM initialization routines to be called in a single init_llvm function that has its own bool to avoid repeated initialization. Reduce the scope of triplet and avoid copying strings for x86. Signed-off-by: Ian Rogers <irogers@google.com> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Alexandre Ghiti <alexghiti@rivosinc.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: Athira Rajeev <atrajeev@linux.ibm.com> Cc: Bill Wendling <morbo@google.com> Cc: Charlie Jenkins <charlie@rivosinc.com> Cc: Collin Funk <collin.funk1@gmail.com> Cc: Dmitriy Vyukov <dvyukov@google.com> Cc: Dr. David Alan Gilbert <linux@treblig.org> Cc: Eric Biggers <ebiggers@kernel.org> Cc: Haibo Xu <haibo1.xu@intel.com> Cc: Ingo Molnar <mingo@redhat.com> Cc: James Clark <james.clark@linaro.org> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Justin Stitt <justinstitt@google.com> Cc: Li Huafei <lihuafei1@huawei.com> Cc: Masami Hiramatsu <mhiramat@kernel.org> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Nathan Chancellor <nathan@kernel.org> Cc: Nick Desaulniers <nick.desaulniers+lkml@gmail.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Song Liu <song@kernel.org> Cc: Stephen Brennan <stephen.s.brennan@oracle.com> [ Move init_llvm() under HAVE_LIBLLVM_SUPPORT to fix the build ] Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
1 parent e444c2d commit 0e52f3f

1 file changed

Lines changed: 21 additions & 12 deletions

File tree

tools/perf/util/llvm.c

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,19 @@ void dso__free_a2l_llvm(struct dso *dso __maybe_unused)
7474
/* Nothing to free. */
7575
}
7676

77+
#ifdef HAVE_LIBLLVM_SUPPORT
78+
static void init_llvm(void)
79+
{
80+
static bool init;
81+
82+
if (!init) {
83+
LLVMInitializeAllTargetInfos();
84+
LLVMInitializeAllTargetMCs();
85+
LLVMInitializeAllDisassemblers();
86+
init = true;
87+
}
88+
}
7789

78-
#if defined(HAVE_LIBLLVM_SUPPORT)
7990
struct find_file_offset_data {
8091
u64 ip;
8192
u64 offset;
@@ -184,7 +195,6 @@ int symbol__disassemble_llvm(const char *filename, struct symbol *sym,
184195
u64 len;
185196
u64 pc;
186197
bool is_64bit;
187-
char triplet[64];
188198
char disasm_buf[2048];
189199
size_t disasm_len;
190200
struct disasm_line *dl;
@@ -197,26 +207,25 @@ int symbol__disassemble_llvm(const char *filename, struct symbol *sym,
197207
if (args->options->objdump_path)
198208
return -1;
199209

200-
LLVMInitializeAllTargetInfos();
201-
LLVMInitializeAllTargetMCs();
202-
LLVMInitializeAllDisassemblers();
203-
204210
buf = read_symbol(filename, map, sym, &len, &is_64bit);
205211
if (buf == NULL)
206212
return -1;
207213

214+
init_llvm();
208215
if (arch__is(args->arch, "x86")) {
209-
if (is_64bit)
210-
scnprintf(triplet, sizeof(triplet), "x86_64-pc-linux");
211-
else
212-
scnprintf(triplet, sizeof(triplet), "i686-pc-linux");
216+
const char *triplet = is_64bit ? "x86_64-pc-linux" : "i686-pc-linux";
217+
218+
disasm = LLVMCreateDisasm(triplet, &storage, /*tag_type=*/0,
219+
/*get_op_info=*/NULL, symbol_lookup_callback);
213220
} else {
221+
char triplet[64];
222+
214223
scnprintf(triplet, sizeof(triplet), "%s-linux-gnu",
215224
args->arch->name);
225+
disasm = LLVMCreateDisasm(triplet, &storage, /*tag_type=*/0,
226+
/*get_op_info=*/NULL, symbol_lookup_callback);
216227
}
217228

218-
disasm = LLVMCreateDisasm(triplet, &storage, 0, NULL,
219-
symbol_lookup_callback);
220229
if (disasm == NULL)
221230
goto err;
222231

0 commit comments

Comments
 (0)