@@ -246,12 +246,13 @@ define void @f_thunk(i8* %this, ...) {
246
246
; X86-NOSSE-NEXT: movl %esp, %ebp
247
247
; X86-NOSSE-NEXT: pushl %esi
248
248
; X86-NOSSE-NEXT: andl $-16, %esp
249
- ; X86-NOSSE-NEXT: subl $48 , %esp
249
+ ; X86-NOSSE-NEXT: subl $32 , %esp
250
250
; X86-NOSSE-NEXT: movl 8(%ebp), %esi
251
251
; X86-NOSSE-NEXT: leal 12(%ebp), %eax
252
- ; X86-NOSSE-NEXT: movl %eax, {{[0-9]+}} (%esp)
253
- ; X86-NOSSE-NEXT: movl %esi, (%esp)
252
+ ; X86-NOSSE-NEXT: movl %eax, (%esp)
253
+ ; X86-NOSSE-NEXT: pushl %esi
254
254
; X86-NOSSE-NEXT: calll _get_f
255
+ ; X86-NOSSE-NEXT: addl $4, %esp
255
256
; X86-NOSSE-NEXT: movl %esi, 8(%ebp)
256
257
; X86-NOSSE-NEXT: leal -4(%ebp), %esp
257
258
; X86-NOSSE-NEXT: popl %esi
@@ -264,17 +265,18 @@ define void @f_thunk(i8* %this, ...) {
264
265
; X86-SSE-NEXT: movl %esp, %ebp
265
266
; X86-SSE-NEXT: pushl %esi
266
267
; X86-SSE-NEXT: andl $-16, %esp
267
- ; X86-SSE-NEXT: subl $96 , %esp
268
+ ; X86-SSE-NEXT: subl $80 , %esp
268
269
; X86-SSE-NEXT: movaps %xmm2, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill
269
270
; X86-SSE-NEXT: movaps %xmm1, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill
270
- ; X86-SSE-NEXT: movaps %xmm0, {{[-0-9]+}}(%e{{[sb]}}p ) # 16-byte Spill
271
+ ; X86-SSE-NEXT: movaps %xmm0, (%esp ) # 16-byte Spill
271
272
; X86-SSE-NEXT: movl 8(%ebp), %esi
272
273
; X86-SSE-NEXT: leal 12(%ebp), %eax
273
274
; X86-SSE-NEXT: movl %eax, {{[0-9]+}}(%esp)
274
- ; X86-SSE-NEXT: movl %esi, (%esp)
275
+ ; X86-SSE-NEXT: pushl %esi
275
276
; X86-SSE-NEXT: calll _get_f
277
+ ; X86-SSE-NEXT: addl $4, %esp
276
278
; X86-SSE-NEXT: movl %esi, 8(%ebp)
277
- ; X86-SSE-NEXT: movaps {{[-0-9]+}}(%e{{[sb]}}p ), %xmm0 # 16-byte Reload
279
+ ; X86-SSE-NEXT: movaps (%esp ), %xmm0 # 16-byte Reload
278
280
; X86-SSE-NEXT: movaps {{[-0-9]+}}(%e{{[sb]}}p), %xmm1 # 16-byte Reload
279
281
; X86-SSE-NEXT: movaps {{[-0-9]+}}(%e{{[sb]}}p), %xmm2 # 16-byte Reload
280
282
; X86-SSE-NEXT: leal -4(%ebp), %esp
@@ -300,38 +302,21 @@ define void @f_thunk(i8* %this, ...) {
300
302
define void @g_thunk (i8* %fptr_i8 , ...) {
301
303
; LINUX-LABEL: g_thunk:
302
304
; LINUX: # %bb.0:
303
- ; LINUX-NEXT: pushq %rax
304
- ; LINUX-NEXT: .cfi_def_cfa_offset 16
305
- ; LINUX-NEXT: popq %r11
306
- ; LINUX-NEXT: .cfi_def_cfa_offset 8
307
305
; LINUX-NEXT: jmpq *%rdi # TAILCALL
308
306
;
309
307
; LINUX-X32-LABEL: g_thunk:
310
308
; LINUX-X32: # %bb.0:
311
- ; LINUX-X32-NEXT: pushq %rax
312
- ; LINUX-X32-NEXT: .cfi_def_cfa_offset 16
313
309
; LINUX-X32-NEXT: movl %edi, %r11d
314
- ; LINUX-X32-NEXT: addl $8, %esp
315
- ; LINUX-X32-NEXT: .cfi_def_cfa_offset 8
316
310
; LINUX-X32-NEXT: jmpq *%r11 # TAILCALL
317
311
;
318
312
; WINDOWS-LABEL: g_thunk:
319
313
; WINDOWS: # %bb.0:
320
- ; WINDOWS-NEXT: subq $40, %rsp
321
- ; WINDOWS-NEXT: .seh_stackalloc 40
322
- ; WINDOWS-NEXT: .seh_endprologue
323
- ; WINDOWS-NEXT: addq $40, %rsp
324
314
; WINDOWS-NEXT: rex64 jmpq *%rcx # TAILCALL
325
- ; WINDOWS-NEXT: .seh_handlerdata
326
- ; WINDOWS-NEXT: .text
327
- ; WINDOWS-NEXT: .seh_endproc
328
315
;
329
316
; X86-LABEL: g_thunk:
330
317
; X86: # %bb.0:
331
- ; X86-NEXT: pushl %eax
332
318
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
333
319
; X86-NEXT: movl %eax, {{[0-9]+}}(%esp)
334
- ; X86-NEXT: popl %ecx
335
320
; X86-NEXT: jmpl *%eax # TAILCALL
336
321
%fptr = bitcast i8* %fptr_i8 to void (i8* , ...)*
337
322
musttail call void (i8* , ...) %fptr (i8* %fptr_i8 , ...)
@@ -347,78 +332,53 @@ define void @g_thunk(i8* %fptr_i8, ...) {
347
332
define void @h_thunk (%struct.Foo* %this , ...) {
348
333
; LINUX-LABEL: h_thunk:
349
334
; LINUX: # %bb.0:
350
- ; LINUX-NEXT: pushq %rax
351
- ; LINUX-NEXT: .cfi_def_cfa_offset 16
352
335
; LINUX-NEXT: cmpb $1, (%rdi)
353
336
; LINUX-NEXT: jne .LBB2_2
354
337
; LINUX-NEXT: # %bb.1: # %then
355
338
; LINUX-NEXT: movq 8(%rdi), %r11
356
- ; LINUX-NEXT: addq $8, %rsp
357
- ; LINUX-NEXT: .cfi_def_cfa_offset 8
358
339
; LINUX-NEXT: jmpq *%r11 # TAILCALL
359
340
; LINUX-NEXT: .LBB2_2: # %else
360
- ; LINUX-NEXT: .cfi_def_cfa_offset 16
361
341
; LINUX-NEXT: movq 16(%rdi), %r11
362
342
; LINUX-NEXT: movl $42, {{.*}}(%rip)
363
- ; LINUX-NEXT: addq $8, %rsp
364
- ; LINUX-NEXT: .cfi_def_cfa_offset 8
365
343
; LINUX-NEXT: jmpq *%r11 # TAILCALL
366
344
;
367
345
; LINUX-X32-LABEL: h_thunk:
368
346
; LINUX-X32: # %bb.0:
369
- ; LINUX-X32-NEXT: pushq %rax
370
- ; LINUX-X32-NEXT: .cfi_def_cfa_offset 16
371
347
; LINUX-X32-NEXT: cmpb $1, (%edi)
372
348
; LINUX-X32-NEXT: jne .LBB2_2
373
349
; LINUX-X32-NEXT: # %bb.1: # %then
374
350
; LINUX-X32-NEXT: movl 4(%edi), %r11d
375
- ; LINUX-X32-NEXT: addl $8, %esp
376
- ; LINUX-X32-NEXT: .cfi_def_cfa_offset 8
377
351
; LINUX-X32-NEXT: jmpq *%r11 # TAILCALL
378
352
; LINUX-X32-NEXT: .LBB2_2: # %else
379
- ; LINUX-X32-NEXT: .cfi_def_cfa_offset 16
380
353
; LINUX-X32-NEXT: movl 8(%edi), %r11d
381
354
; LINUX-X32-NEXT: movl $42, {{.*}}(%rip)
382
- ; LINUX-X32-NEXT: addl $8, %esp
383
- ; LINUX-X32-NEXT: .cfi_def_cfa_offset 8
384
355
; LINUX-X32-NEXT: jmpq *%r11 # TAILCALL
385
356
;
386
357
; WINDOWS-LABEL: h_thunk:
387
358
; WINDOWS: # %bb.0:
388
- ; WINDOWS-NEXT: subq $40, %rsp
389
- ; WINDOWS-NEXT: .seh_stackalloc 40
390
- ; WINDOWS-NEXT: .seh_endprologue
391
359
; WINDOWS-NEXT: cmpb $1, (%rcx)
392
360
; WINDOWS-NEXT: jne .LBB2_2
393
361
; WINDOWS-NEXT: # %bb.1: # %then
394
362
; WINDOWS-NEXT: movq 8(%rcx), %rax
395
- ; WINDOWS-NEXT: addq $40, %rsp
396
363
; WINDOWS-NEXT: rex64 jmpq *%rax # TAILCALL
397
364
; WINDOWS-NEXT: .LBB2_2: # %else
398
365
; WINDOWS-NEXT: movq 16(%rcx), %rax
399
366
; WINDOWS-NEXT: movl $42, {{.*}}(%rip)
400
- ; WINDOWS-NEXT: addq $40, %rsp
401
367
; WINDOWS-NEXT: rex64 jmpq *%rax # TAILCALL
402
- ; WINDOWS-NEXT: .seh_handlerdata
403
- ; WINDOWS-NEXT: .text
404
- ; WINDOWS-NEXT: .seh_endproc
405
368
;
406
369
; X86-LABEL: h_thunk:
407
370
; X86: # %bb.0:
408
- ; X86-NEXT: pushl %eax
409
371
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
410
372
; X86-NEXT: cmpb $1, (%eax)
411
373
; X86-NEXT: jne LBB2_2
412
374
; X86-NEXT: # %bb.1: # %then
413
375
; X86-NEXT: movl 4(%eax), %ecx
414
376
; X86-NEXT: movl %eax, {{[0-9]+}}(%esp)
415
- ; X86-NEXT: popl %eax
416
377
; X86-NEXT: jmpl *%ecx # TAILCALL
417
378
; X86-NEXT: LBB2_2: # %else
418
379
; X86-NEXT: movl 8(%eax), %ecx
419
380
; X86-NEXT: movl $42, _g
420
381
; X86-NEXT: movl %eax, {{[0-9]+}}(%esp)
421
- ; X86-NEXT: popl %eax
422
382
; X86-NEXT: jmpl *%ecx # TAILCALL
423
383
%cond_p = getelementptr %struct.Foo , %struct.Foo* %this , i32 0 , i32 0
424
384
%cond = load i1 , i1* %cond_p
0 commit comments