[PATCH] D90610: [Inline] Fix in handling of ptrtoint in InlineCost
Mikael Holmén via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Nov 19 06:22:15 PST 2020
uabelho updated this revision to Diff 306391.
uabelho added a comment.
Do the easiest fix.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D90610/new/
https://reviews.llvm.org/D90610
Files:
llvm/lib/Analysis/InlineCost.cpp
llvm/test/Transforms/Inline/inline-ptrtoint-different-sizes.ll
Index: llvm/test/Transforms/Inline/inline-ptrtoint-different-sizes.ll
===================================================================
--- /dev/null
+++ llvm/test/Transforms/Inline/inline-ptrtoint-different-sizes.ll
@@ -0,0 +1,40 @@
+; RUN: opt < %s -inline -S | FileCheck %s
+
+; InlineCost used to have problems with the ptrtoint, leading to
+; crashes when visiting the trunc in pr48908_help and the icmp in
+; pr38500_help.
+
+target datalayout = "p:16:16"
+target triple = "x86_64-unknown-linux-gnu"
+
+define void @pr48980_help(i16* %p) {
+ %cast = ptrtoint i16* %p to i32
+ %sub = sub i32 %cast, %cast
+ %conv = trunc i32 %sub to i16
+ ret void
+}
+
+define void @pr48980(i16* %x) {
+ call void @pr48980_help(i16* %x)
+ ret void
+}
+
+; CHECK-LABEL: @pr48980(i16* %x)
+; CHECK-NOT: call
+; CHECK: ret void
+
+define void @pr38500_help(i16* %p) {
+ %cast = ptrtoint i16* %p to i32
+ %sub = sub i32 %cast, %cast
+ %cmp = icmp eq i32 %sub, 0
+ ret void
+}
+
+define void @pr38500(i16* %x) {
+ call void @pr38500_help(i16* %x)
+ ret void
+}
+
+; CHECK-LABEL: @pr38500(i16* %x)
+; CHECK-NOT: call
+; CHECK: ret void
Index: llvm/lib/Analysis/InlineCost.cpp
===================================================================
--- llvm/lib/Analysis/InlineCost.cpp
+++ llvm/lib/Analysis/InlineCost.cpp
@@ -1101,7 +1101,7 @@
// integer is large enough to represent the pointer.
unsigned IntegerSize = I.getType()->getScalarSizeInBits();
unsigned AS = I.getOperand(0)->getType()->getPointerAddressSpace();
- if (IntegerSize >= DL.getPointerSizeInBits(AS)) {
+ if (IntegerSize == DL.getPointerSizeInBits(AS)) {
std::pair<Value *, APInt> BaseAndOffset =
ConstantOffsetPtrs.lookup(I.getOperand(0));
if (BaseAndOffset.first)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D90610.306391.patch
Type: text/x-patch
Size: 1786 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20201119/e5a50581/attachment.bin>
More information about the llvm-commits
mailing list