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 index 0000000000000..d611f39b2f4db --- /dev/null +++ b/llvm/test/CodeGen/X86/align-branch-boundary-default.ll @@ -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 index 0000000000000..b44f5b60c1e19 --- /dev/null +++ b/llvm/test/CodeGen/X86/align-branch-boundary-default.s @@ -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