X86.h revision cd81d94322a39503e4a3e87b6ee03d4fcb3465fb
16ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org//===-- X86.h - Top-level interface for X86 representation ------*- C++ -*-===//
26ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org//
36ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org//                     The LLVM Compiler Infrastructure
46ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org//
56ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org// This file is distributed under the University of Illinois Open Source
66ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org// License. See LICENSE.TXT for details.
76ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org//
86ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org//===----------------------------------------------------------------------===//
95961d8555973f660a94b77ffd7b9495291fbc874mallinath@google.com//
105961d8555973f660a94b77ffd7b9495291fbc874mallinath@google.com// This file contains the entry points for global functions defined in the x86
115961d8555973f660a94b77ffd7b9495291fbc874mallinath@google.com// target library, as used by the LLVM JIT.
125961d8555973f660a94b77ffd7b9495291fbc874mallinath@google.com//
135961d8555973f660a94b77ffd7b9495291fbc874mallinath@google.com//===----------------------------------------------------------------------===//
145961d8555973f660a94b77ffd7b9495291fbc874mallinath@google.com
155961d8555973f660a94b77ffd7b9495291fbc874mallinath@google.com#ifndef TARGET_X86_H
165961d8555973f660a94b77ffd7b9495291fbc874mallinath@google.com#define TARGET_X86_H
175961d8555973f660a94b77ffd7b9495291fbc874mallinath@google.com
185961d8555973f660a94b77ffd7b9495291fbc874mallinath@google.com#include "llvm/Support/CodeGen.h"
195961d8555973f660a94b77ffd7b9495291fbc874mallinath@google.com
205961d8555973f660a94b77ffd7b9495291fbc874mallinath@google.comnamespace llvm {
215961d8555973f660a94b77ffd7b9495291fbc874mallinath@google.com
225961d8555973f660a94b77ffd7b9495291fbc874mallinath@google.comclass FunctionPass;
235961d8555973f660a94b77ffd7b9495291fbc874mallinath@google.comclass ImmutablePass;
245961d8555973f660a94b77ffd7b9495291fbc874mallinath@google.comclass JITCodeEmitter;
255961d8555973f660a94b77ffd7b9495291fbc874mallinath@google.comclass X86TargetMachine;
265961d8555973f660a94b77ffd7b9495291fbc874mallinath@google.com
275961d8555973f660a94b77ffd7b9495291fbc874mallinath@google.com/// createX86AtomicExpandPass - This pass expands atomic operations that cannot
285961d8555973f660a94b77ffd7b9495291fbc874mallinath@google.com/// be handled natively in terms of a loop using cmpxchg.
295961d8555973f660a94b77ffd7b9495291fbc874mallinath@google.comFunctionPass *createX86AtomicExpandPass(const X86TargetMachine *TM);
305961d8555973f660a94b77ffd7b9495291fbc874mallinath@google.com
315961d8555973f660a94b77ffd7b9495291fbc874mallinath@google.com/// createX86ISelDag - This pass converts a legalized DAG into a
325961d8555973f660a94b77ffd7b9495291fbc874mallinath@google.com/// X86-specific DAG, ready for instruction scheduling.
335961d8555973f660a94b77ffd7b9495291fbc874mallinath@google.com///
345961d8555973f660a94b77ffd7b9495291fbc874mallinath@google.comFunctionPass *createX86ISelDag(X86TargetMachine &TM,
355961d8555973f660a94b77ffd7b9495291fbc874mallinath@google.com                               CodeGenOpt::Level OptLevel);
365961d8555973f660a94b77ffd7b9495291fbc874mallinath@google.com
375961d8555973f660a94b77ffd7b9495291fbc874mallinath@google.com/// createX86GlobalBaseRegPass - This pass initializes a global base
385961d8555973f660a94b77ffd7b9495291fbc874mallinath@google.com/// register for PIC on x86-32.
395961d8555973f660a94b77ffd7b9495291fbc874mallinath@google.comFunctionPass* createX86GlobalBaseRegPass();
405961d8555973f660a94b77ffd7b9495291fbc874mallinath@google.com
415961d8555973f660a94b77ffd7b9495291fbc874mallinath@google.com/// createCleanupLocalDynamicTLSPass() - This pass combines multiple accesses
425961d8555973f660a94b77ffd7b9495291fbc874mallinath@google.com/// to local-dynamic TLS variables so that the TLS base address for the module
435961d8555973f660a94b77ffd7b9495291fbc874mallinath@google.com/// is only fetched once per execution path through the function.
446ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgFunctionPass *createCleanupLocalDynamicTLSPass();
456ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
466ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org/// createX86FloatingPointStackifierPass - This function returns a pass which
476ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org/// converts floating point register references and pseudo instructions into
486ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org/// floating point stack references and physical instructions.
496ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org///
506ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgFunctionPass *createX86FloatingPointStackifierPass();
516ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
526ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org/// createX86IssueVZeroUpperPass - This pass inserts AVX vzeroupper instructions
536ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org/// before each call to avoid transition penalty between functions encoded with
546ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org/// AVX and SSE.
556ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgFunctionPass *createX86IssueVZeroUpperPass();
566ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
576ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org/// createX86CodeEmitterPass - Return a pass that emits the collected X86 code
586ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org/// to the specified MCE object.
596ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgFunctionPass *createX86JITCodeEmitterPass(X86TargetMachine &TM,
606ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org                                          JITCodeEmitter &JCE);
616ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
626ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org/// createX86EmitCodeToMemory - Returns a pass that converts a register
636ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org/// allocated function into raw machine code in a dynamically
646ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org/// allocated chunk of memory.
656ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org///
666ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgFunctionPass *createEmitX86CodeToMemory();
676ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
686ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org/// \brief Creates an X86-specific Target Transformation Info pass.
696ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgImmutablePass *createX86TargetTransformInfoPass(const X86TargetMachine *TM);
706ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
716ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org/// createX86PadShortFunctions - Return a pass that pads short functions
726ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org/// with NOOPs. This will prevent a stall when returning on the Atom.
736ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgFunctionPass *createX86PadShortFunctions();
746ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org/// createX86FixupLEAs - Return a a pass that selectively replaces
756ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org/// certain instructions (like add, sub, inc, dec, some shifts,
766ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org/// and some multiplies) by equivalent LEA instructions, in order
776ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org/// to eliminate execution delays in some Atom processors.
786ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgFunctionPass *createX86FixupLEAs();
796ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
806ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org} // End llvm namespace
816ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
826ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#endif
836ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org