[PATCH] D71937: [ConstantRange] Respect destination bitwidth for cast results.
Florian Hahn via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Dec 27 08:36:00 PST 2019
fhahn created this revision.
fhahn added reviewers: nikic, spatel, reames.
Herald added a subscriber: hiraditya.
Herald added a project: LLVM.
We returning a full set, we should use ResultBitWidth. Otherwise we might hit assertions when the resulting constant ranges are used later on.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D71937
Files:
llvm/lib/IR/ConstantRange.cpp
llvm/unittests/IR/ConstantRangeTest.cpp
Index: llvm/unittests/IR/ConstantRangeTest.cpp
===================================================================
--- llvm/unittests/IR/ConstantRangeTest.cpp
+++ llvm/unittests/IR/ConstantRangeTest.cpp
@@ -2295,4 +2295,26 @@
});
}
+TEST_F(ConstantRangeTest, castOps) {
+ ConstantRange A(APInt(16, 66), APInt(16, 128));
+ ConstantRange FpToI8 = A.castOp(Instruction::FPToSI, 8);
+ EXPECT_EQ(8u, FpToI8.getBitWidth());
+ EXPECT_TRUE(FpToI8.isFullSet());
+
+ ConstantRange FpToI16 = A.castOp(Instruction::FPToSI, 16);
+ EXPECT_EQ(16u, FpToI16.getBitWidth());
+ EXPECT_EQ(A, FpToI16);
+
+ ConstantRange FPExtToDouble = A.castOp(Instruction::FPExt, 64);
+ EXPECT_EQ(64u, FPExtToDouble.getBitWidth());
+ EXPECT_TRUE(FPExtToDouble.isFullSet());
+
+ ConstantRange PtrToInt = A.castOp(Instruction::PtrToInt, 64);
+ EXPECT_EQ(64u, PtrToInt.getBitWidth());
+ EXPECT_TRUE(PtrToInt.isFullSet());
+
+ ConstantRange IntToPtr = A.castOp(Instruction::IntToPtr, 64);
+ EXPECT_EQ(64u, IntToPtr.getBitWidth());
+ EXPECT_TRUE(IntToPtr.isFullSet());
+}
} // anonymous namespace
Index: llvm/lib/IR/ConstantRange.cpp
===================================================================
--- llvm/lib/IR/ConstantRange.cpp
+++ llvm/lib/IR/ConstantRange.cpp
@@ -641,7 +641,7 @@
if (getBitWidth() == ResultBitWidth)
return *this;
else
- return getFull();
+ return getFull(ResultBitWidth);
case Instruction::UIToFP: {
// TODO: use input range if available
auto BW = getBitWidth();
@@ -662,7 +662,7 @@
case Instruction::PtrToInt:
case Instruction::AddrSpaceCast:
// Conservatively return getFull set.
- return getFull();
+ return getFull(ResultBitWidth);
};
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D71937.235429.patch
Type: text/x-patch
Size: 1716 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20191227/16cc4db5/attachment.bin>
More information about the llvm-commits
mailing list