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