Skip to content

Commit 4b0d79b

Browse files
committed
!fixup strip type argument
1 parent f41eb1c commit 4b0d79b

File tree

5 files changed

+46
-27
lines changed

5 files changed

+46
-27
lines changed

llvm/include/llvm/Analysis/ScalarEvolution.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -569,7 +569,7 @@ class ScalarEvolution {
569569
LLVM_ABI const SCEV *getLosslessPtrToIntExpr(const SCEV *Op);
570570
LLVM_ABI const SCEV *getLosslessPtrToAddrExpr(const SCEV *Op);
571571

572-
LLVM_ABI const SCEV *getPtrToAddrExpr(const SCEV *Op, Type *Ty);
572+
LLVM_ABI const SCEV *getPtrToAddrExpr(const SCEV *Op);
573573
LLVM_ABI const SCEV *getPtrToIntExpr(const SCEV *Op, Type *Ty);
574574
LLVM_ABI const SCEV *getTruncateExpr(const SCEV *Op, Type *Ty,
575575
unsigned Depth = 0);

llvm/include/llvm/Analysis/ScalarEvolutionExpressions.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -793,9 +793,7 @@ class SCEVRewriteVisitor : public SCEVVisitor<SC, const SCEV *> {
793793

794794
const SCEV *visitPtrToAddrExpr(const SCEVPtrToAddrExpr *Expr) {
795795
const SCEV *Operand = ((SC *)this)->visit(Expr->getOperand());
796-
return Operand == Expr->getOperand()
797-
? Expr
798-
: SE.getPtrToAddrExpr(Operand, Expr->getType());
796+
return Operand == Expr->getOperand() ? Expr : SE.getPtrToAddrExpr(Operand);
799797
}
800798

801799
const SCEV *visitPtrToIntExpr(const SCEVPtrToIntExpr *Expr) {

llvm/lib/Analysis/DependenceAnalysis.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -354,6 +354,9 @@ struct SCEVMonotonicityChecker
354354
SCEVMonotonicity visitMulExpr(const SCEVMulExpr *Expr) {
355355
return invariantOrUnknown(Expr);
356356
}
357+
SCEVMonotonicity visitPtrToAddrExpr(const SCEVPtrToAddrExpr *Expr) {
358+
return invariantOrUnknown(Expr);
359+
}
357360
SCEVMonotonicity visitPtrToIntExpr(const SCEVPtrToIntExpr *Expr) {
358361
return invariantOrUnknown(Expr);
359362
}

llvm/lib/Analysis/ScalarEvolution.cpp

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1160,14 +1160,11 @@ const SCEV *ScalarEvolution::getLosslessPtrToIntExpr(const SCEV *Op) {
11601160
return getLosslessPtrToIntOrAddrExpr(scPtrToInt, Op);
11611161
}
11621162

1163-
const SCEV *ScalarEvolution::getPtrToAddrExpr(const SCEV *Op, Type *Ty) {
1164-
assert(Ty->isIntegerTy() && "Target type must be an integer type!");
1165-
1163+
const SCEV *ScalarEvolution::getPtrToAddrExpr(const SCEV *Op) {
11661164
const SCEV *IntOp = getLosslessPtrToAddrExpr(Op);
1167-
if (isa<SCEVCouldNotCompute>(IntOp))
1168-
return IntOp;
1169-
1170-
return getTruncateOrZeroExtend(IntOp, Ty);
1165+
assert(!isa<SCEVCouldNotCompute>(IntOp) &&
1166+
"Must be able to losslessly convert PtrToAddr");
1167+
return IntOp;
11711168
}
11721169

11731170
const SCEV *ScalarEvolution::getPtrToIntExpr(const SCEV *Op, Type *Ty) {
@@ -8182,7 +8179,7 @@ const SCEV *ScalarEvolution::createSCEV(Value *V) {
81828179
// all possible pointer values.
81838180
const SCEV *IntOp = U->getOpcode() == Instruction::PtrToInt
81848181
? getPtrToIntExpr(Op, DstIntTy)
8185-
: getPtrToAddrExpr(Op, DstIntTy);
8182+
: getPtrToAddrExpr(Op);
81868183
if (isa<SCEVCouldNotCompute>(IntOp))
81878184
return getUnknown(V);
81888185
return IntOp;

llvm/test/Analysis/ScalarEvolution/ptrtoaddr.ll

Lines changed: 36 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py
2-
; RUN: opt < %s --data-layout="e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" -S -disable-output -disable-verify "-passes=print<scalar-evolution>" 2>&1 | FileCheck --check-prefixes=ALL,X64 %s
3-
; RUN: opt < %s --data-layout="e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-f64:32:64-f80:32-n8:16:32-S128" -S -disable-output -disable-verify "-passes=print<scalar-evolution>" 2>&1 | FileCheck --check-prefixes=ALL,X32 %s
2+
; RUN: opt -passes='print<scalar-evolution>' -disable-output %s 2>&1 | FileCheck %s
43

5-
declare void @useptr(ptr)
4+
target datalayout="e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
65

76
define void @ptrtoaddr(ptr %in, ptr %out0, ptr %out1, ptr %out2, ptr %out3) {
87
; X64-LABEL: 'ptrtoaddr'
@@ -28,15 +27,15 @@ define void @ptrtoaddr(ptr %in, ptr %out0, ptr %out1, ptr %out2, ptr %out3) {
2827
; X32-NEXT: %p3 = ptrtoaddr ptr %in to i128
2928
; X32-NEXT: --> (zext i32 (ptrtoaddr ptr %in to i32) to i128) U: [0,4294967296) S: [0,4294967296)
3029
; X32-NEXT: Determining loop execution counts for: @ptrtoaddr
30+
;
31+
; CHECK-LABEL: 'ptrtoaddr'
32+
; CHECK-NEXT: Classifying expressions for: @ptrtoaddr
33+
; CHECK-NEXT: %p0 = ptrtoaddr ptr %in to i64
34+
; CHECK-NEXT: --> (ptrtoaddr ptr %in to i64) U: full-set S: full-set
35+
; CHECK-NEXT: Determining loop execution counts for: @ptrtoaddr
3136
;
3237
%p0 = ptrtoaddr ptr %in to i64
33-
%p1 = ptrtoaddr ptr %in to i32
34-
%p2 = ptrtoaddr ptr %in to i16
35-
%p3 = ptrtoaddr ptr %in to i128
3638
store i64 %p0, ptr %out0
37-
store i32 %p1, ptr %out1
38-
store i16 %p2, ptr %out2
39-
store i128 %p3, ptr %out3
4039
ret void
4140
}
4241

@@ -64,15 +63,15 @@ define void @ptrtoaddr_as1(ptr addrspace(1) %in, ptr %out0, ptr %out1, ptr %out2
6463
; X32-NEXT: %p3 = ptrtoaddr ptr addrspace(1) %in to i128
6564
; X32-NEXT: --> (zext i32 (ptrtoaddr ptr addrspace(1) %in to i32) to i128) U: [0,4294967296) S: [0,4294967296)
6665
; X32-NEXT: Determining loop execution counts for: @ptrtoaddr_as1
66+
;
67+
; CHECK-LABEL: 'ptrtoaddr_as1'
68+
; CHECK-NEXT: Classifying expressions for: @ptrtoaddr_as1
69+
; CHECK-NEXT: %p0 = ptrtoaddr ptr addrspace(1) %in to i64
70+
; CHECK-NEXT: --> (ptrtoaddr ptr addrspace(1) %in to i64) U: full-set S: full-set
71+
; CHECK-NEXT: Determining loop execution counts for: @ptrtoaddr_as1
6772
;
6873
%p0 = ptrtoaddr ptr addrspace(1) %in to i64
69-
%p1 = ptrtoaddr ptr addrspace(1) %in to i32
70-
%p2 = ptrtoaddr ptr addrspace(1) %in to i16
71-
%p3 = ptrtoaddr ptr addrspace(1) %in to i128
7274
store i64 %p0, ptr %out0
73-
store i32 %p1, ptr %out1
74-
store i16 %p2, ptr %out2
75-
store i128 %p3, ptr %out3
7675
ret void
7776
}
7877

@@ -92,6 +91,14 @@ define void @ptrtoaddr_of_bitcast(ptr %in, ptr %out0) {
9291
; X32-NEXT: %p0 = ptrtoaddr ptr %in_casted to i64
9392
; X32-NEXT: --> (zext i32 (ptrtoaddr ptr %in to i32) to i64) U: [0,4294967296) S: [0,4294967296)
9493
; X32-NEXT: Determining loop execution counts for: @ptrtoaddr_of_bitcast
94+
;
95+
; CHECK-LABEL: 'ptrtoaddr_of_bitcast'
96+
; CHECK-NEXT: Classifying expressions for: @ptrtoaddr_of_bitcast
97+
; CHECK-NEXT: %in_casted = bitcast ptr %in to ptr
98+
; CHECK-NEXT: --> %in U: full-set S: full-set
99+
; CHECK-NEXT: %p0 = ptrtoaddr ptr %in_casted to i64
100+
; CHECK-NEXT: --> (ptrtoaddr ptr %in to i64) U: full-set S: full-set
101+
; CHECK-NEXT: Determining loop execution counts for: @ptrtoaddr_of_bitcast
95102
;
96103
%in_casted = bitcast ptr %in to ptr
97104
%p0 = ptrtoaddr ptr %in_casted to i64
@@ -105,6 +112,12 @@ define void @ptrtoaddr_of_nullptr(ptr %out0) {
105112
; ALL-NEXT: %p0 = ptrtoaddr ptr null to i64
106113
; ALL-NEXT: --> 0 U: [0,1) S: [0,1)
107114
; ALL-NEXT: Determining loop execution counts for: @ptrtoaddr_of_nullptr
115+
;
116+
; CHECK-LABEL: 'ptrtoaddr_of_nullptr'
117+
; CHECK-NEXT: Classifying expressions for: @ptrtoaddr_of_nullptr
118+
; CHECK-NEXT: %p0 = ptrtoaddr ptr null to i64
119+
; CHECK-NEXT: --> 0 U: [0,1) S: [0,1)
120+
; CHECK-NEXT: Determining loop execution counts for: @ptrtoaddr_of_nullptr
108121
;
109122
%p0 = ptrtoaddr ptr null to i64
110123
store i64 %p0, ptr %out0
@@ -127,6 +140,14 @@ define void @ptrtoaddr_of_gep(ptr %in, ptr %out0) {
127140
; X32-NEXT: %p0 = ptrtoaddr ptr %in_adj to i64
128141
; X32-NEXT: --> (zext i32 (42 + (ptrtoaddr ptr %in to i32)) to i64) U: [0,4294967296) S: [0,4294967296)
129142
; X32-NEXT: Determining loop execution counts for: @ptrtoaddr_of_gep
143+
;
144+
; CHECK-LABEL: 'ptrtoaddr_of_gep'
145+
; CHECK-NEXT: Classifying expressions for: @ptrtoaddr_of_gep
146+
; CHECK-NEXT: %in_adj = getelementptr inbounds i8, ptr %in, i64 42
147+
; CHECK-NEXT: --> (42 + %in) U: full-set S: full-set
148+
; CHECK-NEXT: %p0 = ptrtoaddr ptr %in_adj to i64
149+
; CHECK-NEXT: --> (42 + (ptrtoaddr ptr %in to i64)) U: full-set S: full-set
150+
; CHECK-NEXT: Determining loop execution counts for: @ptrtoaddr_of_gep
130151
;
131152
%in_adj = getelementptr inbounds i8, ptr %in, i64 42
132153
%p0 = ptrtoaddr ptr %in_adj to i64

0 commit comments

Comments
 (0)