You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
110 lines
2.4 KiB
110 lines
2.4 KiB
4 months ago
|
# RUN: llc -o - %s -mtriple=x86_64-- -run-pass=branch-folder | FileCheck %s
|
||
|
# Branch folder should ignore the DBG_VALUE between block bb.2 and bb.3,
|
||
|
# set these blocks as bb.3, so that bb.6 will succeed to merge between bb.2 and bb.3.
|
||
|
# if the DBG_VALUE is not ignored, bb.6 will merge between bb.1 and bb.2, the result is
|
||
|
# different with Codegen without -g.
|
||
|
#
|
||
|
# Generated with
|
||
|
#
|
||
|
# clang++ -g -w -O1 -S -emit-llvm test.cc
|
||
|
# llc -stop-before=branch-folder test.ll
|
||
|
#
|
||
|
# template <typename, typename = int> class e;
|
||
|
# class allocator {
|
||
|
# public:
|
||
|
# ~allocator();
|
||
|
# };
|
||
|
# template <typename, typename> class e {
|
||
|
# public:
|
||
|
# e(char *, allocator = allocator());
|
||
|
# };
|
||
|
# template <typename b, typename c, typename d> bool operator==(e<c, d>, b);
|
||
|
# class f {
|
||
|
# public:
|
||
|
# f(int *, int *, int *, int, int, int, int);
|
||
|
# e<char> g();
|
||
|
# void j();
|
||
|
# };
|
||
|
# int h, i;
|
||
|
# class k {
|
||
|
# void l();
|
||
|
# bool m_fn4();
|
||
|
# int m;
|
||
|
# int n;
|
||
|
# int q;
|
||
|
# int fmap;
|
||
|
# };
|
||
|
# void k::l() {
|
||
|
# e<char> o = "";
|
||
|
# for (;;) {
|
||
|
# int p = 0;
|
||
|
# for (;;) {
|
||
|
# if (m_fn4())
|
||
|
# break;
|
||
|
# f a(&q, &fmap, &m, n, h, i, 0);
|
||
|
# if (a.g() == "")
|
||
|
# a.j();
|
||
|
# }
|
||
|
# }
|
||
|
# }
|
||
|
|
||
|
--- |
|
||
|
|
||
|
define dso_local void @l() {
|
||
|
ret void
|
||
|
}
|
||
|
|
||
|
...
|
||
|
---
|
||
|
name: l
|
||
|
body: |
|
||
|
bb.0:
|
||
|
; CHECK: bb.0:
|
||
|
; CHECK-NEXT: successors: %bb.1({{.*}}), %bb.7
|
||
|
successors: %bb.1, %bb.3
|
||
|
|
||
|
bb.1:
|
||
|
$rdi = MOV64rr $rsp
|
||
|
|
||
|
bb.2:
|
||
|
; CHECK: bb.2:
|
||
|
; CHECK-NEXT: successors: %bb.3
|
||
|
successors: %bb.2, %bb.4
|
||
|
DBG_VALUE
|
||
|
CFI_INSTRUCTION def_cfa_offset 8
|
||
|
; CHECK: bb.3
|
||
|
; CHECK-NEXT: successors: %bb.2({{.*}}), %bb.4
|
||
|
TEST8rr killed renamable $al, renamable $al, implicit-def $eflags
|
||
|
JCC_1 %bb.2, 5, implicit killed $eflags
|
||
|
JMP_1 %bb.4
|
||
|
|
||
|
bb.3 (landing-pad):
|
||
|
; CHECK: bb.4:
|
||
|
; CHECK-NEXT: successors: %bb.5({{.*}}), %bb.6
|
||
|
successors:
|
||
|
|
||
|
bb.4:
|
||
|
successors: %bb.5, %bb.6
|
||
|
JCC_1 %bb.6, 4, implicit killed $eflags
|
||
|
; CHECK: JCC_1 %bb.6, 4, implicit $eflags
|
||
|
JMP_1 %bb.5
|
||
|
|
||
|
bb.5:
|
||
|
; CHECK: bb.5:
|
||
|
; CHECK-NEXT: successors: %bb.6
|
||
|
$rdi = COPY renamable $r12
|
||
|
|
||
|
bb.6:
|
||
|
; CHECK: bb.6:
|
||
|
; CHECK-NEXT: successors: %bb.3
|
||
|
successors: %bb.2, %bb.4
|
||
|
; CHECK: JMP_1 %bb.3
|
||
|
|
||
|
; CHECK: bb.7 (landing-pad):
|
||
|
$rdi = COPY renamable $rbx
|
||
|
TEST8rr killed renamable $al, renamable $al, implicit-def $eflags
|
||
|
JCC_1 %bb.2, 5, implicit killed $eflags
|
||
|
JMP_1 %bb.4
|
||
|
|
||
|
...
|