[llvm] r335091 - Add more test cases for deopt-operands via regalloc

Philip Reames via llvm-commits llvm-commits at lists.llvm.org
Tue Jun 19 19:43:46 PDT 2018


Author: reames
Date: Tue Jun 19 19:43:46 2018
New Revision: 335091

URL: http://llvm.org/viewvc/llvm-project?rev=335091&view=rev
Log:
Add more test cases for deopt-operands via regalloc

This time, focused on reuse of arguments slots.  Only one minor todo here.


Modified:
    llvm/trunk/test/CodeGen/X86/statepoint-live-in.ll

Modified: llvm/trunk/test/CodeGen/X86/statepoint-live-in.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/statepoint-live-in.ll?rev=335091&r1=335090&r2=335091&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/statepoint-live-in.ll (original)
+++ llvm/trunk/test/CodeGen/X86/statepoint-live-in.ll Tue Jun 19 19:43:46 2018
@@ -200,6 +200,61 @@ entry:
   ret void
 }
 
+; Test perfect forwarding of argument registers and stack slots to the
+; deopt bundle uses
+define void @test9(i32 %a, i32 %b, i32 %c, i32 %d, i32 %e, i32 %f, i32 %g, i32 %h, i32 %i, i32 %j, i32 %k, i32 %l, i32 %m, i32 %n, i32 %o, i32 %p, i32 %q, i32 %r, i32 %s, i32 %t, i32 %u, i32 %v, i32 %w, i32 %x, i32 %y, i32 %z) gc "statepoint-example" {
+; CHECK-LABEL: test9:
+; CHECK:      pushq %rax
+; CHECK-NEXT: .cfi_def_cfa_offset 16
+; CHECK-NEXT: callq _bar
+; CHECK-NEXT: Ltmp10:
+; CHECK-NEXT: popq %rax
+; CHECK-NEXT: retq
+
+entry:
+  %statepoint_token1 = call token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 2882400000, i32 0, void ()* @bar, i32 0, i32 2, i32 0, i32 26, i32 %a, i32 %b, i32 %c, i32 %d, i32 %e, i32 %f, i32 %g, i32 %h, i32 %i, i32 %j, i32 %k, i32 %l, i32 %m, i32 %n, i32 %o, i32 %p, i32 %q, i32 %r, i32 %s, i32 %t, i32 %u, i32 %v, i32 %w, i32 %x, i32 %y, i32 %z)
+  ret void
+}
+
+; Test enough folding of argument slots when we have one call which clobbers
+; registers before a second which needs them - i.e. we must do something with
+; arguments originally passed in registers
+define void @test10(i32 %a, i32 %b, i32 %c, i32 %d, i32 %e, i32 %f, i32 %g, i32 %h, i32 %i, i32 %j, i32 %k, i32 %l, i32 %m, i32 %n, i32 %o, i32 %p, i32 %q, i32 %r, i32 %s, i32 %t, i32 %u, i32 %v, i32 %w, i32 %x, i32 %y, i32 %z) gc "statepoint-example" {
+; FIXME (minor): It would be better to just spill (and fold reload) for
+; argument registers then spill and fill all the CSRs.
+; CHECK-LABEL: test10:
+; CHECK:      pushq	%rbp
+; CHECK:      pushq	%r15
+; CHECK:      pushq	%r14
+; CHECK:      pushq	%r13
+; CHECK:      pushq	%r12
+; CHECK:      pushq	%rbx
+; CHECK:      pushq	%rax
+; CHECK:      movl	%r9d, %r15d
+; CHECK-NEXT: movl	%r8d, %r14d
+; CHECK-NEXT: movl	%ecx, %r12d
+; CHECK-NEXT: movl	%edx, %r13d
+; CHECK-NEXT: movl	%esi, %ebx
+; CHECK-NEXT: movl	%edi, %ebp
+; CHECK-NEXT: callq _bar
+; CHECK-NEXT: Ltmp11:
+; CHECK-NEXT: callq _bar
+; CHECK-NEXT: Ltmp12:
+; CHECK-NEXT: addq	$8, %rsp
+; CHECK-NEXT: popq	%rbx
+; CHECK-NEXT: popq	%r12
+; CHECK-NEXT: popq	%r13
+; CHECK-NEXT: popq	%r14
+; CHECK-NEXT: popq	%r15
+; CHECK-NEXT: popq	%rbp
+; CHECK-NEXT: retq
+
+entry:
+  %statepoint_token1 = call token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 2882400000, i32 0, void ()* @bar, i32 0, i32 2, i32 0, i32 26, i32 %a, i32 %b, i32 %c, i32 %d, i32 %e, i32 %f, i32 %g, i32 %h, i32 %i, i32 %j, i32 %k, i32 %l, i32 %m, i32 %n, i32 %o, i32 %p, i32 %q, i32 %r, i32 %s, i32 %t, i32 %u, i32 %v, i32 %w, i32 %x, i32 %y, i32 %z)
+  %statepoint_token2 = call token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 2882400000, i32 0, void ()* @bar, i32 0, i32 2, i32 0, i32 26, i32 %a, i32 %b, i32 %c, i32 %d, i32 %e, i32 %f, i32 %g, i32 %h, i32 %i, i32 %j, i32 %k, i32 %l, i32 %m, i32 %n, i32 %o, i32 %p, i32 %q, i32 %r, i32 %s, i32 %t, i32 %u, i32 %v, i32 %w, i32 %x, i32 %y, i32 %z)
+  ret void
+}
+
 ; CHECK: Ltmp0-_test1
 ; CHECK:      .byte	1
 ; CHECK-NEXT:   .byte   0




More information about the llvm-commits mailing list