Add the switch -polly-debug-func to define the name of a debug
function. This function is ignored for any validity check.
Its purpose is to allow to observe a value after transformation by a
SCoP, and to follow which statements are executed in which order. For
instance, consider the following code:
static void dbg_printf(int sum, int i) {
fprintf(stderr, "The value of sum is %d, i=%d\n", sum, i);
fflush(stderr);
}
void func(int n) {
int sum = 0;
for (int i = 0; i < 16; i+=1) {
sum += i;
dbg_printf(sum, i);
}
}
Executing this after Polly's codegen with -polly-debug-func=dbg_printf
reveals the new execution order and the assumed values at that point of
execution.
Differential Revision: https://reviews.llvm.org/D45728
llvm-svn: 330466
38 lines
847 B
LLVM
38 lines
847 B
LLVM
; RUN: opt %loadPolly -polly-debug-func=dbg_printf -polly-scops -analyze < %s | FileCheck %s -match-full-lines
|
|
;
|
|
; Check that the call to dbg_printf is accepted as a debug-function.
|
|
;
|
|
declare void @dbg_printf(i8*, ...)
|
|
|
|
define void @func(i32 %n) {
|
|
entry:
|
|
br label %for
|
|
|
|
for:
|
|
%j = phi i32 [0, %entry], [%j.inc, %inc]
|
|
%j.cmp = icmp slt i32 %j, %n
|
|
br i1 %j.cmp, label %body, label %exit
|
|
|
|
body:
|
|
call void (i8*, ...) @dbg_printf(i8* null, i32 %j)
|
|
br label %inc
|
|
|
|
inc:
|
|
%j.inc = add nuw nsw i32 %j, 1
|
|
br label %for
|
|
|
|
exit:
|
|
br label %return
|
|
|
|
return:
|
|
ret void
|
|
}
|
|
|
|
; CHECK: Statements {
|
|
; CHECK-NEXT: Stmt_body
|
|
; CHECK-NEXT: Domain :=
|
|
; CHECK-NEXT: [n] -> { Stmt_body[i0] : 0 <= i0 < n };
|
|
; CHECK-NEXT: Schedule :=
|
|
; CHECK-NEXT: [n] -> { Stmt_body[i0] -> [i0] };
|
|
; CHECK-NEXT: }
|