[Tests] Precommit tests showing default branch padding on skylake
authorPhilip Reames <listmail@philipreames.com>
Fri, 10 Jan 2020 19:53:14 +0000 (11:53 -0800)
committerPhilip Reames <listmail@philipreames.com>
Fri, 10 Jan 2020 19:54:14 +0000 (11:54 -0800)
A follow up patch will change the default for the compiler, but not the assembler, just making sure we have testing for each in place.

llvm/test/CodeGen/X86/align-branch-boundary-default.ll [new file with mode: 0644]
llvm/test/CodeGen/X86/align-branch-boundary-default.s [new file with mode: 0644]

diff --git a/llvm/test/CodeGen/X86/align-branch-boundary-default.ll b/llvm/test/CodeGen/X86/align-branch-boundary-default.ll
new file mode 100644 (file)
index 0000000..d611f39
--- /dev/null
@@ -0,0 +1,37 @@
+; RUN: llc -verify-machineinstrs -O3 -mcpu=skylake -filetype=obj < %s | llvm-objdump -d --no-show-raw-insn - | FileCheck %s
+
+; TODO: At the moment, autopadding for SKX102 is not the default, but
+; eventually we'd like ti to be for the integrated assembler (only).
+
+target datalayout = "e-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-pc-linux-gnu"
+
+define void @test(i1 %c) {
+; CHECK: 0: pushq
+; CHECK-NEXT: 1: movl
+; CHECK-NEXT: 3: callq
+; CHECK-NEXT: 8: callq
+; CHECK-NEXT: d: callq
+; CHECK-NEXT: 12: callq
+; CHECK-NEXT: 17: callq
+; TODO: want a nop here
+; CHECK-NEXT: 1c: testb
+; CHECK-NEXT: 1f: je
+entry:
+  call void @foo()
+  call void @foo()
+  call void @foo()
+  call void @foo()
+  call void @foo()
+  br i1 %c, label %taken, label %untaken
+
+taken:
+  call void @foo()
+  ret void
+untaken:
+  call void @bar()
+  ret void
+}
+
+declare void @foo()
+declare void @bar()
diff --git a/llvm/test/CodeGen/X86/align-branch-boundary-default.s b/llvm/test/CodeGen/X86/align-branch-boundary-default.s
new file mode 100644 (file)
index 0000000..b44f5b6
--- /dev/null
@@ -0,0 +1,38 @@
+# RUN: llvm-mc -mcpu=skylake -filetype=obj < %s | llvm-objdump -d --no-show-raw-insn - | FileCheck %s
+
+# The textual assembler *can't* default to autopadding as there's no syntax
+# to selectively disable it just yet.
+# CHECK: 0: pushq
+# CHECK-NEXT: 1: movl
+# CHECK-NEXT: 3: callq
+# CHECK-NEXT: 8: callq
+# CHECK-NEXT: d: callq
+# CHECK-NEXT: 12: callq
+# CHECK-NEXT: 17: callq
+# No NOP
+# CHECK-NEXT: 1c: testb
+# CHECK-NEXT: 1f: je
+
+       .text
+       .globl  test
+       .p2align        4, 0x90
+       .type   test,@function
+test:                                   # @test
+# %bb.0:                                # %entry
+       pushq   %rbx
+       movl    %edi, %ebx
+       callq   foo
+       callq   foo
+       callq   foo
+       callq   foo
+       callq   foo
+       testb   $1, %bl
+       je      .LBB0_2
+# %bb.1:                                # %taken
+       callq   foo
+       popq    %rbx
+       retq
+.LBB0_2:                                # %untaken
+       callq   bar
+       popq    %rbx
+       retq