aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/CodeGen/CodeGenFunction.h
diff options
context:
space:
mode:
authorCraig Topper <craig.topper@sifive.com>2024-04-24 12:31:14 -0700
committerGitHub <noreply@github.com>2024-04-24 12:31:14 -0700
commitfc538b070de69315fe05105e8c0bc622fb61168a (patch)
tree7a9d7d19fa1b12ebc78de5305ba33266c65530f6 /clang/lib/CodeGen/CodeGenFunction.h
parent03bb10dfb3725ec2c31fb66deede96d066f2b49a (diff)
downloadllvm-fc538b070de69315fe05105e8c0bc622fb61168a.zip
llvm-fc538b070de69315fe05105e8c0bc622fb61168a.tar.gz
llvm-fc538b070de69315fe05105e8c0bc622fb61168a.tar.bz2
[SelectionDAG] Pass SDVTList instead of VTs to *SDNode constructors. NFC (#89880)
All of these constructors were creating a SDVTList using an EVT* created by SDNode::getValueTypeList. This EVT needs to live at least as long as the SDNode that uses it. To do this, SDNode::getValueTypeList contains several function scoped static variables that hold the memory for the EVT. So the EVT lives until global destructors run. This is problematic since an EVT contains a Type* that points to memory allocated by an LLVMContext. If multiple LLVMContexts are used that don't have overlapping lifetimes, we can end up with stale or or incorrect pointers cached in the EVTs owned by SDNode::getValueTypeList. I want to try to make the EVTs be owned by SelectionDAG instead. This is already done for SDVTLists with more than 1 VT. The single value case is a very old optimizaton that should be re-evaluated. In order to do this, I need the SDVTLists to be created by SelectionDAG rather than by the SDNode itself. This patch doesn't change how the allocation is done yet. It just moves the code around. This patch does reduce the number of calls to getVTList since we now share with the call needed for the SDNode FoldingSet. Part of fixing #88233.
Diffstat (limited to 'clang/lib/CodeGen/CodeGenFunction.h')
0 files changed, 0 insertions, 0 deletions