Joshua Moerman
9 years ago
commit
331b3ffd20
27 changed files with 16945 additions and 0 deletions
@ -0,0 +1,2 @@ |
|||
build |
|||
|
@ -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) |
@ -0,0 +1,44 @@ |
|||
>+++++++++[<+++++++++++>-]<[>[-]>[-]<<[>+>+<<-]>>[<<+>>-]>>> |
|||
[-]<<<+++++++++<[>>>+<<[>+>[-]<<-]>[<+>-]>[<<++++++++++>>>+< |
|||
-]<<-<-]+++++++++>[<->-]>>+>[<[-]<<+>>>-]>[-]+<<[>+>-<<-]<<< |
|||
[>>+>+<<<-]>>>[<<<+>>>-]>[<+>-]<<-[>[-]<[-]]>>+<[>[-]<-]<+++ |
|||
+++++[<++++++<++++++>>-]>>>[>+>+<<-]>>[<<+>>-]<[<<<<<.>>>>>- |
|||
]<<<<<<.>>[-]>[-]++++[<++++++++>-]<.>++++[<++++++++>-]<++.>+ |
|||
++++[<+++++++++>-]<.><+++++..--------.-------.>>[>>+>+<<<-]> |
|||
>>[<<<+>>>-]<[<<<<++++++++++++++.>>>>-]<<<<[-]>++++[<+++++++ |
|||
+>-]<.>+++++++++[<+++++++++>-]<--.---------.>+++++++[<------ |
|||
---->-]<.>++++++[<+++++++++++>-]<.+++..+++++++++++++.>++++++ |
|||
++[<---------->-]<--.>+++++++++[<+++++++++>-]<--.-.>++++++++ |
|||
[<---------->-]<++.>++++++++[<++++++++++>-]<++++.----------- |
|||
-.---.>+++++++[<---------->-]<+.>++++++++[<+++++++++++>-]<-. |
|||
>++[<----------->-]<.+++++++++++..>+++++++++[<---------->-]< |
|||
-----.---.>>>[>+>+<<-]>>[<<+>>-]<[<<<<<.>>>>>-]<<<<<<.>>>+++ |
|||
+[<++++++>-]<--.>++++[<++++++++>-]<++.>+++++[<+++++++++>-]<. |
|||
><+++++..--------.-------.>>[>>+>+<<<-]>>>[<<<+>>>-]<[<<<<++ |
|||
++++++++++++.>>>>-]<<<<[-]>++++[<++++++++>-]<.>+++++++++[<++ |
|||
+++++++>-]<--.---------.>+++++++[<---------->-]<.>++++++[<++ |
|||
+++++++++>-]<.+++..+++++++++++++.>++++++++++[<---------->-]< |
|||
-.---.>+++++++[<++++++++++>-]<++++.+++++++++++++.++++++++++. |
|||
------.>+++++++[<---------->-]<+.>++++++++[<++++++++++>-]<-. |
|||
-.---------.>+++++++[<---------->-]<+.>+++++++[<++++++++++>- |
|||
]<--.+++++++++++.++++++++.---------.>++++++++[<---------->-] |
|||
<++.>+++++[<+++++++++++++>-]<.+++++++++++++.----------.>++++ |
|||
+++[<---------->-]<++.>++++++++[<++++++++++>-]<.>+++[<-----> |
|||
-]<.>+++[<++++++>-]<..>+++++++++[<--------->-]<--.>+++++++[< |
|||
++++++++++>-]<+++.+++++++++++.>++++++++[<----------->-]<++++ |
|||
.>+++++[<+++++++++++++>-]<.>+++[<++++++>-]<-.---.++++++.---- |
|||
---.----------.>++++++++[<----------->-]<+.---.[-]<<<->[-]>[ |
|||
-]<<[>+>+<<-]>>[<<+>>-]>>>[-]<<<+++++++++<[>>>+<<[>+>[-]<<-] |
|||
>[<+>-]>[<<++++++++++>>>+<-]<<-<-]+++++++++>[<->-]>>+>[<[-]< |
|||
<+>>>-]>[-]+<<[>+>-<<-]<<<[>>+>+<<<-]>>>[<<<+>>>-]<>>[<+>-]< |
|||
<-[>[-]<[-]]>>+<[>[-]<-]<++++++++[<++++++<++++++>>-]>>>[>+>+ |
|||
<<-]>>[<<+>>-]<[<<<<<.>>>>>-]<<<<<<.>>[-]>[-]++++[<++++++++> |
|||
-]<.>++++[<++++++++>-]<++.>+++++[<+++++++++>-]<.><+++++..--- |
|||
-----.-------.>>[>>+>+<<<-]>>>[<<<+>>>-]<[<<<<++++++++++++++ |
|||
.>>>>-]<<<<[-]>++++[<++++++++>-]<.>+++++++++[<+++++++++>-]<- |
|||
-.---------.>+++++++[<---------->-]<.>++++++[<+++++++++++>-] |
|||
<.+++..+++++++++++++.>++++++++[<---------->-]<--.>+++++++++[ |
|||
<+++++++++>-]<--.-.>++++++++[<---------->-]<++.>++++++++[<++ |
|||
++++++++>-]<++++.------------.---.>+++++++[<---------->-]<+. |
|||
>++++++++[<+++++++++++>-]<-.>++[<----------->-]<.+++++++++++ |
|||
..>+++++++++[<---------->-]<-----.---.+++.---.[-]<<<] |
File diff suppressed because it is too large
@ -0,0 +1 @@ |
|||
+[.+] |
@ -0,0 +1,38 @@ |
|||
; 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 = load i8* %1 |
|||
%3 = add i8 %2, 1 |
|||
store i8 %3, i8* %1 |
|||
%4 = load i8* %1 |
|||
%5 = icmp ne i8 %4, 0 |
|||
br i1 %5, label %6, label %14 |
|||
|
|||
; <label>:6 ; preds = %6, %0 |
|||
%7 = load i8* %1 |
|||
%8 = sext i8 %7 to i32 |
|||
%9 = call i32 @putchar(i32 %8) |
|||
%10 = load i8* %1 |
|||
%11 = add i8 %10, 1 |
|||
store i8 %11, i8* %1 |
|||
%12 = load i8* %1 |
|||
%13 = icmp ne i8 %12, 0 |
|||
br i1 %13, label %6, label %14 |
|||
|
|||
; <label>:14 ; preds = %6, %0 |
|||
tail call void @free(i8* %malloccall) |
|||
ret i32 0 |
|||
} |
|||
|
|||
declare noalias i8* @malloc(i32) |
|||
|
|||
declare void @llvm.memset.p0i8.i32(i8* nocapture, i8, i32, i32, i1) nounwind |
|||
|
|||
declare void @free(i8*) |
@ -0,0 +1,3 @@ |
|||
>+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.[-]>++++++++[<++++>-] |
|||
<.>+++++++++++[<++++++++>-]<-.--------.+++.------.--------.[-]>++++++++[<++++>- |
|||
]<+.[-]++++++++++. |
@ -0,0 +1,539 @@ |
|||
; 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 %46 |
|||
|
|||
; <label>:23 ; preds = %23, %0 |
|||
%24 = getelementptr i8* %2, i32 -1 |
|||
%25 = load i8* %24 |
|||
%26 = add i8 %25, 1 |
|||
store i8 %26, i8* %24 |
|||
%27 = load i8* %24 |
|||
%28 = add i8 %27, 1 |
|||
store i8 %28, i8* %24 |
|||
%29 = load i8* %24 |
|||
%30 = add i8 %29, 1 |
|||
store i8 %30, i8* %24 |
|||
%31 = load i8* %24 |
|||
%32 = add i8 %31, 1 |
|||
store i8 %32, i8* %24 |
|||
%33 = load i8* %24 |
|||
%34 = add i8 %33, 1 |
|||
store i8 %34, i8* %24 |
|||
%35 = load i8* %24 |
|||
%36 = add i8 %35, 1 |
|||
store i8 %36, i8* %24 |
|||
%37 = load i8* %24 |
|||
%38 = add i8 %37, 1 |
|||
store i8 %38, i8* %24 |
|||
%39 = load i8* %24 |
|||
%40 = add i8 %39, 1 |
|||
store i8 %40, i8* %24 |
|||
%41 = getelementptr i8* %24, i32 1 |
|||
%42 = load i8* %41 |
|||
%43 = sub i8 %42, 1 |
|||
store i8 %43, i8* %41 |
|||
%44 = load i8* %41 |
|||
%45 = icmp ne i8 %44, 0 |
|||
br i1 %45, label %23, label %46 |
|||
|
|||
; <label>:46 ; preds = %23, %0 |
|||
%47 = getelementptr i8* %41, i32 -1 |
|||
%48 = load i8* %47 |
|||
%49 = sext i8 %48 to i32 |
|||
%50 = call i32 @putchar(i32 %49) |
|||
%51 = getelementptr i8* %47, i32 1 |
|||
%52 = load i8* %51 |
|||
%53 = add i8 %52, 1 |
|||
store i8 %53, i8* %51 |
|||
%54 = load i8* %51 |
|||
%55 = add i8 %54, 1 |
|||
store i8 %55, i8* %51 |
|||
%56 = load i8* %51 |
|||
%57 = add i8 %56, 1 |
|||
store i8 %57, i8* %51 |
|||
%58 = load i8* %51 |
|||
%59 = add i8 %58, 1 |
|||
store i8 %59, i8* %51 |
|||
%60 = load i8* %51 |
|||
%61 = add i8 %60, 1 |
|||
store i8 %61, i8* %51 |
|||
%62 = load i8* %51 |
|||
%63 = add i8 %62, 1 |
|||
store i8 %63, i8* %51 |
|||
%64 = load i8* %51 |
|||
%65 = add i8 %64, 1 |
|||
store i8 %65, i8* %51 |
|||
%66 = load i8* %51 |
|||
%67 = icmp ne i8 %66, 0 |
|||
br i1 %67, label %68, label %83 |
|||
|
|||
; <label>:68 ; preds = %68, %46 |
|||
%69 = getelementptr i8* %51, i32 -1 |
|||
%70 = load i8* %69 |
|||
%71 = add i8 %70, 1 |
|||
store i8 %71, i8* %69 |
|||
%72 = load i8* %69 |
|||
%73 = add i8 %72, 1 |
|||
store i8 %73, i8* %69 |
|||
%74 = load i8* %69 |
|||
%75 = add i8 %74, 1 |
|||
store i8 %75, i8* %69 |
|||
%76 = load i8* %69 |
|||
%77 = add i8 %76, 1 |
|||
store i8 %77, i8* %69 |
|||
%78 = getelementptr i8* %69, i32 1 |
|||
%79 = load i8* %78 |
|||
%80 = sub i8 %79, 1 |
|||
store i8 %80, i8* %78 |
|||
%81 = load i8* %78 |
|||
%82 = icmp ne i8 %81, 0 |
|||
br i1 %82, label %68, label %83 |
|||
|
|||
; <label>:83 ; preds = %68, %46 |
|||
%84 = getelementptr i8* %78, i32 -1 |
|||
%85 = load i8* %84 |
|||
%86 = add i8 %85, 1 |
|||
store i8 %86, i8* %84 |
|||
%87 = load i8* %84 |
|||
%88 = sext i8 %87 to i32 |
|||
%89 = call i32 @putchar(i32 %88) |
|||
%90 = load i8* %84 |
|||
%91 = add i8 %90, 1 |
|||
store i8 %91, i8* %84 |
|||
%92 = load i8* %84 |
|||
%93 = add i8 %92, 1 |
|||
store i8 %93, i8* %84 |
|||
%94 = load i8* %84 |
|||
%95 = add i8 %94, 1 |
|||
store i8 %95, i8* %84 |
|||
%96 = load i8* %84 |
|||
%97 = add i8 %96, 1 |
|||
store i8 %97, i8* %84 |
|||
%98 = load i8* %84 |
|||
%99 = add i8 %98, 1 |
|||
store i8 %99, i8* %84 |
|||
%100 = load i8* %84 |
|||
%101 = add i8 %100, 1 |
|||
store i8 %101, i8* %84 |
|||
%102 = load i8* %84 |
|||
%103 = add i8 %102, 1 |
|||
store i8 %103, i8* %84 |
|||
%104 = load i8* %84 |
|||
%105 = sext i8 %104 to i32 |
|||
%106 = call i32 @putchar(i32 %105) |
|||
%107 = load i8* %84 |
|||
%108 = sext i8 %107 to i32 |
|||
%109 = call i32 @putchar(i32 %108) |
|||
%110 = load i8* %84 |
|||
%111 = add i8 %110, 1 |
|||
store i8 %111, i8* %84 |
|||
%112 = load i8* %84 |
|||
%113 = add i8 %112, 1 |
|||
store i8 %113, i8* %84 |
|||
%114 = load i8* %84 |
|||
%115 = add i8 %114, 1 |
|||
store i8 %115, i8* %84 |
|||
%116 = load i8* %84 |
|||
%117 = sext i8 %116 to i32 |
|||
%118 = call i32 @putchar(i32 %117) |
|||
%119 = load i8* %84 |
|||
%120 = icmp ne i8 %119, 0 |
|||
br i1 %120, label %121, label %126 |
|||
|
|||
; <label>:121 ; preds = %121, %83 |
|||
%122 = load i8* %84 |
|||
%123 = sub i8 %122, 1 |
|||
store i8 %123, i8* %84 |
|||
%124 = load i8* %84 |
|||
%125 = icmp ne i8 %124, 0 |
|||
br i1 %125, label %121, label %126 |
|||
|
|||
; <label>:126 ; preds = %121, %83 |
|||
%127 = getelementptr i8* %84, i32 1 |
|||
%128 = load i8* %127 |
|||
%129 = add i8 %128, 1 |
|||
store i8 %129, i8* %127 |
|||
%130 = load i8* %127 |
|||
%131 = add i8 %130, 1 |
|||
store i8 %131, i8* %127 |
|||
%132 = load i8* %127 |
|||
%133 = add i8 %132, 1 |
|||
store i8 %133, i8* %127 |
|||
%134 = load i8* %127 |
|||
%135 = add i8 %134, 1 |
|||
store i8 %135, i8* %127 |
|||
%136 = load i8* %127 |
|||
%137 = add i8 %136, 1 |
|||
store i8 %137, i8* %127 |
|||
%138 = load i8* %127 |
|||
%139 = add i8 %138, 1 |
|||
store i8 %139, i8* %127 |
|||
%140 = load i8* %127 |
|||
%141 = add i8 %140, 1 |
|||
store i8 %141, i8* %127 |
|||
%142 = load i8* %127 |
|||
%143 = add i8 %142, 1 |
|||
store i8 %143, i8* %127 |
|||
%144 = load i8* %127 |
|||
%145 = icmp ne i8 %144, 0 |
|||
br i1 %145, label %146, label %161 |
|||
|
|||
; <label>:146 ; preds = %146, %126 |
|||
%147 = getelementptr i8* %127, i32 -1 |
|||
%148 = load i8* %147 |
|||
%149 = add i8 %148, 1 |
|||
store i8 %149, i8* %147 |
|||
%150 = load i8* %147 |
|||
%151 = add i8 %150, 1 |
|||
store i8 %151, i8* %147 |
|||
%152 = load i8* %147 |
|||
%153 = add i8 %152, 1 |
|||
store i8 %153, i8* %147 |
|||
%154 = load i8* %147 |
|||
%155 = add i8 %154, 1 |
|||
store i8 %155, i8* %147 |
|||
%156 = getelementptr i8* %147, i32 1 |
|||
%157 = load i8* %156 |
|||
%158 = sub i8 %157, 1 |
|||
store i8 %158, i8* %156 |
|||
%159 = load i8* %156 |
|||
%160 = icmp ne i8 %159, 0 |
|||
br i1 %160, label %146, label %161 |
|||
|
|||
; <label>:161 ; preds = %146, %126 |
|||
%162 = getelementptr i8* %156, i32 -1 |
|||
%163 = load i8* %162 |
|||
%164 = sext i8 %163 to i32 |
|||
%165 = call i32 @putchar(i32 %164) |
|||
%166 = getelementptr i8* %162, i32 1 |
|||
%167 = load i8* %166 |
|||
%168 = add i8 %167, 1 |
|||
store i8 %168, i8* %166 |
|||
%169 = load i8* %166 |
|||
%170 = add i8 %169, 1 |
|||
store i8 %170, i8* %166 |
|||
%171 = load i8* %166 |
|||
%172 = add i8 %171, 1 |
|||
store i8 %172, i8* %166 |
|||
%173 = load i8* %166 |
|||
%174 = add i8 %173, 1 |
|||
store i8 %174, i8* %166 |
|||
%175 = load i8* %166 |
|||
%176 = add i8 %175, 1 |
|||
store i8 %176, i8* %166 |
|||
%177 = load i8* %166 |
|||
%178 = add i8 %177, 1 |
|||
store i8 %178, i8* %166 |
|||
%179 = load i8* %166 |
|||
%180 = add i8 %179, 1 |
|||
store i8 %180, i8* %166 |
|||
%181 = load i8* %166 |
|||
%182 = add i8 %181, 1 |
|||
store i8 %182, i8* %166 |
|||
%183 = load i8* %166 |
|||
%184 = add i8 %183, 1 |
|||
store i8 %184, i8* %166 |
|||
%185 = load i8* %166 |
|||
%186 = add i8 %185, 1 |
|||
store i8 %186, i8* %166 |
|||
%187 = load i8* %166 |
|||
%188 = add i8 %187, 1 |
|||
store i8 %188, i8* %166 |
|||
%189 = load i8* %166 |
|||
%190 = icmp ne i8 %189, 0 |
|||
br i1 %190, label %191, label %214 |
|||
|
|||
; <label>:191 ; preds = %191, %161 |
|||
%192 = getelementptr i8* %166, i32 -1 |
|||
%193 = load i8* %192 |
|||
%194 = add i8 %193, 1 |
|||
store i8 %194, i8* %192 |
|||
%195 = load i8* %192 |
|||
%196 = add i8 %195, 1 |
|||
store i8 %196, i8* %192 |
|||
%197 = load i8* %192 |
|||
%198 = add i8 %197, 1 |
|||
store i8 %198, i8* %192 |
|||
%199 = load i8* %192 |
|||
%200 = add i8 %199, 1 |
|||
store i8 %200, i8* %192 |
|||
%201 = load i8* %192 |
|||
%202 = add i8 %201, 1 |
|||
store i8 %202, i8* %192 |
|||
%203 = load i8* %192 |
|||
%204 = add i8 %203, 1 |
|||
store i8 %204, i8* %192 |
|||
%205 = load i8* %192 |
|||
%206 = add i8 %205, 1 |
|||
store i8 %206, i8* %192 |
|||
%207 = load i8* %192 |
|||
%208 = add i8 %207, 1 |
|||
store i8 %208, i8* %192 |
|||
%209 = getelementptr i8* %192, i32 1 |
|||
%210 = load i8* %209 |
|||
%211 = sub i8 %210, 1 |
|||
store i8 %211, i8* %209 |
|||
%212 = load i8* %209 |
|||
%213 = icmp ne i8 %212, 0 |
|||
br i1 %213, label %191, label %214 |
|||
|
|||
; <label>:214 ; preds = %191, %161 |
|||
%215 = getelementptr i8* %209, i32 -1 |
|||
%216 = load i8* %215 |
|||
%217 = sub i8 %216, 1 |
|||
store i8 %217, i8* %215 |
|||
%218 = load i8* %215 |
|||
%219 = sext i8 %218 to i32 |
|||
%220 = call i32 @putchar(i32 %219) |
|||
%221 = load i8* %215 |
|||
%222 = sub i8 %221, 1 |
|||
store i8 %222, i8* %215 |
|||
%223 = load i8* %215 |
|||
%224 = sub i8 %223, 1 |
|||
store i8 %224, i8* %215 |
|||
%225 = load i8* %215 |
|||
%226 = sub i8 %225, 1 |
|||
store i8 %226, i8* %215 |
|||
%227 = load i8* %215 |
|||
%228 = sub i8 %227, 1 |
|||
store i8 %228, i8* %215 |
|||
%229 = load i8* %215 |
|||
%230 = sub i8 %229, 1 |
|||
store i8 %230, i8* %215 |
|||
%231 = load i8* %215 |
|||
%232 = sub i8 %231, 1 |
|||
store i8 %232, i8* %215 |
|||
%233 = load i8* %215 |
|||
%234 = sub i8 %233, 1 |
|||
store i8 %234, i8* %215 |
|||
%235 = load i8* %215 |
|||
%236 = sub i8 %235, 1 |
|||
store i8 %236, i8* %215 |
|||
%237 = load i8* %215 |
|||
%238 = sext i8 %237 to i32 |
|||
%239 = call i32 @putchar(i32 %238) |
|||
%240 = load i8* %215 |
|||
%241 = add i8 %240, 1 |
|||
store i8 %241, i8* %215 |
|||
%242 = load i8* %215 |
|||
%243 = add i8 %242, 1 |
|||
store i8 %243, i8* %215 |
|||
%244 = load i8* %215 |
|||
%245 = add i8 %244, 1 |
|||
store i8 %245, i8* %215 |
|||
%246 = load i8* %215 |
|||
%247 = sext i8 %246 to i32 |
|||
%248 = call i32 @putchar(i32 %247) |
|||
%249 = load i8* %215 |
|||
%250 = sub i8 %249, 1 |
|||
store i8 %250, i8* %215 |
|||
%251 = load i8* %215 |
|||
%252 = sub i8 %251, 1 |
|||
store i8 %252, i8* %215 |
|||
%253 = load i8* %215 |
|||
%254 = sub i8 %253, 1 |
|||
store i8 %254, i8* %215 |
|||
%255 = load i8* %215 |
|||
%256 = sub i8 %255, 1 |
|||
store i8 %256, i8* %215 |
|||
%257 = load i8* %215 |
|||
%258 = sub i8 %257, 1 |
|||
store i8 %258, i8* %215 |
|||
%259 = load i8* %215 |
|||
%260 = sub i8 %259, 1 |
|||
store i8 %260, i8* %215 |
|||
%261 = load i8* %215 |
|||
%262 = sext i8 %261 to i32 |
|||
%263 = call i32 @putchar(i32 %262) |
|||
%264 = load i8* %215 |
|||
%265 = sub i8 %264, 1 |
|||
store i8 %265, i8* %215 |
|||
%266 = load i8* %215 |
|||
%267 = sub i8 %266, 1 |
|||
store i8 %267, i8* %215 |
|||
%268 = load i8* %215 |
|||
%269 = sub i8 %268, 1 |
|||
store i8 %269, i8* %215 |
|||
%270 = load i8* %215 |
|||
%271 = sub i8 %270, 1 |
|||
store i8 %271, i8* %215 |
|||
%272 = load i8* %215 |
|||
%273 = sub i8 %272, 1 |
|||
store i8 %273, i8* %215 |
|||
%274 = load i8* %215 |
|||
%275 = sub i8 %274, 1 |
|||
store i8 %275, i8* %215 |
|||
%276 = load i8* %215 |
|||
%277 = sub i8 %276, 1 |
|||
store i8 %277, i8* %215 |
|||
%278 = load i8* %215 |
|||
%279 = sub i8 %278, 1 |
|||
store i8 %279, i8* %215 |
|||
%280 = load i8* %215 |
|||
%281 = sext i8 %280 to i32 |
|||
%282 = call i32 @putchar(i32 %281) |
|||
%283 = load i8* %215 |
|||
%284 = icmp ne i8 %283, 0 |
|||
br i1 %284, label %285, label %290 |
|||
|
|||
; <label>:285 ; preds = %285, %214 |
|||
%286 = load i8* %215 |
|||
%287 = sub i8 %286, 1 |
|||
store i8 %287, i8* %215 |
|||
%288 = load i8* %215 |
|||
%289 = icmp ne i8 %288, 0 |
|||
br i1 %289, label %285, label %290 |
|||
|
|||
; <label>:290 ; preds = %285, %214 |
|||
%291 = getelementptr i8* %215, i32 1 |
|||
%292 = load i8* %291 |
|||
%293 = add i8 %292, 1 |
|||
store i8 %293, i8* %291 |
|||
%294 = load i8* %291 |
|||
%295 = add i8 %294, 1 |
|||
store i8 %295, i8* %291 |
|||
%296 = load i8* %291 |
|||
%297 = add i8 %296, 1 |
|||
store i8 %297, i8* %291 |
|||
%298 = load i8* %291 |
|||
%299 = add i8 %298, 1 |
|||
store i8 %299, i8* %291 |
|||
%300 = load i8* %291 |
|||
%301 = add i8 %300, 1 |
|||
store i8 %301, i8* %291 |
|||
%302 = load i8* %291 |
|||
%303 = add i8 %302, 1 |
|||
store i8 %303, i8* %291 |
|||
%304 = load i8* %291 |
|||
%305 = add i8 %304, 1 |
|||
store i8 %305, i8* %291 |
|||
%306 = load i8* %291 |
|||
%307 = add i8 %306, 1 |
|||
store i8 %307, i8* %291 |
|||
%308 = load i8* %291 |
|||
%309 = icmp ne i8 %308, 0 |
|||
br i1 %309, label %310, label %325 |
|||
|
|||
; <label>:310 ; preds = %310, %290 |
|||
%311 = getelementptr i8* %291, i32 -1 |
|||
%312 = load i8* %311 |
|||
%313 = add i8 %312, 1 |
|||
store i8 %313, i8* %311 |
|||
%314 = load i8* %311 |
|||
%315 = add i8 %314, 1 |
|||
store i8 %315, i8* %311 |
|||
%316 = load i8* %311 |
|||
%317 = add i8 %316, 1 |
|||
store i8 %317, i8* %311 |
|||
%318 = load i8* %311 |
|||
%319 = add i8 %318, 1 |
|||
store i8 %319, i8* %311 |
|||
%320 = getelementptr i8* %311, i32 1 |
|||
%321 = load i8* %320 |
|||
%322 = sub i8 %321, 1 |
|||
store i8 %322, i8* %320 |
|||
%323 = load i8* %320 |
|||
%324 = icmp ne i8 %323, 0 |
|||
br i1 %324, label %310, label %325 |
|||
|
|||
; <label>:325 ; preds = %310, %290 |
|||
%326 = getelementptr i8* %320, i32 -1 |
|||
%327 = load i8* %326 |
|||
%328 = add i8 %327, 1 |
|||
store i8 %328, i8* %326 |
|||
%329 = load i8* %326 |
|||
%330 = sext i8 %329 to i32 |
|||
%331 = call i32 @putchar(i32 %330) |
|||
%332 = load i8* %326 |
|||
%333 = icmp ne i8 %332, 0 |
|||
br i1 %333, label %334, label %339 |
|||
|
|||
; <label>:334 ; preds = %334, %325 |
|||
%335 = load i8* %326 |
|||
%336 = sub i8 %335, 1 |
|||
store i8 %336, i8* %326 |
|||
%337 = load i8* %326 |
|||
%338 = icmp ne i8 %337, 0 |
|||
br i1 %338, label %334, label %339 |
|||
|
|||
; <label>:339 ; preds = %334, %325 |
|||
%340 = load i8* %326 |
|||
%341 = add i8 %340, 1 |
|||
store i8 %341, i8* %326 |
|||
%342 = load i8* %326 |
|||
%343 = add i8 %342, 1 |
|||
store i8 %343, i8* %326 |
|||
%344 = load i8* %326 |
|||
%345 = add i8 %344, 1 |
|||
store i8 %345, i8* %326 |
|||
%346 = load i8* %326 |
|||
%347 = add i8 %346, 1 |
|||
store i8 %347, i8* %326 |
|||
%348 = load i8* %326 |
|||
%349 = add i8 %348, 1 |
|||
store i8 %349, i8* %326 |
|||
%350 = load i8* %326 |
|||
%351 = add i8 %350, 1 |
|||
store i8 %351, i8* %326 |
|||
%352 = load i8* %326 |
|||
%353 = add i8 %352, 1 |
|||
store i8 %353, i8* %326 |
|||
%354 = load i8* %326 |
|||
%355 = add i8 %354, 1 |
|||
store i8 %355, i8* %326 |
|||
%356 = load i8* %326 |
|||
%357 = add i8 %356, 1 |
|||
store i8 %357, i8* %326 |
|||
%358 = load i8* %326 |
|||
%359 = add i8 %358, 1 |
|||
store i8 %359, i8* %326 |
|||
%360 = load i8* %326 |
|||
%361 = sext i8 %360 to i32 |
|||
%362 = call i32 @putchar(i32 %361) |
|||
tail call void @free(i8* %malloccall) |
|||
ret i32 0 |
|||
} |
|||
|
|||
declare noalias i8* @malloc(i32) |
|||
|
|||
declare void @llvm.memset.p0i8.i32(i8* nocapture, i8, i32, i32, i1) nounwind |
|||
|
|||
declare void @free(i8*) |
@ -0,0 +1 @@ |
|||
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>. |
@ -0,0 +1,324 @@ |
|||
; 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 = load i8* %1 |
|||
%3 = add i8 %2, 1 |
|||
store i8 %3, i8* %1 |
|||
%4 = load i8* %1 |
|||
%5 = add i8 %4, 1 |
|||
store i8 %5, i8* %1 |
|||
%6 = load i8* %1 |
|||
%7 = add i8 %6, 1 |
|||
store i8 %7, i8* %1 |
|||
%8 = load i8* %1 |
|||
%9 = add i8 %8, 1 |
|||
store i8 %9, i8* %1 |
|||
%10 = load i8* %1 |
|||
%11 = add i8 %10, 1 |
|||
store i8 %11, i8* %1 |
|||
%12 = load i8* %1 |
|||
%13 = add i8 %12, 1 |
|||
store i8 %13, i8* %1 |
|||
%14 = load i8* %1 |
|||
%15 = add i8 %14, 1 |
|||
store i8 %15, i8* %1 |
|||
%16 = load i8* %1 |
|||
%17 = add i8 %16, 1 |
|||
store i8 %17, i8* %1 |
|||
%18 = load i8* %1 |
|||
%19 = add i8 %18, 1 |
|||
store i8 %19, i8* %1 |
|||
%20 = load i8* %1 |
|||
%21 = add i8 %20, 1 |
|||
store i8 %21, i8* %1 |
|||
%22 = load i8* %1 |
|||
%23 = icmp ne i8 %22, 0 |
|||
br i1 %23, label %24, label %79 |
|||
|
|||
; <label>:24 ; preds = %24, %0 |
|||
%25 = getelementptr i8* %1, i32 1 |
|||
%26 = load i8* %25 |
|||
%27 = add i8 %26, 1 |
|||
store i8 %27, i8* %25 |
|||
%28 = load i8* %25 |
|||
%29 = add i8 %28, 1 |
|||
store i8 %29, i8* %25 |
|||
%30 = load i8* %25 |
|||
%31 = add i8 %30, 1 |
|||
store i8 %31, i8* %25 |
|||
%32 = load i8* %25 |
|||
%33 = add i8 %32, 1 |
|||
store i8 %33, i8* %25 |
|||
%34 = load i8* %25 |
|||
%35 = add i8 %34, 1 |
|||
store i8 %35, i8* %25 |
|||
%36 = load i8* %25 |
|||
%37 = add i8 %36, 1 |
|||
store i8 %37, i8* %25 |
|||
%38 = load i8* %25 |
|||
%39 = add i8 %38, 1 |
|||
store i8 %39, i8* %25 |
|||
%40 = getelementptr i8* %25, i32 1 |
|||
%41 = load i8* %40 |
|||
%42 = add i8 %41, 1 |
|||
store i8 %42, i8* %40 |
|||
%43 = load i8* %40 |
|||
%44 = add i8 %43, 1 |
|||
store i8 %44, i8* %40 |
|||
%45 = load i8* %40 |
|||
%46 = add i8 %45, 1 |
|||
store i8 %46, i8* %40 |
|||
%47 = load i8* %40 |
|||
%48 = add i8 %47, 1 |
|||
store i8 %48, i8* %40 |
|||
%49 = load i8* %40 |
|||
%50 = add i8 %49, 1 |
|||
store i8 %50, i8* %40 |
|||
%51 = load i8* %40 |
|||
%52 = add i8 %51, 1 |
|||
store i8 %52, i8* %40 |
|||
%53 = load i8* %40 |
|||
%54 = add i8 %53, 1 |
|||
store i8 %54, i8* %40 |
|||
%55 = load i8* %40 |
|||
%56 = add i8 %55, 1 |
|||
store i8 %56, i8* %40 |
|||
%57 = load i8* %40 |
|||
%58 = add i8 %57, 1 |
|||
store i8 %58, i8* %40 |
|||
%59 = load i8* %40 |
|||
%60 = add i8 %59, 1 |
|||
store i8 %60, i8* %40 |
|||
%61 = getelementptr i8* %40, i32 1 |
|||
%62 = load i8* %61 |
|||
%63 = add i8 %62, 1 |
|||
store i8 %63, i8* %61 |
|||
%64 = load i8* %61 |
|||
%65 = add i8 %64, 1 |
|||
store i8 %65, i8* %61 |
|||
%66 = load i8* %61 |
|||
%67 = add i8 %66, 1 |
|||
store i8 %67, i8* %61 |
|||
%68 = getelementptr i8* %61, i32 1 |
|||
%69 = load i8* %68 |
|||
%70 = add i8 %69, 1 |
|||
store i8 %70, i8* %68 |
|||
%71 = getelementptr i8* %68, i32 -1 |
|||
%72 = getelementptr i8* %71, i32 -1 |
|||
%73 = getelementptr i8* %72, i32 -1 |
|||
%74 = getelementptr i8* %73, i32 -1 |
|||
%75 = load i8* %74 |
|||
%76 = sub i8 %75, 1 |
|||
store i8 %76, i8* %74 |
|||
%77 = load i8* %74 |
|||
%78 = icmp ne i8 %77, 0 |
|||
br i1 %78, label %24, label %79 |
|||
|
|||
; <label>:79 ; preds = %24, %0 |
|||
%80 = getelementptr i8* %74, i32 1 |
|||
%81 = load i8* %80 |
|||
%82 = add i8 %81, 1 |
|||
store i8 %82, i8* %80 |
|||
%83 = load i8* %80 |
|||
%84 = add i8 %83, 1 |
|||
store i8 %84, i8* %80 |
|||
%85 = load i8* %80 |
|||
%86 = sext i8 %85 to i32 |
|||
%87 = call i32 @putchar(i32 %86) |
|||
%88 = getelementptr i8* %80, i32 1 |
|||
%89 = load i8* %88 |
|||
%90 = add i8 %89, 1 |
|||
store i8 %90, i8* %88 |
|||
%91 = load i8* %88 |
|||
%92 = sext i8 %91 to i32 |
|||
%93 = call i32 @putchar(i32 %92) |
|||
%94 = load i8* %88 |
|||
%95 = add i8 %94, 1 |
|||
store i8 %95, i8* %88 |
|||
%96 = load i8* %88 |
|||
%97 = add i8 %96, 1 |
|||
store i8 %97, i8* %88 |
|||
%98 = load i8* %88 |
|||
%99 = add i8 %98, 1 |
|||
store i8 %99, i8* %88 |
|||
%100 = load i8* %88 |
|||
%101 = add i8 %100, 1 |
|||
store i8 %101, i8* %88 |
|||
%102 = load i8* %88 |
|||
%103 = add i8 %102, 1 |
|||
store i8 %103, i8* %88 |
|||
%104 = load i8* %88 |
|||
%105 = add i8 %104, 1 |
|||
store i8 %105, i8* %88 |
|||
%106 = load i8* %88 |
|||
%107 = add i8 %106, 1 |
|||
store i8 %107, i8* %88 |
|||
%108 = load i8* %88 |
|||
%109 = sext i8 %108 to i32 |
|||
%110 = call i32 @putchar(i32 %109) |
|||
%111 = load i8* %88 |
|||
%112 = sext i8 %111 to i32 |
|||
%113 = call i32 @putchar(i32 %112) |
|||
%114 = load i8* %88 |
|||
%115 = add i8 %114, 1 |
|||
store i8 %115, i8* %88 |
|||
%116 = load i8* %88 |
|||
%117 = add i8 %116, 1 |
|||
store i8 %117, i8* %88 |
|||
%118 = load i8* %88 |
|||
%119 = add i8 %118, 1 |
|||
store i8 %119, i8* %88 |
|||
%120 = load i8* %88 |
|||
%121 = sext i8 %120 to i32 |
|||
%122 = call i32 @putchar(i32 %121) |
|||
%123 = getelementptr i8* %88, i32 1 |
|||
%124 = load i8* %123 |
|||
%125 = add i8 %124, 1 |
|||
store i8 %125, i8* %123 |
|||
%126 = load i8* %123 |
|||
%127 = add i8 %126, 1 |
|||
store i8 %127, i8* %123 |
|||
%128 = load i8* %123 |
|||
%129 = sext i8 %128 to i32 |
|||
%130 = call i32 @putchar(i32 %129) |
|||
%131 = getelementptr i8* %123, i32 -1 |
|||
%132 = getelementptr i8* %131, i32 -1 |
|||
%133 = load i8* %132 |
|||
%134 = add i8 %133, 1 |
|||
store i8 %134, i8* %132 |
|||
%135 = load i8* %132 |
|||
%136 = add i8 %135, 1 |
|||
store i8 %136, i8* %132 |
|||
%137 = load i8* %132 |
|||
%138 = add i8 %137, 1 |
|||
store i8 %138, i8* %132 |
|||
%139 = load i8* %132 |
|||
%140 = add i8 %139, 1 |
|||
store i8 %140, i8* %132 |
|||
%141 = load i8* %132 |
|||
%142 = add i8 %141, 1 |
|||
store i8 %142, i8* %132 |
|||
%143 = load i8* %132 |
|||
%144 = add i8 %143, 1 |
|||
store i8 %144, i8* %132 |
|||
%145 = load i8* %132 |
|||
%146 = add i8 %145, 1 |
|||
store i8 %146, i8* %132 |
|||
%147 = load i8* %132 |
|||
%148 = add i8 %147, 1 |
|||
store i8 %148, i8* %132 |
|||
%149 = load i8* %132 |
|||
%150 = add i8 %149, 1 |
|||
store i8 %150, i8* %132 |
|||
%151 = load i8* %132 |
|||
%152 = add i8 %151, 1 |
|||
store i8 %152, i8* %132 |
|||
%153 = load i8* %132 |
|||
%154 = add i8 %153, 1 |
|||
store i8 %154, i8* %132 |
|||
%155 = load i8* %132 |
|||
%156 = add i8 %155, 1 |
|||
store i8 %156, i8* %132 |
|||
%157 = load i8* %132 |
|||
%158 = add i8 %157, 1 |
|||
store i8 %158, i8* %132 |
|||
%159 = load i8* %132 |
|||
%160 = add i8 %159, 1 |
|||
store i8 %160, i8* %132 |
|||
%161 = load i8* %132 |
|||
%162 = add i8 %161, 1 |
|||
store i8 %162, i8* %132 |
|||
%163 = load i8* %132 |
|||
%164 = sext i8 %163 to i32 |
|||
%165 = call i32 @putchar(i32 %164) |
|||
%166 = getelementptr i8* %132, i32 1 |
|||
%167 = load i8* %166 |
|||
%168 = sext i8 %167 to i32 |
|||
%169 = call i32 @putchar(i32 %168) |
|||
%170 = load i8* %166 |
|||
%171 = add i8 %170, 1 |
|||
store i8 %171, i8* %166 |
|||
%172 = load i8* %166 |
|||
%173 = add i8 %172, 1 |
|||
store i8 %173, i8* %166 |
|||
%174 = load i8* %166 |
|||
%175 = add i8 %174, 1 |
|||
store i8 %175, i8* %166 |
|||
%176 = load i8* %166 |
|||
%177 = sext i8 %176 to i32 |
|||
%178 = call i32 @putchar(i32 %177) |
|||
%179 = load i8* %166 |
|||
%180 = sub i8 %179, 1 |
|||
store i8 %180, i8* %166 |
|||
%181 = load i8* %166 |
|||
%182 = sub i8 %181, 1 |
|||
store i8 %182, i8* %166 |
|||
%183 = load i8* %166 |
|||
%184 = sub i8 %183, 1 |
|||
store i8 %184, i8* %166 |
|||
%185 = load i8* %166 |
|||
%186 = sub i8 %185, 1 |
|||
store i8 %186, i8* %166 |
|||
%187 = load i8* %166 |
|||
%188 = sub i8 %187, 1 |
|||
store i8 %188, i8* %166 |
|||
%189 = load i8* %166 |
|||
%190 = sub i8 %189, 1 |
|||
store i8 %190, i8* %166 |
|||
%191 = load i8* %166 |
|||
%192 = sext i8 %191 to i32 |
|||
%193 = call i32 @putchar(i32 %192) |
|||
%194 = load i8* %166 |
|||
%195 = sub i8 %194, 1 |
|||
store i8 %195, i8* %166 |
|||
%196 = load i8* %166 |
|||
%197 = sub i8 %196, 1 |
|||
store i8 %197, i8* %166 |
|||
%198 = load i8* %166 |
|||
%199 = sub i8 %198, 1 |
|||
store i8 %199, i8* %166 |
|||
%200 = load i8* %166 |
|||
%201 = sub i8 %200, 1 |
|||
store i8 %201, i8* %166 |
|||
%202 = load i8* %166 |
|||
%203 = sub i8 %202, 1 |
|||
store i8 %203, i8* %166 |
|||
%204 = load i8* %166 |
|||
%205 = sub i8 %204, 1 |
|||
store i8 %205, i8* %166 |
|||
%206 = load i8* %166 |
|||
%207 = sub i8 %206, 1 |
|||
store i8 %207, i8* %166 |
|||
%208 = load i8* %166 |
|||
%209 = sub i8 %208, 1 |
|||
store i8 %209, i8* %166 |
|||
%210 = load i8* %166 |
|||
%211 = sext i8 %210 to i32 |
|||
%212 = call i32 @putchar(i32 %211) |
|||
%213 = getelementptr i8* %166, i32 1 |
|||
%214 = load i8* %213 |
|||
%215 = add i8 %214, 1 |
|||
store i8 %215, i8* %213 |
|||
%216 = load i8* %213 |
|||
%217 = sext i8 %216 to i32 |
|||
%218 = call i32 @putchar(i32 %217) |
|||
%219 = getelementptr i8* %213, i32 1 |
|||
%220 = load i8* %219 |
|||
%221 = sext i8 %220 to i32 |
|||
%222 = call i32 @putchar(i32 %221) |
|||
tail call void @free(i8* %malloccall) |
|||
ret i32 0 |
|||
} |
|||
|
|||
declare noalias i8* @malloc(i32) |
|||
|
|||
declare void @llvm.memset.p0i8.i32(i8* nocapture, i8, i32, i32, i1) nounwind |
|||
|
|||
declare void @free(i8*) |
@ -0,0 +1,221 @@ |
|||
=================================================================== |
|||
======================== OUTPUT STRING ============================ |
|||
=================================================================== |
|||
>++++++++[<++++++++>-]<++++++++++++++++.[-] |
|||
>++++++++++[<++++++++++>-]<++++++++++++++.[-] |
|||
>++++++++++[<++++++++++>-]<+++++.[-] |
|||
>++++++++++[<++++++++++>-]<+++++++++.[-] |
|||
>++++++++++[<++++++++++>-]<+.[-] |
|||
>++++++++++[<++++++++++>-]<+++++++++++++++.[-] |
|||
>+++++[<+++++>-]<+++++++.[-] |
|||
>++++++++++[<++++++++++>-]<+++++++++++++++++.[-] |
|||
>++++++++++[<++++++++++>-]<++++++++++++.[-] |
|||
>+++++[<+++++>-]<+++++++.[-] |
|||
>++++++++++[<++++++++++>-]<++++++++++++++++.[-] |
|||
>++++++++++[<++++++++++>-]<+++++++++++.[-] |
|||
>+++++++[<+++++++>-]<+++++++++.[-] |
|||
>+++++[<+++++>-]<+++++++.[-] |
|||
|
|||
=================================================================== |
|||
======================== INPUT NUMBER ============================ |
|||
=================================================================== |
|||
+ cont=1 |
|||
[ |
|||
- cont=0 |
|||
>, |
|||
======SUB10====== |
|||
---------- |
|||
|
|||
[ not 10 |
|||
<+> cont=1 |
|||
=====SUB38====== |
|||
---------- |
|||
---------- |
|||
---------- |
|||
-------- |
|||
|
|||
> |
|||
=====MUL10======= |
|||
[>+>+<<-]>>[<<+>>-]< dup |
|||
|
|||
>>>+++++++++ |
|||
[ |
|||
<<< |
|||
[>+>+<<-]>>[<<+>>-]< dup |
|||
[<<+>>-] |
|||
>>- |
|||
] |
|||
<<<[-]< |
|||
======RMOVE1====== |
|||
< |
|||
[>+<-] |
|||
] |
|||
< |
|||
] |
|||
>>[<<+>>-]<< |
|||
|
|||
=================================================================== |
|||
======================= PROCESS NUMBER =========================== |
|||
=================================================================== |
|||
|
|||
==== ==== ==== ==== |
|||
numd numu teid teiu |
|||
==== ==== ==== ==== |
|||
|
|||
>+<- |
|||
[ |
|||
>+ |
|||
======DUP====== |
|||
[>+>+<<-]>>[<<+>>-]< |
|||
|
|||
>+<-- |
|||
|
|||
>>>>>>>>+<<<<<<<< isprime=1 |
|||
|
|||
[ |
|||
>+ |
|||
|
|||
<- |
|||
|
|||
=====DUP3===== |
|||
<[>>>+>+<<<<-]>>>>[<<<<+>>>>-]<<< |
|||
|
|||
=====DUP2===== |
|||
>[>>+>+<<<-]>>>[<<<+>>>-]<<< < |
|||
|
|||
|
|||
>>> |
|||
|
|||
|
|||
====DIVIDES======= |
|||
[>+>+<<-]>>[<<+>>-]< DUP i=div |
|||
|
|||
<< |
|||
[ |
|||
>>>>>+ bool=1 |
|||
<<< |
|||
[>+>+<<-]>>[<<+>>-]< DUP |
|||
[>>[-]<<-] IF i THEN bool=0 |
|||
>> |
|||
[ IF i=0 |
|||
<<<< |
|||
[>+>+<<-]>>[<<+>>-]< i=div |
|||
>>> |
|||
- bool=0 |
|||
] |
|||
<<< |
|||
- DEC i |
|||
<< |
|||
- |
|||
] |
|||
|
|||
+>>[<<[-]>>-]<< |
|||
>[-]< CLR div |
|||
=====END DIVIDES==== |
|||
|
|||
|
|||
[>>>>>>[-]<<<<<<-] if divides then isprime=0 |
|||
|
|||
|
|||
<< |
|||
|
|||
>>[-]>[-]<<< |
|||
] |
|||
|
|||
>>>>>>>> |
|||
[ |
|||
- |
|||
<<<<<<<[-]<< |
|||
|
|||
[>>+>+<<<-]>>>[<<<+>>>-]<<< |
|||
|
|||
>> |
|||
|
|||
|
|||
|
|||
|
|||
=================================================================== |
|||
======================== OUTPUT NUMBER =========================== |
|||
=================================================================== |
|||
[>+<-]> |
|||
|
|||
[ |
|||
======DUP====== |
|||
[>+>+<<-]>>[<<+>>-]< |
|||
|
|||
|
|||
======MOD10==== |
|||
>+++++++++< |
|||
[ |
|||
>>>+<< bool= 1 |
|||
[>+>[-]<<-] bool= ten==0 |
|||
>[<+>-] ten = tmp |
|||
>[<<++++++++++>>-] if ten=0 ten=10 |
|||
<<- dec ten |
|||
<- dec num |
|||
] |
|||
+++++++++ num=9 |
|||
>[<->-]< dec num by ten |
|||
|
|||
=======RROT====== |
|||
[>+<-] |
|||
< [>+<-] |
|||
< [>+<-] |
|||
>>>[<<<+>>>-] |
|||
< |
|||
|
|||
=======DIV10======== |
|||
>+++++++++< |
|||
[ |
|||
>>>+<< bool= 1 |
|||
[>+>[-]<<-] bool= ten==0 |
|||
>[<+>-] ten = tmp |
|||
>[<<++++++++++>>>+<-] if ten=0 ten=10 inc div |
|||
<<- dec ten |
|||
<- dec num |
|||
] |
|||
>>>>[<<<<+>>>>-]<<<< copy div to num |
|||
>[-]< clear ten |
|||
|
|||
=======INC1========= |
|||
<+> |
|||
] |
|||
|
|||
< |
|||
[ |
|||
=======MOVER========= |
|||
[>+<-] |
|||
|
|||
=======ADD48======== |
|||
+++++++[<+++++++>-]<-> |
|||
|
|||
=======PUTC======= |
|||
<.[-]> |
|||
|
|||
======MOVEL2======== |
|||
>[<<+>>-]< |
|||
|
|||
<- |
|||
] |
|||
|
|||
>++++[<++++++++>-]<.[-] |
|||
|
|||
=================================================================== |
|||
=========================== END FOR =============================== |
|||
=================================================================== |
|||
|
|||
|
|||
>>>>>>> |
|||
] |
|||
<<<<<<<< |
|||
|
|||
|
|||
|
|||
>[-]< |
|||
[-] |
|||
<<- |
|||
] |
|||
|
|||
======LF======== |
|||
|
|||
++++++++++.[-] |
File diff suppressed because it is too large
@ -0,0 +1,11 @@ |
|||
->+>+++>>+>++>+>+++>>+>++>>>+>+>+>++>+>>>>+++>+>>++>+>+++>>++>++>>+>>+>++>++>+ |
|||
>>>>+++>+>>>>++>++>>>>+>>++>+>+++>>>++>>++++++>>+>>++>+>>>>+++>>+++++>>+>+++>>> |
|||
++>>++>>+>>++>+>+++>>>++>>+++++++++++++>>+>>++>+>+++>+>+++>>>++>>++++>>+>>++>+ |
|||
>>>>+++>>+++++>>>>++>>>>+>+>++>>+++>+>>>>+++>+>>>>+++>+>>>>+++>>++>++>+>+++>+>++ |
|||
>++>>>>>>++>+>+++>>>>>+++>>>++>+>+++>+>+>++>>>>>>++>>>+>>>++>+>>>>+++>+>>>+>>++> |
|||
+>++++++++++++++++++>>>>+>+>>>+>>++>+>+++>>>++>>++++++++>>+>>++>+>>>>+++>>++++++ |
|||
>>>+>++>>+++>+>+>++>+>+++>>>>>+++>>>+>+>>++>+>+++>>>++>>++++++++>>+>>++>+>>>>+++ |
|||
>>++++>>+>+++>>>>>>++>+>+++>>+>++>>>>+>+>++>+>>>>+++>>+++>>>+[[->>+<<]<+]+++++ |
|||
[->+++++++++<]>.[+]>>[<<+++++++[->+++++++++<]>-.------------------->-[-<.<+>>]< |
|||
[+]<+>>>]<<<[-[-[-[>>+<++++++[->+++++<]]>++++++++++++++<]>+++<]++++++ |
|||
[->+++++++<]>+<<<-[->>>++<<<]>[->>.<<]<<] |
File diff suppressed because it is too large
@ -0,0 +1,18 @@ |
|||
, |
|||
[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<- |
|||
[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<- |
|||
[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<- |
|||
[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<- |
|||
[>++++++++++++++<- |
|||
[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<- |
|||
[>>+++++[<----->-]<<- |
|||
[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<- |
|||
[>++++++++++++++<- |
|||
[>+<-[>+<-[>+<-[>+<-[>+<- |
|||
[>++++++++++++++<- |
|||
[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<- |
|||
[>>+++++[<----->-]<<- |
|||
[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<- |
|||
[>++++++++++++++<- |
|||
[>+<-]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] |
|||
]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]>.[-]<,] |
File diff suppressed because it is too large
@ -0,0 +1 @@ |
|||
++++++++++++++++++++++++[><.-] |
@ -0,0 +1,109 @@ |
|||
; 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 = load i8* %1 |
|||
%3 = add i8 %2, 1 |
|||
store i8 %3, i8* %1 |
|||
%4 = load i8* %1 |
|||
%5 = add i8 %4, 1 |
|||
store i8 %5, i8* %1 |
|||
%6 = load i8* %1 |
|||
%7 = add i8 %6, 1 |
|||
store i8 %7, i8* %1 |
|||
%8 = load i8* %1 |
|||
%9 = add i8 %8, 1 |
|||
store i8 %9, i8* %1 |
|||
%10 = load i8* %1 |
|||
%11 = add i8 %10, 1 |
|||
store i8 %11, i8* %1 |
|||
%12 = load i8* %1 |
|||
%13 = add i8 %12, 1 |
|||
store i8 %13, i8* %1 |
|||
%14 = load i8* %1 |
|||
%15 = add i8 %14, 1 |
|||
store i8 %15, i8* %1 |
|||
%16 = load i8* %1 |
|||
%17 = add i8 %16, 1 |
|||
store i8 %17, i8* %1 |
|||
%18 = load i8* %1 |
|||
%19 = add i8 %18, 1 |
|||
store i8 %19, i8* %1 |
|||
%20 = load i8* %1 |
|||
%21 = add i8 %20, 1 |
|||
store i8 %21, i8* %1 |
|||
%22 = load i8* %1 |
|||
%23 = add i8 %22, 1 |
|||
store i8 %23, i8* %1 |
|||
%24 = load i8* %1 |
|||
%25 = add i8 %24, 1 |
|||
store i8 %25, i8* %1 |
|||
%26 = load i8* %1 |
|||
%27 = add i8 %26, 1 |
|||
store i8 %27, i8* %1 |
|||
%28 = load i8* %1 |
|||
%29 = add i8 %28, 1 |
|||
store i8 %29, i8* %1 |
|||
%30 = load i8* %1 |
|||
%31 = add i8 %30, 1 |
|||
store i8 %31, i8* %1 |
|||
%32 = load i8* %1 |
|||
%33 = add i8 %32, 1 |
|||
store i8 %33, i8* %1 |
|||
%34 = load i8* %1 |
|||
%35 = add i8 %34, 1 |
|||
store i8 %35, i8* %1 |
|||
%36 = load i8* %1 |
|||
%37 = add i8 %36, 1 |
|||
store i8 %37, i8* %1 |
|||
%38 = load i8* %1 |
|||
%39 = add i8 %38, 1 |
|||
store i8 %39, i8* %1 |
|||
%40 = load i8* %1 |
|||
%41 = add i8 %40, 1 |
|||
store i8 %41, i8* %1 |
|||
%42 = load i8* %1 |
|||
%43 = add i8 %42, 1 |
|||
store i8 %43, i8* %1 |
|||
%44 = load i8* %1 |
|||
%45 = add i8 %44, 1 |
|||
store i8 %45, i8* %1 |
|||
%46 = load i8* %1 |
|||
%47 = add i8 %46, 1 |
|||
store i8 %47, i8* %1 |
|||
%48 = load i8* %1 |
|||
%49 = add i8 %48, 1 |
|||
store i8 %49, i8* %1 |
|||
%50 = load i8* %1 |
|||
%51 = icmp ne i8 %50, 0 |
|||
br i1 %51, label %52, label %62 |
|||
|
|||
; <label>:52 ; preds = %52, %0 |
|||
%53 = getelementptr i8* %1, i32 1 |
|||
%54 = getelementptr i8* %53, i32 -1 |
|||
%55 = load i8* %54 |
|||
%56 = sext i8 %55 to i32 |
|||
%57 = call i32 @putchar(i32 %56) |
|||
%58 = load i8* %54 |
|||
%59 = sub i8 %58, 1 |
|||
store i8 %59, i8* %54 |
|||
%60 = load i8* %54 |
|||
%61 = icmp ne i8 %60, 0 |
|||
br i1 %61, label %52, label %62 |
|||
|
|||
; <label>:62 ; preds = %52, %0 |
|||
tail call void @free(i8* %malloccall) |
|||
ret i32 0 |
|||
} |
|||
|
|||
declare noalias i8* @malloc(i32) |
|||
|
|||
declare void @llvm.memset.p0i8.i32(i8* nocapture, i8, i32, i32, i1) nounwind |
|||
|
|||
declare void @free(i8*) |
@ -0,0 +1,19 @@ |
|||
; 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 |
|||
tail call void @free(i8* %malloccall) |
|||
ret i32 0 |
|||
} |
|||
|
|||
declare noalias i8* @malloc(i32) |
|||
|
|||
declare void @llvm.memset.p0i8.i32(i8* nocapture, i8, i32, i32, i1) nounwind |
|||
|
|||
declare void @free(i8*) |
@ -0,0 +1 @@ |
|||
,----------[----------------------.,----------]++++++++++. |
@ -0,0 +1,197 @@ |
|||
; 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 = call i32 @getchar() |
|||
%3 = trunc i32 %2 to i8 |
|||
store i8 %3, i8* %1 |
|||
%4 = load i8* %1 |
|||
%5 = sub i8 %4, 1 |
|||
store i8 %5, i8* %1 |
|||
%6 = load i8* %1 |
|||
%7 = sub i8 %6, 1 |
|||
store i8 %7, i8* %1 |
|||
%8 = load i8* %1 |
|||
%9 = sub i8 %8, 1 |
|||
store i8 %9, i8* %1 |
|||
%10 = load i8* %1 |
|||
%11 = sub i8 %10, 1 |
|||
store i8 %11, i8* %1 |
|||
%12 = load i8* %1 |
|||
%13 = sub i8 %12, 1 |
|||
store i8 %13, i8* %1 |
|||
%14 = load i8* %1 |
|||
%15 = sub i8 %14, 1 |
|||
store i8 %15, i8* %1 |
|||
%16 = load i8* %1 |
|||
%17 = sub i8 %16, 1 |
|||
store i8 %17, i8* %1 |
|||
%18 = load i8* %1 |
|||
%19 = sub i8 %18, 1 |
|||
store i8 %19, i8* %1 |
|||
%20 = load i8* %1 |
|||
%21 = sub i8 %20, 1 |
|||
store i8 %21, i8* %1 |
|||
%22 = load i8* %1 |
|||
%23 = sub i8 %22, 1 |
|||
store i8 %23, i8* %1 |
|||
%24 = load i8* %1 |
|||
%25 = icmp ne i8 %24, 0 |
|||
br i1 %25, label %26, label %98 |
|||
|
|||
; <label>:26 ; preds = %26, %0 |
|||
%27 = load i8* %1 |
|||
%28 = sub i8 %27, 1 |
|||
store i8 %28, i8* %1 |
|||
%29 = load i8* %1 |
|||
%30 = sub i8 %29, 1 |
|||
store i8 %30, i8* %1 |
|||
%31 = load i8* %1 |
|||
%32 = sub i8 %31, 1 |
|||
store i8 %32, i8* %1 |
|||
%33 = load i8* %1 |
|||
%34 = sub i8 %33, 1 |
|||
store i8 %34, i8* %1 |
|||
%35 = load i8* %1 |
|||
%36 = sub i8 %35, 1 |
|||
store i8 %36, i8* %1 |
|||
%37 = load i8* %1 |
|||
%38 = sub i8 %37, 1 |
|||
store i8 %38, i8* %1 |
|||
%39 = load i8* %1 |
|||
%40 = sub i8 %39, 1 |
|||
store i8 %40, i8* %1 |
|||
%41 = load i8* %1 |
|||
%42 = sub i8 %41, 1 |
|||
store i8 %42, i8* %1 |
|||
%43 = load i8* %1 |
|||
%44 = sub i8 %43, 1 |
|||
store i8 %44, i8* %1 |
|||
%45 = load i8* %1 |
|||
%46 = sub i8 %45, 1 |
|||
store i8 %46, i8* %1 |
|||
%47 = load i8* %1 |
|||
%48 = sub i8 %47, 1 |
|||
store i8 %48, i8* %1 |
|||
%49 = load i8* %1 |
|||
%50 = sub i8 %49, 1 |
|||
store i8 %50, i8* %1 |
|||
%51 = load i8* %1 |
|||
%52 = sub i8 %51, 1 |
|||
store i8 %52, i8* %1 |
|||
%53 = load i8* %1 |
|||
%54 = sub i8 %53, 1 |
|||
store i8 %54, i8* %1 |
|||
%55 = load i8* %1 |
|||
%56 = sub i8 %55, 1 |
|||
store i8 %56, i8* %1 |
|||
%57 = load i8* %1 |
|||
%58 = sub i8 %57, 1 |
|||
store i8 %58, i8* %1 |
|||
%59 = load i8* %1 |
|||
%60 = sub i8 %59, 1 |
|||
store i8 %60, i8* %1 |
|||
%61 = load i8* %1 |
|||
%62 = sub i8 %61, 1 |
|||
store i8 %62, i8* %1 |
|||
%63 = load i8* %1 |
|||
%64 = sub i8 %63, 1 |
|||
store i8 %64, i8* %1 |
|||
%65 = load i8* %1 |
|||
%66 = sub i8 %65, 1 |
|||
store i8 %66, i8* %1 |
|||
%67 = load i8* %1 |
|||
%68 = sub i8 %67, 1 |
|||
store i8 %68, i8* %1 |
|||
%69 = load i8* %1 |
|||
%70 = sub i8 %69, 1 |
|||
store i8 %70, i8* %1 |
|||
%71 = load i8* %1 |
|||
%72 = sext i8 %71 to i32 |
|||
%73 = call i32 @putchar(i32 %72) |
|||
%74 = call i32 @getchar() |
|||
%75 = trunc i32 %74 to i8 |
|||
store i8 %75, i8* %1 |
|||
%76 = load i8* %1 |
|||
%77 = sub i8 %76, 1 |
|||
store i8 %77, i8* %1 |
|||
%78 = load i8* %1 |
|||
%79 = sub i8 %78, 1 |
|||
store i8 %79, i8* %1 |
|||
%80 = load i8* %1 |
|||
%81 = sub i8 %80, 1 |
|||
store i8 %81, i8* %1 |
|||
%82 = load i8* %1 |
|||
%83 = sub i8 %82, 1 |
|||
store i8 %83, i8* %1 |
|||
%84 = load i8* %1 |
|||
%85 = sub i8 %84, 1 |
|||
store i8 %85, i8* %1 |
|||
%86 = load i8* %1 |
|||
%87 = sub i8 %86, 1 |
|||
store i8 %87, i8* %1 |
|||
%88 = load i8* %1 |
|||
%89 = sub i8 %88, 1 |
|||
store i8 %89, i8* %1 |
|||
%90 = load i8* %1 |
|||
%91 = sub i8 %90, 1 |
|||
store i8 %91, i8* %1 |
|||
%92 = load i8* %1 |
|||
%93 = sub i8 %92, 1 |
|||
store i8 %93, i8* %1 |
|||
%94 = load i8* %1 |
|||
%95 = sub i8 %94, 1 |
|||
store i8 %95, i8* %1 |
|||
%96 = load i8* %1 |
|||
%97 = icmp ne i8 %96, 0 |
|||
br i1 %97, label %26, label %98 |
|||
|
|||
; <label>:98 ; preds = %26, %0 |
|||
%99 = load i8* %1 |
|||
%100 = add i8 %99, 1 |
|||
store i8 %100, i8* %1 |
|||
%101 = load i8* %1 |
|||
%102 = add i8 %101, 1 |
|||
store i8 %102, i8* %1 |
|||
%103 = load i8* %1 |
|||
%104 = add i8 %103, 1 |
|||
store i8 %104, i8* %1 |
|||
%105 = load i8* %1 |
|||
%106 = add i8 %105, 1 |
|||
store i8 %106, i8* %1 |
|||
%107 = load i8* %1 |
|||
%108 = add i8 %107, 1 |
|||
store i8 %108, i8* %1 |
|||
%109 = load i8* %1 |
|||
%110 = add i8 %109, 1 |
|||
store i8 %110, i8* %1 |
|||
%111 = load i8* %1 |
|||
%112 = add i8 %111, 1 |
|||
store i8 %112, i8* %1 |
|||
%113 = load i8* %1 |
|||
%114 = add i8 %113, 1 |
|||
store i8 %114, i8* %1 |
|||
%115 = load i8* %1 |
|||
%116 = add i8 %115, 1 |
|||
store i8 %116, i8* %1 |
|||
%117 = load i8* %1 |
|||
%118 = add i8 %117, 1 |
|||
store i8 %118, i8* %1 |
|||
%119 = load i8* %1 |
|||
%120 = sext i8 %119 to i32 |
|||
%121 = call i32 @putchar(i32 %120) |
|||
tail call void @free(i8* %malloccall) |
|||
ret i32 0 |
|||
} |
|||
|
|||
declare noalias i8* @malloc(i32) |
|||
|
|||
declare void @llvm.memset.p0i8.i32(i8* nocapture, i8, i32, i32, i1) nounwind |
|||
|
|||
declare void @free(i8*) |
@ -0,0 +1,145 @@ |
|||
#include <llvm/ADT/ArrayRef.h> |
|||
#include <llvm/LLVMContext.h> |
|||
#include <llvm/Module.h> |
|||
#include <llvm/Function.h> |
|||
#include <llvm/BasicBlock.h> |
|||
#include <llvm/IRBuilder.h> |
|||
#include <llvm/Support/raw_ostream.h> |
|||
|
|||
#include <memory> |
|||
#include <vector> |
|||
#include <string> |
|||
#include <fstream> |
|||
|
|||
using namespace llvm; |
|||
|
|||
class Brainfuck{ |
|||
// Create a module
|
|||
LLVMContext & context {getGlobalContext()}; |
|||
Module module {"asdf", context}; |
|||
|
|||
// Get some basic types and sizes
|
|||
Type* bool_type {IntegerType::getInt1Ty(context)}; |
|||
Type* char_type {IntegerType::getInt8Ty(context)}; |
|||
Type* int32_type {IntegerType::getInt32Ty(context)}; |
|||
Value* char_size {ConstantExpr::getTruncOrBitCast(ConstantExpr::getSizeOf(char_type), int32_type)}; |
|||
|
|||
// Get some basic functions
|
|||
Function* getchar_func {cast<Function>(module.getOrInsertFunction("getchar", IntegerType::getInt32Ty(context), nullptr))}; |
|||
Function* putchar_func {cast<Function>(module.getOrInsertFunction("putchar", IntegerType::getInt32Ty(context), IntegerType::getInt32Ty(context), nullptr))}; |
|||
Function* main_function {cast<Function>(module.getOrInsertFunction("main", Type::getInt32Ty(context), nullptr))}; |
|||
|
|||
// Builder for the main function
|
|||
BasicBlock* entry {BasicBlock::Create(context, "", main_function)}; |
|||
IRBuilder<> builder {entry}; |
|||
|
|||
// Malloc memory
|
|||
const int memtotal = 100; |
|||
Value* total_memory {ConstantInt::get(int32_type, memtotal)}; |
|||
Value* ptr_arr {CallInst::CreateMalloc(entry, int32_type, char_type, char_size, total_memory)}; |
|||
Value* curhead {nullptr}; |
|||
|
|||
public: |
|||
Brainfuck(){ |
|||
// Do the malloc thing and memset it
|
|||
entry->getInstList().push_back(cast<Instruction>(ptr_arr)); |
|||
builder.CreateMemSet(ptr_arr, ConstantInt::get(char_type, 0), total_memory, 1); |
|||
|
|||
// Get head in the middle
|
|||
curhead = builder.CreateGEP(ptr_arr, ConstantInt::get(int32_type, memtotal/2)); |
|||
} |
|||
|
|||
void fuck_it(std::string const & program){ |
|||
// Parse brainfuck program
|
|||
fuck_it_rec(program, program.begin()); |
|||
|
|||
// free and return 0
|
|||
entry->getInstList().push_back(CallInst::CreateFree(ptr_arr, entry)); |
|||
builder.CreateRet(ConstantInt::get(int32_type, 0)); |
|||
} |
|||
|
|||
void print(raw_ostream& os){ |
|||
module.print(os, nullptr); |
|||
} |
|||
|
|||
private: |
|||
void dec(){ |
|||
auto tape_0 = builder.CreateLoad(curhead); |
|||
auto tape_1 = builder.CreateSub(tape_0, ConstantInt::get(char_type, 1)); |
|||
builder.CreateStore(tape_1, curhead); |
|||
} |
|||
|
|||
void inc(){ |
|||
auto tape_0 = builder.CreateLoad(curhead); |
|||
auto tape_1 = builder.CreateAdd(tape_0, ConstantInt::get(char_type, 1)); |
|||
builder.CreateStore(tape_1, curhead); |
|||
} |
|||
|
|||
void put_it(){ |
|||
auto tape_0 = builder.CreateLoad(curhead); |
|||
auto tape_1 = builder.CreateSExt(tape_0, int32_type); |
|||
builder.CreateCall(putchar_func, tape_1); |
|||
} |
|||
|
|||
void get_it(){ |
|||
auto tape_0 = builder.CreateCall(getchar_func); |
|||
auto tape_1 = builder.CreateTrunc(tape_0, char_type); |
|||
builder.CreateStore(tape_1, curhead); |
|||
} |
|||
|
|||
std::string::const_iterator loop_it(std::string const & program, std::string::const_iterator it){ |
|||
// I should merge some bits here... to inside the first label.
|
|||
auto tape_0 = builder.CreateLoad(curhead); |
|||
auto cond = builder.CreateICmpNE(tape_0, ConstantInt::get(char_type, 0)); |
|||
auto true_bb = BasicBlock::Create(context, "", main_function); |
|||
auto false_bb = BasicBlock::Create(context, "", main_function); |
|||
builder.CreateCondBr(cond, true_bb, false_bb); |
|||
|
|||
builder.SetInsertPoint(true_bb); |
|||
it = fuck_it_rec(program, it); |
|||
tape_0 = builder.CreateLoad(curhead); |
|||
cond = builder.CreateICmpNE(tape_0, ConstantInt::get(char_type, 0)); |
|||
builder.CreateCondBr(cond, true_bb, false_bb); |
|||
|
|||
entry = false_bb; |
|||
builder.SetInsertPoint(false_bb); |
|||
|
|||
return it; |
|||
} |
|||
|
|||
std::string::const_iterator fuck_it_rec(std::string const & program, std::string::const_iterator it){ |
|||
for(; it != program.end();){ |
|||
auto c = *it++; |
|||
switch(c){ |
|||
case ']' : return it; |
|||
case '>' : curhead = builder.CreateGEP(curhead, ConstantInt::get(int32_type, 1)); break; |
|||
case '<' : curhead = builder.CreateGEP(curhead, ConstantInt::get(int32_type, -1)); break; |
|||
case '+' : inc(); break; |
|||
case '-' : dec(); break; |
|||
case '.' : put_it(); break; |
|||
case ',' : get_it(); break; |
|||
case '[' : it = loop_it(program, it); break; |
|||
default : break; |
|||
} |
|||
} |
|||
return program.end(); |
|||
} |
|||
}; |
|||
|
|||
int main(int argc, char ** argv){ |
|||
assert(argc == 2); |
|||
std::string filename = argv[1]; |
|||
|
|||
std::ifstream file{filename, std::ios::binary}; |
|||
std::string source{std::istreambuf_iterator<char>(file), std::istreambuf_iterator<char>()}; |
|||
|
|||
// Initialise compiler
|
|||
Brainfuck brain; |
|||
|
|||
// Compile!
|
|||
brain.fuck_it(source); |
|||
|
|||
std::string error_info; |
|||
raw_fd_ostream os{(filename + ".ll").c_str(), error_info}; |
|||
brain.print(os); |
|||
} |
@ -0,0 +1 @@ |
|||
echo '*** BEFORE OPTIMIZING ***' && ./build/LLVMCompiler && echo '*** AFTER OPTIMIZING: ***' && ./build/LLVMCompiler 2>&1 | opt -Oz -S |
@ -0,0 +1,68 @@ |
|||
; 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 = load i8* %1 |
|||
%3 = add i8 %2, 1 |
|||
store i8 %3, i8* %1 |
|||
%4 = load i8* %1 |
|||
%5 = add i8 %4, 1 |
|||
store i8 %5, i8* %1 |
|||
%6 = load i8* %1 |
|||
%7 = add i8 %6, 1 |
|||
store i8 %7, i8* %1 |
|||
%8 = load i8* %1 |
|||
%9 = add i8 %8, 1 |
|||
store i8 %9, i8* %1 |
|||
%10 = load i8* %1 |
|||
%11 = add i8 %10, 1 |
|||
store i8 %11, i8* %1 |
|||
%12 = load i8* %1 |
|||
%13 = add i8 %12, 1 |
|||
store i8 %13, i8* %1 |
|||
%14 = load i8* %1 |
|||
%15 = add i8 %14, 1 |
|||
store i8 %15, i8* %1 |
|||
%16 = load i8* %1 |
|||
%17 = add i8 %16, 1 |
|||
store i8 %17, i8* %1 |
|||
%18 = load i8* %1 |
|||
%19 = add i8 %18, 1 |
|||
store i8 %19, i8* %1 |
|||
%20 = load i8* %1 |
|||
%21 = add i8 %20, 1 |
|||
store i8 %21, i8* %1 |
|||
%22 = load i8* %1 |
|||
%23 = add i8 %22, 1 |
|||
store i8 %23, i8* %1 |
|||
%24 = load i8* %1 |
|||
%25 = icmp ne i8 %24, 0 |
|||
br i1 %25, label %26, label %34 |
|||
|
|||
; <label>:26 ; preds = %26, %0 |
|||
%27 = load i8* %1 |
|||
%28 = sext i8 %27 to i32 |
|||
%29 = call i32 @putchar(i32 %28) |
|||
%30 = load i8* %1 |
|||
%31 = sub i8 %30, 1 |
|||
store i8 %31, i8* %1 |
|||
%32 = load i8* %1 |
|||
%33 = icmp ne i8 %32, 0 |
|||
br i1 %33, label %26, label %34 |
|||
|
|||
; <label>:34 ; preds = %26, %0 |
|||
tail call void @free(i8* %malloccall) |
|||
ret i32 0 |
|||
} |
|||
|
|||
declare noalias i8* @malloc(i32) |
|||
|
|||
declare void @llvm.memset.p0i8.i32(i8* nocapture, i8, i32, i32, i1) nounwind |
|||
|
|||
declare void @free(i8*) |
@ -0,0 +1,2 @@ |
|||
#./vanillabuild.sh && ./build/bfc.sh $1 && ./a.out | hexdump -C |
|||
./build/LLVMCompiler $1 && ~/Documents/Code/build/Release/bin/lli $1.ll | hexdump -C |
@ -0,0 +1,5 @@ |
|||
mkdir -p build |
|||
cd build |
|||
cmake .. |
|||
make -j8 |
|||
cd .. |
Reference in new issue