mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-02 09:33:59 +00:00
72a2c0622a
analysis. Better is to look for cases with useful GEPs and use them when possible. When a pair of useful GEPs is not available, use the raw SCEVs directly. This approach supports better analysis of pointer dereferencing. In parallel, all the test cases are updated appropriately. Cases where we have a store to *B++ can now be analyzed! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@168474 91177308-0d34-0410-b5e6-96231b3b80d8
75 lines
2.0 KiB
LLVM
75 lines
2.0 KiB
LLVM
; RUN: opt < %s -analyze -basicaa -da | FileCheck %s
|
|
|
|
; ModuleID = 'ZIV.bc'
|
|
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
|
|
target triple = "x86_64-apple-macosx10.6.0"
|
|
|
|
|
|
;; A[n + 1] = 0;
|
|
;; *B = A[1 + n];
|
|
|
|
define void @z0(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
|
|
entry:
|
|
%add = add i64 %n, 1
|
|
%arrayidx = getelementptr inbounds i32* %A, i64 %add
|
|
store i32 0, i32* %arrayidx, align 4
|
|
|
|
; CHECK: da analyze - consistent output!
|
|
; CHECK: da analyze - consistent flow!
|
|
; CHECK: da analyze - confused!
|
|
; CHECK: da analyze - consistent input!
|
|
; CHECK: da analyze - confused!
|
|
; CHECK: da analyze - consistent output!
|
|
|
|
%add1 = add i64 %n, 1
|
|
%arrayidx2 = getelementptr inbounds i32* %A, i64 %add1
|
|
%0 = load i32* %arrayidx2, align 4
|
|
store i32 %0, i32* %B, align 4
|
|
ret void
|
|
}
|
|
|
|
|
|
;; A[n] = 0;
|
|
;; *B = A[n + 1];
|
|
|
|
define void @z1(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
|
|
entry:
|
|
%arrayidx = getelementptr inbounds i32* %A, i64 %n
|
|
store i32 0, i32* %arrayidx, align 4
|
|
|
|
; CHECK: da analyze - consistent output!
|
|
; CHECK: da analyze - none!
|
|
; CHECK: da analyze - confused!
|
|
; CHECK: da analyze - consistent input!
|
|
; CHECK: da analyze - confused!
|
|
; CHECK: da analyze - consistent output!
|
|
|
|
%add = add i64 %n, 1
|
|
%arrayidx1 = getelementptr inbounds i32* %A, i64 %add
|
|
%0 = load i32* %arrayidx1, align 4
|
|
store i32 %0, i32* %B, align 4
|
|
ret void
|
|
}
|
|
|
|
|
|
;; A[n] = 0;
|
|
;; *B = A[m];
|
|
|
|
define void @z2(i32* %A, i32* %B, i64 %n, i64 %m) nounwind uwtable ssp {
|
|
entry:
|
|
%arrayidx = getelementptr inbounds i32* %A, i64 %n
|
|
store i32 0, i32* %arrayidx, align 4
|
|
|
|
; CHECK: da analyze - consistent output!
|
|
; CHECK: da analyze - flow!
|
|
; CHECK: da analyze - confused!
|
|
; CHECK: da analyze - consistent input!
|
|
; CHECK: da analyze - confused!
|
|
; CHECK: da analyze - consistent output!
|
|
|
|
%arrayidx1 = getelementptr inbounds i32* %A, i64 %m
|
|
%0 = load i32* %arrayidx1, align 4
|
|
store i32 %0, i32* %B, align 4
|
|
ret void
|
|
}
|