[LLVMdev] equivalent IR, different asm

Chris Lattner clattner at apple.com
Wed Sep 1 09:16:40 PDT 2010


On Sep 1, 2010, at 6:25 AM, 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 ?

The difference is that there is a shift right after the multiply, before the divide.  In IR, the difference is:

  %5 = mul nsw i32 %4, %tmp1                      ; <i32> [#uses=1]

  %btmp3 = lshr i64 %1, 32                         ; <i64> [#uses=1]
  %btmp4 = trunc i64 %btmp3 to i32                  ; <i32> [#uses=1]

  %6 = sdiv i32 %5, %btmp4                         ; <i32> [#uses=1]

vs:

  %5 = mul nsw i32 %4, %tmp1                      ; <i32> [#uses=1]

  ; removed: %btmp3 = lshr i64 %1, 32                         ; <i64> [#uses=1]
  ; removed: %btmp4 = trunc i64 %btmp3 to i32                  ; <i32> [#uses=1]

  %6 = sdiv i32 %5, %atmp4                         ; <i32> [#uses=1]

It looks like you got these by manually editing the file.  Do you think that the shift wasn't supposed to be there in the first place?  Can you send me a .ii file that produces the __ZN7WebCore6kolos1ERiS0_PKNS_20RenderBoxModelObjectEPNS_10StyleImageE function with steps to get the bad IR?

-Chris


> 
> $ llc opt-pass.ll -o -
> 
> 	.section	__TEXT,__text,regular,pure_instructions
> 	.globl	__ZN7WebCore6kolos1ERiS0_PKNS_20RenderBoxModelObjectEPNS_10StyleImageE
> 	.align	4, 0x90
> __ZN7WebCore6kolos1ERiS0_PKNS_20RenderBoxModelObjectEPNS_10StyleImageE: ## @_ZN7WebCore6kolos1ERiS0_PKNS_20RenderBoxModelObjectEPNS_10StyleImageE
> ## BB#0:
> 	pushq	%r14
> 	pushq	%rbx
> 	subq	$8, %rsp
> 	movq	%rsi, %rbx
> 	movq	%rdi, %r14
> 	movq	%rdx, %rdi
> 	movq	%rcx, %rsi
> 	callq	__ZN7WebCore4viziEPKNS_20RenderBoxModelObjectEPNS_10StyleImageE
> 	movq	%rax, %rcx
> 	shrq	$32, %rcx
> 	testl	%ecx, %ecx
> 	je	LBB0_2
> ## BB#1:
> 	imull	(%rbx), %eax
> 	cltd
> 	idivl	%ecx
> 	movl	%eax, (%r14)
> LBB0_2:
> 	addq	$8, %rsp
> 	popq	%rbx
> 	popq	%r14
> 	ret
> 
> 
> $ llc opt-fail.ll -o -
> 
> 	.section	__TEXT,__text,regular,pure_instructions
> 	.globl	__ZN7WebCore6kolos1ERiS0_PKNS_20RenderBoxModelObjectEPNS_10StyleImageE
> 	.align	4, 0x90
> __ZN7WebCore6kolos1ERiS0_PKNS_20RenderBoxModelObjectEPNS_10StyleImageE: ## @_ZN7WebCore6kolos1ERiS0_PKNS_20RenderBoxModelObjectEPNS_10StyleImageE
> ## BB#0:
> 	pushq	%r14
> 	pushq	%rbx
> 	subq	$8, %rsp
> 	movq	%rsi, %rbx
> 	movq	%rdi, %r14
> 	movq	%rdx, %rdi
> 	movq	%rcx, %rsi
> 	callq	__ZN7WebCore4viziEPKNS_20RenderBoxModelObjectEPNS_10StyleImageE
> 	movq	%rax, %rcx
> 	shrq	$32, %rcx
> 	testl	%ecx, %ecx
> 	je	LBB0_2
> ## BB#1:
> 	movl	(%rbx), %ecx
> 	imull	%ecx, %eax
> 	shrq	$32, %rax
> 	movl	%eax, %ecx
> 	cltd
> 	idivl	%ecx
> 	movl	%eax, (%r14)
> LBB0_2:
> 	addq	$8, %rsp
> 	popq	%rbx
> 	popq	%r14
> 	ret
> 
> 
> -Argiris
> 
> 
> <opt-fail.ll><opt-pass.ll>_______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev





More information about the llvm-dev mailing list