//===-- LegalizeDAG.cpp - Implement SelectionDAG::Legalize ----------------===//// // The LLVM Compiler Infrastructure//// This file was developed by the LLVM research group and is distributed under// the University of Illinois Open Source License. See LICENSE.TXT for details.// //===----------------------------------------------------------------------===////// This file implements the SelectionDAG::Legalize method.////===----------------------------------------------------------------------===//#include"llvm/CodeGen/SelectionDAG.h"#include"llvm/CodeGen/MachineConstantPool.h"#include"llvm/CodeGen/MachineFunction.h"#include"llvm/CodeGen/MachineFrameInfo.h"#include"llvm/Target/TargetLowering.h"#include"llvm/Target/TargetData.h"#include"llvm/Target/TargetOptions.h"#include"llvm/Constants.h"#include<iostream>usingnamespacellvm;//===----------------------------------------------------------------------===///// SelectionDAGLegalize - This takes an arbitrary SelectionDAG as input and/// hacks on it until the target machine can handle it. This involves/// eliminating value sizes the machine cannot handle (promoting small sizes to/// large sizes or splitting up large values into small values) as well as/// eliminating operations the machine cannot handle.////// This code also does a small amount of optimization and recognition of idioms/// as part of its processing. For example, if a target does not support a/// 'setcc' instruction efficiently, but does support 'brcc' instruction, this/// will attempt merge setcc and brc instructions into brcc's.///namespace{classSelectionDAGLegalize{TargetLowering&TLI;SelectionDAG&DAG;/// LegalizeAction - This enum indicates what action we should take for each/// value type