From 331b3ffd20fe871e32d037403031ada54a21d79c Mon Sep 17 00:00:00 2001 From: Joshua Moerman Date: Sat, 27 Feb 2016 23:26:23 +0000 Subject: [PATCH] initial commit: compiler and bf examples --- .gitignore | 2 + CMakeLists.txt | 23 + bf/99bot.bf | 44 + bf/99bot.bf.ll | 7210 +++++++++++++++++++++++++++++++++++++++++++ bf/ascii.bf | 1 + bf/ascii.bf.ll | 38 + bf/hello2.bf | 3 + bf/hello2.bf.ll | 539 ++++ bf/helloworld.bf | 1 + bf/helloworld.bf.ll | 324 ++ bf/primes.bf | 221 ++ bf/primes.bf.ll | 3590 +++++++++++++++++++++ bf/quine.bf | 11 + bf/quine.bf.ll | 1853 +++++++++++ bf/rot13.bf | 18 + bf/rot13.bf.ll | 2519 +++++++++++++++ bf/test.bf | 1 + bf/test.bf.ll | 109 + bf/test2.bf | 0 bf/test2.bf.ll | 19 + bf/upper.bf | 1 + bf/upper.bf.ll | 197 ++ main.cpp | 145 + optimize.sh | 1 + output | 68 + run.sh | 2 + vanillabuild.sh | 5 + 27 files changed, 16945 insertions(+) create mode 100644 .gitignore create mode 100644 CMakeLists.txt create mode 100644 bf/99bot.bf create mode 100644 bf/99bot.bf.ll create mode 100644 bf/ascii.bf create mode 100644 bf/ascii.bf.ll create mode 100644 bf/hello2.bf create mode 100644 bf/hello2.bf.ll create mode 100644 bf/helloworld.bf create mode 100644 bf/helloworld.bf.ll create mode 100644 bf/primes.bf create mode 100644 bf/primes.bf.ll create mode 100644 bf/quine.bf create mode 100644 bf/quine.bf.ll create mode 100644 bf/rot13.bf create mode 100644 bf/rot13.bf.ll create mode 100644 bf/test.bf create mode 100644 bf/test.bf.ll create mode 100644 bf/test2.bf create mode 100644 bf/test2.bf.ll create mode 100644 bf/upper.bf create mode 100644 bf/upper.bf.ll create mode 100644 main.cpp create mode 100755 optimize.sh create mode 100644 output create mode 100755 run.sh create mode 100755 vanillabuild.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9ef9604 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +build + diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..ef7712b --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,23 @@ +cmake_minimum_required(VERSION 2.8) + +project(LLVMCompiler) + +file(GLOB sources "*.cpp") +add_executable(LLVMCompiler ${sources}) + +include_directories("${PROJECT_SOURCE_DIR}") + +# A convenience variable: +set(LLVM_ROOT "/Users/joshua/Documents/Code/build") + +# Now set the header and library paths: +include_directories( SYSTEM ${LLVM_ROOT}/include ) +link_directories( ${LLVM_ROOT}/Release/lib ) +add_definitions( -DNDEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -O3 -stdlib=libc++ -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fno-common -Woverloaded-virtual -Wcast-qual) + +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -stdlib=libc++ -nostdinc++ -I ~/Documents/Code/libcxx/include/") + +# Finally, we link the LLVM libraries to our executable: +# left out gtest_main gtest +target_link_libraries(LLVMCompiler pthread m +LLVMAsmParser LLVMInstrumentation LLVMLinker LLVMArchive LLVMBitReader LLVMDebugInfo LLVMOption LLVMipo LLVMVectorize LLVMBitWriter LLVMTableGen LLVMHexagonCodeGen LLVMHexagonDesc LLVMHexagonInfo LLVMHexagonAsmPrinter LLVMNVPTXCodeGen LLVMNVPTXDesc LLVMNVPTXInfo LLVMNVPTXAsmPrinter LLVMMBlazeDisassembler LLVMMBlazeCodeGen LLVMMBlazeDesc LLVMMBlazeAsmPrinter LLVMMBlazeAsmParser LLVMMBlazeInfo LLVMCppBackendCodeGen LLVMCppBackendInfo LLVMMSP430CodeGen LLVMMSP430Desc LLVMMSP430Info LLVMMSP430AsmPrinter LLVMXCoreDisassembler LLVMXCoreCodeGen LLVMXCoreDesc LLVMXCoreInfo LLVMXCoreAsmPrinter LLVMMipsDisassembler LLVMMipsCodeGen LLVMMipsAsmParser LLVMMipsDesc LLVMMipsInfo LLVMMipsAsmPrinter LLVMARMDisassembler LLVMARMCodeGen LLVMARMAsmParser LLVMARMDesc LLVMARMInfo LLVMARMAsmPrinter LLVMPowerPCCodeGen LLVMPowerPCDesc LLVMPowerPCInfo LLVMPowerPCAsmPrinter LLVMSparcCodeGen LLVMSparcDesc LLVMSparcInfo LLVMX86Disassembler LLVMX86AsmParser LLVMX86CodeGen LLVMSelectionDAG LLVMAsmPrinter LLVMX86Desc LLVMX86Info LLVMX86AsmPrinter LLVMX86Utils LLVMMCDisassembler LLVMMCParser LLVMInterpreter LLVMMCJIT LLVMJIT LLVMCodeGen LLVMScalarOpts LLVMInstCombine LLVMTransformUtils LLVMipa LLVMAnalysis LLVMRuntimeDyld LLVMExecutionEngine LLVMTarget LLVMMC LLVMObject LLVMCore LLVMSupport) \ No newline at end of file diff --git a/bf/99bot.bf b/bf/99bot.bf new file mode 100644 index 0000000..74cb56e --- /dev/null +++ b/bf/99bot.bf @@ -0,0 +1,44 @@ +>+++++++++[<+++++++++++>-]<[>[-]>[-]<<[>+>+<<-]>>[<<+>>-]>>> +[-]<<<+++++++++<[>>>+<<[>+>[-]<<-]>[<+>-]>[<<++++++++++>>>+< +-]<<-<-]+++++++++>[<->-]>>+>[<[-]<<+>>>-]>[-]+<<[>+>-<<-]<<< +[>>+>+<<<-]>>>[<<<+>>>-]>[<+>-]<<-[>[-]<[-]]>>+<[>[-]<-]<+++ ++++++[<++++++<++++++>>-]>>>[>+>+<<-]>>[<<+>>-]<[<<<<<.>>>>>- +]<<<<<<.>>[-]>[-]++++[<++++++++>-]<.>++++[<++++++++>-]<++.>+ +++++[<+++++++++>-]<.><+++++..--------.-------.>>[>>+>+<<<-]> +>>[<<<+>>>-]<[<<<<++++++++++++++.>>>>-]<<<<[-]>++++[<+++++++ ++>-]<.>+++++++++[<+++++++++>-]<--.---------.>+++++++[<------ +---->-]<.>++++++[<+++++++++++>-]<.+++..+++++++++++++.>++++++ +++[<---------->-]<--.>+++++++++[<+++++++++>-]<--.-.>++++++++ +[<---------->-]<++.>++++++++[<++++++++++>-]<++++.----------- +-.---.>+++++++[<---------->-]<+.>++++++++[<+++++++++++>-]<-. +>++[<----------->-]<.+++++++++++..>+++++++++[<---------->-]< +-----.---.>>>[>+>+<<-]>>[<<+>>-]<[<<<<<.>>>>>-]<<<<<<.>>>+++ ++[<++++++>-]<--.>++++[<++++++++>-]<++.>+++++[<+++++++++>-]<. +><+++++..--------.-------.>>[>>+>+<<<-]>>>[<<<+>>>-]<[<<<<++ +++++++++++++.>>>>-]<<<<[-]>++++[<++++++++>-]<.>+++++++++[<++ ++++++++>-]<--.---------.>+++++++[<---------->-]<.>++++++[<++ ++++++++++>-]<.+++..+++++++++++++.>++++++++++[<---------->-]< +-.---.>+++++++[<++++++++++>-]<++++.+++++++++++++.++++++++++. +------.>+++++++[<---------->-]<+.>++++++++[<++++++++++>-]<-. +-.---------.>+++++++[<---------->-]<+.>+++++++[<++++++++++>- +]<--.+++++++++++.++++++++.---------.>++++++++[<---------->-] +<++.>+++++[<+++++++++++++>-]<.+++++++++++++.----------.>++++ ++++[<---------->-]<++.>++++++++[<++++++++++>-]<.>+++[<-----> +-]<.>+++[<++++++>-]<..>+++++++++[<--------->-]<--.>+++++++[< +++++++++++>-]<+++.+++++++++++.>++++++++[<----------->-]<++++ +.>+++++[<+++++++++++++>-]<.>+++[<++++++>-]<-.---.++++++.---- +---.----------.>++++++++[<----------->-]<+.---.[-]<<<->[-]>[ +-]<<[>+>+<<-]>>[<<+>>-]>>>[-]<<<+++++++++<[>>>+<<[>+>[-]<<-] +>[<+>-]>[<<++++++++++>>>+<-]<<-<-]+++++++++>[<->-]>>+>[<[-]< +<+>>>-]>[-]+<<[>+>-<<-]<<<[>>+>+<<<-]>>>[<<<+>>>-]<>>[<+>-]< +<-[>[-]<[-]]>>+<[>[-]<-]<++++++++[<++++++<++++++>>-]>>>[>+>+ +<<-]>>[<<+>>-]<[<<<<<.>>>>>-]<<<<<<.>>[-]>[-]++++[<++++++++> +-]<.>++++[<++++++++>-]<++.>+++++[<+++++++++>-]<.><+++++..--- +-----.-------.>>[>>+>+<<<-]>>>[<<<+>>>-]<[<<<<++++++++++++++ +.>>>>-]<<<<[-]>++++[<++++++++>-]<.>+++++++++[<+++++++++>-]<- +-.---------.>+++++++[<---------->-]<.>++++++[<+++++++++++>-] +<.+++..+++++++++++++.>++++++++[<---------->-]<--.>+++++++++[ +<+++++++++>-]<--.-.>++++++++[<---------->-]<++.>++++++++[<++ +++++++++>-]<++++.------------.---.>+++++++[<---------->-]<+. +>++++++++[<+++++++++++>-]<-.>++[<----------->-]<.+++++++++++ +..>+++++++++[<---------->-]<-----.---.+++.---.[-]<<<] diff --git a/bf/99bot.bf.ll b/bf/99bot.bf.ll new file mode 100644 index 0000000..9053283 --- /dev/null +++ b/bf/99bot.bf.ll @@ -0,0 +1,7210 @@ +; ModuleID = 'asdf' + +declare i32 @getchar() + +declare i32 @putchar(i32) + +define i32 @main() { + %malloccall = tail call i8* @malloc(i32 mul (i32 ptrtoint (i8* getelementptr (i8* null, i32 1) to i32), i32 100)) + call void @llvm.memset.p0i8.i32(i8* %malloccall, i8 0, i32 100, i32 1, i1 false) + %1 = getelementptr i8* %malloccall, i32 50 + %2 = getelementptr i8* %1, i32 1 + %3 = load i8* %2 + %4 = add i8 %3, 1 + store i8 %4, i8* %2 + %5 = load i8* %2 + %6 = add i8 %5, 1 + store i8 %6, i8* %2 + %7 = load i8* %2 + %8 = add i8 %7, 1 + store i8 %8, i8* %2 + %9 = load i8* %2 + %10 = add i8 %9, 1 + store i8 %10, i8* %2 + %11 = load i8* %2 + %12 = add i8 %11, 1 + store i8 %12, i8* %2 + %13 = load i8* %2 + %14 = add i8 %13, 1 + store i8 %14, i8* %2 + %15 = load i8* %2 + %16 = add i8 %15, 1 + store i8 %16, i8* %2 + %17 = load i8* %2 + %18 = add i8 %17, 1 + store i8 %18, i8* %2 + %19 = load i8* %2 + %20 = add i8 %19, 1 + store i8 %20, i8* %2 + %21 = load i8* %2 + %22 = icmp ne i8 %21, 0 + br i1 %22, label %23, label %52 + +;