mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-01 05:01:59 +01:00
3cfb1e2af8
Summary: If there are two adjacent guards with different conditions, we can remove one of them and include its condition into the condition of another one. This patch allows InstCombine to merge them by the following pattern: guard(a); guard(b) -> guard(a & b). Reviewers: reames, apilipenko, igor-laevsky, anna, sanjoy Reviewed By: sanjoy Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D29378 llvm-svn: 293778
33 lines
1.5 KiB
LLVM
33 lines
1.5 KiB
LLVM
; RUN: opt < %s -instcombine -S | FileCheck %s
|
|
|
|
declare void @llvm.experimental.guard(i1, ...)
|
|
|
|
define void @test_guard_adjacent_same_cond(i1 %A) {
|
|
; CHECK-LABEL: @test_guard_adjacent_same_cond(
|
|
; CHECK-NEXT: call void (i1, ...) @llvm.experimental.guard(i1 %A) [ "deopt"() ]
|
|
; CHECK-NEXT: ret void
|
|
call void(i1, ...) @llvm.experimental.guard( i1 %A )[ "deopt"() ]
|
|
call void(i1, ...) @llvm.experimental.guard( i1 %A )[ "deopt"() ]
|
|
call void(i1, ...) @llvm.experimental.guard( i1 %A )[ "deopt"() ]
|
|
call void(i1, ...) @llvm.experimental.guard( i1 %A )[ "deopt"() ]
|
|
call void(i1, ...) @llvm.experimental.guard( i1 %A )[ "deopt"() ]
|
|
call void(i1, ...) @llvm.experimental.guard( i1 %A )[ "deopt"() ]
|
|
call void(i1, ...) @llvm.experimental.guard( i1 %A )[ "deopt"() ]
|
|
call void(i1, ...) @llvm.experimental.guard( i1 %A )[ "deopt"() ]
|
|
call void(i1, ...) @llvm.experimental.guard( i1 %A )[ "deopt"() ]
|
|
call void(i1, ...) @llvm.experimental.guard( i1 %A )[ "deopt"() ]
|
|
ret void
|
|
}
|
|
|
|
define void @test_guard_adjacent_diff_cond(i1 %A, i1 %B, i1 %C) {
|
|
; CHECK-LABEL: @test_guard_adjacent_diff_cond(
|
|
; CHECK-NEXT: %1 = and i1 %A, %B
|
|
; CHECK-NEXT: %2 = and i1 %1, %C
|
|
; CHECK-NEXT: call void (i1, ...) @llvm.experimental.guard(i1 %2, i32 123) [ "deopt"() ]
|
|
; CHECK-NEXT: ret void
|
|
call void(i1, ...) @llvm.experimental.guard( i1 %A, i32 123 )[ "deopt"() ]
|
|
call void(i1, ...) @llvm.experimental.guard( i1 %B, i32 456 )[ "deopt"() ]
|
|
call void(i1, ...) @llvm.experimental.guard( i1 %C, i32 789 )[ "deopt"() ]
|
|
ret void
|
|
}
|