Files
clang-p2996/llvm/test/Transforms/CodeExtractor/extract-assume.ll
Sergey Dmitriev 807960e6ef [CodeExtractor] Update function's assumption cache after extracting blocks from it
Summary: Assumption cache's self-updating mechanism does not correctly handle the case when blocks are extracted from the function by the CodeExtractor. As a result function's assumption cache may have stale references to the llvm.assume calls that were moved to the outlined function. This patch fixes this problem by removing extracted llvm.assume calls from the function’s assumption cache.

Reviewers: hfinkel, vsk, fhahn, davidxl, sanjoy

Reviewed By: hfinkel, vsk

Subscribers: llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D57215

llvm-svn: 353500
2019-02-08 06:55:18 +00:00

30 lines
785 B
LLVM

; RUN: opt -passes="function(slp-vectorizer),module(hotcoldsplit),function(slp-vectorizer,print<assumptions>)" -disable-output %s 2>&1 | FileCheck %s
;
; Make sure this compiles. Check that function assumption cache is refreshed
; after extracting blocks with assume calls from the function.
; CHECK: Cached assumptions for function: fun
; CHECK-NEXT: Cached assumptions for function: fun.cold
; CHECK-NEXT: %cmp = icmp uge i32 %x, 64
declare void @fun2(i32) #0
define void @fun(i32 %x) {
entry:
br i1 undef, label %if.then, label %if.else
if.then:
ret void
if.else:
%cmp = icmp uge i32 %x, 64
call void @llvm.assume(i1 %cmp)
call void @fun2(i32 %x)
unreachable
}
declare void @llvm.assume(i1) #1
attributes #0 = { alwaysinline }
attributes #1 = { nounwind }