mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-27 12:26:07 +00:00

print-after-all is useful for diffing IR between two passes. When one of the two is a function pass, and the other is a loop pass, the diff becomes useless. Add an option which prints the entire function for loop passes.
76 lines
2.2 KiB
LLVM
76 lines
2.2 KiB
LLVM
; This test documents how the IR dumped for loop passes differs with -print-loop-func-scope
|
|
; and -print-module-scope
|
|
; - Without -print-loop-func-scope, dumps only the loop, with 3 sections- preheader,
|
|
; loop, and exit blocks
|
|
; - With -print-loop-func-scope, dumps only the function which contains the loop
|
|
; - With -print-module-scope, dumps the entire module containing the loop, and disregards
|
|
; the -print-loop-func-scope flag.
|
|
|
|
; RUN: opt < %s 2>&1 -disable-output \
|
|
; RUN: -passes=licm -print-after=licm \
|
|
; RUN: | FileCheck %s -check-prefix=VANILLA
|
|
; RUN: opt < %s 2>&1 -disable-output \
|
|
; RUN: -passes=licm -print-after=licm -print-loop-func-scope \
|
|
; RUN: | FileCheck %s -check-prefix=LOOPFUNC
|
|
; RUN: opt < %s 2>&1 -disable-output \
|
|
; RUN: -passes=licm -print-after=licm -print-module-scope \
|
|
; RUN: | FileCheck %s -check-prefix=MODULE
|
|
; RUN: opt < %s 2>&1 -disable-output \
|
|
; RUN: -passes=licm -print-after=licm -print-module-scope -print-loop-func-scope\
|
|
; RUN: | FileCheck %s -check-prefix=MODULEWITHLOOP
|
|
|
|
; VANILLA: IR Dump After LICMPass
|
|
; VANILLA-NOT: define void @foo
|
|
; VANILLA: Preheader:
|
|
; VANILLA: Loop:
|
|
; VANILLA: Exit blocks
|
|
|
|
; LOOPFUNC: IR Dump After LICMPass
|
|
; LOOPFUNC: (loop:
|
|
; LOOPFUNC: define void @foo
|
|
; LOOPFUNC-NOT: Preheader:
|
|
; LOOPFUNC-NOT: Loop:
|
|
; LOOPFUNC-NOT: Exit blocks
|
|
|
|
; MODULE: IR Dump After LICMPass
|
|
; MODULE: ModuleID =
|
|
; MODULE: define void @foo
|
|
; MODULE-NOT: Preheader:
|
|
; MODULE-NOT: Loop:
|
|
; MODULE-NOT: Exit blocks
|
|
; MODULE: define void @bar
|
|
; MODULE: declare void @baz(i32)
|
|
|
|
; MODULEWITHLOOP: IR Dump After LICMPass
|
|
; MODULEWITHLOOP: ModuleID =
|
|
; MODULEWITHLOOP: define void @foo
|
|
; MODULEWITHLOOP-NOT: Preheader:
|
|
; MODULEWITHLOOP-NOT: Loop:
|
|
; MODULEWITHLOOP-NOT: Exit blocks
|
|
; MODULEWITHLOOP: define void @bar
|
|
; MODULEWITHLOOP: declare void @baz(i32)
|
|
|
|
define void @foo(i32 %n) {
|
|
entry:
|
|
br label %loop_cond
|
|
|
|
loop_cond:
|
|
%i = phi i32 [ 0, %entry ], [ %i_next, %loop_body ]
|
|
%cmp = icmp slt i32 %i, %n
|
|
br i1 %cmp, label %loop_body, label %loop_end
|
|
|
|
loop_body:
|
|
call void @baz(i32 %i)
|
|
%i_next = add i32 %i, 1
|
|
br label %loop_cond
|
|
|
|
loop_end:
|
|
ret void
|
|
}
|
|
|
|
define void @bar() {
|
|
ret void
|
|
}
|
|
|
|
declare void @baz(i32)
|