Files
clang-p2996/llvm/test/Transforms/SimplifyCFG/no-md-sink.ll
Roman Lebedev ee4ba9f3a1 Revert "[SimplifyCFG] Start redesigning FoldTwoEntryPHINode()."
Unfortunately, it seems we really do need to take the long route;
start from the "merge" block, find (all the) "dispatch" blocks,
and deal with each "dispatch" block separately, instead of simply
starting from each "dispatch" block like it would logically make sense,
otherwise we run into a number of other missing folds around
`switch` formation, missing sinking/hoisting and phase ordering.

This reverts commit 85628ce75b.
This reverts commit c5fff90953.
This reverts commit 34a98e1046.
This reverts commit 1e353f0922.
2022-02-03 12:32:50 +03:00

56 lines
1.6 KiB
LLVM

; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt < %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -sink-common-insts -S | FileCheck %s
; RUN: opt < %s -passes='simplifycfg<sink-common-insts>' -S | FileCheck %s
define i1 @test1(i1 zeroext %flag, i8* %y) #0 {
; CHECK-LABEL: @test1(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[S:%.*]] = call i1 @llvm.type.test(i8* [[Y:%.*]], metadata [[META0:![0-9]+]])
; CHECK-NEXT: [[R:%.*]] = call i1 @llvm.type.test(i8* [[Y]], metadata [[META1:![0-9]+]])
; CHECK-NEXT: [[T:%.*]] = select i1 [[FLAG:%.*]], i1 [[R]], i1 [[S]]
; CHECK-NEXT: ret i1 [[T]]
;
entry:
br i1 %flag, label %if.then, label %if.else
if.then:
%r = call i1 @llvm.type.test(i8* %y, metadata !0)
br label %if.end
if.else:
%s = call i1 @llvm.type.test(i8* %y, metadata !1)
br label %if.end
if.end:
%t = phi i1 [ %s, %if.else ], [ %r, %if.then ]
ret i1 %t
}
!0 = !{i32 0, !"typeid1"}
!1 = !{i32 4, !"typeid1"}
declare i1 @llvm.type.test(i8* %ptr, metadata %bitset) nounwind readnone
define i1 @test2(i1 zeroext %flag, i8* %y, i8* %z) #0 {
; CHECK-LABEL: @test2(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[Y_Z:%.*]] = select i1 [[FLAG:%.*]], i8* [[Y:%.*]], i8* [[Z:%.*]]
; CHECK-NEXT: [[S:%.*]] = call i1 @llvm.type.test(i8* [[Y_Z]], metadata [[META1]])
; CHECK-NEXT: ret i1 [[S]]
;
entry:
br i1 %flag, label %if.then, label %if.else
if.then:
%r = call i1 @llvm.type.test(i8* %y, metadata !0)
br label %if.end
if.else:
%s = call i1 @llvm.type.test(i8* %z, metadata !0)
br label %if.end
if.end:
%t = phi i1 [ %s, %if.else ], [ %r, %if.then ]
ret i1 %t
}