|
13 | 13 | ALLOW_POINTERS = False |
14 | 14 | ALLOW_MISC = True |
15 | 15 | MEMCPY = False |
| 16 | +MEMCPY2 = False |
16 | 17 | NO_DLMALLOC = True |
17 | 18 |
|
18 | 19 | POSTAMBLE = ''' |
|
91 | 92 |
|
92 | 93 | POSTAMBLE_NEW = ''' |
93 | 94 | @.emscripten.autodebug.str = private constant [10 x i8] c"AD:%d,%d\\0A\\00", align 1 ; [#uses=1] |
| 95 | +@.emscripten.autodebug.str.2 = private constant [13 x i8] c"AD:%d,%d,%d\\0A\\00", align 1 ; [#uses=1] |
94 | 96 | @.emscripten.autodebug.str.f = private constant [11 x i8] c"AD:%d,%lf\\0A\\00", align 1 ; [#uses=1] |
95 | 97 |
|
96 | 98 | declare i32 @printf(i8*, ...) |
97 | 99 |
|
98 | 100 | ; [#uses=1] |
99 | 101 | define void @emscripten_autodebug_i64(i32 %line, i64 %value) { |
100 | | - %1 = sitofp i64 %value to double |
101 | | - %2 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([11 x i8]* @.emscripten.autodebug.str.f, i32 0, i32 0), i32 %line, double %1) ; [#uses=0] |
| 102 | + %1 = trunc i64 %value to i32 |
| 103 | + %2 = lshr i64 %value, 32 |
| 104 | + %3 = trunc i64 %2 to i32 |
| 105 | + %4 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([13 x i8]* @.emscripten.autodebug.str.2, i32 0, i32 0), i32 %line, i32 %1, i32 %3) ; [#uses=0] |
102 | 106 | ret void |
103 | 107 | } |
104 | 108 |
|
|
256 | 260 | lines_added += 1 |
257 | 261 | continue |
258 | 262 | if ALLOW_MISC: |
259 | | - m = re.match(' %(?P<var>[\w_.]+) = (call|mul|add) (nsw )?(?P<type>i64|i32|i16|i8|float|double+) .*', lines[i]) |
| 263 | + # call is risky - return values can be i32 (i8*) (i16) |
| 264 | + m = re.match(' %(?P<var>[\w_.]+) = (mul|add) (nsw )?(?P<type>i64|i32|i16|i8|float|double+) .*', lines[i]) |
260 | 265 | if m: |
261 | 266 | index = i+1+lines_added |
262 | 267 | lines[i] += '\n call void @emscripten_autodebug_%s(i32 %d, %s %%%s)' % (m.group('type'), index, m.group('type'), m.group('var')) |
263 | 268 | lines_added += 1 |
264 | 269 | continue |
265 | | - m = re.match(' call void @llvm\.memcpy\.p0i8\.p0i8\.i32\(i8\* %(?P<dst>[\w_.]+), i8\* %(?P<src>[\w_.]+), i32 8, i32 (?P<align>\d+),.*', lines[i]) |
266 | | - if m: |
267 | | - index = i+1+lines_added |
268 | | - lines[i] += '\n %%adpretemp%d = bitcast i8* %%%s to i64*' % (index, m.group('src')) + \ |
269 | | - '\n %%adtemp%d = load i64* %%adpretemp%d, align %s' % (index, index, m.group('align')) + \ |
270 | | - '\n call void @emscripten_autodebug_%s(i32 %d, %s %%adtemp%d)' % ('i64', index, 'i64', index) |
271 | | - lines_added += 3 |
272 | | - continue |
| 270 | + if MEMCPY2: |
| 271 | + m = re.match(' call void @llvm\.memcpy\.p0i8\.p0i8\.i32\(i8\* %(?P<dst>[\w_.]+), i8\* %(?P<src>[\w_.]+), i32 8, i32 (?P<align>\d+),.*', lines[i]) |
| 272 | + if m: |
| 273 | + index = i+1+lines_added |
| 274 | + lines[i] += '\n %%adtemp%d = load i8* %%%s, align 1' % (index, m.group('src')) + \ |
| 275 | + '\n call void @emscripten_autodebug_i8(i32 %d, i8 %%adtemp%d)' % (index, index) |
| 276 | + lines_added += 3 |
| 277 | + continue |
273 | 278 |
|
274 | 279 | finally: |
275 | 280 | if len(pre) > 0: |
|
0 commit comments