[X86] Merge adjacent stack adjustments in eliminateCallFramePseudoInstr (PR27140)
authorHans Wennborg <hans@hanshq.net>
Thu, 31 Mar 2016 19:26:24 +0000 (19:26 +0000)
committerHans Wennborg <hans@hanshq.net>
Thu, 31 Mar 2016 19:26:24 +0000 (19:26 +0000)
commite97fb414e8ec2dd69c0f96d748035569c40b625f
tree558e3d30062b95f4965308510a4d6f5dfc42f52d
parent8c824a07ae9196846fbc34cbb4be2f6cfa48516a
[X86] Merge adjacent stack adjustments in eliminateCallFramePseudoInstr (PR27140)

For code such as:

  void f(int, int);
  void g() {
      f(1, 2);
  }

compiled for 32-bit X86 Linux, Clang would previously generate:

  subl    $12, %esp
  subl    $8, %esp
  pushl   $2
  pushl   $1
  calll   f
  addl    $16, %esp
  addl    $12, %esp
  retl

This patch fixes that by merging adjacent stack adjustments in
eliminateCallFramePseudoInstr().

Differential Revision: http://reviews.llvm.org/D18627

llvm-svn: 265039
llvm/lib/Target/X86/X86FrameLowering.cpp
llvm/test/CodeGen/X86/2006-05-02-InstrSched1.ll
llvm/test/CodeGen/X86/fold-push.ll
llvm/test/CodeGen/X86/force-align-stack-alloca.ll
llvm/test/CodeGen/X86/localescape.ll
llvm/test/CodeGen/X86/memset-2.ll
llvm/test/CodeGen/X86/movtopush.ll
llvm/test/CodeGen/X86/push-cfi-debug.ll
llvm/test/CodeGen/X86/push-cfi.ll