1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-26 04:32:44 +01:00
llvm-mirror/test/Analysis/DependenceAnalysis/Dump.ll
Bardia Mahjour 1f2a1c8f2e [DA] Improve dump to show source and sink of the dependence
Summary:
The current da printer shows the dependence without indicating
which instructions are being considered as the src vs dst. It
also silently ignores call instructions, despite the fact that
they create confused dependence edges to other memory
instructions. This patch addresses these two issues plus a
couple of minor non-functional improvements.

Authored By: bmahjour

Reviewer: dmgreen, fhahn, philip.pfaffe, chandlerc

Reviewed By: dmgreen, fhahn

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D71088
2019-12-11 11:48:16 -05:00

51 lines
1.7 KiB
LLVM

; RUN: opt < %s -disable-output "-passes=print<da>" -aa-pipeline=basic-aa 2>&1 \
; RUN: | FileCheck %s
;; Test to make sure the dump shows the src and dst
;; instructions (including call instructions).
;;
;; void bar(float * restrict A);
;; void foo(float * restrict A, int n) {
;; for (int i = 0; i < n; i++) {
;; A[i] = i;
;; bar(A);
;; }
;; }
; CHECK-LABEL: foo
; CHECK: Src: store float %conv, float* %arrayidx, align 4 --> Dst: store float %conv, float* %arrayidx, align 4
; CHECK-NEXT: da analyze - none!
; CHECK-NEXT: Src: store float %conv, float* %arrayidx, align 4 --> Dst: call void @bar(float* %A)
; CHECK-NEXT: da analyze - confused!
; CHECK-NEXT: Src: call void @bar(float* %A) --> Dst: call void @bar(float* %A)
; CHECK-NEXT: da analyze - confused!
define void @foo(float* noalias %A, i32 signext %n) {
entry:
%cmp1 = icmp slt i32 0, %n
br i1 %cmp1, label %for.body.lr.ph, label %for.end
for.body.lr.ph: ; preds = %entry
br label %for.body
for.body: ; preds = %for.body.lr.ph, %for.body
%i.02 = phi i32 [ 0, %for.body.lr.ph ], [ %inc, %for.body ]
%conv = sitofp i32 %i.02 to float
%idxprom = zext i32 %i.02 to i64
%arrayidx = getelementptr inbounds float, float* %A, i64 %idxprom
store float %conv, float* %arrayidx, align 4
call void @bar(float* %A) #3
%inc = add nuw nsw i32 %i.02, 1
%cmp = icmp slt i32 %inc, %n
br i1 %cmp, label %for.body, label %for.cond.for.end_crit_edge
for.cond.for.end_crit_edge: ; preds = %for.body
br label %for.end
for.end: ; preds = %for.cond.for.end_crit_edge, %entry
ret void
}
declare void @bar(float*)