1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-18 18:42:46 +02:00
llvm-mirror/test/Transforms/SimpleLoopUnswitch/pipeline.ll
Arthur Eubanks 47246e5e03 [NewPM][Unswitch] Add option to disable -O3 non-trivial unswitching
Some benchmarks regress with non-trivial unswitching, so add an option
to opt-out of performing non-trivial unswitching while investigating.

Reviewed By: asbirlea

Differential Revision: https://reviews.llvm.org/D95796
2021-02-01 11:11:59 -08:00

75 lines
1.6 KiB
LLVM

; RUN: opt < %s -S -passes="default<O1>" | FileCheck %s -check-prefixes=TRIVIAL,CHECK
; RUN: opt < %s -S -passes="default<O2>" | FileCheck %s -check-prefixes=TRIVIAL,CHECK
; RUN: opt < %s -S -passes="default<O3>" | FileCheck %s -check-prefixes=NONTRIVIAL,CHECK
; RUN: opt < %s -S -passes="default<O3>" -enable-npm-O3-nontrivial-unswitch=0 | FileCheck %s -check-prefixes=TRIVIAL,CHECK
; RUN: opt < %s -S -passes="default<Os>" | FileCheck %s -check-prefixes=TRIVIAL,CHECK
; RUN: opt < %s -S -passes="default<Oz>" | FileCheck %s -check-prefixes=TRIVIAL,CHECK
declare i32 @a()
declare i32 @b()
declare i32 @c()
; TRIVIAL-NOT: loop_begin.us:
; NONTRIVIAL: loop_begin.us:
define i32 @test1(i1* %ptr, i1 %cond1, i1 %cond2) {
entry:
br label %loop_begin
loop_begin:
br i1 %cond1, label %loop_a, label %loop_b
loop_a:
call i32 @a()
br label %latch
loop_b:
br i1 %cond2, label %loop_b_a, label %loop_b_b
loop_b_a:
call i32 @b()
br label %latch
loop_b_b:
call i32 @c()
br label %latch
latch:
%v = load i1, i1* %ptr
br i1 %v, label %loop_begin, label %loop_exit
loop_exit:
ret i32 0
}
; CHECK-NOT: loop2_begin.us:
define i32 @test2(i1* %ptr, i1 %cond1, i1 %cond2) optsize {
entry:
br label %loop2_begin
loop2_begin:
br i1 %cond1, label %loop2_a, label %loop2_b
loop2_a:
call i32 @a()
br label %latch2
loop2_b:
br i1 %cond2, label %loop2_b_a, label %loop2_b_b
loop2_b_a:
call i32 @b()
br label %latch2
loop2_b_b:
call i32 @c()
br label %latch2
latch2:
%v = load i1, i1* %ptr
br i1 %v, label %loop2_begin, label %loop2_exit
loop2_exit:
ret i32 0
}