//===- SelectionDAGAddressAnalysis.h - DAG Address Analysis -----*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #ifndef LLVM_CODEGEN_SELECTIONDAGADDRESSANALYSIS_H #define LLVM_CODEGEN_SELECTIONDAGADDRESSANALYSIS_H #include "llvm/Analysis/MemoryLocation.h" #include "llvm/CodeGen/SelectionDAGNodes.h" #include <cstdint> namespace llvm { class SelectionDAG; /// Helper struct to parse and store a memory address as base + index + offset. /// We ignore sign extensions when it is safe to do so. /// The following two expressions are not equivalent. To differentiate we need /// to store whether there was a sign extension involved in the index /// computation. /// (load (i64 add (i64 copyfromreg %c) /// (i64 signextend (add (i8 load %index) /// (i8 1)))) /// vs /// /// (load (i64 add (i64 copyfromreg %c) /// (i64 signextend (i32 add (i32 signextend (i8 load %index)) /// (i32 1))))) class BaseIndexOffset { … }; } // end namespace llvm #endif // LLVM_CODEGEN_SELECTIONDAGADDRESSANALYSIS_H