Index: llvm/trunk/lib/CodeGen/MachineOutliner.cpp =================================================================== --- llvm/trunk/lib/CodeGen/MachineOutliner.cpp +++ llvm/trunk/lib/CodeGen/MachineOutliner.cpp @@ -1253,6 +1253,14 @@ F->setLinkage(GlobalValue::InternalLinkage); F->setUnnamedAddr(GlobalValue::UnnamedAddr::Global); + // FIXME: Set nounwind, so we don't generate eh_frame? Haven't verified it's + // necessary. + + // Set optsize/minsize, so we don't insert padding between outlined + // functions. + F->addFnAttr(Attribute::OptimizeForSize); + F->addFnAttr(Attribute::MinSize); + // Save F so that we can add debug info later if we need to. CreatedIRFunctions.push_back(F); Index: llvm/trunk/test/CodeGen/AArch64/machine-outliner.ll =================================================================== --- llvm/trunk/test/CodeGen/AArch64/machine-outliner.ll +++ llvm/trunk/test/CodeGen/AArch64/machine-outliner.ll @@ -1,4 +1,5 @@ ; RUN: llc -verify-machineinstrs -enable-machine-outliner -mtriple=aarch64-apple-darwin < %s | FileCheck %s +; RUN: llc -verify-machineinstrs -enable-machine-outliner -mtriple=aarch64-apple-darwin -mcpu=cortex-a53 -enable-misched=false < %s | FileCheck %s ; RUN: llc -verify-machineinstrs -enable-machine-outliner -enable-linkonceodr-outlining -mtriple=aarch64-apple-darwin < %s | FileCheck %s -check-prefix=ODR define linkonce_odr void @fish() #0 { @@ -67,7 +68,8 @@ } ; ODR: [[OUTLINED]]: -; CHECK: [[OUTLINED]]: +; CHECK: .p2align 2 +; CHECK-NEXT: [[OUTLINED]]: ; CHECK-DAG: orr w8, wzr, #0x1 ; CHECK-NEXT: stp w8, wzr, [sp, #8] ; CHECK-NEXT: orr w8, wzr, #0x2