HomePhabricator

DAG: allow DAG pointer size different from memory representation.

Description

DAG: allow DAG pointer size different from memory representation.

In preparation for supporting ILP32 on AArch64, this modifies the SelectionDAG
builder code so that pointers are allowed to have a larger type when "live" in
the DAG compared to memory.

Pointers get zero-extended whenever they are loaded, and truncated prior to
stores. In addition, a few not quite so obvious locations need updating:

  • A GEP that has not been marked inbounds needs to enforce the IR-documented 2s-complement wrapping at the memory pointer size. Inbounds GEPs are undefined if they overflow the address space, so no additional operations are needed.
  • Signed comparisons would give incorrect results if performed on the zero-extended values.

This shouldn't affect CodeGen for now, but will become active when the AArch64
ILP32 support is committed.

Details

Committed
tnorthoverMay 1 2019, 5:37 AM
Parents
rL359675: [libFuzzer] Add --dump-input-on-failure to help diagnose AArch64 failures
Branches
Unknown
Tags
Unknown