mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-16 14:31:59 +00:00
PR9604; try to deal with RAUW updates correctly in the AST. I'm not convinced
it's completely safe to cache the AST across LICM runs even with this fix, but this fix can't hurt. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129198 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
83d13a046f
commit
9055ccdb6b
@ -284,6 +284,7 @@ class AliasSetTracker {
|
||||
class ASTCallbackVH : public CallbackVH {
|
||||
AliasSetTracker *AST;
|
||||
virtual void deleted();
|
||||
virtual void allUsesReplacedWith(Value *);
|
||||
public:
|
||||
ASTCallbackVH(Value *V, AliasSetTracker *AST = 0);
|
||||
ASTCallbackVH &operator=(Value *V);
|
||||
|
@ -602,6 +602,10 @@ void AliasSetTracker::ASTCallbackVH::deleted() {
|
||||
// this now dangles!
|
||||
}
|
||||
|
||||
void AliasSetTracker::ASTCallbackVH::allUsesReplacedWith(Value *V) {
|
||||
AST->copyValue(getValPtr(), V);
|
||||
}
|
||||
|
||||
AliasSetTracker::ASTCallbackVH::ASTCallbackVH(Value *V, AliasSetTracker *ast)
|
||||
: CallbackVH(V), AST(ast) {}
|
||||
|
||||
|
49
test/Transforms/LICM/2011-04-09-RAUW-AST.ll
Normal file
49
test/Transforms/LICM/2011-04-09-RAUW-AST.ll
Normal file
@ -0,0 +1,49 @@
|
||||
; RUN: opt < %s -loop-rotate -licm -S | FileCheck %s
|
||||
; PR9604
|
||||
|
||||
@g_3 = global i32 0, align 4
|
||||
@.str = private unnamed_addr constant [4 x i8] c"%d\0A\00"
|
||||
|
||||
define i32 @main() nounwind {
|
||||
entry:
|
||||
%tmp = load i32* @g_3, align 4
|
||||
%tobool = icmp eq i32 %tmp, 0
|
||||
br i1 %tobool, label %for.cond, label %if.then
|
||||
|
||||
if.then: ; preds = %entry
|
||||
br label %for.cond
|
||||
|
||||
for.cond: ; preds = %for.inc10, %if.then, %entry
|
||||
%g.0 = phi i32* [ %g.0, %for.inc10 ], [ @g_3, %entry ], [ null, %if.then ]
|
||||
%x.0 = phi i32 [ %inc12, %for.inc10 ], [ 0, %entry ], [ 0, %if.then ]
|
||||
%cmp = icmp slt i32 %x.0, 5
|
||||
br i1 %cmp, label %for.cond4, label %for.end13
|
||||
|
||||
for.cond4: ; preds = %for.body7, %for.cond
|
||||
%y.0 = phi i32 [ %inc, %for.body7 ], [ 0, %for.cond ]
|
||||
%cmp6 = icmp slt i32 %y.0, 5
|
||||
br i1 %cmp6, label %for.body7, label %for.inc10
|
||||
|
||||
; CHECK: for.body7:
|
||||
; CHECK-NEXT: phi
|
||||
; CHECK-NEXT: store i32 0
|
||||
; CHECK-NEXT: store i32 1
|
||||
|
||||
for.body7: ; preds = %for.cond4
|
||||
store i32 0, i32* @g_3, align 4
|
||||
store i32 1, i32* %g.0, align 4
|
||||
%inc = add nsw i32 %y.0, 1
|
||||
br label %for.cond4
|
||||
|
||||
for.inc10: ; preds = %for.cond4
|
||||
%inc12 = add nsw i32 %x.0, 1
|
||||
br label %for.cond
|
||||
|
||||
for.end13: ; preds = %for.cond
|
||||
%tmp14 = load i32* @g_3, align 4
|
||||
%call = tail call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([4 x i8]* @.str, i64 0, i64 0), i32 %tmp14) nounwind
|
||||
ret i32 0
|
||||
}
|
||||
|
||||
declare i32 @printf(i8* nocapture, ...) nounwind
|
||||
|
Loading…
x
Reference in New Issue
Block a user