blob: 1bd06daf52adc8ab36a8fce1e9c334a782ac593f [file] [log] [blame]
/* APPLE LOCAL begin LLVM (ENTIRE FILE!) */
/* LLVM interface to GCC
Copyright (C) 2005 Free Software Foundation, Inc.
Contributed by Chris Lattner (sabre@nondot.org)
This file is part of GCC.
GCC is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
Software Foundation; either version 2, or (at your option) any later
version.
GCC is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA. */
/* This file defines the public C interfaces to the LLVM backend. */
#ifndef LLVM_H
#define LLVM_H
/* This file is a noop unless GCC is configured with --enable-llvm. */
#ifdef ENABLE_LLVM
#include <stdio.h>
union tree_node;
/*
* Code defined in llvm-backend.cpp
*/
void llvm_initialize_backend(void);
void llvm_lang_dependent_init(const char *Name);
/* emit_llvm_code_for_current_function - Top level interface for emitting a
* function to the .s file.
*/
void llvm_emit_code_for_current_function(union tree_node* fndecl);
/* make_decl_llvm - This is also defined in tree.h and used by macros there. */
void make_decl_llvm(union tree_node*);
/* emit_global_to_llvm - Emit the specified VAR_DECL to LLVM as a global
* variable.
*/
void emit_global_to_llvm(union tree_node*);
/* emit_global_to_llvm - Emit the specified alias to LLVM
*/
void emit_alias_to_llvm(union tree_node*, union tree_node*, union tree_node*);
/* llvm_get_decl_name - Used by varasm.c, returns the specified declaration's
* name.
*/
const char *llvm_get_decl_name(void *LLVM);
/* llvm_mark_decl_weak - Used by varasm.c, called when a decl is found to be
* weak, but it already had an llvm object created for it. This marks the LLVM
* object weak as well.
*/
void llvm_mark_decl_weak(union tree_node*);
/* llvm_emit_ctor_dtor - Called to emit static ctors/dtors to LLVM code. fndecl
* is a 'void()' FUNCTION_DECL for the code, initprio is the init priority, and
* isInit indicates whether this is a ctor or dtor.
*/
void llvm_emit_ctor_dtor(union tree_node* fndecl, int initprio, int isInit);
/* llvm_emit_file_scope_asm - Emit the specified string as a file-scope inline
* asm block.
*/
void llvm_emit_file_scope_asm(const char*);
/* llvm_emit_typedef - Emit the specified TYPE_DECL if desired.
*/
void llvm_emit_typedef(union tree_node*);
/* print_llvm - Print the specified LLVM chunk like an operand, called by
* print-tree.c for tree dumps.
*/
void print_llvm(FILE *file, void *LLVM);
/* print_llvm_type - Print the specified LLVM type symbolically, called by
* print-tree.c for tree dumps.
*/
void print_llvm_type(FILE *file, void *LLVM);
/* Init pch writing. */
void llvm_pch_write_init(void);
/* Read bytecodes from PCH file. */
void llvm_pch_read(const unsigned char *, unsigned);
/* llvm_asm_file_start - Start the .s file. */
void llvm_asm_file_start(void);
/* llvm_asm_file_end - Finish the .s file. */
void llvm_asm_file_end(void);
#endif /* ENABLE_LLVM */
#endif
/* APPLE LOCAL end LLVM (ENTIRE FILE!) */