Created
May 15, 2015 00:19
-
-
Save 5HT/401a348636af9acd3a16 to your computer and use it in GitHub Desktop.
heap.ll
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
declare void @print_char(i8) | |
declare void @print_int(i32) | |
declare void @print_long(i64) | |
declare void @print_float(float) | |
declare void @print_double(double) | |
declare void @print_atom(i32) | |
declare void @print_bool(i1) | |
declare void @rttype_check(i16) | |
declare void @heap_overflow(%proc_t*, i8*) | |
declare i8* @heap_allocate(%proc_t*, i8*) | |
declare void @heap_switch(%proc_t*, i8*) | |
%proc_t = type { i8*, i8* } | |
define void @start(i8* %.137, %proc_t* %proc) { | |
l134: | |
%.135 = tail call fastcc { i64, i8* } @main0(i8* %.137, %proc_t* %proc) | |
%.136 = extractvalue { i64, i8* } %.135, 0 | |
call void @print131(i64 %.136) | |
ret void | |
} | |
define void @print131(i64 %arg) { | |
l132: | |
call void @print67(i64 %arg) | |
br label %l133 | |
l133: | |
ret void | |
} | |
define void @print67(i64 %arg) { | |
l108: | |
%.130 = trunc i64 %arg to i16 | |
switch i16 %.130, label %l129 [ i16 16, label %l110 i16 17, label %l115 ] | |
l110: | |
%.112 = lshr i64 %arg, 16 | |
%.113 = inttoptr i64 %.112 to i64* | |
%.114 = load i64* %.113 | |
br label %l111 | |
l111: | |
call void @print_char(i8 91) | |
call void @print_char(i8 93) | |
br label %l109 | |
l115: | |
%.117 = lshr i64 %arg, 16 | |
%.118 = inttoptr i64 %.117 to { i32, i64 }* | |
br label %l116 | |
l116: | |
call void @print_char(i8 91) | |
br label %l119 | |
l119: | |
%.124 = getelementptr { i32, i64 }* %.118, i32 0, i32 0 | |
%.125 = load i32* %.124 | |
br label %l121 | |
l121: | |
call void @print_int(i32 %.125) | |
br label %l122 | |
l122: | |
%.126 = getelementptr { i32, i64 }* %.118, i32 0, i32 1 | |
%.127 = load i64* %.126 | |
br label %l123 | |
l123: | |
call void @print_char(i8 124) | |
br label %l128 | |
l128: | |
call void @print67(i64 %.127) | |
br label %l120 | |
l120: | |
call void @print_char(i8 93) | |
br label %l109 | |
l129: | |
call void @rttype_check(i16 %.130) | |
unreachable | |
l109: | |
ret void | |
} | |
define { i64, i8* } @copier67(i64 %arg, i8* %htop) { | |
entry: | |
%.141 = trunc i64 %arg to i16 | |
%.142 = lshr i64 %arg, 16 | |
switch i16 %.141, label %l145 [ i16 16, label %l139 i16 17, label %l140 ] | |
l139: | |
br label %l146 | |
l140: | |
%.147 = inttoptr i64 %.142 to { i32, i64 }* | |
br label %l151 | |
l151: | |
%.153 = bitcast i8* %htop to { i32, i64 }* | |
%.154 = getelementptr { i32, i64 }* %.153, i32 1 | |
%.155 = bitcast { i32, i64 }* %.154 to i8* | |
%.156 = getelementptr { i32, i64 }* %.147, i32 0, i32 0 | |
%.158 = load i32* %.156 | |
br label %l162 | |
l162: | |
br label %l163 | |
l163: | |
%.157 = getelementptr { i32, i64 }* %.153, i32 0, i32 0 | |
store i32 %.158, i32* %.157 | |
%.160 = getelementptr { i32, i64 }* %.147, i32 0, i32 1 | |
%.159 = load i64* %.160 | |
br label %l164 | |
l164: | |
%.166 = tail call fastcc { i64, i8* } @copier67(i64 %.159, i8* %.155) | |
%.167 = extractvalue { i64, i8* } %.166, 0 | |
%.168 = extractvalue { i64, i8* } %.166, 1 | |
br label %l165 | |
l165: | |
%.161 = getelementptr { i32, i64 }* %.153, i32 0, i32 1 | |
store i64 %.167, i64* %.161 | |
br label %l152 | |
l152: | |
%.148 = ptrtoint { i32, i64 }* %.153 to i64 | |
%.149 = shl i64 %.148, 16 | |
%.150 = or i64 %.149, 17 | |
br label %l146 | |
l146: | |
%.143 = phi i64 [ %arg, %l139 ], [ %.150, %l152 ] | |
%.144 = phi i8* [ %htop, %l139 ], [ %.168, %l152 ] | |
br label %l138 | |
l145: | |
call void @rttype_check(i16 %.141) | |
unreachable | |
l138: | |
%.169 = insertvalue { i64, i8* } undef, i64 %.143, 0 | |
%.170 = insertvalue { i64, i8* } %.169, i8* %.144, 1 | |
ret { i64, i8* } %.170 | |
} | |
define { i64, i8* } @main0(i8* %htop, %proc_t* %proc) { | |
entry: | |
br label %l173 | |
l173: | |
br label %l174 | |
l174: | |
br label %l177 | |
l177: | |
br label %l178 | |
l178: | |
br label %l176 | |
l176: | |
%.179 = tail call fastcc { i64, i8* } @seq2(i8* %htop, %proc_t* %proc, i32 0, i32 1000) | |
%.180 = extractvalue { i64, i8* } %.179, 0 | |
%.181 = extractvalue { i64, i8* } %.179, 1 | |
br label %l175 | |
l175: | |
br label %l172 | |
l172: | |
%.182 = tail call fastcc { i64, i8* } @repeat3(i8* %.181, %proc_t* %proc, i32 0, i32 1000000, i64 %.180) | |
ret { i64, i8* } %.182 | |
} | |
define { i64, i8* } @repeat3(i8* %htopr, %proc_t* %proc, i32 %r1, i32 %r2, i64 %r3) { | |
l185: | |
%.188 = getelementptr %proc_t* %proc, i32 0, i32 1 | |
%.189 = load i8** %.188 | |
%.190 = icmp ugt i8* %htopr, %.189 | |
br i1 %.190, label %l186, label %l187 | |
l186: | |
%h0 = tail call fastcc i8* @heap_allocate(%proc_t* %proc, i8* %htopr) | |
%.191 = tail call fastcc { i64, i8* } @copier67(i64 %r3, i8* %h0) | |
%c3 = extractvalue { i64, i8* } %.191, 0 | |
%h3 = extractvalue { i64, i8* } %.191, 1 | |
call void @heap_switch(%proc_t* %proc, i8* %h3) | |
br label %l187 | |
l187: | |
%htop = phi i8* [ %htopr, %l185 ], [ %h3, %l186 ] | |
%m1 = phi i32 [ %r1, %l185 ], [ %r1, %l186 ] | |
%m2 = phi i32 [ %r2, %l185 ], [ %r2, %l186 ] | |
%m3 = phi i64 [ %r3, %l185 ], [ %c3, %l186 ] | |
br label %entry | |
entry: | |
br label %l194 | |
l194: | |
br label %l195 | |
l195: | |
br label %l196 | |
l196: | |
br label %l193 | |
l193: | |
%.197 = tail call fastcc { i64, i8* } @gf3_3(i8* %htop, %proc_t* %proc, i32 %m1, i32 %m2, i64 %m3) | |
ret { i64, i8* } %.197 | |
} | |
define { i64, i8* } @gf3_3(i8* %htop, %proc_t* %proc, i32 %m1, i32 %m2, i64 %m3) { | |
entry: | |
br label %l204 | |
l204: | |
br label %l205 | |
l205: | |
%.206 = icmp eq i32 %m1, %m2 | |
br label %l200 | |
l200: | |
br i1 %.206, label %l201, label %l202 | |
l201: | |
br label %l203 | |
l203: | |
%.207 = insertvalue { i64, i8* } undef, i64 %m3, 0 | |
%.208 = insertvalue { i64, i8* } %.207, i8* %htop, 1 | |
ret { i64, i8* } %.208 | |
l202: | |
br label %l212 | |
l212: | |
br label %l213 | |
l213: | |
%.214 = add i32 %m1, 1 | |
br label %l211 | |
l211: | |
br label %l215 | |
l215: | |
br label %l218 | |
l218: | |
br label %l217 | |
l217: | |
%.219 = tail call fastcc { i64, i8* } @rev1(i8* %htop, %proc_t* %proc, i64 %m3) | |
%.220 = extractvalue { i64, i8* } %.219, 0 | |
%.221 = extractvalue { i64, i8* } %.219, 1 | |
br label %l216 | |
l216: | |
br label %l210 | |
l210: | |
%.222 = tail call fastcc { i64, i8* } @repeat3(i8* %.221, %proc_t* %proc, i32 %.214, i32 %m2, i64 %.220) | |
ret { i64, i8* } %.222 | |
} | |
define { i64, i8* } @seq2(i8* %htop, %proc_t* %proc, i32 %m1, i32 %m2) { | |
entry: | |
br label %l225 | |
l225: | |
br label %l226 | |
l226: | |
br label %l227 | |
l227: | |
br label %l224 | |
l224: | |
%.228 = tail call fastcc { i64, i8* } @seq3(i8* %htop, %proc_t* %proc, i32 %m1, i32 %m2, i64 16) | |
ret { i64, i8* } %.228 | |
} | |
define { i64, i8* } @seq3(i8* %htop, %proc_t* %proc, i32 %m1, i32 %m2, i64 %m3) { | |
entry: | |
br label %l233 | |
l233: | |
br label %l234 | |
l234: | |
br label %l235 | |
l235: | |
br label %l232 | |
l232: | |
%.236 = tail call fastcc { i64, i8* } @gf4_3(i8* %htop, %proc_t* %proc, i32 %m1, i32 %m2, i64 %m3) | |
ret { i64, i8* } %.236 | |
} | |
define { i64, i8* } @gf4_3(i8* %htop, %proc_t* %proc, i32 %m1, i32 %m2, i64 %m3) { | |
entry: | |
br label %l243 | |
l243: | |
br label %l244 | |
l244: | |
%.245 = icmp eq i32 %m1, %m2 | |
br label %l239 | |
l239: | |
br i1 %.245, label %l240, label %l241 | |
l240: | |
br label %l242 | |
l242: | |
%.246 = insertvalue { i64, i8* } undef, i64 %m3, 0 | |
%.247 = insertvalue { i64, i8* } %.246, i8* %htop, 1 | |
ret { i64, i8* } %.247 | |
l241: | |
br label %l250 | |
l250: | |
br label %l252 | |
l252: | |
br label %l253 | |
l253: | |
%.254 = sub i32 %m2, 1 | |
br label %l251 | |
l251: | |
%.256 = bitcast i8* %htop to { i32, i64 }* | |
%.257 = getelementptr { i32, i64 }* %.256, i32 1 | |
%.258 = bitcast { i32, i64 }* %.257 to i8* | |
br label %l261 | |
l261: | |
%.267 = ptrtoint i8* %htop to i64 | |
%.268 = ptrtoint i8* %.258 to i64 | |
%.269 = trunc i64 %.267 to i16 | |
%.270 = trunc i64 %.268 to i16 | |
%.271 = icmp uge i16 %.269, %.270 | |
br i1 %.271, label %l272, label %l262 | |
l272: | |
%.274 = getelementptr %proc_t* %proc, i32 0, i32 0 | |
%.275 = load i8** %.274 | |
%.276 = icmp ugt i8* %.258, %.275 | |
br i1 %.276, label %l273, label %l262 | |
l273: | |
call void @heap_overflow(%proc_t* %proc, i8* %.258) | |
unreachable | |
l262: | |
br label %l263 | |
l263: | |
%.259 = getelementptr { i32, i64 }* %.256, i32 0, i32 0 | |
store i32 %m2, i32* %.259 | |
br label %l264 | |
l264: | |
br label %l265 | |
l265: | |
%.260 = getelementptr { i32, i64 }* %.256, i32 0, i32 1 | |
store i64 %m3, i64* %.260 | |
br label %l266 | |
l266: | |
%.277 = ptrtoint { i32, i64 }* %.256 to i64 | |
%.278 = shl i64 %.277, 16 | |
%.279 = or i64 %.278, 17 | |
br label %l255 | |
l255: | |
br label %l249 | |
l249: | |
%.280 = tail call fastcc { i64, i8* } @seq3(i8* %.258, %proc_t* %proc, i32 %m1, i32 %.254, i64 %.279) | |
ret { i64, i8* } %.280 | |
} | |
define { i64, i8* } @rev1(i8* %htop, %proc_t* %proc, i64 %m1) { | |
entry: | |
br label %l283 | |
l283: | |
br label %l284 | |
l284: | |
br label %l282 | |
l282: | |
%.285 = tail call fastcc { i64, i8* } @rev2(i8* %htop, %proc_t* %proc, i64 %m1, i64 16) | |
ret { i64, i8* } %.285 | |
} | |
define { i64, i8* } @rev2(i8* %htop, %proc_t* %proc, i64 %m1, i64 %m2) { | |
entry: | |
br label %l290 | |
l290: | |
br label %l291 | |
l291: | |
br label %l289 | |
l289: | |
%.292 = tail call fastcc { i64, i8* } @tf8_2(i8* %htop, %proc_t* %proc, i64 %m1, i64 %m2) | |
ret { i64, i8* } %.292 | |
} | |
define { i64, i8* } @tf8_2(i8* %htop, %proc_t* %proc, i64 %m1, i64 %m2) { | |
entry: | |
%.312 = trunc i64 %m1 to i16 | |
switch i16 %.312, label %l298 [ i16 17, label %l295 i16 16, label %l296 ] | |
l295: | |
br label %l300 | |
l300: | |
%.302 = lshr i64 %m1, 16 | |
%.304 = inttoptr i64 %.302 to { i32, i64 }* | |
%.305 = getelementptr { i32, i64 }* %.304, i32 0, i32 0 | |
%.303 = load i32* %.305 | |
br label %l301 | |
l301: | |
%.307 = lshr i64 %m1, 16 | |
%.309 = inttoptr i64 %.307 to { i32, i64 }* | |
%.310 = getelementptr { i32, i64 }* %.309, i32 0, i32 1 | |
%.308 = load i64* %.310 | |
br label %l306 | |
l306: | |
br label %l299 | |
l299: | |
%.311 = tail call fastcc { i64, i8* } @zf7_3(i8* %htop, %proc_t* %proc, i64 %m2, i32 %.303, i64 %.308) | |
ret { i64, i8* } %.311 | |
l296: | |
br label %l297 | |
l297: | |
%.313 = phi i64 [ %m2, %l296 ] | |
%.314 = phi i8* [ %htop, %l296 ] | |
%.315 = insertvalue { i64, i8* } undef, i64 %.313, 0 | |
%.316 = insertvalue { i64, i8* } %.315, i8* %.314, 1 | |
ret { i64, i8* } %.316 | |
l298: | |
call void @rttype_check(i16 %.312) | |
unreachable | |
} | |
define { i64, i8* } @zf7_3(i8* %htop, %proc_t* %proc, i64 %m1, i32 %m2, i64 %m3) { | |
entry: | |
br label %l319 | |
l319: | |
%.321 = bitcast i8* %htop to { i32, i64 }* | |
%.322 = getelementptr { i32, i64 }* %.321, i32 1 | |
%.323 = bitcast { i32, i64 }* %.322 to i8* | |
br label %l326 | |
l326: | |
%.332 = ptrtoint i8* %htop to i64 | |
%.333 = ptrtoint i8* %.323 to i64 | |
%.334 = trunc i64 %.332 to i16 | |
%.335 = trunc i64 %.333 to i16 | |
%.336 = icmp uge i16 %.334, %.335 | |
br i1 %.336, label %l337, label %l327 | |
l337: | |
%.339 = getelementptr %proc_t* %proc, i32 0, i32 0 | |
%.340 = load i8** %.339 | |
%.341 = icmp ugt i8* %.323, %.340 | |
br i1 %.341, label %l338, label %l327 | |
l338: | |
call void @heap_overflow(%proc_t* %proc, i8* %.323) | |
unreachable | |
l327: | |
br label %l328 | |
l328: | |
%.324 = getelementptr { i32, i64 }* %.321, i32 0, i32 0 | |
store i32 %m2, i32* %.324 | |
br label %l329 | |
l329: | |
br label %l330 | |
l330: | |
%.325 = getelementptr { i32, i64 }* %.321, i32 0, i32 1 | |
store i64 %m1, i64* %.325 | |
br label %l331 | |
l331: | |
%.342 = ptrtoint { i32, i64 }* %.321 to i64 | |
%.343 = shl i64 %.342, 16 | |
%.344 = or i64 %.343, 17 | |
br label %l320 | |
l320: | |
br label %l318 | |
l318: | |
%.345 = tail call fastcc { i64, i8* } @rev2(i8* %.323, %proc_t* %proc, i64 %m3, i64 %.344) | |
ret { i64, i8* } %.345 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment