mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 20:23:11 +01:00
[AssumptionCache] Do not track llvm.assume calls (PR49043)
This fixes PR49043 by invalidating the handle on RAUW. This will work fine assuming all existing RAUW users add the new assumption to the cache. That means, if a new llvm.assume call replaces an old one, you need to add the new one now as a RAUW is not enough anymore. Reviewed By: nikic Differential Revision: https://reviews.llvm.org/D96208
This commit is contained in:
parent
b99993d408
commit
fbfa693d11
@ -45,7 +45,7 @@ public:
|
||||
enum : unsigned { ExprResultIdx = std::numeric_limits<unsigned>::max() };
|
||||
|
||||
struct ResultElem {
|
||||
WeakTrackingVH Assume;
|
||||
WeakVH Assume;
|
||||
|
||||
/// contains either ExprResultIdx or the index of the operand bundle
|
||||
/// containing the knowledge.
|
||||
|
32
test/Transforms/GVNSink/assumption.ll
Normal file
32
test/Transforms/GVNSink/assumption.ll
Normal file
@ -0,0 +1,32 @@
|
||||
; RUN: opt < %s -S -passes="print<assumptions>,gvn-sink,loop-unroll" -unroll-count=3 | FileCheck %s
|
||||
;
|
||||
; This crashed because the cached assumption was replaced and the replacement
|
||||
; was then in the cache twice.
|
||||
;
|
||||
; PR49043
|
||||
|
||||
@g = external global i32
|
||||
|
||||
define void @main() {
|
||||
bb:
|
||||
%i1.i = load volatile i32, i32* @g
|
||||
%i32.i = icmp eq i32 %i1.i, 0
|
||||
call void @llvm.assume(i1 %i32.i) #3
|
||||
br label %bb4.i
|
||||
|
||||
bb4.i: ; preds = %bb4.i, %bb
|
||||
%i.i = load volatile i32, i32* @g
|
||||
%i3.i = icmp eq i32 %i.i, 0
|
||||
call void @llvm.assume(i1 %i3.i) #3
|
||||
br label %bb4.i
|
||||
|
||||
func_1.exit: ; No predecessors!
|
||||
unreachable
|
||||
}
|
||||
|
||||
declare void @llvm.assume(i1)
|
||||
|
||||
; CHECK: call void @llvm.assume(
|
||||
; CHECK: call void @llvm.assume(
|
||||
; CHECK: call void @llvm.assume(
|
||||
|
Loading…
Reference in New Issue
Block a user