[llvm] ef8b4e4 - Add validity assert on entry to CastInst::isNoopCast [NFC]
Philip Reames via llvm-commits
llvm-commits at lists.llvm.org
Wed Oct 7 14:05:53 PDT 2020
Author: Philip Reames
Date: 2020-10-07T14:05:45-07:00
New Revision: ef8b4e4fcd687f66ef0271d1257075f1f53dd34b
URL: https://github.com/llvm/llvm-project/commit/ef8b4e4fcd687f66ef0271d1257075f1f53dd34b
DIFF: https://github.com/llvm/llvm-project/commit/ef8b4e4fcd687f66ef0271d1257075f1f53dd34b.diff
LOG: Add validity assert on entry to CastInst::isNoopCast [NFC]
This required some minor code reorganization to have a version of castIsValid which worked purely in terms of types.
Added:
Modified:
llvm/include/llvm/IR/InstrTypes.h
llvm/lib/IR/Instructions.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/IR/InstrTypes.h b/llvm/include/llvm/IR/InstrTypes.h
index c86448ea72cb..810e87de232b 100644
--- a/llvm/include/llvm/IR/InstrTypes.h
+++ b/llvm/include/llvm/IR/InstrTypes.h
@@ -691,11 +691,14 @@ class CastInst : public UnaryInstruction {
/// Return the destination type, as a convenience
Type* getDestTy() const { return getType(); }
- /// This method can be used to determine if a cast from S to DstTy using
+ /// This method can be used to determine if a cast from SrcTy to DstTy using
/// Opcode op is valid or not.
/// @returns true iff the proposed cast is valid.
/// Determine if a cast is valid without creating one.
- static bool castIsValid(Instruction::CastOps op, Value *S, Type *DstTy);
+ static bool castIsValid(Instruction::CastOps op, Type *SrcTy, Type *DstTy);
+ static bool castIsValid(Instruction::CastOps op, Value *S, Type *DstTy) {
+ return castIsValid(op, S->getType(), DstTy);
+ }
/// Methods for support type inquiry through isa, cast, and dyn_cast:
static bool classof(const Instruction *I) {
diff --git a/llvm/lib/IR/Instructions.cpp b/llvm/lib/IR/Instructions.cpp
index 445fad8bcbf4..b8663cdcbe83 100644
--- a/llvm/lib/IR/Instructions.cpp
+++ b/llvm/lib/IR/Instructions.cpp
@@ -2654,6 +2654,7 @@ bool CastInst::isNoopCast(Instruction::CastOps Opcode,
Type *SrcTy,
Type *DestTy,
const DataLayout &DL) {
+ assert(castIsValid(Opcode, SrcTy, DestTy) && "method precondition");
switch (Opcode) {
default: llvm_unreachable("Invalid CastOp");
case Instruction::Trunc:
@@ -3352,10 +3353,7 @@ CastInst::getCastOpcode(
/// it in one place and to eliminate the redundant code for getting the sizes
/// of the types involved.
bool
-CastInst::castIsValid(Instruction::CastOps op, Value *S, Type *DstTy) {
- // Check for type sanity on the arguments
- Type *SrcTy = S->getType();
-
+CastInst::castIsValid(Instruction::CastOps op, Type *SrcTy, Type *DstTy) {
if (!SrcTy->isFirstClassType() || !DstTy->isFirstClassType() ||
SrcTy->isAggregateType() || DstTy->isAggregateType())
return false;
More information about the llvm-commits
mailing list