[LLVMdev] "equivalent" .ll files diverge after optimizations are applied

Argyrios Kyrtzidis
2010-08-31T18:18:42Z

Hi,

I've attached 2 .ll files which are supposed to be equivalent but
'unopt-fail.ll' causes a crash in webkit's test suite while
'unopt-pass.ll' does not. I can't give more details about the crash,
when I run the crashing test it in isolation it passes, when I run the full
suite it crashes; it boggles the mind.

Below I provide the optimized asm that is produced from each file. Could you
give a hint on what is the problem ?
I also attached 't.cpp' which approximates the source that the .ll files
came from.

-Argiris


-------------- next part --------------
A non-text attachment was scrubbed...
Name: unopt-fail.ll
Type: application/octet-stream
Size: 15313 bytes
Desc: not available
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20100831/9782fea6/attachment.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: unopt-pass.ll
Type: application/octet-stream
Size: 17832 bytes
Desc: not available
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20100831/9782fea6/attachment-0001.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: t.cpp
Type: application/octet-stream
Size: 447 bytes
Desc: not available
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20100831/9782fea6/attachment-0002.obj>
-------------- next part --------------



$ opt -std-compile-opts unopt-pass.ll -o - | llc -o -

	.section	__TEXT,__text,regular,pure_instructions
	.globl	__ZN7WebCore15GraphicsContext19roundToDevicePixelsERKNS_9FloatRectE
	.align	4, 0x90
__ZN7WebCore15GraphicsContext19roundToDevicePixelsERKNS_9FloatRectE: ##
@_ZN7WebCore15GraphicsContext19roundToDevicePixelsERKNS_9FloatRectE
## BB#0:
	subq	$24, %rsp
	movq	%rsi, %rdx
	movl	$0, 16(%rsp)
	movl	$0, 20(%rsp)
	movl	$0, 8(%rsp)
	movl	$0, 12(%rsp)
	movq	8(%rdi), %rsi
	leaq	16(%rsp), %rcx
	leaq	8(%rsp), %r8
	callq
__ZN7WebCore5mouniEPNS_15GraphicsContextEPNS_30GraphicsContextPlatformPrivateERKNS_9FloatRectERNS_10FloatPointES8_
	movss	8(%rsp), %xmm1
	movss	12(%rsp), %xmm0
	subss	20(%rsp), %xmm0
	subss	16(%rsp), %xmm1
                                        ## kill: XMM1<def>
XMM1<kill> XMM1<def>
	insertps	$16, %xmm0, %xmm1 ## xmm1 = xmm1[0],xmm0[0],xmm1[2,3]
	movq	16(%rsp), %xmm0
	addq	$24, %rsp
	ret


$ opt -std-compile-opts unopt-fail.ll -o - | llc -o -

	.section	__TEXT,__text,regular,pure_instructions
	.globl	__ZN7WebCore15GraphicsContext19roundToDevicePixelsERKNS_9FloatRectE
	.align	4, 0x90
__ZN7WebCore15GraphicsContext19roundToDevicePixelsERKNS_9FloatRectE: ##
@_ZN7WebCore15GraphicsContext19roundToDevicePixelsERKNS_9FloatRectE
## BB#0:
	subq	$24, %rsp
	movq	%rsi, %rdx
	movl	$0, 16(%rsp)
	movl	$0, 20(%rsp)
	movl	$0, 8(%rsp)
	movl	$0, 12(%rsp)
	movq	8(%rdi), %rsi
	leaq	16(%rsp), %rcx
	leaq	8(%rsp), %r8
	callq
__ZN7WebCore5mouniEPNS_15GraphicsContextEPNS_30GraphicsContextPlatformPrivateERKNS_9FloatRectERNS_10FloatPointES8_
	movss	8(%rsp), %xmm0
	movss	12(%rsp), %xmm1
	subss	20(%rsp), %xmm1
	subss	16(%rsp), %xmm0
	insertps	$16, %xmm1, %xmm0 ## xmm0 = xmm0[0],xmm1[0],xmm0[2,3]
	movd	%xmm0, %rax
	movd	%rax, %mm0
	movq2dq	%mm0, %xmm1
	movq2dq	%mm0, %xmm2
	punpcklqdq	%xmm2, %xmm1    ## xmm1 = xmm1[0],xmm2[0]
	movq	16(%rsp), %rax
	movd	%rax, %mm0
	movq2dq	%mm0, %xmm0
	punpcklqdq	%xmm2, %xmm0    ## xmm0 = xmm0[0],xmm2[0]
	addq	$24, %rsp
	ret