diff --git a/llvm/lib/Target/X86/X86AsmPrinter.h b/llvm/lib/Target/X86/X86AsmPrinter.h --- a/llvm/lib/Target/X86/X86AsmPrinter.h +++ b/llvm/lib/Target/X86/X86AsmPrinter.h @@ -31,6 +31,7 @@ std::unique_ptr CodeEmitter; bool EmitFPOData = false; bool ShouldEmitWeakSwiftAsyncExtendedFramePointerFlags = false; + bool IndCSPrefix = false; // This utility class tracks the length of a stackmap instruction's 'shadow'. // It is used by the X86AsmPrinter to ensure that the stackmap shadow diff --git a/llvm/lib/Target/X86/X86AsmPrinter.cpp b/llvm/lib/Target/X86/X86AsmPrinter.cpp --- a/llvm/lib/Target/X86/X86AsmPrinter.cpp +++ b/llvm/lib/Target/X86/X86AsmPrinter.cpp @@ -66,6 +66,9 @@ EmitFPOData = Subtarget->isTargetWin32() && MF.getMMI().getModule()->getCodeViewFlag(); + IndCSPrefix = + MF.getMMI().getModule()->getModuleFlag("indirect_branch_cs_prefix"); + SetupMachineFunction(MF); if (Subtarget->isTargetCOFF()) { @@ -86,6 +89,8 @@ EmitFPOData = false; + IndCSPrefix = false; + // We didn't modify anything. return false; } diff --git a/llvm/lib/Target/X86/X86MCInstLower.cpp b/llvm/lib/Target/X86/X86MCInstLower.cpp --- a/llvm/lib/Target/X86/X86MCInstLower.cpp +++ b/llvm/lib/Target/X86/X86MCInstLower.cpp @@ -2449,9 +2449,6 @@ if (OutStreamer->isVerboseAsm()) addConstantComments(MI, *OutStreamer); - bool IndCS = - MF->getMMI().getModule()->getModuleFlag("indirect_branch_cs_prefix"); - switch (MI->getOpcode()) { case TargetOpcode::DBG_VALUE: llvm_unreachable("Should be handled target independently"); @@ -2501,7 +2498,7 @@ } case X86::TAILJMPd64: - if (IndCS && MI->hasRegisterImplicitUseOperand(X86::R11)) + if (IndCSPrefix && MI->hasRegisterImplicitUseOperand(X86::R11)) EmitAndCountInstruction(MCInstBuilder(X86::CS_PREFIX)); LLVM_FALLTHROUGH; case X86::TAILJMPr: @@ -2684,7 +2681,7 @@ .addReg(X86::NoRegister)); return; case X86::CALL64pcrel32: - if (IndCS && MI->hasRegisterImplicitUseOperand(X86::R11)) + if (IndCSPrefix && MI->hasRegisterImplicitUseOperand(X86::R11)) EmitAndCountInstruction(MCInstBuilder(X86::CS_PREFIX)); break; }