This is an archive of the discontinued LLVM Phabricator instance.

[NFC] Change SelectionDAG::getMemBasePlusOffset() to use int64_t
ClosedPublic

Authored by arichardson on Dec 9 2019, 6:32 AM.

Details

Summary

This change is preparatory work to use this helper functions in more places.
Currently the function only allows positive offsets, but there are cases
where we want to subtract an offset from an existing pointer.

The motivation for this change is our out-of-tree CHERI backend
(https://github.com/CTSRD-CHERI/llvm-project). We use a separate register
type to store pointers (128-bit capabilities, which are effectively
unforgeable and monotonic fat pointers). These capabilities permit a
reduced set of operations and therefore use a separate ValueType (iFATPTR).
to represent pointers implemented as capabilities.
Therefore, we need to avoid using ISD::ADD for our patterns that operate
on pointers and need to use a function that chooses ISD::ADD or a new
ISD::PTRADD opcode depending on the value type.

We originally added a new DAG.getPointerAdd() function, but after this
patch series we can modify the implementation of getMemBasePlusOffset()
instead. Avoiding direct uses of ISD::ADD for pointer types will
significantly reduce the amount of assertion/instruction selection
failures for us in future upstream merges.

Diff Detail

Event Timeline

arichardson created this revision.Dec 9 2019, 6:32 AM
Herald added a project: Restricted Project. · View Herald TranscriptDec 9 2019, 6:32 AM

Build result: fail - 60625 tests passed, 1 failed and 726 were skipped.

failed: LLVM.CodeGen/RISCV/mir-target-flags.ll

Log files: console-log.txt, CMakeCache.txt

spatel accepted this revision.Dec 9 2019, 1:30 PM

LGTM

This revision is now accepted and ready to land.Dec 9 2019, 1:30 PM
This revision was automatically updated to reflect the committed changes.