[llvm-branch-commits] [llvm] [SelectionDAGBuilder] Use address width when lowering ptrtoaddr (PR #139423)

Matt Arsenault via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Mon Aug 11 18:01:54 PDT 2025


================
@@ -3980,8 +3980,16 @@ void SelectionDAGBuilder::visitSIToFP(const User &I) {
 }
 
 void SelectionDAGBuilder::visitPtrToAddr(const User &I) {
-  // FIXME: this is not correct for pointers with addr width != pointer width
-  visitPtrToInt(I);
+  const auto &TLI = DAG.getTargetLoweringInfo();
+  const DataLayout &DL = DAG.getDataLayout();
+  // ptrtoaddr is equivalent to a truncate of ptrtoint to address/index width
+  auto Op0 = I.getOperand(0);
+  SDValue N = getValue(Op0);
+  // By definition the type of the ptrtoaddr must be equal to the address type.
+  assert(I.getType() == DL.getAddressType(Op0->getType()));
+  EVT AddrVT = TLI.getValueType(DL, I.getType());
+  N = DAG.getNode(ISD::TRUNCATE, getCurSDLoc(), AddrVT, N);
----------------
arsenm wrote:

If these are the same type, why do you need the truncate? 

https://github.com/llvm/llvm-project/pull/139423


More information about the llvm-branch-commits mailing list