mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-04-02 10:33:53 +00:00
Don't pass the raw invalid pointer used to represent conflicting
TBAA information to AliasAnalysis. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116751 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
b41ee96d76
commit
fb8096dee5
@ -67,7 +67,21 @@ class AliasSet : public ilist_node<AliasSet> {
|
||||
|
||||
unsigned getSize() const { return Size; }
|
||||
|
||||
const MDNode *getTBAAInfo() const { return TBAAInfo; }
|
||||
/// getRawTBAAInfo - Return the raw TBAAInfo member. In addition to
|
||||
/// being null or a pointer to an MDNode, this could be -1, meaning
|
||||
/// there was conflicting information.
|
||||
const MDNode *getRawTBAAInfo() const {
|
||||
return TBAAInfo;
|
||||
}
|
||||
|
||||
/// getTBAAInfo - Return the TBAAInfo, or null if there is no
|
||||
/// information or conflicting information.
|
||||
const MDNode *getTBAAInfo() const {
|
||||
// If we have conflicting TBAAInfo, return null.
|
||||
if (TBAAInfo == reinterpret_cast<const MDNode *>(-1))
|
||||
return 0;
|
||||
return TBAAInfo;
|
||||
}
|
||||
|
||||
AliasSet *getAliasSet(AliasSetTracker &AST) {
|
||||
assert(AS && "No AliasSet yet!");
|
||||
@ -195,6 +209,7 @@ public:
|
||||
|
||||
Value *getPointer() const { return CurNode->getValue(); }
|
||||
unsigned getSize() const { return CurNode->getSize(); }
|
||||
const MDNode *getRawTBAAInfo() const { return CurNode->getRawTBAAInfo(); }
|
||||
const MDNode *getTBAAInfo() const { return CurNode->getTBAAInfo(); }
|
||||
|
||||
iterator& operator++() { // Preincrement
|
||||
|
@ -158,7 +158,8 @@ bool AliasSet::aliasesPointer(const Value *Ptr, unsigned Size,
|
||||
// to be sure it doesn't alias the set...
|
||||
for (iterator I = begin(), E = end(); I != E; ++I)
|
||||
if (AA.alias(AliasAnalysis::Location(Ptr, Size, TBAAInfo),
|
||||
AliasAnalysis::Location(I.getPointer(), I.getSize(), I.getTBAAInfo())))
|
||||
AliasAnalysis::Location(I.getPointer(), I.getSize(),
|
||||
I.getTBAAInfo())))
|
||||
return true;
|
||||
|
||||
// Check the call sites list and invoke list...
|
||||
@ -376,7 +377,7 @@ void AliasSetTracker::add(const AliasSetTracker &AST) {
|
||||
bool X;
|
||||
for (AliasSet::iterator ASI = AS.begin(), E = AS.end(); ASI != E; ++ASI) {
|
||||
AliasSet &NewAS = addPointer(ASI.getPointer(), ASI.getSize(),
|
||||
ASI.getTBAAInfo(),
|
||||
ASI.getRawTBAAInfo(),
|
||||
(AliasSet::AccessType)AS.AccessTy, X);
|
||||
if (AS.isVolatile()) NewAS.setVolatile();
|
||||
}
|
||||
@ -531,7 +532,8 @@ void AliasSetTracker::copyValue(Value *From, Value *To) {
|
||||
// Add it to the alias set it aliases...
|
||||
I = PointerMap.find(From);
|
||||
AliasSet *AS = I->second->getAliasSet(*this);
|
||||
AS->addPointer(*this, Entry, I->second->getSize(), I->second->getTBAAInfo(),
|
||||
AS->addPointer(*this, Entry, I->second->getSize(),
|
||||
I->second->getRawTBAAInfo(),
|
||||
true);
|
||||
}
|
||||
|
||||
|
@ -3,6 +3,7 @@
|
||||
; LICM should be able to hoist the address load out of the loop
|
||||
; by using TBAA information.
|
||||
|
||||
; CHECK: @foo
|
||||
; CHECK: entry:
|
||||
; CHECK-NEXT: %tmp3 = load double** @P, !tbaa !0
|
||||
; CHECK-NEXT: br label %for.body
|
||||
@ -31,3 +32,30 @@ for.end: ; preds = %for.body, %entry
|
||||
!0 = metadata !{metadata !"root", null}
|
||||
!1 = metadata !{metadata !"pointer", metadata !0}
|
||||
!2 = metadata !{metadata !"double", metadata !0}
|
||||
|
||||
; LICM shouldn't hoist anything here.
|
||||
|
||||
; CHECK: @bar
|
||||
; CHECK: loop:
|
||||
; CHECK: load
|
||||
; CHECK: store
|
||||
; CHECK: load
|
||||
; CHECK: store
|
||||
; CHECK: br label %loop
|
||||
|
||||
define void @bar(i8** %p) nounwind {
|
||||
entry:
|
||||
%q = bitcast i8** %p to i8*
|
||||
br label %loop
|
||||
|
||||
loop:
|
||||
%tmp51 = load i8** %p, !tbaa !4
|
||||
store i8* %tmp51, i8** %p
|
||||
%tmp40 = load i8* %q, !tbaa !5
|
||||
store i8 %tmp40, i8* %q
|
||||
br label %loop
|
||||
}
|
||||
|
||||
!3 = metadata !{metadata !"pointer", metadata !4}
|
||||
!4 = metadata !{metadata !"char", metadata !5}
|
||||
!5 = metadata !{metadata !"root", null}
|
||||
|
Loading…
x
Reference in New Issue
Block a user