Analysis.h revision 44ab89eb376af838d1123293a79975aede501464
1//===- CodeGen/Analysis.h - CodeGen LLVM IR Analysis Utilities --*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9// 10// This file declares several CodeGen-specific LLVM IR analysis utilties. 11// 12//===----------------------------------------------------------------------===// 13 14#ifndef LLVM_CODEGEN_ANALYSIS_H 15#define LLVM_CODEGEN_ANALYSIS_H 16 17#include "llvm/Instructions.h" 18#include "llvm/InlineAsm.h" 19#include "llvm/ADT/SmallVector.h" 20#include "llvm/CodeGen/ValueTypes.h" 21#include "llvm/CodeGen/ISDOpcodes.h" 22#include "llvm/Support/CallSite.h" 23 24namespace llvm { 25 26class TargetLowering; 27class GlobalVariable; 28 29/// ComputeLinearIndex - Given an LLVM IR aggregate type and a sequence 30/// of insertvalue or extractvalue indices that identify a member, return 31/// the linearized index of the start of the member. 32/// 33unsigned ComputeLinearIndex(const Type *Ty, 34 const unsigned *Indices, 35 const unsigned *IndicesEnd, 36 unsigned CurIndex = 0); 37 38/// ComputeValueVTs - Given an LLVM IR type, compute a sequence of 39/// EVTs that represent all the individual underlying 40/// non-aggregate types that comprise it. 41/// 42/// If Offsets is non-null, it points to a vector to be filled in 43/// with the in-memory offsets of each of the individual values. 44/// 45void ComputeValueVTs(const TargetLowering &TLI, const Type *Ty, 46 SmallVectorImpl<EVT> &ValueVTs, 47 SmallVectorImpl<uint64_t> *Offsets = 0, 48 uint64_t StartingOffset = 0); 49 50/// ExtractTypeInfo - Returns the type info, possibly bitcast, encoded in V. 51GlobalVariable *ExtractTypeInfo(Value *V); 52 53/// hasInlineAsmMemConstraint - Return true if the inline asm instruction being 54/// processed uses a memory 'm' constraint. 55bool hasInlineAsmMemConstraint(InlineAsm::ConstraintInfoVector &CInfos, 56 const TargetLowering &TLI); 57 58/// getFCmpCondCode - Return the ISD condition code corresponding to 59/// the given LLVM IR floating-point condition code. This includes 60/// consideration of global floating-point math flags. 61/// 62ISD::CondCode getFCmpCondCode(FCmpInst::Predicate Pred); 63 64/// getICmpCondCode - Return the ISD condition code corresponding to 65/// the given LLVM IR integer condition code. 66/// 67ISD::CondCode getICmpCondCode(ICmpInst::Predicate Pred); 68 69/// Test if the given instruction is in a position to be optimized 70/// with a tail-call. This roughly means that it's in a block with 71/// a return and there's nothing that needs to be scheduled 72/// between it and the return. 73/// 74/// This function only tests target-independent requirements. 75bool isInTailCallPosition(ImmutableCallSite CS, Attributes CalleeRetAttr, 76 const TargetLowering &TLI); 77 78} // End llvm namespace 79 80#endif 81