| # 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 |
| |
| ... |