[llvm] r278053 - Revert "[X86] Support the "ms-hotpatch" attribute."
Charles Davis via llvm-commits
llvm-commits at lists.llvm.org
Mon Aug 8 14:20:15 PDT 2016
Author: cdavis
Date: Mon Aug 8 16:20:15 2016
New Revision: 278053
URL: http://llvm.org/viewvc/llvm-project?rev=278053&view=rev
Log:
Revert "[X86] Support the "ms-hotpatch" attribute."
This reverts commit r278048. Something changed between the last time I
built this--it takes awhile on my ridiculously slow and ancient
computer--and now that broke this.
Removed:
llvm/trunk/test/CodeGen/X86/ms-hotpatch-attr.ll
Modified:
llvm/trunk/docs/LangRef.rst
llvm/trunk/include/llvm/Analysis/TargetTransformInfo.h
llvm/trunk/include/llvm/Analysis/TargetTransformInfoImpl.h
llvm/trunk/lib/Analysis/TargetTransformInfo.cpp
llvm/trunk/lib/CodeGen/PatchableFunction.cpp
llvm/trunk/lib/Target/X86/X86AsmPrinter.cpp
llvm/trunk/lib/Target/X86/X86AsmPrinter.h
llvm/trunk/lib/Target/X86/X86FrameLowering.cpp
llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
llvm/trunk/lib/Target/X86/X86TargetTransformInfo.cpp
llvm/trunk/lib/Target/X86/X86TargetTransformInfo.h
Modified: llvm/trunk/docs/LangRef.rst
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/LangRef.rst?rev=278053&r1=278052&r2=278053&view=diff
==============================================================================
--- llvm/trunk/docs/LangRef.rst (original)
+++ llvm/trunk/docs/LangRef.rst Mon Aug 8 16:20:15 2016
@@ -1448,7 +1448,7 @@ example:
generated for this function needs to follow certain conventions that
make it possible for a runtime function to patch over it later.
The exact effect of this attribute depends on its string value,
- for which there currently are two legal possiblities:
+ for which there currently is one legal possibility:
* ``"prologue-short-redirect"`` - This style of patchable
function is intended to support patching a function prologue to
@@ -1464,24 +1464,6 @@ example:
``"prologue-short-redirect"`` is currently only supported on
x86-64.
- * ``"ms-hotpatch"`` - This style of patchable function is similar to
- ``"prologue-short-redirect"``, but it also imposes several additional
- guarantees to support the style of hotpatching used on Windows. On
- 32-bit x86, the first instruction will be a ``mov %edi, %edi``
- instruction; this is frequently used as a magic value indicating a
- hotpatchable function. On other architectures, however, the first
- instruction can be anything allowed in a Windows-style prologue;
- this is because all functions on the non-i386 architectures Windows
- supports are assumed to be hotpatchable. Additionally, when not
- targeting a Visual C++-style toolchain, patch space will be provided
- prior to the function's entry point of an architecturally specific
- size. These sizes are compatible with GCC: on 32-bit x86, the patch
- space is 64 bytes long; on x86-64, it is 128 bytes long. The patch
- space is not provided for MSVC toolchains because the
- `/FUNCTIONPADMIN <https://msdn.microsoft.com/en-us/library/ms173524.aspx>`_
- option, which provides this space, is expected to be used there.
-
- ``"ms-hotpatch"`` is currently only supported on x86 and x86-64.
This attribute by itself does not imply restrictions on
inter-procedural optimizations. All of the semantic effects the
Modified: llvm/trunk/include/llvm/Analysis/TargetTransformInfo.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/TargetTransformInfo.h?rev=278053&r1=278052&r2=278053&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Analysis/TargetTransformInfo.h (original)
+++ llvm/trunk/include/llvm/Analysis/TargetTransformInfo.h Mon Aug 8 16:20:15 2016
@@ -23,8 +23,6 @@
#define LLVM_ANALYSIS_TARGETTRANSFORMINFO_H
#include "llvm/ADT/Optional.h"
-#include "llvm/ADT/StringRef.h"
-#include "llvm/CodeGen/MachineBasicBlock.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/Intrinsics.h"
#include "llvm/IR/Operator.h"
@@ -297,18 +295,6 @@ public:
/// target-independent defaults.
void getUnrollingPreferences(Loop *L, UnrollingPreferences &UP) const;
- /// \brief Emit a patchable operation in the given basic block at the
- /// given insertion point.
- ///
- /// Most of the time, this will be a straight-up \c TargetOpcode::PATCHABLE_OP
- /// instruction, which will be lowered by the target to a no-op that can
- /// be safely replaced with a short jump. However, some targets under certain
- /// conditions can have peculiar requirements for this instruction; these
- /// targets can provide their own implementation of this to emit the correct
- /// instruction.
- void emitPatchableOp(StringRef PatchType, MachineBasicBlock &MBB,
- MachineBasicBlock::iterator &MBBI) const;
-
/// @}
/// \name Scalar Target Information
@@ -661,9 +647,6 @@ public:
virtual bool isSourceOfDivergence(const Value *V) = 0;
virtual bool isLoweredToCall(const Function *F) = 0;
virtual void getUnrollingPreferences(Loop *L, UnrollingPreferences &UP) = 0;
- virtual void emitPatchableOp(StringRef Kind,
- MachineBasicBlock &MBB,
- MachineBasicBlock::iterator &MBBI) const = 0;
virtual bool isLegalAddImmediate(int64_t Imm) = 0;
virtual bool isLegalICmpImmediate(int64_t Imm) = 0;
virtual bool isLegalAddressingMode(Type *Ty, GlobalValue *BaseGV,
@@ -809,10 +792,6 @@ public:
void getUnrollingPreferences(Loop *L, UnrollingPreferences &UP) override {
return Impl.getUnrollingPreferences(L, UP);
}
- void emitPatchableOp(StringRef Kind, MachineBasicBlock &MBB,
- MachineBasicBlock::iterator &MBBI) const override {
- return Impl.emitPatchableOp(Kind, MBB, MBBI);
- }
bool isLegalAddImmediate(int64_t Imm) override {
return Impl.isLegalAddImmediate(Imm);
}
Modified: llvm/trunk/include/llvm/Analysis/TargetTransformInfoImpl.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/TargetTransformInfoImpl.h?rev=278053&r1=278052&r2=278053&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Analysis/TargetTransformInfoImpl.h (original)
+++ llvm/trunk/include/llvm/Analysis/TargetTransformInfoImpl.h Mon Aug 8 16:20:15 2016
@@ -23,10 +23,6 @@
#include "llvm/IR/Operator.h"
#include "llvm/IR/Type.h"
#include "llvm/Analysis/VectorUtils.h"
-#include "llvm/CodeGen/MachineBasicBlock.h"
-#include "llvm/CodeGen/MachineInstrBuilder.h"
-#include "llvm/Target/TargetInstrInfo.h"
-#include "llvm/Target/TargetSubtargetInfo.h"
namespace llvm {
@@ -210,20 +206,6 @@ public:
void getUnrollingPreferences(Loop *, TTI::UnrollingPreferences &) {}
- void emitPatchableOp(StringRef, MachineBasicBlock &MBB,
- MachineBasicBlock::iterator &MBBI) const {
- auto *TII = MBB.getParent()->getSubtarget().getInstrInfo();
- auto MIB = BuildMI(MBB, MBBI, MBBI->getDebugLoc(),
- TII->get(TargetOpcode::PATCHABLE_OP))
- .addImm(2)
- .addImm(MBBI->getOpcode());
-
- for (auto &MO : MBBI->operands())
- MIB.addOperand(MO);
-
- MBBI->eraseFromParent();
- }
-
bool isLegalAddImmediate(int64_t Imm) { return false; }
bool isLegalICmpImmediate(int64_t Imm) { return false; }
Modified: llvm/trunk/lib/Analysis/TargetTransformInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/TargetTransformInfo.cpp?rev=278053&r1=278052&r2=278053&view=diff
==============================================================================
--- llvm/trunk/lib/Analysis/TargetTransformInfo.cpp (original)
+++ llvm/trunk/lib/Analysis/TargetTransformInfo.cpp Mon Aug 8 16:20:15 2016
@@ -106,12 +106,6 @@ void TargetTransformInfo::getUnrollingPr
return TTIImpl->getUnrollingPreferences(L, UP);
}
-void TargetTransformInfo::emitPatchableOp(
- StringRef PatchType, MachineBasicBlock &MBB,
- MachineBasicBlock::iterator &MBBI) const {
- return TTIImpl->emitPatchableOp(PatchType, MBB, MBBI);
-}
-
bool TargetTransformInfo::isLegalAddImmediate(int64_t Imm) const {
return TTIImpl->isLegalAddImmediate(Imm);
}
Modified: llvm/trunk/lib/CodeGen/PatchableFunction.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/PatchableFunction.cpp?rev=278053&r1=278052&r2=278053&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/PatchableFunction.cpp (original)
+++ llvm/trunk/lib/CodeGen/PatchableFunction.cpp Mon Aug 8 16:20:15 2016
@@ -13,11 +13,12 @@
//===----------------------------------------------------------------------===//
#include "llvm/CodeGen/Passes.h"
-#include "llvm/Analysis/TargetTransformInfo.h"
-#include "llvm/CodeGen/Analysis.h"
#include "llvm/CodeGen/MachineFunction.h"
#include "llvm/CodeGen/MachineFunctionPass.h"
+#include "llvm/CodeGen/MachineInstrBuilder.h"
#include "llvm/Target/TargetFrameLowering.h"
+#include "llvm/Target/TargetInstrInfo.h"
+#include "llvm/Target/TargetSubtargetInfo.h"
using namespace llvm;
@@ -28,9 +29,8 @@ struct PatchableFunction : public Machin
initializePatchableFunctionPass(*PassRegistry::getPassRegistry());
}
- void getAnalysisUsage(AnalysisUsage &AU) const override;
bool runOnMachineFunction(MachineFunction &F) override;
- MachineFunctionProperties getRequiredProperties() const override {
+ MachineFunctionProperties getRequiredProperties() const override {
return MachineFunctionProperties().set(
MachineFunctionProperties::Property::AllVRegsAllocated);
}
@@ -53,29 +53,31 @@ static bool doesNotGeneratecode(const Ma
}
}
-void PatchableFunction::getAnalysisUsage(AnalysisUsage &AU) const {
- MachineFunctionPass::getAnalysisUsage(AU);
- AU.addRequired<TargetTransformInfoWrapperPass>();
-}
-
bool PatchableFunction::runOnMachineFunction(MachineFunction &MF) {
if (!MF.getFunction()->hasFnAttribute("patchable-function"))
return false;
+#ifndef NDEBUG
Attribute PatchAttr = MF.getFunction()->getFnAttribute("patchable-function");
StringRef PatchType = PatchAttr.getValueAsString();
- assert((PatchType == "prologue-short-redirect" ||
- PatchType == "ms-hotpatch") && "Only possibilities today!");
+ assert(PatchType == "prologue-short-redirect" && "Only possibility today!");
+#endif
auto &FirstMBB = *MF.begin();
MachineBasicBlock::iterator FirstActualI = FirstMBB.begin();
for (; doesNotGeneratecode(*FirstActualI); ++FirstActualI)
assert(FirstActualI != FirstMBB.end());
- const TargetTransformInfo &TTI =
- getAnalysis<TargetTransformInfoWrapperPass>().getTTI(*MF.getFunction());
- TTI.emitPatchableOp(PatchType, FirstMBB, FirstActualI);
+ auto *TII = MF.getSubtarget().getInstrInfo();
+ auto MIB = BuildMI(FirstMBB, FirstActualI, FirstActualI->getDebugLoc(),
+ TII->get(TargetOpcode::PATCHABLE_OP))
+ .addImm(2)
+ .addImm(FirstActualI->getOpcode());
+
+ for (auto &MO : FirstActualI->operands())
+ MIB.addOperand(MO);
+ FirstActualI->eraseFromParent();
MF.ensureAlignment(4);
return true;
}
Modified: llvm/trunk/lib/Target/X86/X86AsmPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86AsmPrinter.cpp?rev=278053&r1=278052&r2=278053&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86AsmPrinter.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86AsmPrinter.cpp Mon Aug 8 16:20:15 2016
@@ -76,31 +76,6 @@ bool X86AsmPrinter::runOnMachineFunction
return false;
}
-void X86AsmPrinter::EmitConstantPool() {
- if (MF) {
- // If an MS hotpatch function, we need to ensure 64 (32-bit) or 128 (64-bit)
- // bytes of padding precede the label. This is the scratch space used
- // by the hotpatching mechanism to insert the patch code. The movl %edi,
- // %edi instruction emitted as the very first instruction of a hotpatch
- // function is usually overwritten with a short jump instruction when the
- // patch is installed, so it will jump directly into this space. (But
- // don't add the space when targeting MSVC. There, the /FUNCTIONPADMIN
- // option to link.exe is expected to be used.)
- const Function *Fn = MF->getFunction();
- if (!Subtarget->isTargetKnownWindowsMSVC() &&
- Fn->hasFnAttribute("patchable-function") &&
- Fn->getFnAttribute("patchable-function").getValueAsString() ==
- "ms-hotpatch") {
- // Emit INT3 instructions instead of NOPs. If a patch runs off the end,
- // best to let the patcher know with a crash/debug break than to silently
- // continue, only to run into the jump back into the patch.
- OutStreamer->emitFill(Subtarget->is64Bit() ? 128 : 64, 0xcc);
- }
- }
-
- AsmPrinter::EmitConstantPool();
-}
-
/// printSymbolOperand - Print a raw symbol reference operand. This handles
/// jump tables, constant pools, global address and external symbols, all of
/// which print to a label with various suffixes for relocation types etc.
Modified: llvm/trunk/lib/Target/X86/X86AsmPrinter.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86AsmPrinter.h?rev=278053&r1=278052&r2=278053&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86AsmPrinter.h (original)
+++ llvm/trunk/lib/Target/X86/X86AsmPrinter.h Mon Aug 8 16:20:15 2016
@@ -140,8 +140,6 @@ public:
SMShadowTracker.emitShadowPadding(*OutStreamer, getSubtargetInfo());
}
- void EmitConstantPool() override;
-
bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
unsigned AsmVariant, const char *ExtraCode,
raw_ostream &OS) override;
Modified: llvm/trunk/lib/Target/X86/X86FrameLowering.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86FrameLowering.cpp?rev=278053&r1=278052&r2=278053&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86FrameLowering.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86FrameLowering.cpp Mon Aug 8 16:20:15 2016
@@ -928,10 +928,6 @@ void X86FrameLowering::emitPrologue(Mach
bool NeedsWinCFI = IsWin64Prologue && Fn->needsUnwindTableEntry();
bool NeedsDwarfCFI =
!IsWin64Prologue && (MMI.hasDebugInfo() || Fn->needsUnwindTableEntry());
- bool IsMSHotpatch =
- Fn->hasFnAttribute("patchable-function") &&
- Fn->getFnAttribute("patchable-function").getValueAsString() ==
- "ms-hotpatch";
unsigned FramePtr = TRI->getFrameRegister(MF);
const unsigned MachineFramePtr =
STI.isTarget64BitILP32()
@@ -1073,9 +1069,7 @@ void X86FrameLowering::emitPrologue(Mach
if (!IsWin64Prologue && !IsFunclet) {
// Update EBP with the new base value.
BuildMI(MBB, MBBI, DL,
- TII.get(IsMSHotpatch ?
- (Uses64BitFramePtr ? X86::MOV64rr_REV : X86::MOV32rr_REV):
- (Uses64BitFramePtr ? X86::MOV64rr : X86::MOV32rr)),
+ TII.get(Uses64BitFramePtr ? X86::MOV64rr : X86::MOV32rr),
FramePtr)
.addReg(StackPtr)
.setMIFlag(MachineInstr::FrameSetup);
Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.cpp?rev=278053&r1=278052&r2=278053&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Mon Aug 8 16:20:15 2016
@@ -2576,13 +2576,10 @@ SDValue X86TargetLowering::LowerFormalAr
X86MachineFunctionInfo *FuncInfo = MF.getInfo<X86MachineFunctionInfo>();
const TargetFrameLowering &TFI = *Subtarget.getFrameLowering();
- const Function* Fn = MF.getFunction();
- if ((Fn->hasExternalLinkage() &&
- Subtarget.isTargetCygMing() &&
- Fn->getName() == "main") ||
- (!Subtarget.is64Bit() && Fn->hasFnAttribute("patchable-function") &&
- Fn->getFnAttribute("patchable-function").getValueAsString() ==
- "ms-hotpatch"))
+ const Function *Fn = MF.getFunction();
+ if (Fn->hasExternalLinkage() &&
+ Subtarget.isTargetCygMing() &&
+ Fn->getName() == "main")
FuncInfo->setForceFramePointer(true);
MachineFrameInfo &MFI = MF.getFrameInfo();
Modified: llvm/trunk/lib/Target/X86/X86TargetTransformInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86TargetTransformInfo.cpp?rev=278053&r1=278052&r2=278053&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86TargetTransformInfo.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86TargetTransformInfo.cpp Mon Aug 8 16:20:15 2016
@@ -1681,18 +1681,3 @@ bool X86TTIImpl::areInlineCompatible(con
// correct.
return (CallerBits & CalleeBits) == CalleeBits;
}
-
-void X86TTIImpl::emitPatchableOp(StringRef PatchType,
- MachineBasicBlock &MBB,
- MachineBasicBlock::iterator &MBBI) const {
- if (PatchType != "ms-hotpatch" || !ST->is32Bit()) {
- BaseT::emitPatchableOp(PatchType, MBB, MBBI);
- return;
- }
-
- auto &TII = *MBB.getParent()->getSubtarget().getInstrInfo();
- BuildMI(MBB, MBBI, MBBI->getDebugLoc(),
- TII.get(X86::MOV32rr_REV), X86::EDI)
- .addReg(X86::EDI)
- .setMIFlag(MachineInstr::FrameSetup);
-}
Modified: llvm/trunk/lib/Target/X86/X86TargetTransformInfo.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86TargetTransformInfo.h?rev=278053&r1=278052&r2=278053&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86TargetTransformInfo.h (original)
+++ llvm/trunk/lib/Target/X86/X86TargetTransformInfo.h Mon Aug 8 16:20:15 2016
@@ -50,13 +50,6 @@ public:
: BaseT(std::move(static_cast<BaseT &>(Arg))), ST(std::move(Arg.ST)),
TLI(std::move(Arg.TLI)) {}
- /// \name Generic TTI Implementations
- /// @{
- void emitPatchableOp(StringRef PatchType, MachineBasicBlock &MBB,
- MachineBasicBlock::iterator &MBBI) const;
-
- /// @}
-
/// \name Scalar TTI Implementations
/// @{
TTI::PopcntSupportKind getPopcntSupport(unsigned TyWidth);
Removed: llvm/trunk/test/CodeGen/X86/ms-hotpatch-attr.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/ms-hotpatch-attr.ll?rev=278052&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/X86/ms-hotpatch-attr.ll (original)
+++ llvm/trunk/test/CodeGen/X86/ms-hotpatch-attr.ll (removed)
@@ -1,27 +0,0 @@
-; RUN: llc < %s -march=x86 -filetype=asm | FileCheck -check-prefix=CHECK-32 %s
-; RUN: llc < %s -march=x86-64 -filetype=asm | FileCheck -check-prefix=CHECK-64 %s
-; RUN: llc < %s -mtriple=i386-windows-msvc -filetype=asm | FileCheck -check-prefix=MSVC-32 %s
-; RUN: llc < %s -mtriple=x86_64-windows-msvc -filetype=asm | FileCheck -check-prefix=MSVC-64 %s
-
-; CHECK-32: .space 64,204
-; CHECK-32: .p2align 4, 0x90
-; CHECK-32-LABEL: foo:
-; CHECK-32: movl %edi, %edi
-; CHECK-32-NEXT: pushl %ebp
-; CHECK-32-NEXT: movl %esp, %ebp
-; CHECK-64: .space 128,204
-; CHECK-64: .p2align 4, 0x90
-; CHECK-64-LABEL: foo:
-; CHECK-64: xchgw %ax, %ax
-; MSVC-32-NOT: .space 64,204
-; MSVC-32-LABEL: _foo:
-; MSVC-32: movl %edi, %edi
-; MSVC-32-NEXT: pushl %ebp
-; MSVC-32-NEXT: movl %esp, %ebp
-; MSVC-64-NOT: .space 128,204
-; MSVC-64-LABEL: foo:
-; MSVC-64: xchgw %ax, %ax
-define void @foo() nounwind "patchable-function"="ms-hotpatch" {
-entry:
- ret void
-}
More information about the llvm-commits
mailing list