[LLVMdev] equivalent IR, different asm

Dale Johannesen dalej at apple.com
Wed Sep 1 11:14:54 PDT 2010

On Sep 1, 2010, at 6:25 AMPDT, Argyrios Kyrtzidis wrote:

> The attached .ll files seem equivalent, but the resulting asm from  
> 'opt-fail.ll' causes a crash to webkit.
> I suspect the usage of registers is wrong, can someone take a look ?

Yes, the code here is wrong:

> 	movl	(%rbx), %ecx
> 	imull	%ecx, %eax

This computes h*((int32)%1) in %eax.

> 	shrq	$32, %rax
> 	movl	%eax, %ecx

This is trying to compute (int32)(%1>>32) into %ecx, but is using the  
wrong input value since %rax has been clobbered by the above code, and  
further is clobbering the value in %eax computed above, which is  
implicit input to the divide.  This is some kind of back end error,  
probably register allocator.

> 	cltd
> 	idivl	%ecx

More information about the llvm-dev mailing list