mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-28 06:00:28 +00:00
cc8cfb9875
This patch addresses the issue of SCEV division asserting on some input expressions (e.g., non-affine expressions) and quietly giving up on others. When giving up, we set the quotient to be equal to zero and the remainder to be equal to the numerator. With this patch, we always quietly give up when we cannot perform the division. This patch also adds a test case for DependenceAnalysis that previously caused an assertion. Differential Revision: http://reviews.llvm.org/D11725 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@247314 91177308-0d34-0410-b5e6-96231b3b80d8
37 lines
1.0 KiB
LLVM
37 lines
1.0 KiB
LLVM
; RUN: opt < %s -analyze -basicaa -da-delinearize -da
|
|
;
|
|
; CHECK: da analyze - consistent input [S S]!
|
|
; CHECK: da analyze - confused!
|
|
; CHECK: da analyze - input [* *]!
|
|
;
|
|
target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n8:16:32-S64"
|
|
target triple = "thumbv7--linux-gnueabi"
|
|
|
|
define void @f(i32** %a, i32 %n) align 2 {
|
|
for.preheader:
|
|
%t.0 = ashr exact i32 %n, 3
|
|
br label %for.body.1
|
|
|
|
for.body.1:
|
|
%i.1 = phi i32 [ %t.5, %for.inc ], [ 0, %for.preheader ]
|
|
%i.2 = phi i32 [ %i.5, %for.inc ], [ %t.0, %for.preheader ]
|
|
br i1 undef, label %for.inc, label %for.body.2
|
|
|
|
for.body.2:
|
|
%i.3 = phi i32 [ %t.1, %for.body.2 ], [ %i.1, %for.body.1 ]
|
|
%t.1 = add i32 %i.3, 1
|
|
%t.2 = load i32*, i32** %a, align 4
|
|
%t.3 = getelementptr inbounds i32, i32* %t.2, i32 %i.3
|
|
%t.4 = load i32, i32* %t.3, align 4
|
|
br i1 undef, label %for.inc, label %for.body.2
|
|
|
|
for.inc:
|
|
%i.4 = phi i32 [ %i.2, %for.body.1 ], [ %i.2, %for.body.2 ]
|
|
%t.5 = add i32 %i.1, %i.4
|
|
%i.5 = add i32 %i.2, -1
|
|
br i1 undef, label %for.exit, label %for.body.1
|
|
|
|
for.exit:
|
|
ret void
|
|
}
|