[llvm] 79d0211 - [MC] Add test that requires multiple relaxation steps

Fangrui Song via llvm-commits llvm-commits at lists.llvm.org
Sun Aug 18 11:15:04 PDT 2024


Author: Fangrui Song
Date: 2024-08-18T11:14:59-07:00
New Revision: 79d021116d8434d28e179660d31f4bd6cdbccd62

URL: https://github.com/llvm/llvm-project/commit/79d021116d8434d28e179660d31f4bd6cdbccd62
DIFF: https://github.com/llvm/llvm-project/commit/79d021116d8434d28e179660d31f4bd6cdbccd62.diff

LOG: [MC] Add test that requires multiple relaxation steps

This can catch the code size regression
due to the reverted be5a845e4c29aadb513ae6e5e2879dccf37efdbb
("[MC] Compute fragment offsets eagerly").

Added: 
    llvm/test/MC/ELF/relax-branch.s

Modified: 
    

Removed: 
    


################################################################################
diff  --git a/llvm/test/MC/ELF/relax-branch.s b/llvm/test/MC/ELF/relax-branch.s
new file mode 100644
index 00000000000000..5abf8355f98762
--- /dev/null
+++ b/llvm/test/MC/ELF/relax-branch.s
@@ -0,0 +1,398 @@
+## A larger branch relaxation test that requires multiple relaxation steps.
+# RUN: llvm-mc -filetype=obj -triple=x86_64 %s -o %t
+# RUN: llvm-objdump -d %t | FileCheck %s
+
+## Regression test that we use jump short instead of jump near
+## (see the reverted be5a845e4c29aadb513ae6e5e2879dccf37efdbb).
+# CHECK:      4a9: eb 00                         jmp     0x4ab
+# CHECK:      5a3: eb 00                         jmp     0x5a5
+# CHECK-NEXT: 5a5: eb 00                         jmp     0x5a7
+# CHECK-NEXT: 5a7: eb 00                         jmp     0x5a9
+# CHECK-NEXT: 5a9: eb 00                         jmp     0x5ab
+# CHECK-NEXT: 5ab: e9 fb fe ff ff                jmp     0x4ab
+# CHECK-NEXT: 5b0: eb 00                         jmp     0x5b2
+
+	pushq	%rbp
+	movq	%rsp, %rbp
+	movq	%rcx, (%rbp)
+	movq	%r8, (%rbp)
+	movl	$0, (%rbp)
+	movl	$0, (%rbp)
+	movl	$0, (%rbp)
+	cmpq	$0, (%rbp)
+	je	.LBB0_2
+	movl	$0, (%rbp)
+	jmp	.LBB0_30
+.LBB0_2:
+	jmp	.LBB0_3
+.LBB0_3:
+	movq	(%rbp), %rax
+	movsbl	(%rax), %ecx
+	xorl	%eax, %eax
+	cmpl	%ecx, %eax
+	jne	.LBB0_29
+	jmp	.LBB0_5
+.LBB0_5:
+	movb	$0, %al
+	callq	sqlite3_stepPLT
+	movl	%eax, (%rbp)
+	cmpq	$0, (%rbp)
+	je	.LBB0_23
+	movl	$100, %eax
+	cmpl	(%rbp), %eax
+	sete	%al
+	andb	$1, %al
+	movzbl	%al, %eax
+	cmpl	(%rbp), %eax
+	jne	.LBB0_23
+	cmpl	$0, (%rbp)
+	je	.LBB0_23
+	movq	(%rbp), %rax
+	movl	(%rax), %eax
+	andl	$256, %eax
+	cmpl	$0, %eax
+	je	.LBB0_23
+	cmpl	$0, (%rbp)
+	je	.LBB0_22
+	movl	$0, (%rbp)
+.LBB0_11:
+	cmpl	$0, (%rbp)
+	je	.LBB0_13
+	movl	(%rbp), %esi
+	xorl	%edi, %edi
+	movb	$0, %al
+	callq	sqlite3_free_tablePLT
+	jmp	.LBB0_11
+.LBB0_13:
+	movq	(%rbp), %rax
+	movslq	(%rbp), %rcx
+	cmpb	$0, (%rax,%rcx)
+	je	.LBB0_15
+	movq	(%rbp), %rax
+	movb	$1, 8(%rax)
+.LBB0_15:
+	movq	(%rbp), %rax
+	movslq	(%rbp), %rcx
+	addq	%rcx, %rax
+	movq	%rax, (%rip)
+	movl	$0, (%rbp)
+.LBB0_16:
+	movl	(%rbp), %eax
+	cmpl	(%rbp), %eax
+	jge	.LBB0_21
+	movl	$0, (%rbp)
+	movl	$0, (%rbp)
+	movq	(%rbp), %rdi
+	movb	$0, %al
+	callq	sqlite3_free_tablePLT
+	movq	(%rip), %rax
+	movslq	(%rbp), %rcx
+	movl	$5, %edx
+	cmpq	%rdx, (%rax,%rcx,)
+	je	.LBB0_19
+	movq	(%rbp), %rax
+	movb	$1, 8(%rax)
+	jmp	.LBB0_30
+.LBB0_19:
+	jmp	.LBB0_20
+.LBB0_20:
+	movl	(%rbp), %eax
+	addl	$1, %eax
+	movl	%eax, (%rbp)
+	jmp	.LBB0_16
+.LBB0_21:
+	jmp	.LBB0_22
+.LBB0_22:
+	jmp	.LBB0_23
+.LBB0_23:
+	cmpl	$0, (%rbp)
+	je	.LBB0_27
+	movb	$0, %al
+	callq	sqlite3_stepPLT
+	movl	%eax, (%rbp)
+	movl	$0, (%rbp)
+	cmpl	$0, (%rbp)
+	je	.LBB0_26
+	jmp	.LBB0_28
+.LBB0_26:
+	jmp	.LBB0_27
+.LBB0_27:
+	jmp	.LBB0_5
+.LBB0_28:
+	jmp	.LBB0_3
+.LBB0_29:
+	jmp	.LBB0_30
+.LBB0_30:
+	movl	(%rbp), %eax
+	addq	$96, %rsp
+	popq	%rbp
+	retq
+	.p2align	4, 0x90
+	movq	%rsp, %rbp
+	subq	$48, %rsp
+	movq	%rdi, (%rbp)
+	movl	%esi, (%rbp)
+	movl	%edx, (%rbp)
+	cmpq	$0, sqlite3_get_table_res_00
+	movq	(%rbp), %rax
+	jmp	.LBB1_8
+	movq	$0, (%rbp)
+	movq	(%rbp), %rdi
+	leaq	sqlite3_get_table_zSql0, %rsi
+	leaq	sqlite3_get_table_cb0, %rdx
+	leaq	sqlite3_get_table_res0, %rcx
+	leaq	(%rip), %r8
+	callq	sqlite3_exec
+	movl	%eax, (%rip)
+	movslq	(%rbp), %rax
+	movq	%rax, (%rbp)
+	movl	(%rip), %eax
+	andl	$5, %eax
+	cmpl	$0, %eax
+	je	.LBB1_4
+	movl	(%rip), %ecx
+	movq	(%rbp), %rax
+	movl	%ecx, (%rax)
+	movl	(rip), %eax
+	movl	%eax, (%rbp)
+	jmp	.LBB1_8
+.LBB1_4:
+	movsbl	(%rip), %edi
+	movb	$0, %al
+	callq	sqlite3_free_tablePLT
+	cmpl	$0, (%rip)
+	je	.LBB1_6
+	movq	(%rip), %rax
+	movsbl	(%rax), %edi
+	movb	$0, %al
+	callq	sqlite3_free_tablePLT
+.LBB1_6:
+	movq	(rip), %rdi
+	movslq	(%rbp), %rsi
+	shlq	$0, %rsi
+	addq	$1, %rsi
+	movb	$0, %al
+	callq	sqlite3_mallocPLT
+	movq	%rax, (%rbp)
+	cmpq	$0, (%rbp)
+	je	.LBB1_8
+	movl	$1, (%rbp)
+.LBB1_8:
+	movl	(%rbp), %eax
+	addq	$48, %rsp
+	.p2align	4, 0x90
+	movq	(%rbp), %rax
+	movl	28(%rax), %eax
+	movq	(%rbp), %rcx
+	addl	16(%rcx), %eax
+	cmpl	$0, %eax
+	movq	(%rbp), %rax
+	movl	16(%rax), %ecx
+	addl	(%rbp), %ecx
+	addl	$1, %ecx
+	movq	(%rbp), %rax
+	movl	%ecx, 16(%rax)
+	jmp	.LBB2_14
+	movq	(%rbp), %rax
+	cmpl	$0, 20(%rax)
+	je	.LBB2_10
+	movl	$0, (%rbp)
+	movq	(%rbp), %rax
+	movl	$0, 24(%rax)
+.LBB2_4:
+	movl	(%rbp), %eax
+	cmpl	(%rbp), %eax
+	jge	.LBB2_7
+	movq	(%rbp), %rax
+	movslq	(%rbp), %rcx
+	movsbl	(%rax,%rcx), %esi
+	leaq	.str, %rdi
+	movb	$0, %al
+	callq	sqlite3_mprintf at PLT
+	movq	%rax, -64(%rbp)
+	movl	-56(%rbp), %eax
+	addl	$1, %eax
+	movl	%eax, -56(%rbp)
+	jmp	.LBB2_4
+.LBB2_7:
+	cmpq	$0, -64(%rbp)
+	je	.LBB2_9
+	jmp	.LBB2_9
+.LBB2_9:
+	movq	-64(%rbp), %rdx
+	movq	-48(%rbp), %rax
+	movq	(%rax), %rax
+	movq	-48(%rbp), %rsi
+	movl	28(%rsi), %ecx
+	movl	%ecx, %edi
+	addl	$1, %edi
+	movl	%edi, 28(%rsi)
+	movslq	%ecx, %rcx
+	movq	%rdx, (%rax,%rcx,8)
+	jmp	.LBB2_13
+.LBB2_10:
+	movq	-48(%rbp), %rax
+	movslq	-20(%rbp), %rcx
+	cmpq	%rcx, %rax
+	je	.LBB2_12
+	movq	-48(%rbp), %rax
+	movq	8(%rax), %rdi
+	movb	$0, %al
+	callq	sqlite3_free_table at PLT
+	leaq	.L.str, %rdi
+	movb	$0, %al
+	callq	sqlite3_mprintf at PLT
+	movq	%rax, %rcx
+	movq	-48(%rbp), %rax
+	movq	%rcx, 8(%rax)
+	movq	-48(%rbp), %rax
+	movl	$1, 32(%rax)
+	movl	$1, -4(%rbp)
+	jmp	.LBB2_15
+.LBB2_12:
+	jmp	.LBB2_13
+.LBB2_13:
+	movl	$0, -4(%rbp)
+	jmp	.LBB2_15
+.LBB2_14:
+.LBB2_15:
+	movl	-4(%rbp), %eax
+	addq	$64, %rsp
+	popq	%rbp
+	.p2align	4, 0x90
+sqlite3_complete:
+	je	.LBB3_54
+	je	.LBB3_25
+	je	.LBB3_25
+	je	.LBB3_25
+	jmp	.LBB3_28
+	movl	$42, %eax
+	cmpq	%rax, -160
+	je	.LBB3_5
+	jmp	.LBB3_53
+.LBB3_5:
+	jmp	.LBB3_6
+.LBB3_6:
+	movq	-160, %rax
+	movsbl	0, %ecx
+	xorl	%eax, %eax
+	movb	$1, %al
+	movl	$42, %ecx
+	cmpq	%rcx, -160
+	movb	%al, -340
+	jne	.LBB3_9
+	movq	-160, %rax
+	movsbl	10, %eax
+	cmpl	$0, %eax
+	setne	%al
+	movb	%al, -340
+.LBB3_9:
+	movb	-340, %al
+	movb	%al, -330
+	movb	-330, %al
+	testb	$1, %al
+	jne	.LBB3_11
+	jmp	.LBB3_14
+.LBB3_11:
+	movq	-160, %rax
+	movsbl	0, %eax
+	cmpl	$0, %eax
+	jne	.LBB3_13
+	movl	$0, -40
+	jmp	.LBB3_54
+.LBB3_13:
+	jmp	.LBB3_6
+.LBB3_14:
+	jmp	.LBB3_53
+	movq	-160, %rax
+	movsbl	10, %eax
+	cmpl	$45, %eax
+	je	.LBB3_17
+	movb	$2, -170
+	jmp	.LBB3_53
+.LBB3_17:
+	jmp	.LBB3_18
+.LBB3_18:
+	movq	-160, %rax
+	movsbl	0, %ecx
+	xorl	%eax, %eax
+	cmpl	$0, %ecx
+	movb	%al, -350
+	jmp	.LBB3_53
+.LBB3_25:
+	movl	$0, -40
+	jmp	.LBB3_54
+	jmp	.LBB3_53
+.LBB3_28:
+	je	.LBB3_52
+	jmp	.LBB3_52
+	jmp	.LBB3_31
+.LBB3_31:
+	movq	-160, %rax
+	movslq	-280, %rcx
+	movsbl	0, %ecx
+	movb	-360, %al
+	andb	$1, %cl
+	movzbl	%cl, %ecx
+	movl	%ecx, -240
+	testb	$1, %al
+	jne	.LBB3_36
+	jmp	.LBB3_51
+.LBB3_36:
+	movq	-160, %rax
+	movsbl	0, %eax
+	orl	$32, %eax
+	cmpl	$0, -280
+	je	.LBB3_40
+	movq	-160, %rdi
+	leaq	.L.str, %rsi
+	movl	$7, %edx
+	movb	$0, %al
+	callq	sqlite3StrNICmp at PLT
+	cmpl	$0, %eax
+	je	.LBB3_40
+	jmp	.LBB3_48
+.LBB3_40:
+	cmpl	$0, -280
+	je	.LBB3_43
+	movq	-160, %rdi
+	leaq	.L.str, %rsi
+	movl	$4, %edx
+	movb	$0, %al
+	callq	sqlite3StrNICmp at PLT
+	cmpl	$0, %eax
+	je	.LBB3_43
+	movb	$5, -170
+	jmp	.LBB3_47
+.LBB3_43:
+	cmpl	$0, -280
+	je	.LBB3_46
+	movq	-160, %rdi
+	leaq	.L.str, %rsi
+	movl	$9, %edx
+	movb	$0, %al
+	callq	sqlite3StrNICmp at PLT
+	cmpl	$0, %eax
+	je	.LBB3_46
+	movl	-280, %ecx
+	subl	$1, %ecx
+	movq	-160, %rax
+	movslq	%ecx, %rcx
+	addq	%rcx, %rax
+	movq	%rax, -160
+.LBB3_46:
+	jmp	.LBB3_47
+.LBB3_47:
+	jmp	.LBB3_48
+.LBB3_48:
+	jmp	.LBB3_49
+.LBB3_49:
+	jmp	.LBB3_50
+.LBB3_50:
+	jmp	.LBB3_31
+.LBB3_51:
+	jmp	.LBB3_52
+.LBB3_52:
+.LBB3_53:
+.LBB3_54:
+.L.str:


        


More information about the llvm-commits mailing list