From 8230c40430a1325b5cc5bc0221931487b4bd573c Mon Sep 17 00:00:00 2001 From: rdivacky Date: Wed, 3 Mar 2010 17:27:15 +0000 Subject: Update LLVM to 97654. --- tools/Makefile | 5 + tools/bugpoint/CrashDebugger.cpp | 2 +- tools/bugpoint/ExtractFunction.cpp | 2 +- tools/llc/llc.cpp | 14 ++- tools/llvm-config/CMakeLists.txt | 2 - tools/llvm-shlib/Makefile | 60 ++++++++++++ .../example/mcc16/plugins/PIC16Base/PIC16Base.td | 42 ++++---- tools/llvmc/plugins/Base/Base.td.in | 106 ++++++++++++++------- tools/llvmc/plugins/Clang/Clang.td | 37 +++---- tools/opt/opt.cpp | 3 +- 10 files changed, 184 insertions(+), 89 deletions(-) create mode 100644 tools/llvm-shlib/Makefile (limited to 'tools') diff --git a/tools/Makefile b/tools/Makefile index c9b9ff2..b6637a9 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -44,4 +44,9 @@ ifeq ($(TARGET_OS), $(filter $(TARGET_OS), Cygwin MingW)) DIRS := $(filter-out lto gold, $(DIRS)) endif +# Only build edis if X86 target support is enabled. +ifeq ($(filter $(TARGETS_TO_BUILD), X86),) + PARALLEL_DIRS := $(filter-out edis, $(PARALLEL_DIRS)) +endif + include $(LEVEL)/Makefile.common diff --git a/tools/bugpoint/CrashDebugger.cpp b/tools/bugpoint/CrashDebugger.cpp index b348a08..b51bdb4 100644 --- a/tools/bugpoint/CrashDebugger.cpp +++ b/tools/bugpoint/CrashDebugger.cpp @@ -295,7 +295,7 @@ bool ReduceCrashingBlocks::TestBlocks(std::vector &BBs) { TerminatorInst *BBTerm = BB->getTerminator(); - if (isa(BBTerm->getType())) + if (BBTerm->getType()->isStructTy()) BBTerm->replaceAllUsesWith(UndefValue::get(BBTerm->getType())); else if (BB->getTerminator()->getType() != Type::getVoidTy(BB->getContext())) diff --git a/tools/bugpoint/ExtractFunction.cpp b/tools/bugpoint/ExtractFunction.cpp index 70011a7..eaa2c53 100644 --- a/tools/bugpoint/ExtractFunction.cpp +++ b/tools/bugpoint/ExtractFunction.cpp @@ -73,7 +73,7 @@ Module *BugDriver::deleteInstructionFromProgram(const Instruction *I, Instruction *TheInst = RI; // Got the corresponding instruction! // If this instruction produces a value, replace any users with null values - if (isa(TheInst->getType())) + if (TheInst->getType()->isStructTy()) TheInst->replaceAllUsesWith(UndefValue::get(TheInst->getType())); else if (TheInst->getType() != Type::getVoidTy(I->getContext())) TheInst->replaceAllUsesWith(Constant::getNullValue(TheInst->getType())); diff --git a/tools/llc/llc.cpp b/tools/llc/llc.cpp index fe34bd1..810ba42 100644 --- a/tools/llc/llc.cpp +++ b/tools/llc/llc.cpp @@ -305,6 +305,14 @@ int main(int argc, char **argv) { case '3': OLvl = CodeGenOpt::Aggressive; break; } + // Request that addPassesToEmitFile run the Verifier after running + // passes which modify the IR. +#ifndef NDEBUG + bool DisableVerify = false; +#else + bool DisableVerify = true; +#endif + // If this target requires addPassesToEmitWholeFile, do it now. This is // used by strange things like the C backend. if (Target.WantsWholeFile()) { @@ -320,7 +328,8 @@ int main(int argc, char **argv) { PM.add(createVerifierPass()); // Ask the target to add backend passes as necessary. - if (Target.addPassesToEmitWholeFile(PM, *Out, FileType, OLvl)) { + if (Target.addPassesToEmitWholeFile(PM, *Out, FileType, OLvl, + DisableVerify)) { errs() << argv[0] << ": target does not support generation of this" << " file type!\n"; if (Out != &fouts()) delete Out; @@ -347,7 +356,8 @@ int main(int argc, char **argv) { // Override default to generate verbose assembly. Target.setAsmVerbosityDefault(true); - if (Target.addPassesToEmitFile(Passes, *Out, FileType, OLvl)) { + if (Target.addPassesToEmitFile(Passes, *Out, FileType, OLvl, + DisableVerify)) { errs() << argv[0] << ": target does not support generation of this" << " file type!\n"; if (Out != &fouts()) delete Out; diff --git a/tools/llvm-config/CMakeLists.txt b/tools/llvm-config/CMakeLists.txt index 8a710ea..7a43dba 100644 --- a/tools/llvm-config/CMakeLists.txt +++ b/tools/llvm-config/CMakeLists.txt @@ -18,8 +18,6 @@ execute_process(COMMAND date #set(LLVMGCCDIR "") #set(LLVMGCC "") #set(LLVMGXX "") -#set(LLVMGCC_VERSION "") -#set(LLVMGCC_MAJVERS "") test_big_endian(IS_BIG_ENDIAN) if( IS_BIG_ENDIAN ) set(ENDIAN "big") diff --git a/tools/llvm-shlib/Makefile b/tools/llvm-shlib/Makefile new file mode 100644 index 0000000..ce29bf8 --- /dev/null +++ b/tools/llvm-shlib/Makefile @@ -0,0 +1,60 @@ +##===- tools/shlib/Makefile --------------------------------*- Makefile -*-===## +# +# The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## + +LEVEL = ../.. + +LIBRARYNAME = LLVM-$(LLVMVersion) + +NO_BUILD_ARCHIVE = 1 +LINK_LIBS_IN_SHARED = 1 +SHARED_LIBRARY = 1 + +include $(LEVEL)/Makefile.common + +# Include all archives in libLLVM.(so|dylib) except the ones that have +# their own dynamic libraries. +Archives := $(wildcard $(LibDir)/libLLVM*.a) +SharedLibraries := $(wildcard $(LibDir)/libLLVM*$(SHLIBEXT)) +IncludeInLibLlvm := $(filter-out $(basename $(SharedLibraries)).a, $(Archives)) +LLVMLibsOptions := $(IncludeInLibLlvm:$(LibDir)/lib%.a=-l%) +LLVMLibsPaths := $(IncludeInLibLlvm) + +$(LibName.SO): $(LLVMLibsPaths) + +ifeq ($(HOST_OS),Darwin) + # set dylib internal version number to llvmCore submission number + ifdef LLVM_SUBMIT_VERSION + LLVMLibsOptions := $(LLVMLibsOptions) -Wl,-current_version \ + -Wl,$(LLVM_SUBMIT_VERSION).$(LLVM_SUBMIT_SUBVERSION) \ + -Wl,-compatibility_version -Wl,1 + endif + # Include everything from the .a's into the shared library. + LLVMLibsOptions := $(LLVMLibsOptions) -all_load + # extra options to override libtool defaults + LLVMLibsOptions := $(LLVMLibsOptions) \ + -avoid-version \ + -Wl,-dead_strip \ + -Wl,-seg1addr -Wl,0xE0000000 + + # Mac OS X 10.4 and earlier tools do not allow a second -install_name on command line + DARWIN_VERS := $(shell echo $(TARGET_TRIPLE) | sed 's/.*darwin\([0-9]*\).*/\1/') + ifneq ($(DARWIN_VERS),8) + LLVMLibsOptions := $(LLVMLibsOptions) \ + -Wl,-install_name \ + -Wl,"@executable_path/../lib/lib$(LIBRARYNAME)$(SHLIBEXT)" + endif +endif + +ifeq ($(HOST_OS), Linux) + # Include everything from the .a's into the shared library. + LLVMLibsOptions := -Wl,--whole-archive $(LLVMLibsOptions) \ + -Wl,--no-whole-archive + # Don't allow unresolved symbols. + LLVMLibsOptions += -Wl,--no-undefined +endif diff --git a/tools/llvmc/example/mcc16/plugins/PIC16Base/PIC16Base.td b/tools/llvmc/example/mcc16/plugins/PIC16Base/PIC16Base.td index f13b9f8..25149ad 100644 --- a/tools/llvmc/example/mcc16/plugins/PIC16Base/PIC16Base.td +++ b/tools/llvmc/example/mcc16/plugins/PIC16Base/PIC16Base.td @@ -56,7 +56,7 @@ def OptionList : OptionList<[ // (parameter_option "pre-RA-sched", // (help "Example of an option that is passed to llc")), (parameter_option "regalloc", - (help "Register allocator to use.(possible values: simple, linearscan, pbqp, local. default = linearscan)")), + (help "Register allocator to use (possible values: simple, linearscan, pbqp, local; default=linearscan)")), (prefix_list_option "Wa,", (comma_separated), (help "Pass options to assembler (Run 'gpasm -help' for assembler options)")), (prefix_list_option "Wl,", (comma_separated), @@ -72,16 +72,14 @@ class clang_based : Tool< [(in_language language), (out_language "llvm-bitcode"), (output_suffix "bc"), - (cmd_line (case - (switch_on "E"), - (case - (not_empty "o"), !strconcat(cmd, " -E $INFILE -o $OUTFILE"), - (default), !strconcat(cmd, " -E $INFILE")), - (default), !strconcat(cmd, " $INFILE -o $OUTFILE"))), - (actions (case - (and (multiple_input_files), (or (switch_on "S"), (switch_on "c"))), - (error "cannot specify -o with -c or -S with multiple files"), - (switch_on "E"), [(stop_compilation), (output_suffix ext_E)], + (command cmd), + (actions (case + (and (multiple_input_files), + (or (switch_on "S"), (switch_on "c"))), + (error "cannot specify -o with -c or -S with multiple files"), + (switch_on "E"), [(forward "E"), + (stop_compilation), (output_suffix ext_E)], + (and (switch_on "E"), (empty "o")), (no_out_file), (switch_on "bc"),[(stop_compilation), (output_suffix "bc")], (switch_on "g"), (append_cmd "-g"), (switch_on "w"), (append_cmd "-w"), @@ -116,12 +114,13 @@ def llvm_ld : Tool<[ (in_language "llvm-bitcode"), (out_language "llvm-bitcode"), (output_suffix "bc"), - (cmd_line "$CALL(GetBinDir)llvm-ld -L $CALL(GetStdLibsDir) -disable-gvn -disable-licm-promotion -disable-mem2reg $INFILE -b $OUTFILE -l std"), + (command "$CALL(GetBinDir)llvm-ld -L $CALL(GetStdLibsDir) -disable-licm-promotion -l std"), + (out_file_option "-b"), (actions (case (switch_on "O0"), (append_cmd "-disable-opt"), (switch_on "O1"), (append_cmd "-disable-opt"), // Whenever O3 is not specified on the command line, default i.e. disable-inlining will always be added. - (switch_on "O2"), (append_cmd ""), + (switch_on "O2"), (append_cmd ""), (switch_on "O3"), (append_cmd ""), (default), (append_cmd "-disable-inlining"))), (join) @@ -134,12 +133,13 @@ def llvm_ld_optimizer : Tool<[ (output_suffix "bc"), // FIXME: we are still not disabling licm-promotion. // -disable-licm-promotion and building stdn library causes c16-71 to fail. - (cmd_line "$CALL(GetBinDir)llvm-ld -disable-gvn -disable-mem2reg $INFILE -b $OUTFILE"), + (command "$CALL(GetBinDir)llvm-ld "), + (out_file_option "-b"), (actions (case (switch_on "O0"), (append_cmd "-disable-opt"), (switch_on "O1"), (append_cmd "-disable-opt"), // Whenever O3 is not specified on the command line, default i.e. disable-inlining will always be added. - (switch_on "O2"), (append_cmd ""), + (switch_on "O2"), (append_cmd ""), (switch_on "O3"), (append_cmd ""), (default), (append_cmd "-disable-inlining"))) ]>; @@ -149,7 +149,7 @@ def pic16passes : Tool<[ (in_language "llvm-bitcode"), (out_language "llvm-bitcode"), (output_suffix "obc"), - (cmd_line "$CALL(GetBinDir)opt -pic16cg -pic16overlay $INFILE -f -o $OUTFILE"), + (command "$CALL(GetBinDir)opt -pic16cloner -pic16overlay -f"), (actions (case (switch_on "O0"), (append_cmd "-disable-opt"))) ]>; @@ -158,7 +158,7 @@ def llc : Tool<[ (in_language "llvm-bitcode"), (out_language "assembler"), (output_suffix "s"), - (cmd_line "$CALL(GetBinDir)llc -march=pic16 -disable-jump-tables -pre-RA-sched=list-burr -f $INFILE -o $OUTFILE"), + (command "$CALL(GetBinDir)llc -march=pic16 -disable-jump-tables -pre-RA-sched=list-burr -f"), (actions (case (switch_on "S"), (stop_compilation), // (not_empty "Wllc,"), (unpack_values "Wllc,"), @@ -171,7 +171,7 @@ def gpasm : Tool<[ (in_language "assembler"), (out_language "object-code"), (output_suffix "o"), - (cmd_line "$CALL(GetBinDir)gpasm -z -r decimal -I $CALL(GetStdAsmHeadersDir) -C -c -w 2 $INFILE -o $OUTFILE"), + (command "$CALL(GetBinDir)gpasm -z -r decimal -I $CALL(GetStdAsmHeadersDir) -C -c -w 2"), (actions (case (switch_on "c"), (stop_compilation), (switch_on "g"), (append_cmd "-g"), @@ -184,7 +184,7 @@ def mplink : Tool<[ (in_language "object-code"), (out_language "executable"), (output_suffix "cof"), - (cmd_line "$CALL(GetBinDir)mplink -e -k $CALL(GetStdLinkerScriptsDir) -l $CALL(GetStdLibsDir) intrinsics.lib stdn.lib $INFILE -o $OUTFILE"), + (command "$CALL(GetBinDir)mplink -e -k $CALL(GetStdLinkerScriptsDir) -l $CALL(GetStdLibsDir) intrinsics.lib stdn.lib"), (actions (case (not_empty "Wl,"), (forward_value "Wl,"), (switch_on "X"), (append_cmd "-x"), @@ -217,13 +217,13 @@ def LanguageMap : LanguageMap<[ def CompilationGraph : CompilationGraph<[ Edge<"root", "clang_cc">, Edge<"root", "llvm_ld">, - OptionalEdge<"root", "llvm_ld_optimizer", (case + OptionalEdge<"root", "llvm_ld_optimizer", (case (switch_on "S"), (inc_weight), (switch_on "c"), (inc_weight))>, Edge<"root", "gpasm">, Edge<"root", "mplink">, Edge<"clang_cc", "llvm_ld">, - OptionalEdge<"clang_cc", "llvm_ld_optimizer", (case + OptionalEdge<"clang_cc", "llvm_ld_optimizer", (case (switch_on "S"), (inc_weight), (switch_on "c"), (inc_weight))>, Edge<"llvm_ld", "pic16passes">, diff --git a/tools/llvmc/plugins/Base/Base.td.in b/tools/llvmc/plugins/Base/Base.td.in index 1acd969..7b82313 100644 --- a/tools/llvmc/plugins/Base/Base.td.in +++ b/tools/llvmc/plugins/Base/Base.td.in @@ -49,7 +49,7 @@ def OptList : OptionList<[ (parameter_option "linker", (help "Choose linker (possible values: gcc, g++)")), (parameter_option "mtune", - (help "Target a specific CPU type"), (hidden)), + (help "Target a specific CPU type"), (hidden), (forward_not_split)), // TODO: Add a conditional compilation mechanism to make Darwin-only options // like '-arch' really Darwin-only. @@ -57,9 +57,9 @@ def OptList : OptionList<[ (parameter_option "arch", (help "Compile for the specified target architecture"), (hidden)), (parameter_option "march", - (help "A synonym for -mtune"), (hidden)), + (help "A synonym for -mtune"), (hidden), (forward_not_split)), (parameter_option "mcpu", - (help "A deprecated synonym for -mtune"), (hidden)), + (help "A deprecated synonym for -mtune"), (hidden), (forward_not_split)), (switch_option "mfix-and-continue", (help "Needed by gdb to load .o files dynamically"), (hidden)), (parameter_option "MF", @@ -76,14 +76,20 @@ def OptList : OptionList<[ (help "Specifies a framework to link against")), (parameter_list_option "weak_framework", (help "Specifies a framework to weakly link against"), (hidden)), + (parameter_option "filelist", (hidden), + (help "Link the files listed in file")), (prefix_list_option "F", (help "Add a directory to framework search path")), (prefix_list_option "I", (help "Add a directory to include path")), (prefix_list_option "D", (help "Define a macro")), + (parameter_list_option "Xpreprocessor", (hidden), + (help "Pass options to preprocessor")), (prefix_list_option "Wa,", (comma_separated), (help "Pass options to assembler")), + (parameter_list_option "Xassembler", (hidden), + (help "Pass options to assembler")), (prefix_list_option "Wllc,", (comma_separated), (help "Pass options to llc")), (prefix_list_option "L", @@ -92,6 +98,8 @@ def OptList : OptionList<[ (help "Search a library when linking")), (prefix_list_option "Wl,", (help "Pass options to linker")), + (parameter_list_option "Xlinker", (hidden), + (help "Pass options to linker")), (prefix_list_option "Wo,", (comma_separated), (help "Pass options to opt")), (prefix_list_option "m", @@ -105,6 +113,8 @@ def OptList : OptionList<[ (help "Remove unreachable blocks of code")), (switch_option "single_module", (hidden), (help "Build the library so it contains only one module")), + (parameter_option "install_name", (hidden), + (help "File name the library will be installed in")), (parameter_option "compatibility_version", (hidden), (help "Compatibility version number")), (parameter_option "current_version", (hidden), @@ -126,31 +136,31 @@ def Preprocess : OptionPreprocessor< // Tools -class llvm_gcc_based : Tool< +class llvm_gcc_based : Tool< [(in_language in_lang), (out_language "llvm-bitcode"), - (output_suffix "bc"), - (cmd_line (case - (switch_on "E"), - (case (not_empty "o"), - !strconcat(cmd_prefix, " -E $INFILE -o $OUTFILE"), - (default), - !strconcat(cmd_prefix, " -E $INFILE")), - (switch_on "fsyntax-only"), - !strconcat(cmd_prefix, " -fsyntax-only $INFILE"), - (and (switch_on "S"), (switch_on "emit-llvm")), - !strconcat(cmd_prefix, " -S $INFILE -o $OUTFILE -emit-llvm"), - (default), - !strconcat(cmd_prefix, " -c $INFILE -o $OUTFILE -emit-llvm"))), + (output_suffix out_lang), + (command cmd_prefix), (actions (case - (and (multiple_input_files), (or (switch_on "S"), (switch_on "c"))), + (and (not_empty "o"), + (multiple_input_files), (or (switch_on "S"), (switch_on "c"))), (error "cannot specify -o with -c or -S with multiple files"), - (switch_on "E"), [(stop_compilation), (output_suffix E_ext)], + (switch_on "E"), + [(forward "E"), (stop_compilation), (output_suffix E_ext)], + (and (switch_on "E"), (empty "o")), (no_out_file), (switch_on ["emit-llvm", "S"]), [(output_suffix "ll"), (stop_compilation)], (switch_on ["emit-llvm", "c"]), (stop_compilation), - (switch_on "fsyntax-only"), (stop_compilation), + (switch_on "fsyntax-only"), [(forward "fsyntax-only"), + (no_out_file), (stop_compilation)], + (switch_on ["S", "emit-llvm"]), [(forward "S"), (forward "emit-llvm")], + (not (or (switch_on ["S", "emit-llvm"]), (switch_on "fsyntax-only"))), + [(append_cmd "-c"), (append_cmd "-emit-llvm")], + + // Forwards + (not_empty "Xpreprocessor"), (forward "Xpreprocessor"), (not_empty "include"), (forward "include"), (not_empty "iquote"), (forward "iquote"), (not_empty "save-temps"), (append_cmd "-save-temps"), @@ -176,12 +186,24 @@ class llvm_gcc_based : Tool< (sink) ]>; -def llvm_gcc_c : llvm_gcc_based<"@LLVMGCCCOMMAND@ -x c", "c", "i">; -def llvm_gcc_cpp : llvm_gcc_based<"@LLVMGXXCOMMAND@ -x c++", "c++", "i">; +def llvm_gcc_c : llvm_gcc_based<"@LLVMGCCCOMMAND@ -x c", "c", "i", "bc">; +def llvm_gcc_cpp : llvm_gcc_based<"@LLVMGXXCOMMAND@ -x c++", "c++", "i", "bc">; def llvm_gcc_m : llvm_gcc_based<"@LLVMGCCCOMMAND@ -x objective-c", - "objective-c", "mi">; + "objective-c", "mi", "bc">; def llvm_gcc_mxx : llvm_gcc_based<"@LLVMGCCCOMMAND@ -x objective-c++", - "objective-c++", "mi">; + "objective-c++", "mi", "bc">; + +def llvm_gcc_c_pch : llvm_gcc_based<"@LLVMGCCCOMMAND@ -x c-header", + "c-header", "i", "gch">; +def llvm_gcc_cpp_pch : llvm_gcc_based<"@LLVMGXXCOMMAND@ -x c++-header", + "c++-header", + "i", "gch">; +def llvm_gcc_m_pch : llvm_gcc_based<"@LLVMGCCCOMMAND@ -x objective-c-header", + "objective-c-header", + "mi", "gch">; +def llvm_gcc_mxx_pch + : llvm_gcc_based<"@LLVMGCCCOMMAND@ -x objective-c++-header", + "objective-c++-header", "mi", "gch">; def opt : Tool< [(in_language "llvm-bitcode"), @@ -191,14 +213,14 @@ def opt : Tool< (switch_on "O1"), (forward "O1"), (switch_on "O2"), (forward "O2"), (switch_on "O3"), (forward "O3"))), - (cmd_line "opt -f $INFILE -o $OUTFILE") + (command "opt -f") ]>; def llvm_as : Tool< [(in_language "llvm-assembler"), (out_language "llvm-bitcode"), (output_suffix "bc"), - (cmd_line "llvm-as $INFILE -o $OUTFILE"), + (command "llvm-as"), (actions (case (switch_on "emit-llvm"), (stop_compilation))) ]>; @@ -206,18 +228,19 @@ def llvm_gcc_assembler : Tool< [(in_language "assembler"), (out_language "object-code"), (output_suffix "o"), - (cmd_line "@LLVMGCCCOMMAND@ -c -x assembler $INFILE -o $OUTFILE"), + (command "@LLVMGCCCOMMAND@ -c -x assembler"), (actions (case (switch_on "c"), (stop_compilation), (not_empty "arch"), (forward "arch"), - (not_empty "Wa,"), (forward_value "Wa,"))) + (not_empty "Xassembler"), (forward "Xassembler"), + (not_empty "Wa,"), (forward "Wa,"))) ]>; def llc : Tool< [(in_language ["llvm-bitcode", "llvm-assembler"]), (out_language "assembler"), (output_suffix "s"), - (cmd_line "llc -f $INFILE -o $OUTFILE"), + (command "llc -f"), (actions (case (switch_on "S"), (stop_compilation), (switch_on "O0"), (forward "O0"), @@ -227,8 +250,8 @@ def llc : Tool< (switch_on "fPIC"), (append_cmd "-relocation-model=pic"), (switch_on "mdynamic-no-pic"), (append_cmd "-relocation-model=dynamic-no-pic"), - (not_empty "march"), (forward "mcpu"), - (not_empty "mtune"), (forward "mcpu"), + (not_empty "march"), (forward_as "mtune", "-mcpu"), + (not_empty "mtune"), (forward_as "mtune", "-mcpu"), (not_empty "mcpu"), (forward "mcpu"), (not_empty "m"), (forward_transformed_value "m", "ConvertToMAttr"), (not_empty "Wllc,"), (forward_value "Wllc,"))) @@ -239,7 +262,9 @@ class llvm_gcc_based_linker : Tool< [(in_language "object-code"), (out_language "executable"), (output_suffix "out"), - (cmd_line !strconcat(cmd_prefix, " $INFILE -o $OUTFILE")), + (command cmd_prefix), + (works_on_empty (case (not_empty "filelist"), true, + (default), false)), (join), (actions (case (switch_on "pthread"), (append_cmd "-lpthread"), @@ -248,9 +273,11 @@ class llvm_gcc_based_linker : Tool< (not_empty "arch"), (forward "arch"), (not_empty "framework"), (forward "framework"), (not_empty "weak_framework"), (forward "weak_framework"), + (not_empty "filelist"), (forward "filelist"), (switch_on "m32"), (forward "m32"), (switch_on "m64"), (forward "m64"), (not_empty "l"), (forward "l"), + (not_empty "Xlinker"), (forward "Xlinker"), (not_empty "Wl,"), (forward "Wl,"), (switch_on "dynamiclib"), (forward "dynamiclib"), (switch_on "prebind"), (forward "prebind"), @@ -258,8 +285,8 @@ class llvm_gcc_based_linker : Tool< (switch_on "single_module"), (forward "single_module"), (not_empty "compatibility_version"), (forward "compatibility_version"), - (not_empty "current_version"), - (forward "current_version"))) + (not_empty "current_version"), (forward "current_version"), + (not_empty "install_name"), (forward "install_name"))) ]>; // Default linker @@ -271,16 +298,20 @@ def llvm_gcc_cpp_linker : llvm_gcc_based_linker<"@LLVMGXXCOMMAND@">; def LanguageMap : LanguageMap< [LangToSuffixes<"c++", ["cc", "cp", "cxx", "cpp", "CPP", "c++", "C"]>, + LangToSuffixes<"c++-header", ["hpp"]>, LangToSuffixes<"c", ["c"]>, + LangToSuffixes<"c-header", ["h"]>, LangToSuffixes<"c-cpp-output", ["i"]>, LangToSuffixes<"objective-c-cpp-output", ["mi"]>, LangToSuffixes<"objective-c++", ["mm"]>, + LangToSuffixes<"objective-c++-header", ["hmm"]>, LangToSuffixes<"objective-c", ["m"]>, + LangToSuffixes<"objective-c-header", ["hm"]>, LangToSuffixes<"assembler", ["s"]>, LangToSuffixes<"assembler-with-cpp", ["S"]>, LangToSuffixes<"llvm-assembler", ["ll"]>, LangToSuffixes<"llvm-bitcode", ["bc"]>, - LangToSuffixes<"object-code", ["o"]>, + LangToSuffixes<"object-code", ["o", "*empty*"]>, LangToSuffixes<"executable", ["out"]> ]>; @@ -294,6 +325,11 @@ def CompilationGraph : CompilationGraph<[ Edge<"root", "llvm_gcc_mxx">, Edge<"root", "llc">, + Edge<"root", "llvm_gcc_c_pch">, + Edge<"root", "llvm_gcc_cpp_pch">, + Edge<"root", "llvm_gcc_m_pch">, + Edge<"root", "llvm_gcc_mxx_pch">, + Edge<"llvm_gcc_c", "llc">, Edge<"llvm_gcc_cpp", "llc">, Edge<"llvm_gcc_m", "llc">, diff --git a/tools/llvmc/plugins/Clang/Clang.td b/tools/llvmc/plugins/Clang/Clang.td index ac8ac15..988d9b1 100644 --- a/tools/llvmc/plugins/Clang/Clang.td +++ b/tools/llvmc/plugins/Clang/Clang.td @@ -1,12 +1,3 @@ -// A replacement for the Clang's ccc script. -// Depends on the Base plugin. -// To compile, use this command: -// -// cd $LLVMC2_DIR -// make DRIVER_NAME=ccc2 BUILTIN_PLUGINS=Clang -// -// Or just use the default llvmc, which now has this plugin enabled. - include "llvm/CompilerDriver/Common.td" def Priority : PluginPriority<1>; @@ -33,23 +24,17 @@ class clang_based : Tool< [(in_language language), (out_language "llvm-bitcode"), (output_suffix "bc"), - (cmd_line (case - (switch_on "E"), - (case - (not_empty "o"), - !strconcat(cmd, " -E $INFILE -o $OUTFILE"), - (default), - !strconcat(cmd, " -E $INFILE")), - (and (switch_on "S"), (switch_on "emit-llvm")), - !strconcat(cmd, " -emit-llvm $INFILE -o $OUTFILE"), - (default), - !strconcat(cmd, " -emit-llvm-bc $INFILE -o $OUTFILE"))), + (command cmd), (actions (case (switch_on "E"), - [(stop_compilation), (output_suffix ext_E)], + [(forward "E"), (stop_compilation), (output_suffix ext_E)], + (and (switch_on "E"), (empty "o")), (no_out_file), (switch_on "fsyntax-only"), (stop_compilation), - (and (switch_on "S"), (switch_on "emit-llvm")), - [(stop_compilation), (output_suffix "ll")], - (and (switch_on "c"), (switch_on "emit-llvm")), + (switch_on ["S", "emit-llvm"]), + [(append_cmd "-emit-llvm"), + (stop_compilation), (output_suffix "ll")], + (not (switch_on ["S", "emit-llvm"])), + (append_cmd "-emit-llvm-bc"), + (switch_on ["c", "emit-llvm"]), (stop_compilation), (not_empty "include"), (forward "include"), (not_empty "I"), (forward "I"))), @@ -67,7 +52,7 @@ def as : Tool< [(in_language "assembler"), (out_language "object-code"), (output_suffix "o"), - (cmd_line "as $INFILE -o $OUTFILE"), + (command "as"), (actions (case (not_empty "Wa,"), (forward_value "Wa,"), (switch_on "c"), (stop_compilation))) ]>; @@ -77,7 +62,7 @@ def llvm_ld : Tool< [(in_language "object-code"), (out_language "executable"), (output_suffix "out"), - (cmd_line "llvm-ld -native -disable-internalize $INFILE -o $OUTFILE"), + (command "llvm-ld -native -disable-internalize"), (actions (case (switch_on "pthread"), (append_cmd "-lpthread"), (not_empty "L"), (forward "L"), diff --git a/tools/opt/opt.cpp b/tools/opt/opt.cpp index 5200180..b123d54 100644 --- a/tools/opt/opt.cpp +++ b/tools/opt/opt.cpp @@ -475,10 +475,11 @@ int main(int argc, char **argv) { errs() << argv[0] << ": cannot create pass: " << PassInf->getPassName() << "\n"; if (P) { + PassKind Kind = P->getPassKind(); addPass(Passes, P); if (AnalyzeOnly) { - switch (P->getPassKind()) { + switch (Kind) { case PT_BasicBlock: Passes.add(new BasicBlockPassPrinter(PassInf)); break; -- cgit v1.1