[PATCH] Remove redundent register mov by improving TwoAddressInstructionPass

Quentin Colombet qcolombet at apple.com
Fri Feb 27 15:48:15 PST 2015


REPOSITORY
  rL LLVM

================
Comment at: test/CodeGen/X86/twoaddr-coalesce-3.ll:22
@@ +21,3 @@
+; CHECK-LABEL: foo:
+; CHECK: [[LOOP1:.LBB0_[0-9]+]]: # %for.body
+; CHECK-NOT: mov
----------------
wmi wrote:
> qcolombet wrote:
> > Like I said, you shouldn’t use basic block labels, but rely on branch instruction on other block.
> > E.g, on my machine the label looks like this: LBB0_…, i.e., no leading ‘.’.
> > 
> > So, what I was saying was to use something like:
> > 
> > ; End of the first block.
> > CHECK: jp
> > ; We enter the loop
> > CHECK loop boby
> > ; The loop body is done
> > CHECK jp
> Yes, I understand your concern. However using branch instruction in previous block as boundary will introduce extra code in loop preheader, including mov. Like the following movl total(%rip), ..., I can make the test right, but it introduces extra complexity. 
> 
> 	jle	.LBB0_4
> # BB#1:                                 # %for.body.lr.ph
> 	xorl	%edx, %edx
> 	movl	total(%rip), %ecx
> 	.align	16, 0x90
> .LBB0_2:                                # %for.body
>                                         # =>This Inner Loop Header: Depth=1
> 	movl	%edx, %esi
> 	shrl	$31, %esi
> 	addl	%edx, %esi
> 	sarl	%esi
> 	addl	%esi, %ecx
> 	incl	%edx
> 	cmpl	%eax, %edx
> 	jl	.LBB0_2
> 
> Do you like CHECK: [[LOOP:[.]?LBB0_[0-9]+]]; ? If not, I will follow your way to use last branch as the boundary.
In that case, I would use 'movl total' as an anchor.

Another way to avoid this label problem is to specify a -mtriple instead of just a -march. Anyhow, I am not sure labels are stable between debug and assert builds. Same thing for the assembly comments, i.e., I am not sure your output will contain:  # %for.body.

The bottom line is that I really think you shouldn't rely on labels, but I may be wrong of course!

http://reviews.llvm.org/D7806

EMAIL PREFERENCES
  http://reviews.llvm.org/settings/panel/emailpreferences/






More information about the llvm-commits mailing list