================
@@ -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
_______________________________________________
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits