[PATCH] Experiment with keeping GEPs near calls

Daniel Jasper djasper at google.com
Thu Jan 29 10:27:39 PST 2015


Hi chandlerc, rnk, qcolombet,

This is not meant as an actual code review to get this patch submitted but to have a basis for further discussion.

It is meant to experiment around a solution for http://llvm.org/PR22230

With this patch, LLVM, generates pretty nice code for the example from the bug report (see below). Obviously it is far from complete or correct.

	.section	__TEXT,__text,regular,pure_instructions
	.macosx_version_min 10, 10
	.globl	__Z1fPhP1A
	.align	4, 0x90
__Z1fPhP1A:                             ## @_Z1fPhP1A
	.cfi_startproc
## BB#0:                                ## %entry
	pushq	%rbp
Ltmp0:
	.cfi_def_cfa_offset 16
Ltmp1:
	.cfi_offset %rbp, -16
	movq	%rsp, %rbp
Ltmp2:
	.cfi_def_cfa_register %rbp
	pushq	%r15
	pushq	%r14
	pushq	%rbx
	pushq	%rax
Ltmp3:
	.cfi_offset %rbx, -40
Ltmp4:
	.cfi_offset %r14, -32
Ltmp5:
	.cfi_offset %r15, -24
	movq	%rsi, %r14
	movq	%rdi, %rbx
	incq	%rbx
	leaq	LJTI0_0(%rip), %r15
	jmp	LBB0_1
	.align	4, 0x90
LBB0_6:                                 ## %for.cond.backedge
                                        ##   in Loop: Header=BB0_1 Depth=1
	incq	%rbx
LBB0_1:                                 ## %for.cond
                                        ## =>This Inner Loop Header: Depth=1
	movzbl	(%rbx), %eax
	cmpq	$3, %rax
	ja	LBB0_6
## BB#2:                                ## %for.cond
                                        ##   in Loop: Header=BB0_1 Depth=1
	movslq	(%r15,%rax,4), %rax
	addq	%r15, %rax
	jmpq	*%rax
LBB0_3:                                 ## %if.then
                                        ##   in Loop: Header=BB0_1 Depth=1
	movq	%r14, %rdi
	jmp	LBB0_5
LBB0_4:                                 ## %if.then4
                                        ##   in Loop: Header=BB0_1 Depth=1
	leaq	4(%r14), %rdi
	jmp	LBB0_5
LBB0_7:                                 ## %if.then8
                                        ##   in Loop: Header=BB0_1 Depth=1
	leaq	8(%r14), %rdi
	jmp	LBB0_5
LBB0_8:                                 ## %if.then12
                                        ##   in Loop: Header=BB0_1 Depth=1
	leaq	12(%r14), %rdi
LBB0_5:                                 ## %for.cond.backedge
                                        ##   in Loop: Header=BB0_1 Depth=1
	callq	__Z6assignPj
	jmp	LBB0_6
	.cfi_endproc
	.align	2, 0x90
L0_0_set_3 = LBB0_3-LJTI0_0
L0_0_set_4 = LBB0_4-LJTI0_0
L0_0_set_7 = LBB0_7-LJTI0_0
L0_0_set_8 = LBB0_8-LJTI0_0
LJTI0_0:
	.long	L0_0_set_3
	.long	L0_0_set_4
	.long	L0_0_set_7
	.long	L0_0_set_8


.subsections_via_symbols

http://reviews.llvm.org/D7259

Files:
  lib/CodeGen/CodeGenPrepare.cpp
  lib/CodeGen/RegisterCoalescer.cpp

EMAIL PREFERENCES
  http://reviews.llvm.org/settings/panel/emailpreferences/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D7259.18977.patch
Type: text/x-patch
Size: 9773 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150129/8886a888/attachment.bin>


More information about the cfe-commits mailing list