//=== HexagonSplitConst32AndConst64.cpp - split CONST32/Const64 into HI/LO ===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // When the compiler is invoked with no small data, for instance, with the -G0 // command line option, then all CONST* opcodes should be broken down into // appropriate LO and HI instructions. This splitting is done by this pass. // The only reason this is not done in the DAG lowering itself is that there // is no simple way of getting the register allocator to allot the same hard // register to the result of LO and HI instructions. This pass is always // scheduled after register allocation. // //===----------------------------------------------------------------------===// #include "HexagonSubtarget.h" #include "HexagonTargetMachine.h" #include "HexagonTargetObjectFile.h" #include "llvm/CodeGen/MachineFunctionPass.h" #include "llvm/CodeGen/MachineInstrBuilder.h" #include "llvm/CodeGen/Passes.h" #include "llvm/CodeGen/TargetInstrInfo.h" #include "llvm/CodeGen/TargetRegisterInfo.h" usingnamespacellvm; #define DEBUG_TYPE … namespace llvm { FunctionPass *createHexagonSplitConst32AndConst64(); void initializeHexagonSplitConst32AndConst64Pass(PassRegistry&); } namespace { class HexagonSplitConst32AndConst64 : public MachineFunctionPass { … }; } char HexagonSplitConst32AndConst64::ID = …; INITIALIZE_PASS(…) bool HexagonSplitConst32AndConst64::runOnMachineFunction(MachineFunction &Fn) { … } //===----------------------------------------------------------------------===// // Public Constructor Functions //===----------------------------------------------------------------------===// FunctionPass *llvm::createHexagonSplitConst32AndConst64() { … }