From 1271b8f57ab95b601b75b69cd957b9ee9f0c186c Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Wed, 29 Jun 2022 14:16:30 +0200 Subject: [PATCH] [Bitcode] Restore bitcast expression auto-upgrade Restore the autoupgrade from bitcast to ptrtoint+inttoptr, which was lost as part of D127729. This fixes the backwards compatibility issue noted in: https://reviews.llvm.org/D127729#inline-1236519 --- llvm/include/llvm/IR/AutoUpgrade.h | 2 +- llvm/lib/Bitcode/Reader/BitcodeReader.cpp | 4 +++- llvm/lib/IR/AutoUpgrade.cpp | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/llvm/include/llvm/IR/AutoUpgrade.h b/llvm/include/llvm/IR/AutoUpgrade.h index 96d20a7..12952f2 100644 --- a/llvm/include/llvm/IR/AutoUpgrade.h +++ b/llvm/include/llvm/IR/AutoUpgrade.h @@ -82,7 +82,7 @@ namespace llvm { /// This is an auto-upgrade for bitcast constant expression between pointers /// with different address spaces: the instruction is replaced by a pair /// ptrtoint+inttoptr. - Value *UpgradeBitCastExpr(unsigned Opc, Constant *C, Type *DestTy); + Constant *UpgradeBitCastExpr(unsigned Opc, Constant *C, Type *DestTy); /// Check the debug info version number, if it is out-dated, drop the debug /// info. Return true if module is modified. diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp index 7abe7c0..5e5ca96 100644 --- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp +++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp @@ -1442,7 +1442,9 @@ Expected BitcodeReader::materializeValue(unsigned StartValID, if (isConstExprSupported(BC->Opcode) && ConstOps.size() == Ops.size()) { Constant *C; if (Instruction::isCast(BC->Opcode)) { - C = ConstantExpr::getCast(BC->Opcode, ConstOps[0], BC->getType()); + C = UpgradeBitCastExpr(BC->Opcode, ConstOps[0], BC->getType()); + if (!C) + C = ConstantExpr::getCast(BC->Opcode, ConstOps[0], BC->getType()); } else if (Instruction::isUnaryOp(BC->Opcode)) { C = ConstantExpr::get(BC->Opcode, ConstOps[0], BC->Flags); } else if (Instruction::isBinaryOp(BC->Opcode)) { diff --git a/llvm/lib/IR/AutoUpgrade.cpp b/llvm/lib/IR/AutoUpgrade.cpp index 2a4c315..75594f9 100644 --- a/llvm/lib/IR/AutoUpgrade.cpp +++ b/llvm/lib/IR/AutoUpgrade.cpp @@ -4179,7 +4179,7 @@ Instruction *llvm::UpgradeBitCastInst(unsigned Opc, Value *V, Type *DestTy, return nullptr; } -Value *llvm::UpgradeBitCastExpr(unsigned Opc, Constant *C, Type *DestTy) { +Constant *llvm::UpgradeBitCastExpr(unsigned Opc, Constant *C, Type *DestTy) { if (Opc != Instruction::BitCast) return nullptr; -- 2.7.4