[llvm] Introduce DIExpression::foldConstantMath() (PR #71718)
Adrian Prantl via llvm-commits
llvm-commits at lists.llvm.org
Fri Nov 10 17:55:47 PST 2023
================
@@ -1998,6 +1997,286 @@ DIExpression::constantFold(const ConstantInt *CI) {
ConstantInt::get(getContext(), NewInt)};
}
+static bool isConstOperation(uint64_t Op) {
+ return Op == dwarf::DW_OP_constu || Op == dwarf::DW_OP_consts;
+}
+
+static bool operationIsNoOp(uint64_t Op, uint64_t Val) {
+ switch (Op) {
+ case dwarf::DW_OP_plus:
+ case dwarf::DW_OP_minus:
+ case dwarf::DW_OP_shl:
+ case dwarf::DW_OP_shr:
+ return Val == 0;
+ case dwarf::DW_OP_mul:
+ case dwarf::DW_OP_div:
+ return Val == 1;
+ default:
+ return false;
+ }
+}
+
+static std::optional<uint64_t>
+foldOperationIfPossible(uint64_t Op, uint64_t Operand1, uint64_t Operand2) {
----------------
adrian-prantl wrote:
Don't you need to take into account signedness and types (DW_OP_convert)?
https://github.com/llvm/llvm-project/pull/71718
More information about the llvm-commits
mailing list