[X86] Print %st(0) as %st to match what gcc inline asm uses as the clobber name to...
authorCraig Topper <craig.topper@intel.com>
Sun, 3 Feb 2019 07:53:39 +0000 (07:53 +0000)
committerCraig Topper <craig.topper@intel.com>
Sun, 3 Feb 2019 07:53:39 +0000 (07:53 +0000)
commit5a570dd4374daaa1ea3110c507d852c68581c4c4
treefa97cdca480d5f7fdd3065bf6ae6a43d6c12874f
parent950ca192f6f606beb44dcbb0b9f203eed69dadcb
[X86] Print %st(0) as %st to match what gcc inline asm uses as the clobber name to make MS inline asm work correctly

Summary:
When calculating clobbers for MS style inline assembly we fail if the asm clobbers stack top because we print st(0) and try to pass it through the gcc register name check. This was found with when I attempted to make a emms/femms clobber all ST registers. If you use emms/femms in MS inline asm we would try to use st(0) as the clobber name but clang would think that wasn't a valid clobber name.

This also matches what objdump disassembly prints. It's also what is printed by gcc -S.

Reviewers: RKSimon, rnk, efriedma, spatel, andreadb, lebedev.ri

Reviewed By: rnk

Subscribers: eraman, gbedwell, lebedev.ri, llvm-commits

Differential Revision: https://reviews.llvm.org/D57621

llvm-svn: 352985
42 files changed:
llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp
llvm/lib/Target/X86/X86InstrFPStack.td
llvm/lib/Target/X86/X86InstrInfo.td
llvm/lib/Target/X86/X86RegisterInfo.td
llvm/test/CodeGen/X86/2007-09-27-LDIntrinsics.ll
llvm/test/CodeGen/X86/avx512-regcall-NoMask.ll
llvm/test/CodeGen/X86/fcmove.ll
llvm/test/CodeGen/X86/finite-libcalls.ll
llvm/test/CodeGen/X86/fmf-flags.ll
llvm/test/CodeGen/X86/fp-cvt.ll
llvm/test/CodeGen/X86/fp128-cast.ll
llvm/test/CodeGen/X86/inline-asm-fpstack.ll
llvm/test/CodeGen/X86/pr13577.ll
llvm/test/CodeGen/X86/pr33349.ll
llvm/test/CodeGen/X86/pr34080.ll
llvm/test/CodeGen/X86/pr34177.ll
llvm/test/CodeGen/X86/scalar-fp-to-i64.ll
llvm/test/CodeGen/X86/select.ll
llvm/test/CodeGen/X86/sibcall.ll
llvm/test/CodeGen/X86/x87-schedule.ll
llvm/test/MC/Disassembler/X86/fp-stack.txt
llvm/test/MC/Disassembler/X86/x86-16.txt
llvm/test/MC/X86/PPRO-32.s
llvm/test/MC/X86/PPRO-64.s
llvm/test/MC/X86/X87-32.s
llvm/test/MC/X86/X87-64.s
llvm/test/MC/X86/intel-syntax.s
llvm/test/MC/X86/x86-16.s
llvm/test/MC/X86/x86-32-coverage.s
llvm/test/MC/X86/x86-32.s
llvm/test/MC/X86/x86-64.s
llvm/test/tools/llvm-mca/X86/Atom/resources-x87.s
llvm/test/tools/llvm-mca/X86/BdVer2/resources-x87.s
llvm/test/tools/llvm-mca/X86/Broadwell/resources-x87.s
llvm/test/tools/llvm-mca/X86/BtVer2/resources-x87.s
llvm/test/tools/llvm-mca/X86/Generic/resources-x87.s
llvm/test/tools/llvm-mca/X86/Haswell/resources-x87.s
llvm/test/tools/llvm-mca/X86/SLM/resources-x87.s
llvm/test/tools/llvm-mca/X86/SandyBridge/resources-x87.s
llvm/test/tools/llvm-mca/X86/SkylakeClient/resources-x87.s
llvm/test/tools/llvm-mca/X86/SkylakeServer/resources-x87.s
llvm/test/tools/llvm-mca/X86/Znver1/resources-x87.s