`MachineMemOperand` pointers attached to `MachineSDNodes` and instead have the `SelectionDAG` fully manage the memory for this array. Prior to this change, the memory management was deeply confusing here -- The way the MI was built relied on the `SelectionDAG` allocating memory for these arrays of pointers using the `MachineFunction`'s allocator so that the raw pointer to the array could be blindly copied into an eventual `MachineInstr`. This creates a hard coupling between how `MachineInstr`s allocate their array of `MachineMemOperand` pointers and how the `MachineSDNode` does. This change is motivated in large part by a change I am making to how `MachineFunction` allocates these pointers, but it seems like a layering improvement as well. This would run the risk of increasing allocations overall, but I've implemented an optimization that should avoid that by storing a single `MachineMemOperand` pointer directly instead of allocating anything. This is expected to be a net win because the vast majority of uses of these only need a single pointer. As a side-effect, this makes the API for updating a `MachineSDNode` and a `MachineInstr` reasonably different which seems nice to avoid unexpected coupling of these two layers. We can map between them, but we shouldn't be *surprised* at where that occurs. =] Differential Revision: https://reviews.llvm.org/D50680 llvm-svn: 339740 |
||
|---|---|---|
| .. | ||
| Disassembler | ||
| InstPrinter | ||
| MCTargetDesc | ||
| TargetInfo | ||
| CMakeLists.txt | ||
| LLVMBuild.txt | ||
| README.txt | ||
| XCore.h | ||
| XCore.td | ||
| XCoreAsmPrinter.cpp | ||
| XCoreCallingConv.td | ||
| XCoreFrameLowering.cpp | ||
| XCoreFrameLowering.h | ||
| XCoreFrameToArgsOffsetElim.cpp | ||
| XCoreISelDAGToDAG.cpp | ||
| XCoreISelLowering.cpp | ||
| XCoreISelLowering.h | ||
| XCoreInstrFormats.td | ||
| XCoreInstrInfo.cpp | ||
| XCoreInstrInfo.h | ||
| XCoreInstrInfo.td | ||
| XCoreLowerThreadLocal.cpp | ||
| XCoreMCInstLower.cpp | ||
| XCoreMCInstLower.h | ||
| XCoreMachineFunctionInfo.cpp | ||
| XCoreMachineFunctionInfo.h | ||
| XCoreRegisterInfo.cpp | ||
| XCoreRegisterInfo.h | ||
| XCoreRegisterInfo.td | ||
| XCoreSelectionDAGInfo.cpp | ||
| XCoreSelectionDAGInfo.h | ||
| XCoreSubtarget.cpp | ||
| XCoreSubtarget.h | ||
| XCoreTargetMachine.cpp | ||
| XCoreTargetMachine.h | ||
| XCoreTargetObjectFile.cpp | ||
| XCoreTargetObjectFile.h | ||
| XCoreTargetStreamer.h | ||
| XCoreTargetTransformInfo.h | ||
README.txt
To-do ----- * Instruction encodings * Tailcalls * Investigate loop alignment * Add builtins