While we indeed can't treat them as no-ops, i think we can/should do better than just modelling them as unknown.
inttoptr story is complicated, but for ptrtoint, it seems straight-forward to model it just as a zext-or-trunc of unknown.
This may be important now that we track towards making inttoptr/ptrtoint casts not no-op,
and towards preventing folding them into loads/etc (see D88979/D88789/D88788)
I don't quite get how we ended up with this. Do we somehow know that i8* is wider than i32? Is it coming from default data layout or?..