1 //===------------------- X86CustomBehaviour.cpp -----------------*-C++ -* -===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
10 /// This file implements methods from the X86CustomBehaviour class.
12 //===----------------------------------------------------------------------===//
14 #include "X86CustomBehaviour.h"
15 #include "TargetInfo/X86TargetInfo.h"
16 #include "MCTargetDesc/X86BaseInfo.h"
17 #include "llvm/MC/TargetRegistry.h"
18 #include "llvm/Support/WithColor.h"
23 void X86InstrPostProcess::setMemBarriers(std::unique_ptr
<Instruction
> &Inst
,
25 switch (MCI
.getOpcode()) {
27 Inst
->setLoadBarrier(true);
28 Inst
->setStoreBarrier(true);
31 Inst
->setLoadBarrier(true);
34 Inst
->setStoreBarrier(true);
39 void X86InstrPostProcess::postProcessInstruction(
40 std::unique_ptr
<Instruction
> &Inst
, const MCInst
&MCI
) {
41 // Currently, we only modify certain instructions' IsALoadBarrier and
42 // IsAStoreBarrier flags.
43 setMemBarriers(Inst
, MCI
);
52 static InstrPostProcess
*createX86InstrPostProcess(const MCSubtargetInfo
&STI
,
53 const MCInstrInfo
&MCII
) {
54 return new X86InstrPostProcess(STI
, MCII
);
57 /// Extern function to initialize the targets for the X86 backend
59 extern "C" LLVM_EXTERNAL_VISIBILITY
void LLVMInitializeX86TargetMCA() {
60 TargetRegistry::RegisterInstrPostProcess(getTheX86_32Target(),
61 createX86InstrPostProcess
);
62 TargetRegistry::RegisterInstrPostProcess(getTheX86_64Target(),
63 createX86InstrPostProcess
);